Skip to content
Rex St. John

Get in touch

Solutions

What I have built, and the problem each one solves. Each entry sets out the problem, the solution, the analysis behind it and the result, with links to the running app and its source where there are any.

Research

Experiments in running virtual machines on transformer weights.

  • SVMLLM logo

    demolive

    SVMLLM

    A Solana VM compiled into transformer weights. Reduced sBPF runs in hand-constructed transformer components with 1.13M constant parameters and no training, checked against Anza's solana-sbpf.

    • PyTorch
    • Python
    • Rust
    • JavaScript
    Problem, Solution, Analysis, Result
    Problem

    Some smart-contract incidents involve code that ran exactly as written, with an outcome a sensible human operator would have stopped. Many others are ordinary bugs or key compromises; this project targets only the first kind. The VM answers whether a transaction is valid by the code, and nothing in it asks whether it should go through.

    Solution

    SVMLLM runs reduced sBPF, the bytecode of Solana programs, inside hand-constructed transformer components. A one-hot PC query fetches from DeltaNet program memory, a linear layer decodes, ReLU lookup-table feed-forward blocks are the ALU, and Gated DeltaNet state holds registers and memory exactly. A rule-based judgement filter then reviews the result for allow, hold or block.

    Analysis

    The weights do the execution; a Python driver loop calls the step until the halt flag is set. The instruction set is reduced: no ALU32, no syscalls (call is a stub), no accounts, no CPI, and memory is two 128-byte windows. It is slow, a few milliseconds per instruction on one CPU thread, and more for div or mod. The judge is illustrative heuristics on synthetic histories, not a security product.

    Result

    The weights machine matched the reference interpreter on all 1,165 cases, and the reference matched Anza's solana-sbpf 0.12.2 on the 1,164 cases it can run (one case uses the call stub). The browser interpreter matches the reference on 565 of 565 cases.

    The realistic use today is a sidecar beside the chain software, an off-chain audit, or a review step in front of a wallet or multisig. It affects only that operator, not consensus. It is a demo, not a validator.

  • EVMLLM logo

    demolive

    EVMLLM

    An Ethereum VM executed by transformer weights. A C EVM compiled to RV32IM runs on Qwenputer's compiled RISC-V CPU, with exact results and exact gas and no training.

    • C
    • RV32IM
    • PyTorch
    • Python
    • JavaScript
    Problem, Solution, Analysis, Result
    Problem

    Some smart-contract incidents involve code that ran exactly as written, with an outcome a sensible human operator would have stopped. Many others are ordinary bugs or key compromises; this project targets only the first kind. A VM can tell you a transaction is valid by the code. It cannot tell you whether anyone sensible would let it through.

    Solution

    I wrote an EVM interpreter in C, compiled it to RV32IM and ran it as firmware on Qwenputer, a RISC-V CPU whose every weight was set by a compiler. The EVM is not hand-weighted; the CPU it runs on is compiled transformer layers. Ten Solidity contracts (solc 0.8.24) run on it, and a small rule-based judgement filter reviews each result for allow, hold or block.

    Analysis

    Two things are easy to blur, so I keep them apart. The weights execute the CPU. A small Python driver feeds tokens and loops, as in Qwenputer. All runs so far use Qwenputer's compiled chip layers on CPU, not the full 18.8 GB merged Qwen checkpoint, which needs a 24 GB GPU.

    The cost is speed. A whole demo run costs 87 to 194 tokens per executed EVM opcode, runs are 16,370 to 605,944 tokens, and the batched CPU runs averaged under 200 tokens per second. The opcode set is reduced: no KECCAK256, so no Solidity mappings, and no CALL, CREATE or LOG. The judge is illustrative heuristics on synthetic histories, not a security product.

    Result

    Every number on the page comes from the results files in the repo. All 23 demo runs match py-evm on outcome and gas, 2,000 random programs match, and 12 runs covering all ten contracts reproduced the reference trace token for token on the weights.

    The realistic place for this today is a sidecar next to the chain software, an off-chain audit, or a review step in front of a wallet. It affects only the operator who runs it, not consensus. It is a demo, not a node replacement.

Built for clients

Mobile and web products shipped for clients including Verizon, Trane, ESPN, Citibank, Urbanspoon, Microsoft and Volkswagen.

  • Verizon with Cynergy

    Verizon Ignite

    A cross-platform sales performance app for Verizon's floor staff, your numbers against your peers', on whatever handset you were carrying.

    • Cordova
    • HTML5
    • JavaScript
    • Native iOS
    • Native Android
    Problem, Solution, Analysis, Result
    Problem

    The app had to run on whatever Verizon's floor salespeople were carrying, any phone, any tablet, across two platforms and a long tail of handsets, and it had to work with Verizon's own security applications and backend.

    Those salespeople, thousands of them, had no way to see how they were doing until someone told them. Performance against target, and against the person at the next counter, lived in reports that arrived too late to change anything.

    Solution

    What shipped was a Cordova application with a shared HTML5 core inside native iOS and Android shells: one codebase for every handset, including the ones nobody would have written a native app for.

    I built several of the application views and the native iOS and Android plug-in components underneath them, the pieces integrating with Verizon's security applications and backend, which a shared HTML5 core cannot do for you.

    The screens are built around comparison rather than reporting: your scorecard against target, and a leaderboard putting you next to your peers by name.

    Analysis

    Cross-platform earned its place here and I would argue against it on plenty of other products. It pays off when the surface is mostly data display across a fragmented device fleet, and it costs you badly when the product has to feel native. Verizon's fleet decided it.

    The leaderboard is what we argued about internally. Ranking salespeople by name against the colleague at the next counter has real effects on a floor, some of them unpleasant, and it is also why anyone opened the app a second time.

    Result

    It went out to the whole floor sales organization. Every Verizon floor salesperson used it to track and compare performance.

  • Trane with Cynergy

    Trane MAP

    An iPad tool for Trane's field HVAC technicians: document the house, diagnose the problem, and size the system correctly, in front of the customer.

    • Native iOS
    • Objective-C
    • CoreData
    • MapKit
    • JSON
    Problem, Solution, Analysis, Result
    Problem

    A Trane technician sells a complex HVAC system standing in somebody's basement, in front of the customer, often with no signal. Ingersoll-Rand and Trane had thousands of them, every house was different, and sizing a system wrong is expensive in both directions: undersized and it never keeps up, oversized and the customer paid for capacity they will never use.

    The diagnosis was happening on paper, against a catalog.

    Solution

    What shipped was a native iPad tool for the technician in the house: document the property, work through the diagnosis, and produce a correctly sized prescription with the customer watching it happen.

    Built on CoreData, so the whole thing worked in a basement with no signal and reconciled later.

    Analysis

    Everything was designed around offline from the first day. A sales tool that needs connectivity fails in the exact room it gets opened in, which is the basement of somebody's house.

    Going native was right here for the same reason Cordova was right at Verizon. This one is a long structured interview carrying a lot of state. That one was a data display.

    Result

    It shipped and was used across Trane's field organization, and changed how a complicated technical sale got made in person.

  • ESPN with ESPN

    ESPN STARS

    A native Android app serving region-specific sports news to the Eastern Pacific, Indonesia included, built for the handsets and bandwidth people there actually had.

    • Android SDK
    • Mustache
    • JSON
    • Git
    Problem, Solution, Analysis, Result
    Problem

    ESPN needed to serve sports news to fans in Singapore and Indonesia, on the handsets and bandwidth people there had, which were different from the US devices its existing products were built around.

    The project had also lost its mobile developer partway through, which is how I came to it.

    Solution

    What shipped was a custom native Android application for regional news, taken from an unshippable state to deployment, with the content templated in Mustache so the feed could change shape without a release.

    Analysis

    Inheriting a half-finished Android project means postponing every feature conversation. I got the build back into a shippable state first, then cleared what the client had already found wrong with it, and only then talked about what it should do next.

    Templating the content made the rest survivable. Hard-coding each content type means a new binary every time editorial wants a different layout, and editorial always wants a different layout.

    Result

    Taken from an unshippable state to deployment, serving sports data across a wide range of news topics for Singapore and Indonesia.

  • Citibank with Eight Inc, through Substantial

    Citibank TouchWall

    The second version of Citibank's in-branch media wall, rebuilt from a hundred pages of Eight Inc specification in a thirty day window and deployed to Tokyo, New York and Singapore.

    • Flex 3
    • ActionScript 3
    • JavaScript
    • JSON
    Problem, Solution, Analysis, Result
    Problem

    Citibank needed the second version of its in-branch media wall in branches in Tokyo, New York and Singapore, built from a hundred pages of Eight Inc interactive design inside a thirty day window, on a new form factor at resolutions up to sixteen feet square. The first-generation wall, part of Eight Inc's plan to do for retail banking roughly what the Apple Store had done for consumer electronics, had aged badly and needed a rebuild rather than a patch.

    Solution

    What shipped was the second version of the wall. As lead Flex developer I distilled the hundred-page design into a task list against the existing wall and implemented it, with nightly builds going out for client review.

    Analysis

    Wall-sized touch surfaces break the assumptions you bring from desktop and phone. How far someone can reach, how long they will stand there, and who else can read the screen over their shoulder all turn into design constraints. In a bank, the last one most of all.

    Triage decided this one. A hundred pages against a thirty day window guarantees that some of the specification cannot ship, so I cut the impossible features down to deliverable ones in week one and told the client which. Finding that out in the final week is how these projects fail.

    Result

    Released 28 March 2011 and deployed to branches in Tokyo, New York and Singapore, with dozens of new features over the version it replaced.

  • Urbanspoon with IAC

    Urbanspoon for iPhone

    A full redesign of Urbanspoon's iPhone app, against a field of newer competitors with cleaner experiences.

    • Objective-C
    • UIKit
    • MapKit
    • Storyboards
    • XCTest
    Problem, Solution, Analysis, Result
    Problem

    Urbanspoon had defined the category and then been overtaken in it. A wave of competitors had arrived with cleaner, faster experiences, and the original app was being judged against them rather than against its own previous version.

    Solution

    A full redesign of the phone experience on the then-current iOS technologies, built around photography and the one-tap vote that fed Urbanspoon's data back into itself.

    Analysis

    Rebuilding a product that already has millions of users is a different job from building one. Every habit in the old app is somebody's muscle memory, and the vote in particular could not move, it is both the feature people came for and the mechanism the entire dataset depends on.

    Result

    A substantially modernized iPhone experience shipped on current iOS technologies.

  • Urbanspoon with IAC

    Urbanspoon for iPad

    Urbanspoon's iPad app was averaging one star. Rebuilt as a universal binary alongside the iPhone app rather than maintained as a separate product.

    • Objective-C
    • UIKit
    • MapKit
    • Storyboards
    • XCTest
    Problem, Solution, Analysis, Result
    Problem

    The iPad app had been on the market for years and was averaging a one star rating. That is not a polish problem. It is a product that people open once, fail to use, and rate on the way out.

    Solution

    Rebuilt as a universal binary with the iPhone app rather than carried on as a separate codebase, using the then-current iOS capabilities to show what the tablet experience should have been.

    Analysis

    I keep the one star on this page because nobody puts that number in a portfolio and it explains the decision that followed. Two separate codebases is how the iPad app earned that rating in the first place: for years it was everybody's second priority. Merging it into one universal binary mattered more than anything I did to the visual design.

    Result

    A substantially improved tablet experience, sharing a codebase with the phone app so it could not drift again.

  • Independent

    FoodFlip

    A ground-up rethink of local food search for iOS 7, photography first, chrome stripped out, built and launched in five weeks.

    • Objective-C
    • UIKit
    • MapKit
    • Foursquare API
    • Storyboards
    • XCTest
    Problem, Solution, Analysis, Result
    Problem

    A year inside local food search had made one thing obvious: almost nothing on the market had absorbed what iOS 7 proposed. Apps were still spending screen on chrome (bars, borders, controls) in a category where the only thing anyone wants to look at is the food.

    Solution

    A new app built on the opposite assumption. Photography edge to edge, interface elements removed rather than restyled, and search results arriving immediately rather than after a form.

    Universal binary from the start, so iPhone and iPad were one product.

    Analysis

    Five weeks and three people only worked because the thesis was narrow. One idea, let the content have the whole screen, and anything that did not serve it never got built.

    That also made the product cheap to be wrong about. We shipped a beta as a market test and learned more in a fortnight than another quarter of internal debate would have produced.

    Result

    Shipped to beta as a minimum viable product, iPhone and iPad from one universal binary.

  • Microsoft with 343 Industries

    Halo Waypoint

    The cross-platform companion app for the Halo community. My contribution was the responsive CSS work that made it hold together across phone and tablet form factors.

    • HTML5
    • JavaScript
    • Responsive CSS
    • ASP MVC 4
    • PhoneGap
    • Cordova
    Problem, Solution, Analysis
    Problem

    343 Industries needed one companion app to serve the Halo community across every phone and tablet form factor, and a cross-platform build that works on the two devices in the office is not the same thing as one that works on the fleet.

    Solution

    I worked on the tablet UX development and formatting for iPad and mobile handsets, implementing functionality and handling the resolution changes that decide whether one build covers a real fleet or merely the devices on the team's desks.

    Analysis

    I contributed to a twelve-person build rather than owning a product, and my part of it was narrow: cross-platform layout stabilization on somebody else's architecture.

    On a Cordova project that work is unglamorous and load-bearing in equal measure. Each form factor you fail to cover comes back as a one star review from someone with no interest in why it broke.

  • TBC with TBC

    TBC

    Porting a Flex 4 point of sale system to phones and tablets for a Florida tire chain with more than 20 locations, so sales could be transacted out on the floor.

    • Flex 4
    • AIR for Devices
    • iOS
    • Android
    • ANT
    Problem, Solution, Analysis
    Problem

    TBC runs more than twenty tire locations in Florida. We had built them a point of sale system in Flex 4, and the transactions it handled were happening away from the terminal it ran on, out on the floor, next to the car.

    Solution

    I ported the existing Flex 4 codebase to iPad and iPhone using AIR for Devices, restyling and reworking the desktop application's behavior so it held up on every handset form factor rather than rebuilding it, which is what two months buys.

    Analysis

    I ported rather than rebuilt because the business logic in a repair ticket is years of accumulated edge cases, every one of them put there by something that went wrong once. A rewrite throws all of that away to improve an interface no customer will ever see. On a product facing the public I would have argued the other way.

  • Big Champagne

    Big Champagne

    Rebuilding the analytics dashboard for a music-data startup measuring what people were listening to.

    • Flex 3
    • AS3
    • Ruby on Rails
    • MySQL
    • Memcached
    • JavaScript
    Problem, Solution, Analysis
    Problem

    Big Champagne aggregated online music listening data from dozens of industry sources at a time when the industry's own numbers still came from sales. The data was the product, the dashboard was how major label customers got at it, and the dashboard was what competitors were being judged against.

    Solution

    I came onto a build the client had already reviewed and rejected a long defect list on, cleared it against a short deadline, then rebuilt the dashboard's charts to a new visual specification, adding features and improving performance, with supporting work on the Rails and JavaScript layers underneath.

    Analysis

    Analytics interfaces live or die on how fast someone gets from a question to a number. Dashboards accumulate clutter faster than any other kind of product, because every stakeholder in the building wants their own metric on the front page and each one sounds reasonable in isolation.

    Arriving onto a build the client has already rejected takes its own discipline. I cleared the defect list before raising anything else, including the things I thought were wrong with the architecture.

  • Volkswagen with Volkswagen

    Volkswagen MBO

    Extending the dashboard Volkswagen uses to allocate specifically configured cars across its national dealer network.

    • Flex 4
    Problem, Solution, Analysis
    Problem

    Volkswagen allocates specifically configured cars to a nationwide dealer network through an internal tool, and the set of configurable variables had outgrown the dashboard that managed them.

    Solution

    Extended the MBO dashboard to cover the new vehicle capabilities and variables.

    Analysis

    On an internal tool that specialists drive all day, the instinct to simplify works against you. These people operate the dashboard rather than visiting it, they want everything on screen at once, and every control hidden in the name of a cleaner layout adds a step to their day.