-
InfiniSheet
InfiniSheet Blob Store
We left our scalable cloud spreadsheet project in a good place. We used tracer bullet development and after a few iterations got an end to end simulation running against a reference implementation of an event log.
-
Front End
Unit Test Code Reuse with Vitest
I’m a strong believer in unit tests. I try to get close to 100% code coverage with my tests. Which means I have a lot of unit test code. Normally, you try to minimize duplication, and Don’t Repeat Yourself. That has it’s own special challenges when it comes to unit tests.
-
React Spreadsheet
React Spreadsheet: Optimistic Update
I recently made my spreadsheet data interface more explicitly asynchronous. I naively updated
VirtualSpreadsheet
to use the newly asynchronoussetCellValueAndFormat
API. After discovering that the user experience was horrible if there was any latency, I did a deep dive into best practice for handling asynchronous updates in React. -
Front End
Asynchronous React
Last time, I naively updated my spreadsheet frontend component to use an asynchronous update API. Everything looked like it was working, until I added some latency to the API’s response. The resulting user experience was terrible.
-
Event Sourced
React Spreadsheet
Asynchronous Spreadsheet Data
Last week’s tracer bullet development showed that I needed to make my
SpreadsheetData
interface more explicitly asynchronous. -
InfiniSheet
Event Sourced
React Spreadsheet
Event Sourced Spreadsheet Data
I’ve been working on my scalable spreadsheet project from opposite ends. So far, most of my focus has been on the front end. I’ve created a virtualized React spreadsheet component that can scale to trillions of rows and columns. The component accesses spreadsheet data via a SpreadsheetData interface based on React’s external store interface.
-
InfiniSheet
Asynchronous Event Log
I’ve created an event log interface and reference implementation. The interface exposes all the functionality I’ll need with a minimal API. There’s enough of an abstraction layer that it should allow for multiple real implementations.
-
TypeScript
Asynchronous TypeScript
One of my reasons for choosing TypeScript as a language stack is that it’s built on an asynchronous IO, event-driven programming model, from the ground up. On the server side, idiomatic NodeJS code scales surprisingly well for a dynamic, low ceremony, fast development stack.
-
InfiniSheet
InfiniSheet Event Log
So far, my scalable spreadsheet implementation has concentrated entirely on the frontend. Time to start looking at the backend, starting with the persistence model.
-
React Spreadsheet
React Spreadsheet: Error Handling
Last time, we integrated NeverThrow into InfiniSheet to add
Result<T,E>
types for Rust style error handling.