Alex Shroyer
News
- 2024-11-04New job! I joined Cato Digital to help build more sustainable cloud computing
- 2024-07-03Andrew merged FloatVer into his list of versioning schemes
- 2024-03-06Tensorflow merged my contribution
- 2024-02-09Started a new project (writing an interpreter for a K-like language)
- 2023-11-26PyTorch merged my contribution
Recent Posts
2026
FloatVer 2.0May 17
FloatVer gets a breaking change.
Rational FloatVerApr 1
Extending FloatVer to include rational numbers.
What's Your Attachment Style?Mar 19
…when attaching a guitar neck to a guitar body, that is
Blueshawk WiringMar 16
Rewiring a Gibson Blueshawk for simplicity and lower noise.
Long TeleMar 12
Guitar traditionalists hide your eyes.
ParseqMar 11
It's a focused sort of EQ.
CabsimMar 9
It's a funny sort of EQ.
BB Triple ComboMar 8
A triple effect pedal built for a friend.
FloatVer 1.0Jan 15
Describing the 1.0 version of FloatVer
Older
2025
GuitarSep 4
My DIY guitar project
Batch Or StreamMar 31
Sometimes you can turn a traditionally "batch" oriented algorithm into a streaming one which trades off memory for time.
Breadboard NoisesFeb 28
Updates on some prototype guitar effects.
Cron TimezoneFeb 27
Did you know you can set the time zone for cron?
Simple OverdriveJan 19
Putting my ego aside to build a decent overdrive pedal.
Dirt BoxesJan 10
A collection of in-progress guitar distortion circuits.
2024
Guitar Effects AgainDec 30
Getting back into guitar effects after a long break.
FloatVer Hardware AccelerationOct 8
A hardware-accelerated alternative to SemVer.
FloatVerJul 1
Versioning software with floating point numbers.
Gradual TypesJun 21
Cramming static types into an already dense dynamic language.
Prototype Language ImplementationMay 10
Some strategies for developing a programming languageinterpreter(prototype).
Language ChecklistFeb 23
What features does your new programming language need to succeed in today's fast-paced world?
Google Apps ScriptJan 22
Customizing the behavior of a Google Form using Google Apps Script.
SearchJan 4
Russel and Norvig's approach to search problems.
2023
Array Language ComparisonsDec 8
Trying to summarize some array languages based on their features and how they work and feel.
IU Engineering Ph.D.Dec 7
Experiencing something N=1 times qualifies me to give advice, right?
Maybe not, but here are some IU-specific tips anyway.
Dissertation DefenseDec 5
An incomplete list of resources and things I did that helped me finish my Ph.D. studies.
ScrollOct 10
Productivity tip: pretend your scrollbar is broken.
Chesterton and the FencepostJul 26
G.K. Chesterton once wrote about the hazard of removing a metaphorical fence simply because you see no need for it today.
He cautioned that before you remove the fence, you should understand why it was there in the first place.
This story has become part of programming lore, perhaps leading to an overabundance of caution when it comes to removing features.
Shavehorse Skill TreeJul 10
The shavehorse embodies the video game "skill tree", but for wood furniture making.
Bytecode IndexingJun 29
A compact method of decoding bytecode.
Iron AcetateJun 7
Making a batch of iron acetate wood stain from household materials.
VM ReplMay 29
What special features does a language interpreter need that are different from an ahead-of-time compiled language?
Stack VM LanguageMay 21
A deep dive into the Nand2Tetris VM language, and what it means to write an interpreter for a compiled language.
PyhidraApr 10
Some notes about usingpyhidrafor reverse engineering.
Some of this post is background on what reverse engineering is, but the focus is on pyhidra, an interface between Python and Ghidra.
MalletMar 9
A woodworking project.
ToolsJan 29
A description of the hand and power tools I use most frequently, and some recommendations.
Low Impedance PickupJan 1
Building a low impedance guitar pickup prototype.
2022
Split KeyboardDec 22
Some thoughts about split keyboards.
1More Color Buds ReviewDec 7
A brief review of a pair of "truly wireless" earbuds.
Hello ChatGPTDec 4
A conversation with ChatGPT about how to teach in this brave new world that contains ChatGPT.
OpenAI has a public beta application called ChatGPT which is a chat-like front end to one of their large language models.
It interprets what you type and generates plausible responses.
Edit DistanceNov 29
First Emacs Syntax HighlighterNov 12
Writing a syntax highlighter for emacs starting from zero knowledge.
Big Programming Language IdeasOct 31
Big ideas in programming languages, some of which are not yet mainstream.
Default HoneypotSep 1
Here's an idea - a default email address is actually a "honeypot".
That is, a target intended to attract scammers or spammers to direct attention away from the real address.
Academic PublishingAug 16
Writing an academic article is one thing, getting it published is another.
Now that I have helped write 4 published papers, and assisted my peers with revising their own papers, I feel like I have some insider knowledge to share.
This is the kind of information I wish I had before starting my academic publishing journey.
Obviously BetterJul 11
An idea which is "obviously better" to some people and yet obviously worse to others.
IEEE Org TemplateJun 24
Setting up Emacs and org-mode to use IEEE's two-column template.
Assembly GolfMay 28
Trying to write the smallest assembler possible.
Linear Algebra BFSMay 6
A method of computing a breadth-first search using a sparse adjacency matrix.
Fantasy Fantasy FootballApr 30
Higher order fantastic sports.
CO2Apr 22
How much atmospheric carbon dioxide do I generate in a year?
Machine Learning IdiomsMar 28
A collection of short idiomatic code snippets which I've used in my Machine Learning tasks, written in J.
Hopefully I'll come back here to update this list once in a while.
LispFeb 21
Looking down at Lisp
EndiannessJan 16
What is "endianness", and what are some examples?
Interfacing J With CJan 10
Some ways to call a dynamically linked library from J.
2021
Book Of The YearDec 31
Snow Crash is the most relevant book of 2019, 2020, and 2021.
Installing EmacsDec 11
Installing Emacs on MacOS 12.0.1.
KmeansNov 9
The k-means clustering algorithm with Python and J implementations.
Armchair Language Design (part 1)Nov 7
Documenting features I like to see in a programming language.
Google Cloud FunctionsNov 1
The non-obvious way to call one Google Cloud Function from inside another one.
I DeclareOct 26
Separate syntax for declaration and assignment is a Good ThingTM.
Daylight Savings TimeOct 24
Daylight Savings Time does not make sense, causes harm, and should be abolished.
Dependency HeckOct 18
How I broke my Emacs and taught myself a lesson.
Syntactic HolesOct 14
The set of possible strings is infinite, so the design of a programming language's syntax is mostly about whatnotto allow.
I find this topic interesting and fun, because constraints encourage creativity.
Favorite Language FeaturesOct 13
A tour of some of my favorite programming language features.
Org-Mode Static SiteOct 12
I like org-mode, and I want to generate content for a static site (blog, cv, etc).
I'll use emacs to edit and export org-mode files to html, then tweak the results for aesthetics.
Artificial Neural NetworksOct 11
Artifical Neural Networks (ANNs) are a key part of machine learning.
We can see how they work by building a toy example.This post shows two variations of ANNs, in two languages.
First inPython(with the NumPy library) and then inJ.
These implementations are based on the code inthis post.Both of these languages are high-level, highly dynamic languages.
Python's strengths include its extensive set of libraries, and the ease of extending the language both in terms of syntax and by binding to compiled C code.
J's major strengths include its fundamental array-oriented paradigm, and the ease of composing its large set of primitive operations.
Futures in JxSep 14
Jx is a J interpreter with built-in support for task-level parallelism.
For more information about Jx, check outthis page.
MoshSep 10
My work often requires me to access remote machines.
Luckily, I'm fortunate enough to live in a part of the world with decent broadband, and my work has very fast and reliable networks.Still, networks arenot as reliable as we want them to be, and higher latency hurts ergonomics.
Then I triedmosh, which claims to improve latency and also help smooth some of the rough edges of non-ideal network conditions.
Org RevealAug 13
I started usingorg-revealfor presentations.
It's not perfect, but it succeeds at combining the editing ease of org-mode with good-looking and portable html/js presentations.
2018
J Is ReadableJun 1
What makes some code readable and other code unreadable? I'll argue that readability, at least when it comes to source code, is not so much about how the code is arranged (in folders, on the page) or how it looks (whitespace, indentation, naming conventions). Instead, readability hinges on how easy it is to discover and modify the behavior of the running software.
2018 05 17 Guitar EffectsMay 17
In a previous life, I designed guitar effects.
Here are some fragments which survived digital bitrot.
2017
Another ChromebookFeb 16
Despite being about on par with a current midrange smartphone (in terms of processing power) my 2012-era Chromebook has been a capable development machine.
I've written about itbefore, and generally been pleased with its capabilities.
However, after 5 years of heavy daily use, its battery will now only last about 2 hours on a charge.
So I've replaced it with yet another Chromebook.
Bad InterfacesJan 16
Some user interfaces are just so horrendously bad they deserve to be named and shamed.
Here is a sampling.
2016
Sequential MachineDec 16
One of the more intimidating constructs available as a J primitive is the dyad;:, also known asSequential Machine.
This is kind of an oddball compared to the rest of J's primitives.
Static Site GeneratorDec 8
Originally this site was built using Jekyll, specifically a preconfigured kit designed by Barry Clark calledJekyll Now.
TLS All The Things!Dec 1
This site is now served up over https, courtesy of some helpful blog posts I found.
Hosting is still provided by GitHub.
The entire process was quite painless and I wish I had done it sooner.
2016 07 16 Refactoring Hardware Vs SoftwareJul 16
Because software is so "soft", making changes to its source code representation (while preserving functionality) much more common than making similar changes in hardware.
This process even has its own jargon -refactoring- which, like a mathematical factorization, implies a cosmetic change with the purpose of making it easier for human readers to understand.
Martin Folwer called it re-factoring probably because it's such a common activity when writing software.
2016 04 12 Text Editor ShenanigansApr 12
Ever since I got over the initial learning curve of Vim, I've been one of those loonies who volunteers opinions about text editors.
Mostly friends, sometimes family.
Generally strangers via the internet.
If you've read internet message boards or blogs that relate to programming or software-creation-related disciplines, or sites likestackoverflow, you've likely encountered someone like me.
2015
Evil Mode First ImpressionsOct 24
In which a long-time Vim user tries Emacs for the third time.
Synchronized DevicesSep 7
Instrumentation for psychological experiments can be simple or complex.
It can be as simple as a pencil-and-paper survey, or as complex as an fMRI outfitted with custom electronics.
The researchers I work with generally want something on the complex side.
The most common challenge I've seen is the problem of time-aligning heterogeneous data.
2014
Enterprise FirmwareNov 5
This is a new term I've coined to describe what I do to professionals in related fields.
To someone on the outside it probably sounds like meaningless jargon, but to me it is completely descriptive and succinct.
So, let's break it down into smaller, easier to digest components.
Discomfort ZoneOct 5
I was a smart kid.
At least, I always thought so, until middle school.
I found myself in the "advanced" math class, totally dumbfounded by the concept of negative numbers.
This was the first time understanding something in school wasn't easy, and it made an impression.
I remember the initial terror and uneasiness, followed by intense brain exercise, the sense of accomplishment and finally the realization that the world is bigger than it was before.
HorsepowerSep 21
Today's post is about my computer.
I use a Chromebook, quite possibly in ways the manufacturer did not intend.
From a distance the marketing for these things seems to imply "browser with attached keyboard".
However, there is enough going on under the hood to make this a rather viable development machine for a person like me.
Optimistic EngineeringSep 12
This is a blog, so it's time for a rant.
Now, I'm not incensed enough about this to re-enable my CAPS LOCK key, but it's still pretty bad.
What I want to rant about today is the stereotypical pessimistic engineer.
Origin StorySep 7
Much of my non-compulsory reading during my formative years was comic books.
So I am a fan of the origin story.
Research
Trustworthy computing requires finding vulnerabilities quickly.
We need tools that can spot potential problems in a rapidly-shifting security landscape. I build these kinds of tools, using deep learning to highlight possiblly vulnerable code, so security analysts can focus their attention on what matters.
About Me
Some of my favorite things to do include hiking with my family, cycling outdoors, making guitars, and going on road trips. I appreciate good design in software and the real world.
Email: contact@<this website's domain name>.