Skip to content

Instantly share code, notes, and snippets.

if (error.url === "") {
var emptyURLTypes = ["setBackdropURL('')", 'setBackdropURL("")', 'url: ""', "url: ''"]
var emptyURLType = emptyURLTypes.find(t => code.includes(t))
if (emptyURLType) {
app.error = {message: "You forgot to include an image or background URL.", lineno: code.substring(0, code.indexOf(emptyURLType)).split('\n').length}
} else {
// We can't figure out the lineno if it's set to an empty string variable
// https://woofjs.com/create#image-url-issue
app.error = {message: "You forgot to include an image or background URL.", lineno: null}
}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Required Reading

  • Papert: Mindstorms and maybe Children's Machine (maybe others of his)
  • Kay: Hasn't happened yet, TODO find others, maybe STEPS, early history of smalltalk
  • BV: magic ink, learnable programming, all the videos, really
  • Granger: modeling, some videos, etc
  • mother of all demos
  • as we may think
@stevekrouse
stevekrouse / dctp-2.md
Last active March 14, 2019 13:26
dctp-2
title
The Misunderstood Roots of FRP Can Save Programming
  • TOC {:toc}

The Misunderstood Roots of FRP Can Save Programming

For many years I been searching for the perfect paradigm for programming user interfaces. Like many others, I fell in love with FRP with the rise of ReactJS and spent a few years searching for the perfect reactive model. Eventually, I found my way back to the original work on FRP by Conal Elliott. It took me almost a year to make sense of it. This essay attempts to make Conal's vision more understandable to less mathematically-oriented programmers, and also show how this perspective could be the foundation for a new era of programming, not just with user interfaces, but also multi-node computing, storage, machine learning, etc.

@stevekrouse
stevekrouse / dctp-2-JE.md
Last active March 14, 2019 13:26
dctp-2
title
The Misunderstood Roots of FRP Can Save Programming
  • TOC {:toc}

The Misunderstood Roots of FRP Can Save Programming

For many years I been searching for the perfect paradigm for programming user interfaces. Like many others, I fell in love with FRP with the rise of ReactJS and spent a few years searching for the perfect reactive model. Eventually, I found my way back to the original work on FRP by Conal Elliott. It took me almost a year to make sense of it. This essay attempts to make Conal's vision more understandable to less mathematically-oriented programmers, and also show how this perspective could be the foundation for a new era of programming, not just with user interfaces, but also multi-node computing, storage, machine learning, etc.

@stevekrouse
stevekrouse / dctp-draft-2.md
Last active February 24, 2019 13:36
dctp-draft-2

DCTP 2

Dikstra's 1968 Goto Considered Harmful argues that we can produce better code by replacing goto with structured commands, such as functions, if-statements, and loops. In this tradition, the functional programming community has continued to demonstrate how we can produce better programs without various side-effects, sometimes with the introduction of new language features. For example, many forms of mutable state can be expressed with recursion.

Of course these effects aren't truly eliminated but merely shifted down the technological stack. The compiler for a language with recursion will likely utilize mutable state for an efficient implementation. The benefits of pure languages are also their costs: being cut off from operational details let us focus on essential complexity, but at the same time inhibit us improving the performance of our programs. Hopefully these costs will continue to decrease over time due to faster and bigger chips, and advanced compilation techniques. Modern compilers fo

@stevekrouse
stevekrouse / kartik-reply.md
Created February 6, 2019 18:30
kartik reply

@stevekrouse I think it's worth thinking through the implications of only wanting to democratize high-level programs. Since we don't really have a good way to build hardware that can execute recursively nested expressions, the lowest level will always execute statements that are connected by named locations. So by saying you don't want people to have to think about statements, you're asking for the lowest levels to just be "handled" for you. That's basically just the same priesthood arrangement we're trying to get away from, and we end up with the same questions about who watches the watchers, and so on.

-Kartik Agram on the Future of Coding Slack

This is a very interesting point: if we truly want to democratize programming, it needs to be democratic and every level, all the way down to the bits. Otherwise, it's just another limited app won't support extensibility in all the ways we'd

@stevekrouse
stevekrouse / main.html
Last active November 23, 2018 14:48
BlinkNote New Tab Chrome Extension - fastest way to take a note that'll stick around
<html>
<head>
</head>
<body>
<h1 id="error" style="display:none; color: red">Too many characters to save. Please delete some.</h1>
<div id="c" contenteditable style="min-height:300px;outline:none;"></div>
</body>
<script src="main.js"></script>
</html>
module Main exposing (main)
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
type alias Model =
{ count : Int }