Skip to content

Instantly share code, notes, and snippets.

View markmals's full-sized avatar

Mark Malstrom markmals

View GitHub Profile
@markmals
markmals / apps.md
Last active December 14, 2024 18:27
Lowest-friction way to create an app with great user experience and developer experience

A Vision for Creating Modern Apps

Introduction

Delivering an excellent user experience and a seamless developer experience is essential for creating high-quality modern applications. Leveraging a modern, flexible tech stack that minimizes friction for developers while maximizing performance and user satisfaction is key. The vision presented here focuses on practicality, simplicity, cohesion, and efficiency across various platforms, using technologies tailored to specific platforms and use cases across for the web, Apple platforms, Android, Windows, and games.

Static Websites

Stack

@markmals
markmals / ReferenceSet.swift
Last active November 12, 2024 16:46
Vanilla Reactive System
// A reference type Set
private final class ReferenceSet<Element: Hashable>: Hashable, Collection {
typealias Element = Element
typealias Iterator = Set<Element>.Iterator
typealias Index = Set<Element>.Index
typealias Indices = Set<Element>.Indices
typealias SubSequence = Set<Element>.SubSequence
private var inner = Set<Element>()
@markmals
markmals / effect-stream.ts
Created December 4, 2023 16:48
Create an async iterable stream of values from a Solid.js signal effect
import { createMemo, createEffect } from 'solid-js';
export async function* createEffectStream<T>(fn: () => T) {
let promises: Promise<T>[] = [];
let resolve: (value: T) => void;
promises.push(
new Promise(r => {
resolve = r;
}),
);
@markmals
markmals / observable.ts
Last active December 3, 2023 21:35
Simple implementation of the observer design pattern in TypeScript with Lit integration
interface Observer {
execute(): void;
dependencies: Set<Set<Observer>>;
}
let context: Observer[] = [];
interface Constructor<T> {
new (...args: any[]): T;
}
@markmals
markmals / signals.swift
Last active March 24, 2024 06:02
An implementation of Solid.js's signals API using Swift's @observable macro
import Foundation
import Observation
@Observable
final class Signal<T> {
var value: T
init(value: T) {
self.value = value
}
@markmals
markmals / fine-grained-observable.swift
Created September 25, 2023 20:02
Fine-grained @observable interactions vs coarse-grained decoding
// With Observable
@Observable
class Book {
var title: String
var author: String
var inStock: Bool
init(title: String, author: String, inStock: Bool) {
self.title = title
import { subject } from '@webstd/combine';
import type { Publisher } from '@webstd/combine';
import type { Identifiable } from '@webstd/types';
import { element, ReactiveElement, html, environment } from '@webstd/custom-elements';
import { Author } from './author.js'
class Book implements Identifiable {
id = crypto.randomUUID(); // A unique identifier that never changes.
title$ = subject('Sample Book Title');
import { Observable, ObservationIgnored, withObservationTracking } from '@webstd/observable';
import type { Identifiable } from '@webstd/types';
import { CustomElement, ReactiveElement, html, Environment, State } from '@webstd/custom-elements';
import { stream } from '@webstd/request';
import { Author } from './author.js'
@Observable
class Book implements Identifiable {
@ObservationIgnored id = crypto.randomUUID(); // A unique identifier that never changes.
@markmals
markmals / solid-for-uikit-v2.swift
Last active June 15, 2023 03:02
My ideal Swift Macro version of a Solid.js-like renderer for UIKit via Swift
import SwiftSignal
import FineGrainedViews
// Macro usage:
final class CounterViewController: UIViewController {
private let count = Signal(0)
override func viewDidLoad() {
super.viewDidLoad()
@markmals
markmals / preact-server-components.tsx
Last active April 23, 2023 00:39
A sketch idea of Preact Server Components with coarse-grained progressive hydration
import { useSignal } from "@preact/signals"
import { action$, island$, json, loader$ } from "preact-server-components"
import { useEffect } from "preact/hooks"
import { db } from "./db.server"
const Counter = island$(() => {
let count = useSignal(0)
// TODO: Resumable hydration
// We don't want to do this work on the server on initial load and then again on