RSSAmplifier

Blog

Noncombatant

A blog about software engineering, music, and feelings

noncombatant.orgRSS feed ↗90 posts

Latest posts

Florilegium

Florilegium 18 December 2024 Ye olde fronte cover. About 11 months after I thought for sure we’d be done, my band Telltale Shimmer released our new EP, Florilegium ! I’m pretty happy with how it turned out. I think it’s a decent representation of what I was trying to achieve, which I call “ Discipline -era Cocteau Twins ”. If you dig it, we’re working on a new batch of tunes. Ideally, it’ll come…

Styling Graphviz with CSS

Styling Graphviz with CSS 16 November 2024 Here is a nice SVG of a graph: gourd gourd pumpkin pumpkin gourd >pumpkin squash squash pumpkin >squash decoration decoration squash >decoration A directed, acyclic gourd. Since Decorative Gourd Season is coming to an end, motherfuckers , this fine graph will soon lose its relevance until next year. So it goes. Since I sometimes use Graphviz for articles,…

More Fun With The Known Exploited Vulnerabilities Catalog

More Fun With The Known Exploited Vulnerabilities Catalog 29 December 2023 Happily, MITRE has analyzed and characterized the bugs in the Known Exploited Vulnerabilities (KEV) Catalog of 2023 : In 2021, the Cybersecurity and Infrastructure Security Agency (CISA) began publishing the “ Known Exploited Vulnerabilities (KEV) Catalog .” Entries in this catalog are vulnerabilities that have been…

Comments On Comments

Comments On Comments 27 August 2023 Programmers sometimes argue about whether comments are good, or bad, or bad but necessary, or better than no comments, and so on. It’s one of those debates where everyone is right part of the time, and nobody really convinces anybody, and then we do it again next month. Maybe a year or so ago, some colleagues and I were going around this merry-go-round again,…

Ergonomics, Resource Lifetimes, And Object Graphs

Ergonomics, Resource Lifetimes, And Object Graphs 29 May 2023 This is a smol thought on how resource acquisition and release strategies affect the ergonomics of object lifetimes and the complexity of object graphs. Resource generally means any or all of: memory, objects, files, locks, sockets, et c. Whenever a program requires complex object graphs, complex lifetimes, or deterministic release of…

Protel, SOS, And The DMS-100

Protel, SOS, And The DMS-100 21 May 2023 Protel , the The PRocedure Oriented Type Enforcing Language, and the operating system SOS (for the Digital Multiplex Switch, DMS-100) that was built with it, give us an interesting snapshot of the early history of software engineering (as opposed to programming, and as opposed to computing science: programming integrated over time). Naturally, my focus is…

size_t Is Not int

size_t Is Not int 12 February 2023 Update, 13 February: I made an amusing and instructive error, detailed below! Many C and C++ programmers write code as if they believe that size_t is a typedef for, or otherwise equivalent to, signed int . Such code is unnecessarily buggy and unsafe, because that belief is not true. It never could have been true, and never has been. Yet classes of bugs are…

“The Emperor’s Old Clothes”

“The Emperor’s Old Clothes” 15 January 2023 Tony Hoare provided my favorite definition of security in his Turing Award lecture “The Emperor’s Old Clothes”: The first principle was security: The principle that every syntactically incorrect program should be rejected by the compiler and that every syntactically correct program should give a result or an error message that was predictable and…

The Fraught Utility Of Vulnerability Disclosure Databases

The Fraught Utility Of Vulnerability Disclosure Databases 10 July 2022 Do we need vulnerability databases? Are the ones we have working? Should we do something else? How can we improve our overall approach to the “WTF is going on?” problem? My strong bias is toward the scientific method — which requires open inquiry and easy access to knowledge — and against unreliable or false metrics. I also…

Still Waiting For A Defense Of Cryptoassets

Still Waiting For A Defense Of Cryptoassets 11 June 2022 In response to the Letter in Support of Responsible Fintech Policy , a factual and reasonable call for Congress to resist intense lobbying from crypto-speculators and venture capitalists ① , cryptographer Matthew Green has responded with a blog post In defense of crypto(currency) that doesn’t effectively rebut the letter to Congress.…

Getting A Bit More From The Minor Pentatonic

Getting A Bit More From The Minor Pentatonic 1 June 2022 Guitar players are always bangin’ on the familiar “blues box”: the standard pentatonic scale shape. (Example 🄰, below, shows it in E minor.) But, there are 4 other modes of a 5-note scale. Wikipedia shows them in A Minor/C Major , but we’ll continue to start from E, since we’re guitar players. Examples 🄱, 🄲, 🄳, and 🄴 show new box shapes…

Simple And Terrible Machines

Simple And Terrible Machines 22 May 2022 As an artifact of industrial engineering, it is very hard to beat the Fender Telecaster : durability, repairability, usability, fitness for purpose (sound), and low cost are all hallmarks of its design. Take a moment to admire a particularly fine specimen . In a sure sign of quality, the Tele patinates well. People try to fake patination , which is the…

Taxonomy Of In-The-Wild Exploitation

Taxonomy Of In-The-Wild Exploitation 16 April 2022 As too few software engineers know, about 65% of known vulnerabilities in C/C++ codebases are due to memory unsafety . The “65% finding”, as I’ll call it, is consistent across vendors and across decades. Obviously, that conclusion comes from data biased in a certain way: these are the vulnerabilities that attackers and defenders have been…

“Flood” By Throwing Muses

“Flood” By Throwing Muses 4 April 2022 Here’s another super-favorite: “Flood” by Throwing Muses, from the banger University . For me, it’s the feeling of waking up in the ICU, pumped to the gills full of fentanyl, knowing that my Bright Light is there. For this one, I’ve tried to approximate the vocal melody and have taken a wild stab at the articulation and (in the verse) the harmony. It’s good…

“Red” By King Crimson

“Red” By King Crimson 11 March 2022 I love this tune. Rather than try to figure out what scale(s) the melody is in, I think of it as movements of major chords in minor and major thirds. I’d maybe even go so far as to suggest that the fact that the 2nd melody is almost all in the diminished scale is just a nice coincidence. (The last note, F♯, is not in the diminished scale but is the third of the…

Kill Your Email

Kill Your Email 5 March 2022 The face of the enemy changes with the decades. What distinguishes email from other digital communications is that it has become a world-writable to-do list. A world-writable to-do list is an abomination that steals our time, our attention, our autonomy, and our souls. It stops us from doing productive work. We should resist email, and prefer most other forms of…

More 7th Arpeggios

More 7th Arpeggios 21 February 2022 The last post showed arpeggio shapes for 4 types of 7th chords: major 7, minor 7, dominant 7, and half-diminished 7 ( ∅ 7). There’s more fun to be had: here we see diminished 7, augmented 7, and minor/major 7. The Harmonic Minor scale is a chance to use them (C♯ Harmonic Minor, in this case). For extra fun, you can use either or both of the haf-diminshed 7 and…

Arpeggios Of 7th Chords

Arpeggios Of 7th Chords 20 February 2022 I took some guitar lessons from Andee Blacksugar for a good long while, and had some fun. One thing he taught me was this 2—1—2—1—2 pattern for 7th-chord arpeggios: root and 3rd on ⑤, 5th on ④, 7th and octave on ③, 3rd on ②, and 5th and 7th on ①. I find it easier to play than other arpeggio patterns I’ve learned. For fun, I decided to write out one of the…

Thoughts On Language Design Bugs

Thoughts On Language Design Bugs 23 October 2021 This post is an attempt to answer some pretty reasonable questions my friends and colleagues have asked me, on the topic of programming language security. If you’ve read anything else I’ve written, you know I believe the 2nd-biggest software security engineering problem is the unsafety of C and C++. What that implies and what to do about it is not…

A Fun Harmonic Game

A Fun Harmonic Game 1 October 2021 Update: A friend, whose brother is a composer, pointed out that this is known as an “L” transformation in neo-Riemannian theory . TIL! Every so often, the internet actually delivers on its promise. 🤓🥳 The other day I discovered a fun harmonic game. It’s a bit like the line cliché , but (I think) a bit more challenging. Here are the rules: Use only the 4 basic…

Improving Software ‘Numbers’

Improving Software ‘Numbers’ 26 September 2021 Update: Thanks again to Saleem Rashid, this time for pointing me at Saturating in Rust Nightly . Programming languages should expose a flexible variety of explicit types and operators for handling arithmetic overflow and related problems. As language design problems go, this might be relatively less difficult to achieve. Rust is closest to where…

A Thought On ‘End-to-End’ Security

A Thought On ‘End-to-End’ Security 1 September 2021 There’s a good deal of hullabaloo about Apple’s CSAM detection system(s) for the iPhone, iMessage, and iCloud. There are a lot of complex trade-offs in play, and I am not qualified to say if it’s net-good or net-bad. Everyone is getting their yell in, pro- or con-, and that is good. To me, the clearest discussion of why Apple’s plan is so hard to…

Fun Lil Hacks

Fun Lil Hacks 30 August 2021 Here are some fun hacks I’ve been working on lately. Run Python Published on GitHub . This little snippet of Python and a macOS Automator workflow allow me to run Python code in almost any text input widget of almost any application on my Mac. (Gmail’s message compose window is not a regular text input, sadly. Everything else works, though, including vim in Terminal.…

Long Live Sandboxing!

Long Live Sandboxing! 11 April 2021 Apparently, there is some confusion about whether sandboxing is necessary, sufficient, and/or affordable. ( Here is an example from Security Week , although this is not the only instance.) As the lead of Chrome’s sandboxing team and as co-lead of Chrome’s memory safety efforts, perhaps I can clarify a little. As I said in my Enigma presentation ( slide 7 ),…

Prioritizing Memory Safety Migrations

Prioritizing Memory Safety Migrations 9 April 2021 Update 11 April: Please also see Long Live Sandboxing! . Sandboxing is not dead, despite what you might have heard. With all the talk of using Rust to reduce memory unsafety bugs, such as Android using Rust in the Android Open Source Project , there’s a lot of extremely reasonable concern about the high cost of “rewriting it all in Rust” (or any…

Vaccine Day

Vaccine Day 15 March 2021 Today was the first day I became eligible for the Covid-19 vaccine . I’m at high risk and in group 1c for a pile of reasons. I had been checking and re-checking the various vaccine appointment sign-up web sites all weekend, to no avail. I’m a hardened survivor; but, you know, that doesn’t mean I want to test fate on purpose. So I’ve been sheltering in place for over a…

Maybe We Can Have Nice Things

Maybe We Can Have Nice Things 16 February 2021 18 February: See below for some nice updates! Programming languages advance by introducing new constraints. A key reason we don’t use assembly language for everything is that the lack of constraints make it too hard to use for everyday programming. Before goto was considered harmful , people wrote machine code that jumped all over the place, and…

Enigma 2021

Enigma 2021 6 February 2021 Every year, the Enigma conference is enjoyable and interesting. I’m a huge fan of the wide-ranging scope and single-track structure. I hope we all get vaccinated in time to have the conference in person again next year. The conference organizers did a great job making the virtual conference work as well as possible, and the Slack was fun, but you know… nothing beats…

A Sweet Chorus-y Echo

A Sweet Chorus-y Echo 18 April 2020 I’m really into continuous effects lately. (As opposed to discrete: clean/DISTORTION!!, normal/PHASER!!, et c.) I want to smoothly swoop through a sound’s range as I play. I’ve always loved the Strymon El Capistan , but I’ve been treating it as kind of a special effect, for a special occasion, rather than a go-to echo for regular use. But today I hit upon a…

The What The Fuck Factor

The What The Fuck Factor 26 February 2020 In an interview with Jesse Gress, musician Vernon Reid described what he calls the What The Fuck Factor : Maybe the WTFF springs from a magic combination of innovation, intuition, and passion. “I’m always attracted to ‘feel’ sorts of things,” muses Reid, “but when I hear a player who’s really accomplished technically and who moves me emotionally, that’s…

Recoverability

Recoverability 24 August 2019 Update 25 Aug: Removed 2 paragraphs that made more sense in an older draft than in the post as finally published. Recoverability is my word for a desirable computer safety property: The ability to fully assert ownership and control over the machine and all its operations. (This includes the ability to fully relinquish control of the machine, too.) Recoverability is…

The State Of Software Security In 2019

The State Of Software Security In 2019 ...And What To Do About It 6 January 2019 My goal in this post is to skim my observations on the state of software design and development over the past year, and to try to find a meaningful way forward for myself for 2019. My perspective is limited by the fact that I have worked exclusively in client-side software security for the past 7.5 years. Still, I…

Pictures From Paris And Amsterdam

Pictures From Paris And Amsterdam 13 August 2018 This July I went to Paris and Amsterdam for a bit of work and a bit of vacation. In Amsterdam, I presented at a workshop for security engineers and academics , and in Paris my manager and I met up with friendly Chrome people there who do work adjacent to ours. I didn’t do anything but the workshop/conference in Amsterdam, unfortunately. I’ve loved…

Isolating Application-Defined Principals

Isolating Application-Defined Principals 19 July 2018 I just published a little article on securing application-defined principals , which I used as a discussion piece at the Workshop On Speculative Side-Channel Analysis . The workshop was pretty fun and interesting, and I’m grateful to the organizers and program committee for setting it up. And now I’m heading back down to Paris on the train for…

Coping, Maybe Even Thriving, With Chronic Pain

Coping, Maybe Even Thriving, With Chronic Pain 1 June 2018 Normally in this blog, I write about software engineering and music. This post is about a topic even more personal to me: coping with chronic pain, while still functioning at a high level and enjoying life. If that feels weird to you, feel free to skip this post. It’s OK. :) From birth, and in exciting new ways since then, my body has been…

On Validating Inputs

On Validating Inputs 15 January 2018 Introduction A principle of secure software development is that only the callee (sometimes called the relying party , RP) should trust itself to validate an input. Typically, the callee has a higher degree of privilege than the caller, and will use its privilege to perform some task for the caller if and only if the input is valid. Allowing the caller to assert…

Pithy (?) Programming Guidelines (?)

Pithy (?) Programming Guidelines (?) 11 November 2017 Slightly tweaked and expanded 19 January 2018. These guidelines are probably insufficiently pithy, and might not be wise at all. But they seem to work for me. Focus on the user and all else will follow . See also the priority of constituencies . Start with UX mocks and storyboards, user documentation, API documentation, or whatever is…

Some Problems Of URLs

Some Problems Of URLs 7 November 2017 Update 09 Dec 2017 18:09 UTC: A reader pointed me to this delightful Black Hat talk by Orange Tsai about exploiting URL grammar problems . Background The uniform resource locator (URL) is a data structure and an associated serialization format that aims to uniquely identify any resource on the Internet (and other networks). (See also uniform resource…

Decoding Chrome’s HTTPS UX

Decoding Chrome’s HTTPS UX 15 February 2017 Update, 26 August 2017: My colleague Eric Lawrence has replaced your cheese . Introduction In this post I’ll try to illuminate and explain Chrome’s HTTPS-, TLS-, and X.509-related security UX surfaces. They are a bit complicated, and they’ve changed recently, and the Web PKI is very weird, so I think they bear some explanation. (People who already know…

Looking Backward To Move Forward In Software Engineering

Looking Backward To Move Forward In Software Engineering 16 September 2016 Jason Scott has a delightful blog post about a hacker, John Brooks , who released an update to Apple’s legacy operating system ProDOS. Without access to source code, Brooks took the object code of ProDOS 2.0.3 and fixed some of its bugs, added features, and bundled in some new programs. This is amazing on several levels.…

Getting Into Security Engineering

Getting Into Security Engineering 20 June 2016 Update 2016-07-06: I added 2 additional books to the reading suggestions at the bottom. Update 2016-07-28: You’ll definitely also want to read my excellent colleague Parisa Tabriz’ take on the same topic . I’ve been talking with various people lately about how to get started in software security engineering. I noticed I’ve been having similar…

Building A Telecaster

Building A Telecaster 12 June 2016 Last week, I built a Telecaster guitar from scratch, under the excellent tutelage of luthier Meredith Coloma , in Vancouver. It was an exciting and at times harrowing adventure! We spent 7 rather exhausting but rewarding days in Meredith’s shop. Meredith is a fantastic luthier but also a great teacher! And she went above and beyond the call of duty several times…

To Make Good Software, Make Software For People

To Make Good Software, Make Software For People 1 June 2016 Reading the new Duo Labs report on Windows OEM bloatware vulnerabilities, “Out-Of-Box Exploitation” , I was struck by a thought: the reason Apple hardware does not have the vulnerable bloatware problem is that Apple does not have a bloatware problem at all. And the reason for that is that Apple prioritizes the customer’s happiness above…

More New Electronic Music: Time 1

More New Electronic Music: Time 1 31 May 2016 Hot off the cyberpresses, I wrote/improvised and recorded 3 new songs this afternoon: Time 1 . I really like just jamming with the Fingerlab DM1 drum machine app for the iPad. They keep updating the app with new features and drum kits/sample sets. A super cool thing now is the ability to apply effects to particular instruments, rather than to the mix…

New Electronic Music EP: Object.lifetime

New Electronic Music EP: Object.lifetime 29 March 2016 After letting it sit for 4 years (?!), I have finally released this EP of electronic music I wrote shortly after recording the 2nd Dot Punto. EP I worked on, Agua Viva . It’s called Object.lifetime , and after thinking about it for all these years I don’t hate it, so maybe it isn’t too bad. :) You can listen to it on Bandcamp, or you could…

Advice For Myself

Advice For Myself 27 March 2016 Maybe other people might find this useful, too. Contribute to someone else ’s safety, health, or pleasure. Secure your own oxygen mask before helping others — so that you can help others. Do 1 thing at a time. Multitasking is counter-productive. Eat a moderate amount of a wide variety of foods. Eat breakfast. Reduce (but don’t completely eliminate) sugar and…

Security Engineering As Caring-For

Security Engineering As Caring-For 27 March 2016 On security nihilism — I recently read Joe Masco’s Theater of Operations: National Security Affect from the Cold War to the War on Terror (VERY GOOD). I was struck by the massive extent to which the discourse around [computer] security borrows from and follows military discourse and metaphor. We see this in the increasing departure from…

Everyone Needs Secure Usability

Everyone Needs Secure Usability 30 January 2016 There’s an interesting article in LWN about C11 atomic variables and the kernel that struck me for a few reasons: Atomics and concurrency are always weird and fun and surprising I keep hoping for C11 to be kind of awesome, or at least interesting, and it is! Although they might not frame it this way, secure usability — in the same sense that we worry…

Against Security Nihilism

Against Security Nihilism 28 January 2016 There’s a lot of security nihilism in the technology community, and in the culture generally. Many people believe that “defense is impossible”, that “security is a losing battle”, that nothing can be done, that we should stop trying and divert resources spent on security to other worthy things like features and performance. There is even nihilism in the…

Episode 72 Of The Code Newbie Podcast

Episode 72 Of The Code Newbie Podcast 27 January 2016 Saron Yitbarek interviewed me for the Code Newbie podcast ( local copy ) 2 weekends ago, and she published it this past Monday. The Code Newbie community is “the most supportive community of programmers and people learning to code”. I was fortunate to have a group of friends to learn from and with when I was a newbie, and I’ve found that when I…