Welcome, dear traveller, to my virtual stronghold! Here you will find information on various projects I have worked on, from software to math to music.
Basics about my life and hobbies are below. Here are quick links to my CV (comprehensive), my résumé (a subset of items most relevant to the work I'm looking to do in the near future), and my research publications list. See the meta page for more information about contacting me and technical aspects of this site.
I encourage you to email me your feedback on anything on this site so I can prioritize improvements.
(You can also click "Email me about this page" at the top or bottom of any page
to pre-fill the subject with the page you were on.)
News
[# @] 2020-10-03: In 2016, a fellow intern at Microsoft Research told me that
some applications require a floating-point number system with
subnormal numbers
in order to work correctly
but do not want to use the subnormal numbers of
typical floating-point hardware, which can be very slow because the hardware
does not optimize this relatively rare case.
I'm unsure this need still exists, but I had a clever idea to solve it that I'm finally (briefly) writing up:
emulate a virtual floating-point number system with a reduced exponent range
in which subnormal numbers are represented by normal numbers of the physical system. Read more...
[# @] 2020-09-22: I've finally set up containers,
including temporary containers,
on my main Firefox profile.
This is a huge improvement over using the default and private browsing contexts
(with the former configured to clear site data automatically on exit)
to get a poor man's 2 temporary containers, one of which doesn't save history. Read more...
Projects
My CV lists a few additional projects
that currently do not have publicly available materials;
please email me if you are interested and
I will look into making the materials public if I have time.
My research publications list
includes a few more projects in which I played too small a role to list them here.
Caveat: Much of the material on this site is years old;
years below indicate when the bulk of the work was done,
though some projects have received minor maintenance later.
Anything you find here may be "stale",
i.e., no longer fully representative of my current work or opinions.
In addition, there are several projects I have no interest in continuing ("unmaintained") or where the artifacts are probably no longer useful in their current form but the artifacts or documentation may contain useful information ("obsolete").
I encourage you to make use of what you can
and to email me if you would like a status update on anything here.
Since 2020-08-31, I am attempting to accurately flag the status of every project; these flags take precedence over any conflicting statements left on individual pages.
"Dormant" means the material may still be useful and I don't plan to do any more but would consider doing more if people ask. "On hold" means I would like to do more if the right conditions arise.
- Featured: Espalier (on hold; 2014-2018): A tool that truly integrates structured data into the spreadsheet paradigm to make it easier for non-experts to build a wide class of interactive applications.
- Featured: Elastic sheet-defined functions (on hold; 2017-2020): An enhancement to conventional spreadsheet tools (designed and formalized, but with no public prototype implementation yet) that makes it easier for non-experts to reuse computations on input arrays of different sizes.
This was my internship project at Microsoft in 2017 and 2018. The ideal solution would be a tool that integrates the features of Espalier and the conventional spreadsheet model, but that would take years of additional work and success is uncertain; this project is much closer to benefiting at least tens of thousands of users.
- Featured: Braid (active; 2016-present): A tool to mirror one Git repository into a subdirectory of another (merging with downstream changes) that is
more convenient than
Git submodules in many situations.
I got involved with Braid when I needed a tool like it for Espalier, and I'm continuing to develop and maintain Braid when I have time because I believe it addresses a fundamental problem in software development.
- 3C (TBD if worth continuing; 2020-2021): A tool that partially automates the conversion of C code to Checked C. 3C aims to provide the first feasible way for organizations with large legacy C codebases (that they don't want to drop everything to rewrite in a better language) to comprehensively verify their code's spatial memory safety. See also our paper. I contributed to 3C when I worked at Correct Computation.
- Escape puzzle game (intermittently active; 2019-2020): Projects related to the puzzle game Escape: an enhanced version of the app, a Klotski embedding and a Coq formalization.
- Maximum noise isolation for truly wireless earphones (maintained; 2016-present): How I modified the Nuheara IQbuds2 MAX and previous truly wireless earphone models for maximum noise isolation using Comply P-series foam tips and custom molds.
- SVAuth (obsolete?; 2016): A technique for runtime verification of security properties applied to web-based single sign-on.
This was my internship project at Microsoft in 2016.
While the technique is really interesting, I am unconvinced (and we were unable to convince peer reviewers) that it is the best solution for verifying single sign-on protocols.
- MigratingTable (obsolete?; 2015): A wrapper library for replicated servers using Azure Table storage that allows data to be migrated from one underlying table to another transparently to the server.
This was my internship project at Microsoft in 2015.
While the technique is again interesting, technology may have progressed so that this library is no longer needed before anyone got around to adopting it.
- My 4-player StepMania version (dormant, better options may exist; 2017): My fork of a fork of StepMania that supports 4 players, previously used for events at MIT.
- Dance pad (dormant; 2015): Information about the high-quality dance pad I use to enjoy the thrill of Dance Dance Revolution and clones.
- Competitive-ratio approximation schemes (dormant; 2014): Materials from a research / survey project on competitive ratio approximation schemes (theoretical computer science).
- Assigning papers to reviewers (dormant; 2008-2012): A tool to assign papers to reviewers based on preference and expertise scores using min-cost flow, used for POPL 2012.
- Confused-deputy attacks in shared web hosting (dormant; 2011): Other users can point the web server to your content in ways you don't expect.
- Cryptographic identity management (on hold; 2011): Remarks on authentication of services and individuals, and an obsolete DANE implementation.
- Streaming-model clustering (dormant; 2007-2008): Computer science research on the k-center clustering problem in the streaming model.
Currently just a paper is posted.
- My email solution (partly obsolete; 2007-2008): How I rigged Evolution to act as a Gmail replacement
that can send real mail from my other email accounts.
- Measurements for LibreOffice (minimally maintained; 2007-2009): An add-in that tracks units of measure and significant figures in OpenOffice / LibreOffice Calc.
- mgear, a make-based build tool (abandoned; 2007-2009): A build tool on top of GNU Make that provides several
additional features, most of them meant to improve the robustness of the
build process.
- Least-unpopularity matching criteria (dormant; 2006-2008): Information and documents from my computer science research on better optimality criteria
and algorithms for the assignment of people to positions based on one-sided preferences.
- SuperbChemistry for LibreOffice (maintained; 2007-2008, 2020): An extension for OpenOffice and LibreOffice that applies superscript and subscript formatting to chemical formulas in bulk in Writer documents.
- Utilities (intermittently active, parts obsolete; 2005-present): Assorted Linux-centric utilities for basic file management, RPM software management, web log analysis, and more.
- My "computing platform" (on hold, stale; 2005-2008): Ideas for an elegant "platform" that would help users
and developers get things done faster.
- Music (dormant, parts stale; 2005-2007): Some piano music I have composed or played.
- Logic Designer (unmaintained; 2005-2007): A program for AMS calculators (TI-89, etc.) that runs circuits of logic gates.
- My custom Linux kernel (obsolete; 2006-2007): A customized kernel in which sticky directories behave extra-specially.
- Javari (unmaintained, not tested recently; 2006): My contributions to the Javari project that provides checking and inference for a
"read only" type qualifier in Java.
- Cyclone with Inference Plugin (unmaintained, not tested recently; 2005-2006): An Eclipse plugin to make the fat pointer inference feature of the Cyclone programming language easier to use.
- Inversion animation (dormant; 2004): A MATLAB program that animates geometric inversion of the plane.
- Rsync materials (mostly obsolete; 2005-2010): My source repository, packages, information, etc. for rsync, the fast, versatile remote file-copying tool.
- Mathematical documents (dormant, stale; 2003-2007): Various mathematical documents, including "Connected Sets".
- The suidperl story (dormant, stale; 2005): A musing about security issues with user-mounted Linux filesystems.
- Mirror (dormant, better options likely exist; 2004-2005): A Java applet that presents Java programs through reflection.
- FishSimulator (minimally maintained; 2003): A Java applet that simulates fish swimming in a lake.
- C++ Big Integer Library (unmaintained; 2002-2010): An easy-to-use C++ library for calculations on big integers.
Life and hobbies
See my CV for a comprehensive list of activities, or my résumé for the qualifications most relevant to the work I'm looking to do in the near future.
General facts
- As is probably clear, I'm a geek in several areas, the main one being computing.
I want to make computing as easy as it conceptually can be,
in support of all the other things people need and want in life.
Here are the basics of my personal computing setup and information security.
- My hobbies aside from computing include
taking scenic trips by electric motorcycle or bicycle,
Dance Dance Revolution and clones (see my dance pad), contra dance, and piano.
I'm a fan of electric vehicles in general, though not a builder.
- I hope to grow personally and work toward fulfilling my broader responsibilities to society
through my participation in Unitarian Universalist and other groups.
Unfortunately, as I've faced personal challenges over the past few years,
I've prioritized my immediate well-being, career, and hobbies over my responsibilities to society.
I'm working toward promoting my values through my finances as well;
I have a lot still to figure out, but it's clear that
GiveWell will be a major component of my approach.
Major stages
- Since January 2022, I'm working as an applied scientist at Amazon.
- In September 2020 - December 2021, I worked as a software engineer at Correct Computation,
where I had the pleasure of working with my former mentor from the University of Maryland, Michael Hicks.
- In September 2014 - November 2018, I lived in Cambridge, MA and was a graduate student in computer science
at MIT.
My main project there was Espalier.
My email addresses at MIT were rmccutch(at)mit.edu and
rmccutch(at)csail.mit.edu [both may stop working at any time and should no longer be used].
- I attended First Parish in Cambridge for a while
and continue to participate remotely in its Young Adult Group.
- In September 2011 - August 2014, I lived in Mountain View, CA and
worked as a software engineer for Google.
I was a happy member of the Unitarian Universalist Church of Palo Alto.
- In 2007-2011, I completed my B.S. in computer science and math at the University of Maryland, College Park.
Email there: rmccutch(at)umd.edu [may stop working at any time and should no longer be used]
and in the computer science department, rmccutch(at)cs.umd.edu [no longer works].
- In 2003-2007, I was a student in the Montgomery Blair High School Science, Math, and Computer Science Magnet Program.
My email address there was rimccutc(at)mbhs.edu [no longer works].