PageSourceSearch

https://kennytilton.github.io/

html kennytilton.github.io collected 2026-10-03 09:27:11 UTC 8,043 bytes, 91 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US">
3  <head>
4    <meta charset="UTF-8">
5
6<!-- Begin Jekyll SEO tag v2.8.0 -->
7<title>Kenny Tilton on GitHub | Kenneth Tilton</title>
8<meta name="generator" content="Jekyll v3.10.0" />
9<meta property="og:title" content="Kenny Tilton on GitHub" />
10<meta property="og:locale" content="en_US" />
11<meta name="description" content="Currently just the home for live demos of JS and CLJS variants of sundry Matrix toy apps." />
12<meta property="og:description" content="Currently just the home for live demos of JS and CLJS variants of sundry Matrix toy apps." />
13<link rel="canonical" href="https://kennytilton.github.io/" />
14<meta property="og:url" content="https://kennytilton.github.io/" />
15<meta property="og:site_name" content="Kenneth Tilton" />
16<meta property="og:type" content="website" />
17<meta name="twitter:card" content="summary" />
18<meta property="twitter:title" content="Kenny Tilton on GitHub" />
19<script type="application/ld+json">
20{"@context":"https://schema.org","@type":"WebSite","description":"Currently just the home for live demos of JS and CLJS variants of sundry Matrix toy apps.","headline":"Kenny Tilton on GitHub","name":"Kenneth Tilton","url":"https://kennytilton.github.io/"}</script>
20
21<!-- End Jekyll SEO tag -->
22
23    <link rel="preconnect" href="https://fonts.gstatic.com">
24    <link rel="preload" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap" as="style" type="text/css" crossorigin>
25    <meta name="viewport" content="width=device-width, initial-scale=1">
26    <meta name="theme-color" content="#157878">
27    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
28    <link rel="stylesheet" href="/assets/css/style.css?v=d077497a03692bd0080d2dfc46ada4f14ce1d3f0">
29    <!-- start custom head snippets, customize with your own _includes/head-custom.html file -->
30
31<!-- Setup Google Analytics -->
32
33
34
35<!-- You can set your favicon here -->
36<!-- link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" -->
37
38<!-- end custom head snippets -->
39
40  </head>
41  <body>
42    <a id="skip-to-content" href="#content">Skip to the content.</a>
43
44    <header class="page-header" role="banner">
45      <h1 class="project-name">Kenny Tilton on GitHub</h1>
46      <h2 class="project-tagline">Currently just the home for live demos of JS and CLJS variants of sundry Matrix toy apps.</h2>
47      
48      
49    </header>
50
51    <main id="content" class="main-content" role="main">
52      <h1 id="kenny-tilton-on-github">Kenny Tilton on GitHub</h1>
53
54<p>Pardon the brevity, but I am just getting rolling with this page as an alternative to linking folks directly to <a href="https://github.com/kennytilton">my GitHub account</a>. Hmmm… how about an annotated <em>Table of Contents</em> for my repositories?</p>
55
56<h2 id="table-of-contents">Table of Contents</h2>
57<h3 id="new-a-hacker-news-who-is-hiring-browser">New! A Hacker News "Who is hiring?" Browser</h3>
58<p>Check it <a href="https://kennytilton.github.io/whoishiring/">out</a>! A sophisticated little search tool for the massive Hacker News monthly “Who is hiring?” question with hundreds of openings listed. Sophisticated but new with many features and refinements to go, but those will come only in response to issues raised <a href="https://github.com/kennytilton/matrix/tree/master/js/matrix">here</a>. <a href="https://github.com/kennytilton/kennytilton.github.io/blob/master/whoishiring/README.md">Discussion/documentation</a> will appear shortly.</p>
59<h3 id="new-the-flux-challenge">New! The Flux Challenge™</h3>
60<p>The Matrix takes on the <a href="https://github.com/kennytilton/flux-challenge/blob/master/submissions/kennytilton/README.md">Challenge</a>. In eighty-four SLOC.</p>
61<h3 id="dataflow-aka-reactive-aka-constraints">Dataflow (aka Reactive aka Constraints)</h3>
62<p>We stumbled onto this dataflow hack quite by accident, while working on a sticky UI layout problem back in 1996. A re-creation of that story is <a href="http://smuglispweeny.blogspot.com/2017/06/the-making-of-cells-case-study-in-dumb.html">here</a>.
63In brief, we ended up with a tree of objects where selected properties could be expressed as formulas over other properties of other objects, as if our application were a spreadsheet. It could not be rules all the way down, of course: some properties were assigned to by event handlers. Any property could have an application-supplied observer to reflect changes in the “sheet” back to the outside world, say by disabling a widget via the widget API.</p>
64
65<p>It was wonderful, a something-for-nothing silver bullet, and now we have ported it to JS and CLJS. (See below.)</p>
66
67<h4 id="original-cells--common-lisp">Original <a href="https://github.com/kennytilton/cells">Cells</a> – Common Lisp</h4>
68<p>The original implementation of Cells, my spreadsheet-like dataflow library first shared in 1996. This is the one served by <a href="https://www.quicklisp.org/beta/">quicklisp</a>.
69There is not much documentation other than the annotated tests, but one day in 2008 I dashed off a blog piece called <a href="http://smuglispweeny.blogspot.com/2008/02/cells-manifesto.html">The Cells Manifesto</a> that turned out to be fairly comprehensive, including motivation, prior art, and the key definition of what I called “data integrity”, a functional contract that pretty much just says “no <a href="https://en.wikipedia.org/wiki/Reactive_programming#Glitches">glitches</a>”.
70Cells has been applied to substantial, enterprise-level applications, including a <a href="http://smuglispweeny.blogspot.com/2008/03/my-biggest-lisp-project.html">clinical drug trial management system</a> and a Web-based <a href="http://tiltonsalgebra.com/#">algebra learnng system</a>. Each application is controlled in every respect by the Cells engine.</p>
71
72<h4 id="matrix--independent-cljs-and-js-versions-of-cells-dataflow"><a href="https://github.com/kennytilton/matrix">Matrix</a> – Independent CLJS and JS versions of Cells dataflow</h4>
73<h4 id="mxweb--independent-cljs-and-js-versions-of-a-matrix-based-web-unframework"><a href="https://github.com/kennytilton/tag">mxWeb</a> – Independent CLJS and JS versions of a Matrix-based web unframework</h4>
74<h4 id="mxxhr--independent-cljs-and-js-rsn-versions-of-callback-hell-solutions"><a href="https://github.com/kennytilton/xhr">mxXHR</a> – Independent CLJS and JS (RSN) versions of Callback Hell solutions</h4>
75<h4 id="micropipeline-illustrator"><a href="https://github.com/kennytilton/kennytilton.github.io/blob/master/micropipeline/readme.md">Micropipeline illustrator</a></h4>
76<p>
76A fun JS mxWeb playground of micropipelines as described in Ivan Sutheland’s Turing Award paper.</p>
77<h4 id="todomx--the-todomvc-classic-in-matrix"><a href="https://github.com/kennytilton/todomx">TodoMX</a> – The <code class="language-plaintext highlighter-rouge">TodoMVC Classic</code> in Matrix</h4>
78<p>Perhaps unwisely, my <em>TodoMX</em> repo contains two separate and complete implmentations of the <a href="https://github.com/tastejs/todomvc/blob/master/app-spec.mdhttps://github.com/tastejs/todomvc/blob/master/app-spec.md">TodoMVC</a> classic. One is <a href="https://github.com/kennytilton/todomx/tree/master/js/todomx">pure JS</a>, the other <a href="https://github.com/kennytilton/todomx/tree/master/cljs/todomx">ClojureScript(CLJS)</a> all the way down. Each is offered purely as a proof of concept, the concept being:</p>
79<blockquote>
80  <p>If one builds a Web framework atop a generic dataflow library supporting dynamic, transparent, “point” dependency tracking, and state change propagation, then declarative authoring and efficient DOM maintenance comes for free. More comprehensively and more efficiently, by the way, than with <a href="https://reactjs.org">ReactJS</a>.</p>
81</blockquote>
82
83
84
85      <footer class="site-footer">
86        
87        <span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a>.</span>
88      </footer>
89    </main>
90  </body>
91</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.