Trevor Stone Character

Sticky Post: Flwyd has Moved to Dreamwidth

After more than fifteen years of loyal LiveJournal use, I have switched to Dreamwidth as my primary blogging site. All of my LiveJournal entries have been migrated to flwyd.dreamwidth.org. They remain public on flwyd.livejournal.com as well, so as not to break any links. I will continue crossposting from Dreamwidth to LiveJournal until LJ blocks it, or until the site owners do something egregious with regards to user content.

Shout out to brad and everyone else who helped make LiveJournal a fantastic social network before "social network" was a thing. The most important asset of a site like this is the users and their willingness to share with each other. Over the last decade, a lot of user attention has drifted to other platforms. The management (now headquartered in Russia) has also focused on writers of the Cyrillic persuasion and Russians in particular, burning the trust of the Anglophone user base.

While all good things will come to an end, this blog has several years to go in its new home. Subscribe to my journal on Dreamwidth or with your favorite RSS reader. You can also find me on my website, Twitter, and Google+. Keep sharing!
Trevor baby stare

Advent of Raku (and a little Go)

Advent of Code is an annual programming challenge. Every night at midnight EST from December 1st through 25th, a new problem is posted to the website, along with a participant-specific input file. Participants can use any programming language they want to solve the problem, using their input, and see if the output of their program matches the expected value. Once that's done, a second part of the problem becomes available. Part 2 uses the same input file and is generally a variation on the first part, such as changing the goal from "find the maximum" to "find the sum of all" or increasing the number of times an operation needs to be performed so that an inefficient algorithm will be far too slow. Problems are usually straightforward at the beginning of the month and get more challenging as the month progresses. There's a stats page measuring time-to-completion and a top-100 leaderboard, but no prizes; many folks pursue their own goals like learning a new language or minimizing program runtime which are somewhat at odds with quick finishes.

After having lots of fun and learning Kotlin with Advent of Code in December 2020, I decided to use Raku for this past year's edition (with code shared on GitHub). Raku is the new name of Perl 6, a "member of the Perl family of languages" which famously took a decade and a half of community experimentation before a finalized version was released. Perl, in turn, is a language originally focused on working with collections of text files which is famously easy to write or hard to read, depending on who you ask. Raku keeps many of Perl's basic syntactic elements—like scalar, array, and hash variables identified by $, @, and % sigils—but also brings to bear a lot of modern programming language developments like class-based object orientation, concurrency, type constraints, multi-dispatch, and just-in-time compilation. Raku is also what one might call Unicode-forward. Most languages these days allow Unicode literals in strings, and most languages made since the '90s allow Unicode letters in program identifiers. Raku takes this significantly further. First, Raku strings are sequences of graphemes rather than just bytes or Unicode code points, so both the single-code-point and the "combining diacritics" variants of "é" are identical in Raku. Second, Unicode characters aren't just limited to letters: the language and standard library provide $thing ∈ ($set1 ∪ $set2) for set operations, @words».uc to upper-case each element of an array, ⚛++ for atomic-increment, 25 ** ½ as another way to perform a square root, and quoting strings with arbitrary characters like say q༺hello world༻.uc. Additionally, Raku took one of Perl's big selling points in the '80s and '90s (terse and powerful regular expressions) and evolved them into grammars which are easier to read, modify, and compose, and likely also faster. This grammar support is what drew my interest to Raku, since I started a hobby project that involves parsing a small amount of information from source code written in a large number of languages, and the ability to quickly write but still maintain textual matchers would make that project more pleasant.

One of the driving principles in the design of Raku (and Perl before it) is There's more than one way to do it (TMTOWTDI). Another principle (repeated frequently by people who post in help forums, it seems) is that programming in Raku should be fun. Several times while working on an Advent of Code solution I tried to do something in a way that looked both elegant and reasonable, only to find out that There's More Than One Way To Do It, But Some Of Those Ways Are Wrong. (Furthermore, since TMTOWTDI, the documentation usually doesn't say "This isn't a good tool for X, use Y instead.") For example, I spent at least half an hour trying to understand why my memoization code didn't seem to be caching my Pair objects, despite all my experiments with the interactive interpreter looking like things should work just fine. It turns out that foo => 42 creates a Pair which uses value equality for both key and value, but my $key = 'foo'; my $val = 42; $key => $val creates a Pair that holds on to the $val scalar (but not the key scalar) and thus uses (half) reference equality. The documentation explains this behavior in an aside and explains that .freeze will result in an immutable Pair, but it's easy to encounter Pairs in documentation that doesn't mention that, and the half hour of WTF was not at all fun. (Another Way To Do It would be implementing a 2-value tuple class myself, which wouldn't have added fancypants scalar handling.) This discovery also reduced my confidence in the language a bit: when I look at a block of code, am I sure that my variables work as values, or might something else hold on to this funny scalar reference?

Another un-fun discovery was that for @first ∩ @second { … } doesn't iterate through the shared elements of two arrays, but instead iterates through Pairs, where the value is always True. I was aware that many set implementations are implemented as a hash table where the keys are set elements and the values are a placeholder value like a boolean. But most languages hide this implementation detail and present a set as akin to an unordered list which doesn't allow duplicate values. The workaround is easy (call .keys on the set when iterating over it), and it provides a nice symmetry with Bags (multisets) and Mixes (weighted sets), but it was still a big surprise. This was made worse by Raku's gradual typing discipline and implicit conversions; I think I was putting the set elements into a Hash, which converts keys to strings by default, so rather than a compile or runtime error complaining that I was using a Pair where a Str was expected I got a Hash with keys like foo<tab>True rather than just foo. Iteration and automatic conversion also combine in un-fun ways because the base class for most objects implements all the List methods by converting non-iterable objects into single-element lists. I would find it a lot more fun if the Raku compiler would tell me that sub answer(--> Int) { 42 } ; for answer() { … } was attempting to iterate over a non-iterable (maybe I changed answer from a List to an Int and forgot to update all the callers) rather than silently iterating over a single element. This annoyance is compounded by the fact that scalar references to iterable types (like a sequence, list, or array) are turned into single-element lists in this context, so changing my $x = nums => (1, 2, 3, 4); .say for $x.value (which prints four lines with one number each) to my $x = (1, 2, 3, 4); .say for $x changes the output to print a single line with four numbers and a pair of parentheses. This makes changing the shape of data structures while developing a program (like adding or removing a wrapper class) create surprising effects that aren't caught by the compiler. And maybe it's just me, but I think programming is more fun when the computer quickly tells you when you make a mistake, rather than losing an hour of sleep because you were debugging code that looked reasonable.

Working in Raku did have some fun elements. Contrary to my complaints about automatic conversions for container types, the ability to seamlessly work with numbers parsed from text was pretty nice for Advent of Code problems. Having a Complex number type that works as a hash key made several 2D grid traversal problems fairly convenient. And I even got to leverage Raku's nice Unicode property support on a problem about open/close punctuation balancing. I opted to use Raku this year as a way to try out grammars, and they were generally nice. They're way more readable than Perl regular expressions and the "Perl-compatible" regex implementations that have come along in the past three decades, and the ability to supply an Actions class to parse the relevant data from a match and bubble it up makes working with the result of a complex parse much nicer. Grammars are generally overkill for AoC inputs, but I found the structure pretty nice. The one downside to Raku grammars was the lack of helpful information when a parse failed. Unlike a typical programming language compiler that outputs the line and column where input didn't match expectations, a failed grammar parse just returns null, even though Raku has a Failure type that allows conveying additional information. So when my parsing rules were wrong I generally had to put output statements in the Action class and manually inspect what the next token should've been.

Contrary to last year, when I mostly focused on implementing the code and learning the language, I spent a lot of time on the social side of AoC this year. Last year I participated a bit in the Reddit community to provide hints to folks who were stuck. This year, after solving the problem and then participating in Google's group chat about the day's challenge, I frequently spent a couple hours on Reddit, reading through the "solutions megathread" and checking out people's visualizations. This meant a lot of 3am bedtimes this December, followed by another late night. Coupled with trying to actually get some work done, I spent far too much time staring at a screen this December. Also, unlike 2020, there were social reasons to leave the house this year—friends were amused that I was programming in Vim over SSH from a smartphone while semi-drunk at a holiday party while also chatting with folks. (There were just a couple small bugs by the time I got home, and Vim's terse modal editing proved to be a nicer phone-based development environment than I'd expected.)

Three weeks of late nights—including an all-nigher for day 19 because I'd incorrectly assumed that rotations in 3D were commutative—definitely caught up with me. I was pretty burned out by the time I got stuck and went to bed on day 23, which is kind of an interesting problems with a lot of little fussy ways to introduce bugs. I was extra toasty on day 24 (the night leading into Christmas Eve) when I discovered that what I thought would be a reasonable solution—a modified binary search—didn't work at all because in the possible solution space of about 20 trillion numbers, fewer than ten are even potentially the right answer. This fact about the input file wasn't at all clear from the problem statement, and the frustration was intensified by the fact that (contrary to every other AoC problem I've seen) there was no realistic example and expected output to experiment with. The fact that a seemingly reasonable solution can run for hours without providing any insight about the problem (other than "valid values are sparse") and that (as far as I can tell) an efficient solution to this otherwise NP-complete problem requires making assumptions based on a single input file, pretty much soured me on what had otherwise been an enjoyable month. That one day's problem (following a couple late nights) made me strongly question ever participating in "live" (i.e. during December) AoC ever again, which isn't a good feeling to have on Christmas Eve.

Raku's final un-fun factor played a role in this burnout too: slow execution speed. I'd seen folks who hang out on Raku help communities warn folks that Raku performance isn't great, but I figured it would be fine for Advent of Code, which has lots of folks working in languages like Python and more tortured environments like Bash or Google Sheets. But on days 19, 23, and 24 I discovered that my Raku code would spend tens of minutes running on the example input before producing a wrong answer, which is not a good situation in a "implement a program before bedtime" challenge. To more quickly test wrong hypotheses and spot bugs, I reimplemented those days in Go. The Go language is far more verbose and has many fewer features than Raku, but I could implement a Go solution and try it five times in the time it would take to run my Raku code twice. My day 19 solution in Go—using the same algorithm and only slightly optimized code paths—was about a hundred times faster than the Raku implementation. I recall noticing that one Go run took 45 seconds while Raku took 45 minutes. I spent more time optimizing the runtime of the day 23 solution (due to some discussion in the group chat at work) and ended up with a 2.5 second solution in Go and a 68 minute solution in Raku. I even spent some time with the Raku profiler (which amusingly produced about a gigabyte of output for 45 seconds of runtime and had to be analyzed with sqlite because the HTML profiler output crashes any browser tab) and was only able to get a maximum 10% speedup after playing with all of the hot code paths under my control. Two orders of magnitude in runtime is difficult to make up with even the most amazing language expressiveness.

This entry was originally posted at https://flwyd.dreamwidth.org/400979.html – comment over there.

Trevor baby stare

Wild End to a Wild Year

A popular casual topic of discussion the last few weeks has been that the Front Range has never gone this long without getting the first snow. Since October we've had two or three overnight dustings without any measurable accumulation. We've had far more unseasonably warm days, with plenty of "Mid-sixties and sunny" T-shirt weather in mid-December.

Weather forecasters predicted a big snow on New Year's Eve. The snow rode in on the tails of a big wind storm, with gusts in some places over 100 miles per hour. Last week also featured 100+ MPH gusts at the airport in Broomfield and other topologically ripe locations. Unfortunately, this week's gusts reportedly knocked down some power lines near Marshall Mesa which sparked fires in unusually dry grass—extra dry because we haven't had any snow since April, natch. The strong winds quickly pushed the fire eastward through open space, forcing the evacuation of the towns of Superior and Louisville. Wind pushed fire onto houses and through neighborhoods; emergency officials estimate that more than 500 homes were burned. This makes it the most structure-destructive fire in Colorado history, despite being far smaller than the month-long major forest fires we've seen in the past. A lot of affected residents probably wouldn't have thought of themselves as in the Wildland-urban interface; while many of the affected neighborhoods are next to open space, the fire also jumped the highway and burnt houses where the closest thing to a wild space is a greenbelt along a creek.

Fortunately, the forecast snow arrived this morning, dousing the fires and bringing the first significant moisture to the area in several months. This is now the second year in a row that a fire burning within a couple miles of our family's dwellings was extinguished by snow; the East Troublesome Fire last November climbed over the Continental Divide and got close to our family's cabin near Estes Park. While a dry final three months of the year and unseasonably warm December days aren't uncommon in Colorado, recent years have escalated the dry weather and unpredictable precipitation or lack thereof.

We were unaware of the fire for most of the day yesterday. I took the day off work and joined Kelly's family for a visit to Meow Wolf in Denver. It's sort of what you might get if Dr. Seuss and Burning Man teamed up to make an interactive art museum. Driving to an errand in Commerce City we noticed the huge wall of smoke stretching across the north Denver metro area. For quite awhile I thought it was probably dust getting kicked up by the strong winds; the colors and patterns in the clouds didn't look like wildfire smoke to me. I guess I'm just used to tree smoke coming over the mountains; a grass and suburb fire has a much different character. US-36 was closed from Broomfield, and we wanted to stop at the Asian grocery store there for some supplies anyway. Not knowing whether we had power or any wind damage at our home in Boulder, we decided it would be best to face the unknown with a full stomach, so we stuck around for pho and boba.

Driving home along US-287 through Broomfield we caught some glimpses of burning fires in the darkness of night, with cars lining several streets so folks could get a look. It's a sight I've seen before, but never in late December. As we approached home we drove through some blackout neighborhoods, but drew hope when the part of Arapahoe near our house was lit up. As we pulled onto the street we could tell luck was not in our favor, as we routed around two utility trucks parked next to a large tree in the middle of the road, and the whole block was dark, save for a few houses with a solar+battery system, keeping the holiday lights shining. Our neighbor gave us a quick update: several trees around our house had fallen, including a few that took down power lines. The neighbors right behind us had a tree uproot (falling away from the fence, and also not endangering their house), and a power line got hit by a tree crossing our next-door neighbor's house. We took a walk around the block in an odd mix of serene quiet mixed with occasional bright spotlights from utility trucks. A neighbor down the street had a tall blue spruce uproot and fall across their yard and driveway, and our neighbors across the street said one of their trees narrowly missed a service vehicle that afternoon. Our house came through pretty well; our glass patio table flipped over and landed 15 feet away from its starting position, but doesn't seem to have cracked. One of our sheds had the latch tear off and then the door got jammed stuck inside, but other than that we just had a lot of sticks littering the yard.

Being practiced Burners and festival attendees, we had plenty of flashlights on hand. I even picked up a 100 amp-hour LiFePo4 battery this fall to power Kelly's CPAP while camping, so I charged our phones and listened to both local FM radio and the local amateur radio emergency response channel on my ham radio. We gathered important items in case we needed to evacuate overnight and otherwise took it easy in the dark. The battery+CPAP setup worked like a charm; I didn't expect to use it at home before giving it a run in a tent. Power came back at 4:15 in the morning (shout out to the hard-working Xcel Energy crews) and New Year's Eve brought the wet snow we've been needing all month.

Hearts out to my friends and coworkers who live in Superior and Louisville, and may everyone's 2022 be a lot more chill.

This entry was originally posted at https://flwyd.dreamwidth.org/400712.html – comment over there.

Trevor baby stare

Alice in Scrubs - Booster (filk)

Ain't found a way to kill me yet
Spicy food still makes me sweat
Every weekend I just go nowhere
Safe at home with my new pet
Hydroxychloroquine was no safe bet
Spike proteins assail me from somewhere

Here they come to give the booster
Yeah, here come the booster
You know I ain't gonna die
No, no, no, you know I ain't gonna die

Here they come to stab the booster, ah yeah
Yeah, here come the booster, yeah
You know I ain't gonna die
No, no, no, you know I ain't gonna die

Feelin' fine, glad you asked
They spit on me, I wear a mask
Doctor sent me results from my swab
Got my shots 'gainst covid death
My buddy's breathin' his dyin' breath
Oh RNA, please won't you help me make it through?

Here they come to give the booster
Yeah, here come the booster, yeah
You know I ain't gonna die
No, no, no you know I ain't gonna die


Original (content warning: Vietnam war, violence, guns, knives, blood): Alice in Chains - Rooster

This entry was originally posted at https://flwyd.dreamwidth.org/400635.html – comment over there.

Trevor baby stare

Please Call your Senators and Representatives

I wrote previously asking people to write or call their Senators to include carbon pricing in the reconciliation bill. Now it's crunch time. If you're willing to do me a favor, please go to cclusa.org/take-action and make a couple calls to your elected representatives. It will take less than five minutes and help the U.S. achieve a 50% reduction in emissions by 2030.
(Please do this now even if you did it earlier this year. We're hoping for a really big showing.)


Since July, supporters of carbon pricing have made nearly 160,000 contacts to Congress and the White house on this topic. There's been lots of talk about carbon pricing in negotiations on The Hill, and lots of folks have endorsed the idea. It's not currently part of the reconciliation bill framework that Joe Biden announced last week or that the House is working with, but there's still an opportunity to get it in the Senate bill. Anyone who lives in a state with a Democratic Senator can help this happen: the more support (say) Senators Michael Bennet and John Hickenlooper hear for carbon pricing, the more they'll be willing to push for it in negotiations with Senators like Joe Manchin who are on the fence. Democratic Representatives also need to hear that it's popular in their district so they're on board if a carbon price is part of the final bill.

Republicans unfortunately don't have a seat at the table in the reconciliation bill process, but there's encouraging news there too. 72 Republican members of the House have joined the Conservative Climate Caucus and Senate Republicans just announced a climate plan with a target of 40% emission reduction by 2050. During a meeting for volunteers this evening, Citizens' Climate Lobby's government affairs leader used the metaphor that many in the GOP are now walking in the right direction and it's our job to encourage them to walk faster, which is a lot easier than convincing them to turn around and walk the opposite way.

This entry was originally posted at https://flwyd.dreamwidth.org/400372.html – comment over there.

Trevor baby stare

When the Fox Doesn't Come Out to Play

Amateur radio enthusiasts sometimes organize a "fox hunt." A radio transmitter in an undisclosed location periodically broadcasts a signal on some frequency and participants use a directional antenna, a compass, and other tools to triangulate the transmitter's location.

Yesterday, the Boulder Amateur Radio Club organized a bit of a "reverse fox hunt." Two weeks ago, some club members noticed some unexpected transmissions on the club's VHF repeater from radio operators that were not also listening to that frequency. Someone was able to track down someone who'd made some of those transmissions and found that they had an AllStar hotspot operating on UHF simplex frequency 446.175 MHz. A hotspot in an amateur radio context is a low-power transceiver that's connected via the Internet to a wide-area digital radio network. The hot spot listens to a simplex frequency, sending anything it receives to the network. Likewise, any transmissions from the network are rebroadcast on the simplex frequency by the hotspot. This allows someone, perhaps the owner of the hotspot, to talk with people all over the world using a mobile or handheld radio that would normally only reach the local area.

The hotspot owner changed the frequency it was operating on. This stopped the stream of AllStar network chatter on the Boulder repeater, but this wasn't the root problem. Club members continued to notice occasional transmissions from 446.175 coming through on the repeater's frequency, suggesting that someone else was running a cross-band repeater with UHF input and VHF output on the club repeater's 146.100 MHz input frequency.

So some club members organized a "reverse fox hunt." Rather than listening for periodic transmissions from the "fox" we wanted to find locations where we could trigger the cross-band repeater, then triangulate its location. (I assume the final step would be "Knock on the nearest door and see if they're a ham operator.) Five of us gathered in the NCAR parking lot early Saturday afternoon. We weren't able to trip the cross-band repeater from NCAR, which has line of sight to all of Boulder, so we concluded that the fox was either over the hill in the Denver area or wasn't out of its foxhole that day. When the cross-band repeater had been active, we were able to get reports that it got triggered from Denver's Stapleton neighborhood and from an antenna on a mountain near Coal Creek Canyon.

We split up, sending one person to the Coal Creek area, one to Stapleton, one to Federal Heights, and one to Arvada. I headed down to Green Mountain, which was my favorite vantage point over metro Denver when I lived in Jefferson County. I transmitted from a few spots on the trail, neither of which lit up the Boulder repeater. One of our group had wondered if the cross-band repeater might be configured with a PL code&emdash;a tone of a particular frequency which must be transmitted along with the FM wave in order to activate a repeater to make it less likely to accidentally rebroadcast a message you didn't intend to. So I spent about half an hour turning the knob on my radio and making test transmissions with each possible squelch tone.

In the end, we concluded that the fox didn't come out to play yesterday, and we haven't noticed any spurious transmissions on the Boulder repeater this week. But playing radio was a pretty good excuse to go for a hike on a gorgeous late October afternoon, even if I didn't get to play with the directional yagi antenna I borrowed from a coworker.

This entry was originally posted at https://flwyd.dreamwidth.org/400092.html – comment over there.

  • Current Music
    World Series Game 5
  • Tags
Trevor baby stare

Life, the Universe, and Birthdays

For many years I've assumed that when I turned 42 I would throw a big party, invite a bunch of hoopy froods, and see if everyone knew where their towel was. As it turned out this week, I had about 2000 people at my birthday party, I didn't have to plan the event, and I didn't see many towels.

Element 11 is a long-standing regional Burning Man event in the Utah desert. It's normally held in July or June, which tend to be prime busy-in-Colorado times, particularly since Apogaea—Colorado's regional burn—is the second weekend of June. This year the organizers moved Element 11 to the last weekend of September, maximizing the amount of planning time in a year of chaos, minimizing the number of excuses for people to not be fully vaccinated, and balancing days which aren't too hot with nights that aren't too cold. Since Burning Man itself was cancelled and I didn't want to go to Plan B/Renegade Burn, I figured I'd have plenty of spoons for a regional in another state. Plus, I didn't have to plan a complicated themed birthday party.

It felt really good to be able to wander around, meet strangers, give hugs, dance to big sound, and share food. So far, it seems the policy of "proof of vaccination or a recent negative COVID test" was successful as I haven't heard that there was any COVID spread at the event. The fact that almost everything was outside certainly helped. I've now got a bit of a scratchy throat and some sore body parts, but my home-COVID test was negative, so I think this is just my immune system having forgotten how to deal with other people's garden variety germs, plus a depleted sleep schedule. I feel significantly less lousy than I did after getting back from a summer road trip.

The month leading up to the event was pretty jam-packed. I spent a bunch of time researching and ordering components for a solar and battery system so that Kelly could sleep with a CPAP, but I didn't give myself enough lead time and the project failed to come together before the trip, culminating in a comedy of errors including a brand new multimeter that needed aluminum foil shoved in the battery compartment in order to operate. Fortunately I've now got months to get things right and up my electrical game before our next camping adventure.

In addition to wrangling electrical components I spent a lot of time in the last month and a half playing with Colorado Redistricting Commission maps. The state has a new citizen-focused redistricting process, ideally reducing the political maneuvering involved, and anyone could submit their own maps and comments. I'm disappointed the commission and staff didn't follow my advice to (a) split census blocks in more natural ways so that neighbors stay in the same district and (b) allow slight variance (order of hundreds) in district size, following the "must be justified" portion of the law. Overall, though, the process seemed to work really well, and almost everyone at the hearings I attended was polite and on-topic, a rarity in the political world these days. There were a lot of "We don't want to be in a district with those people" comments, which make me sad as a collaborationist, but are understandable given the trend in the last half century for people to self-segregate politically.

I also spent a bunch of energy the weekend before Element 11 first picking apples and then helping press them into cider. We ended up with way more fruit than we could process and at the end of the day had more liquid than anyone could take away, particularly when the cooling system failed a few days later. I've got a cider brewing with wine yeast and a cyser (honey + apples) brewing with ale yeast; I'm hoping these turn out better than my last round of cyser which—three years later—still has a harsh flavor. This was a total blast, but cut way down on event packing and prep time.

This entry was originally posted at https://flwyd.dreamwidth.org/399781.html – comment over there.

Trevor baby stare

Encryption Turns a Network Security Problem Into a Key Management Problem

After over a decade, the time has finally come…
someone sent me an email encrypted with my PGP public key.

Based on the timestamp on my website, I set up GnuPG in 2007, which is two computers and about four hard drives ago. And while I'm a digital pack rat, those were the days that "copy your entire old computer to your new computer" would still cramp your new computer's space. So I would manually copy the home directory contents I knew I'd want like Documents and .vimrc but I probably didn't notice my private key file.

So for more than a decade I've been advertising a way to send me an email that no one can intercept and decrypt… including myself. 🤦‍♂️

This entry was originally posted at https://flwyd.dreamwidth.org/399419.html – comment over there.

Trevor baby stare

Please Email or Call Your Senators

I’d like to ask you for a favor. Feel free to say no :-)
Please take five minutes to email or call your two U.S. Senators and ask them to support carbon pricing. If you don’t have your senators on speed dial, a group I volunteer with has a tool to make this an easy contact. Just visit cclusa.org/senate

If you’re contacting a Democratic senator, please ask them to put a price on carbon in this year’s budget reconciliation. This is the most likely path for ambitious climate legislation this year, and Democrats are in the driver’s seat.
If you’re contacting a Republican senator, please ask them to support putting a price on carbon this year, because it will address climate change while strengthening the U.S. economy. While the Republican party is a little behind the Democrats on bold climate action, several GOP senators have voiced support for carbon pricing. It’s a policy they can support without losing their conservative credentials.

If you’re feeling unsure about calling Congress, I’ve shared a video of me making the call. I’ve always felt awkward on the phone, and if I can do it so can you! Pro tip: if you call after business hours you can leave a voicemail, and your support will still be noticed.

If you’re able to send two emails or make two calls, THANK YOU! If you’d like some extra credit, ask at least three friends to call their senators. Feel free to forward this post to them if you’d like.
Support from constituents gives senators and representatives the reassurance they need to do what’s right, and I’ve spent a lot of energy in the last five years focused on demonstrating to Congress that carbon pricing is popular. Your email or call to your Senator means a lot to me. You rock!


If you’d like to learn a little more about carbon pricing, here’s my quick explainer:

When historians write the history of the 2020s, how America responded to climate change at the beginning of the decade will play a big role. We face big challenges associated with the climate, and big action is needed to stop greenhouse gas pollution. The current U.S. Congress is in the best position in over ten years to ensure the biggest emitters shift course and drastically reduce their use of fossil fuels.

A price on carbon is one effective way to quickly reduce greenhouse gas pollution. A carbon fee would be assessed on coal, oil, and natural gas; low at first, but getting bigger every year. This will create an incentive to switch to cleaner forms of energy; companies that switch to clean power will be able to outcompete those who pollute more. The impact of higher fossil fuel prices on lower income folks can be offset by a carbon dividend: the collected fees are divided into equal amounts and distributed to every American each month. Since folks with lower incomes usually have a much smaller carbon footprint than people and companies who can afford to consume more, the carbon dividend is an effective way to make polluters pay to solve the problem while protecting folks who would otherwise have trouble with higher energy prices. Finally, to prevent businesses from just shipping carbon pollution (and jobs) to other countries, a carbon border adjustment can apply the carbon fee to imports from countries which don’t have a carbon price, and rebate the fee paid by U.S. exporters shipping to those countries. This incentivizes other countries around the world to adopt a carbon price to stay competitive. In fact, the E.U. just announced details of their carbon border adjustment, which has inspired China to step up the pace of their own carbon pricing plans. That’s right, the U.S. is currently lagging China in adoption of the most effective solution to climate change.

This idea has broad support: IPCC scientists report that a strong price on carbon will be necessary to keep the world below 1.5 degrees warming. Over 3500 economists—liberal, conservative, progressive, and libertarian—have endorsed the carbon fee & dividend plan, the biggest joint statement in the history of the profession. Recent editorials in major newspapers have called on Congress to pass a carbon price. More than 1000 businesses, plus hundreds of nonprofits, faith groups, and local governments, have endorsed the Energy Innovation and Carbon Dividend Act, which could be the language used in a budget reconciliation bill.

For the past four and a half years I’ve volunteered with Citizens’ Climate Lobby, the largest carbon pricing advocacy group in the country—and probably the world. We educate the public and community leaders about the benefits of the carbon fee & dividend approach and the importance of climate action, and have gathered support from over 200,000 people around the world. CCL organizes several meetings each year with every Congressional office. In the last year and a half, thousands of people have been empowered to lobby their own Member of Congress via videoconference or over the phone. I’ve found lobby meetings with Congressional staff to be very personally rewarding. I truly believe that action on climate change can help bring a politically fractured America closer together so that we can collaborate on the big challenges of the 2020s. Behind closed doors there’s more interest in tackling these problems than you might think if you watch cable TV.

If you’re a fan of different climate solutions, that’s great! There’s lots of work to be done over the next three decades if we want to “hang on to the holocene” as Adam Frank put it. We need to pivot our electrical system, rethink transportation, improve millions of buildings, restore forests, shift agricultural practices, invent new technology, and build resilient communities, all while responding to emergencies and addressing injustice. I’m excited about carbon pricing because it’s the biggest step we can take, and it affects several emission sources at once, and it’s compatible with and complimentary to most other climate solutions. If regenerative agriculture or ending fugitive methane emissions are more up your alley, that’s awesome. To solve climate change we need a diverse team with a lot of specialized skills and interests.

This entry was originally posted at https://flwyd.dreamwidth.org/399228.html – comment over there.

Trevor baby stare

A Slightly Incorrect Phonetic Alphabet

When communicating over a noisy voice channel, like a two-way radio or a poor phone connection, it's useful to using a spelling alphabet to make key words extra clear. While many people on the phone use the first English name that comes to mind ("P as in Peter, H as in Harold, O as in Olivia, N as in Nancy, E as in Eve"), the lack of a standard set leaves plenty of room for confusion ("was that Eve or Steve?"). Most radio protocols standardize on the NATO phonetic alphabet. But if you want to have a little fun, I've provided an updated alphabet that is just slightly out of tune.

Alfalfa
Bravado
Charlene
Deltoid
Eco
Faux pas
Gulf
Hostel
Indiana
Jeweled hat
Killer
Llama
Mic
No number
Otter
Popcorn
Québécois
Roaming
Sarah
Tangle
Unicorn
Victory
Whisked
X rated
Yanking
Zoro

This entry was originally posted at https://flwyd.dreamwidth.org/399062.html – comment over there.