RSSAmplifier

Blog

Alex W.'s Blog

Recent content on Alex W.'s Blog

blog.alexwendland.comRSS feed ↗77 posts

Latest posts

Coway Airmega 200M level 2 CFM

Tl;dr: Coway’s Airmega 200M has a CFM of ~100 CFM on speed 2 vs. ~250 CFM on speed 3.
I measured the return air output on 2nd speed at several locations for a cumulative 40 seconds using a Testo 405i hot-wire anemometer and got a flow velocity of 1,139 FPM over a surface of 3.5 in x 5.0 in, resulting in a 138 CFM. However, when I measured speed 3 I got a reading around ~330 CFM, so my…

Confidence scale (like priority scale)

We introduced a “confidence scale”, a new form of communication shorthand at my company several months ago. It’s held up well. Teammembers have conveyed useful epistimic information more regularly in meetings, messages, and memos.
Confidence scale.
Use a numeric scale—c0, c1, c2, c3, c4, c5—as shorthand to communicate confidence in a statement. This is analogous to p0 -…

How to avoid losing items? Holding pens.

I put it in a safe spot.
-- a phrase my mom would always say when she’d lost something.
Why do we lose things inside our homes?
When we are interrupted or need to hastily respond to a new demand, we often make quick decisions about where to place physical items. We always place them in locations which make sense given our current state of mind, but often that state of mind is…

Situational Awareness hot takes

situational-awareness.ai
Situational Awareness is submarine marketing so Ilya can raise a fat round for SSI.
Situational Awareness overstates algorithmic improvements because benchmarks are in the training data and models can’t operate on out-of-distribution questions.
Situational Awareness overstates future algorithmic progress because transformers have no world models and…

Can a product with "0g sugar" contain lactose?

I am severely lactose intolerant, so I strictly avoid lactose in my diet. Unfortunately, there is no lactose free label1.
However, lactose is a sugar. So, can you use the sugar entry on a nutrition label to determine if a product has zero lactose?
Firstly, is lactose including in the analysis of “Total Sugar” on an FDA mandated nutrition label? Yes! The Food Labeling section of…

DRAFT: Notes on Responsible AI Companionship

Thesis: AI companions will be mainstays in human life. We can learn from the past 50 years of technology companionship to guide this next era.
Social surrogacy - people spontaneously seek out social surrogates when real interactions are unavailable.
Phase 1 - Television (general parasocial, mitigates feelings of loneliness) Phase 2 - Social media (niche parasocial, dichotomous impact on…

To combat Altruist, Schwab should buy Advyzon

Summary
Altruist’s1 bundled custodian + platform software model presents an existential threat to Schwab & Fidelity’s ~$5T AUM hold on the independent RIA market. Altruist is making a classic disruption play, and, as of April 2023, they’re on the brink of stage 4 of the Disruptive Innovation process. Schwab & Fidelity need to address their downmarket gaps ASAP. Their best bet may be to acquire…

Healthcare 🩺

Resources Of the 100s of articles/podcasts/books I’ve read, these are the best concentrations of healthcare knowledge that I’ve come across:
EconTalk | Podcast | Vivian Lee: The Long Fix - overview of hospital procedure pricing and broken market incentives in healthcare EconTalk | Podcast | Adam Caifu: Ending Medical Reversal - discussion about the observational/anecdotal evidence…

Recommended 1:1 Topics for Early Employees and Startup Executives

Across the startups I’ve been at I’ve seen early employees struggle to know what to talk about with C-suite executives in 1:1s (one-on-ones). Early stage startups are small enough that most employees have monthly or even weekly 1:1s with the CEO or other executives. These executives usually have their hands too full to provide the usual career planning or project review discussions of…

My programming trends from 2020 to 2022

I use a program called Wakatime to track my IDE usage. In 2021, I was in the top 10% of all users. In 2022, I decreased substantially, matching my career transition from software engineering to product management.
I spent 120 hours actively using an IDE in 2022 I was pleasantly surprised to see only 6 hours of software engineering work for Pinwheel. As I was transitioning into being a PM…

30+ houseplants in a New York City apartment

As of December 2022, I&rsquo;ve got 34 houseplants1 in my 14&rsquo; x 14&rsquo; apartment in Manhattan. They take <3 hours of maintenance per month and bring freshness and nature into my life.&#xA;I&rsquo;ll run through my maintenance tips, unique challenges I faced in my NYC apartment, and FAQs I get about my plants.&#xA;Maintenance Tips I&rsquo;ve learned 2 tricks for easy…

The FDA approved Luminopia One

On Wednesday morning I got a call from Scott Xiao, Luminopia&rsquo;s current CEO, letting me know that we&rsquo;d finally done it: Luminopia had an approved medical device.&#xA;5 years ago when we had our first face-to-face with the FDA, Scott had forgotten his Canadian passport so he wasn&rsquo;t even allowed into the building.&#xA;Congrats Scott and Dean! What a journey 😊&#xA;Techcrunch - How…

Chunked Iteration in Python

from typings import Generator, Iterable, TypeVar ChunkT = TypeVar('ChunkT') def chunks( iterable: Iterable[ChunkT], size: int ) -> Generator[Iterable[ChunkT], None, None]: ''' Break *iterable* into lists of length *n*: >>> list(chunked([1, 2, 3, 4, 5, 6], 3)) [[1, 2, 3], [4, 5, 6]] The last yielded list will have fewer than *n* elements if the length of *iterable* is not divisible by *n*: >>>…

Onboarding to Python, FastAPI, SQLAlchemy (2021)

Several key pieces in Pinwheel&rsquo;s tech stack are:&#xA;Python (CPython) - Language + Runtime FastAPI - Web framework Pydantic - I/O data object validation Starlette - ASGI framework uvicorn - Event loop ASGI server SQLAlchemy - ORM psycopg2 - Postgres DB driver Here are a collection of articles, notes, books, etc. I thought were particularly helpful while I was learning this tech…

Big Trees 🌳

Other great big tree websites: Gathering Growth Foundation&#xA;Maui, HI - April 21, 2021 Lahaina Banyan Court.&#xA;The largest ficus benghalensis in the USA and has its own Wikipedia page. Planted in April of 1873 (148 years before this photo). It’s grown to have 16 major trunks, each of which looks like it’s own tree until you notice the connecting limbs coming from the central trunk. GPS…

Developer Resources 💻

Learning + References Accessibility a11y project | collection of accessibility resources, including a checklist to audit websites Algorithms Algorithms by Jeff Erickson Android ADB Commands — Part III - ProAndroidDev Architecture Realworld implementation w/ different frameworks The Majestic Monolith - Signal v. Noise The Architecture of Open Source Applications: a 2 volume series overviewing…

(untitled)

Citi loses $500M, and why verification UIs should switch modes

This is hilarious.&#xA;Last August, Citigroup Inc. wired $900 million to some hedge funds by accident. Then it sent a note to the hedge funds saying, oops, sorry about that, please send us the money back. Some did. Others preferred to keep the money. Citi sued them. Yesterday Citi lost, and they got to keep the money. -Matt Levine @ Bloomberg&#xA;Here&rsquo;s the software interface that started…

Release: wasm_spec_kernel - a Jupyter kernel for WebAssembly

Testing out WebAssembly features that are only present in webassembly/spec&rsquo;s reference interpreter is hard because the interpreter is written in OCaml and can&rsquo;t be run on the web.&#xA;So I created a Jupyter kernel that interfaces with its REPL. Now you can showcase WebAssembly code in a Jupyter environment.&#xA;Find the package on PyPi: Explore the source code on GitHub: Also, you can…

Debug/trace logging in a custom Jupyter kernel

I was unable to get Jupyter to report any logs from my custom kernel, even when I was running jupyter labs --debug.&#xA;This was the case for both print calls and logging.{critical,debug,etc.} calls.&#xA;To work around it I configured my kernel&rsquo;s logger to write to a file using logging.basicConfig(filename="kernel.log"). The Jupyter runtime can&rsquo;t eat these logs up because they…

Extract color configurations from an iTerm profile

Moving colors from one iTerm profile to another is difficult because all the color configurations appear as separate, un-namespaced entries in the profile&rsquo;s exported JSON.&#xA;The following jq command can be used to pull out all the configuration items that have a "Red Component" sub-property, which all the color properties will have.&#xA;jq 'with_entries(select(.value.'Red Component'? !=…

Script the installation of .deb packages that have configuration prompts

Some packages open up a terminal UI to ask you several questions after you install them with dpkg -i. If you&rsquo;re trying to install the package using Ansible apt&rsquo;s deb feature then the installation will hang forever while it waits for these prompts to be answered.&#xA;You can pre-answer all of the questions by using Ansible&rsquo;s debconf feature. To figure out what the questions…

Translucent status bar in PWAs on iOS

There is an incantation to get a translucent status bar in a PWA (progressive web app) on iOS, e.g. the first image vs. the second image:&#xA;Though the screenshots omit it, this is particularly relevant to phones that have &ldquo;The Notch&rdquo; (see CSS-Tricks).&#xA;You need to:&#xA;Add1 the tag <meta name="apple-mobile-web-app-capable" content="yes"> (source) to the <head> section of the HTML…

Different Homebrew formula approaches (for `go` binaries)

homebrew-core requires binaries to be compiled from source, you can&rsquo;t just download an asset from GitHub Releases and then use the bin.install command to setup the binary.&#xA;If you&rsquo;d prefer to use the pre-compiled you can&rsquo;t introduce your tool into homebrew-core, ie. it won&rsquo;t be installable with brew install toolname. Instead you can create a tap (such as croc which…

Supporting CLI programs in `subprocess.run` on macOS & Windows without `shell=True`

In Windows, subprocess.run uses CreateProcess (docs) which (appears to?) only identify .exe files by default. Therefore when trying to run something like the heroku CLI using subprocess.run('heroku') it fails with [WinError 2] The system cannot find the file specified. Using where heroku I can see that it has two executables at:&#xA;C:\Program Files\heroku\bin\heroku C:\Program…

Using `filetype` to guess CHK files in FOUND.000

What is &ldquo;FOUND.000&rdquo;? From https://www.howtogeek.com/282798/what-are-the-found000-folder-and-file0000chk-file-in-windows/&#xA;Windows’ built-in chkdsk tool, short for “Check Disk”, creates this folder and file. Windows automatically runs Check Disk when it notices a problem with a file system. Those .CHK files are fragments of corrupted data—rather than deleting any corrupted data it…

Sending email from a forwarding-only address in Gmail

The Harvard Alumni Association offers a forwarding-only email address for alums at custom_username@alumni.harvard.edu (anyone with a Harvard Key can access it here). They state that,&#xA;A forwarding address is not a stand-alone email account. Rather, it is a service that will forward messages to your existing email address. &hellip; By default, your outgoing mail will display the email address to…

Custom JSON payload for *Get contents of URL* in iOS Shortcuts

The Get contents of URL action in iOS Shortcuts conveniently has a JSON payload type. However, this default type only supports objects at the top-level (e.g. {"key": "value"}, you can&rsquo;t submit a top-level array (e.g. [{"key": "value"}].&#xA;To work around this create a Text action in which you manually author the JSON (e.g. [{"key": "VARIABLE"}]) and then use the magic value from that action…

TypeScript, Lerna, and .dockerignore

This approach ignores everything by default and then whitelists what&rsquo;s permitted. Or at least it takes that approach for the top-level directory but has to explicitly restrict nested directories because exception statements don&rsquo;t support wildcard directories.&#xA;* !package.json !yarn.lock !lerna.json !tsconfig* !packages/ packages/*/dist/ packages/*/node_modules/ packages/*/tests/…

Connecting to host machine from Docker container on macOS

This is from a note I wrote in 2017, there is likely a better way to do this in modern Docker.&#xA;Inside the container run sudo ifconfig lo0 alias 10.0.2.2. This will add 10.0.2.2 as an alias for the loopback interface&#xA;Now, the container can talk to the host by targeting 10.0.2.2&#xA;Caveats:&#xA;MySQL restricts user access by origin, therefore 10.0.2.2 must be added to the User entry’s…

How to work with streams in `got`

Calling got.stream(url, options?) returns a duplex stream with additional events. This stream can be read from (e.g. listening to the data and end events) for retrieving the response body, and can be written to (e.g. calling write(data) and end()). If the stream is not read from then the response body will not be downloaded. The additional events expose request and response metadata (which can…

How to implement max download size with `got`

The sindresorhus/got documentation provides a hooks based approach which can be found at Advanced Creation: Limiting Download & Upload Size.&#xA;You can also use got.stream(...) to implement this functionality in a manner that avoids any response body download if the content-length header indicates that the download will be too large (the sample in the official docs only terminates the download…

Feedly intentionally sets the wrong RSS date

I was trying to figure out why my RSS feed was showing the wrong article times in Feedly, even though they looked right in other RSS readers. I finally found the answer at https://feedly.helpscoutdocs.com/article/323-my-article-is-showing-the-wrong-date&#xA;The main date that is important is the date in the RSS feed itself. If the article gets refreshed with a new date/time we show it as new…

Tasks and Promises in fp-ts

In fp-ts a Task is just a a lazy Promise, eg. () => Promise, since Promises are eager normally (ie. they execute their computation when created, not when await-ed on). See getLine in fp-ts-contrib for an example.&#xA;A TaskEither is for representing Promises that can reject. The reason the tryCatch method, intended for converting a Promise to a TaskEither requires a second function for handling…

Release: bedsheets - use Google Sheets as a RESTful DB

Google Sheets has a bunch of wonderful database features: built-in version control, collaborative management, a great table browser, powerful data processing functions, and basic visualization tools.&#xA;There are a few libraries and SaaS offerings that let you use it as a serverless DB, but they either 1.) cost money, 2.) require you to depend on a 3rd-party service without encryption, 3.) expect…

(untitled)

Graduated from Harvard

&rsquo;twas a virtual graduation thanks to COVID. Fortunately, Conan O&rsquo;Brien was the class day speaker and used the format well (video).&#xA;Thanks to the advanced standing program I was able to accelerate my graduation, so I only graduated 1 year behind my original class.&#xA;I took 27 wonderful classes in college. Here they are in the order they appear on my transcript:&#xA;Semester 1 -…

Senior Thesis: WebAssembly as a Multi-Language Platform

I submitted my undergraduate thesis for Honors in Computer Science at Harvard on &ldquo;WebAssembly as a Multi-Language Platform&rdquo;. My advisor was Professor Nada Amin, and my readers were James Mickens, Stephen Chong, and Eddie Kohler.&#xA;Where to find it:&#xA;awendland/2020-thesis - GitHub repo containing the thesis awendland/webassembly-spec-abstypes - my fork of the WebAssembly…

How to Backup Google Drive to S3/Hard-disk

As reliable as Google is, it can be worrisome to depend solely on one company to maintain all of your data. In both my personal and startup life, I’ve kept all of my non-code data in Google Drive. Besides two instances in the past 4 years, during which Google Drive was inaccessible for a cumulative 6 hours when I needed it, everything has been operating smoothly and quickly.&#xA;However, I am a…

npm Install Hook Scripts: Intro (Part 1)

npm1 is the de-facto package manager for JavaScript code. Though initially intended for use with node.js, it&rsquo;s expanded to managing dependencies on the frontend as well. npm makes a developer&rsquo;s life substantially more convenient, but it provides that convenience at the cost of security. In particular, npm is happy to auto-execute package scripts upon install, thanks to various install…

2018 Yarn vs. NPM

With NPM&rsquo;s recent acquisition of ^Lift Security and the Node Security Platform, as well as the release of their package-lock.json and the npm ci command for reliable CI installations, it seemed like a compelling time to reavaluate the value proposition of Yarn. Plus, for some reason Yarn kept giving me 401s on our CI two weekends ago for some unknown reason, so it made me think about NPM for…

(untitled)

Co-founder and CTO at Luminopia, where we were working to cure lazy eye (the team&rsquo;s working on even more now!). Checkout some coverage of an early clinical trial we ran at BCH, a writeup by the Ophthalmologist, some SXSW coverage. Plus, The Crimson asked me for a brief statement and HBS wrote-up a case study on us, if that&rsquo;s your thing.

(untitled)

Woohoo! Fun college things! One of those fun college things was Datamatch, a website started in 1994 at Harvard where people fill out a questionaire and then are matched with their perfect soulmate on Valentine&rsquo;s Day and given a free meal with them. I also worked with Harvard College Consulting Group, looking at user retention for a big 3 cable company, but it was severely lacking in…

(untitled)

The Second Quarter of 2015: Projects

Following the spirit of The Second Quarter of 2015: Items, I&rsquo;m going to also post an infrequent summary of the projects that I have been working on and other transgressions that have occurred as of late.&#xA;New McConnell Brue Macroeconomics Glossary - (School) Python - GitHub&#xA;I was getting tired of constantly searching through my textbook&rsquo;s glossary for the definition of…

The Second Quarter of 2015: Items

I was inspired by a website I stumbled across on called My Faults My Own by Ross Rheingans-Yoo in which he keeps a live post for each month where he lists worthwhile articles he&rsquo;s read and other things he &ldquo;would like to signal-boost, but won&rsquo;t take the time to do full writeups on&rdquo;. I enjoy the idea substantially, and with this post am commencing along the path he…

Particle Network Animations in JS

I just did a minor revamp of the TEC Club homepage in order to include a live, JS generated network of floating dots. Opaque interconnections will pop to life when the dots travel within 100 pixels of each other. On mouse over, the connections will fade away and the dots will grow increase in opacity. It can be quite entertaining to watch. I enjoy playing this version in full screen and just…

Algorithmic Art in Javascript

I was reading the solution to a problem on Stackoverflow when this thread caught my eye http://codegolf.stackexchange.com/questions/35569/tweetable-mathematical-art/. People were challenged to come up with concise functions for Red, Green and Blue to be called on each pixel in a 1024x1024 image. Furthermore, the functions had to total less than 140 bytes, short enough to fit into a tweet.&#xA;Now…

Linux Terminal Batch Download One Liner

More than once I&rsquo;ve come across a situation where I&rsquo;ve needed to download a set of files from a website, all on the same page, and all with a similar HTML markup pattern. Additionally, I&rsquo;ve come to fall in love with the Linux Terminal and all of its easy-to-use commands. So, here&rsquo;s a mashup of the two!&#xA;I wanted to download all the (free, legal) mp3s from…

Android, the better UX?

Intro What&rsquo;s the best looking smartphone? Quickly the obvious response is given, &ldquo;iPhone&rdquo;. The leader in innovation, design, functionality, usability, friendliness&hellip; et cetara. I&rsquo;d like to challenge this widespread assumptions and propose that, in fact, Android provides a better net user experience.&#xA;I&rsquo;ll start off with one stipulation, this argument only…