Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

components:
schemas:
Action:
properties:
action:
type: string
data: {}
href:
type: string
id:
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@kasbah
kasbah / easy_skidl.ipynb
Created October 17, 2017 18:19
Experiment of combining Electro Grammar with SKiDL
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
--- before.svg 2016-12-31 18:30:54.448500524 +0000
+++ after.svg 2016-12-31 18:51:15.784457325 +0000
@@ -371,7 +371,7 @@
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="3445" y="1270"/>
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="3445" y="2370"/>
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="1445" y="2970"/>
- <path d="M 1585 2984 1585 2956 M 1685 2956 1685 2984 M 1785 2984 1785 2956 M 1885 2956 1885 2984 M 1985 2984 1985 2956 M 2085 2956 2085 2984 M 2185 2984 2185 2956 M 2285 2956 2285 2984 M 2385 2984 2385 2956 M 2485 2956 2485 2984 M 2645 2984 2645 2956 M 2745 2956 2745 2984 M 2845 2984 2845 2956 M 2945 2956 2945 2984 M 3045 2984 3045 2956 M 3145 2956 3145 2984 M 3245 2984 3245 2956 M 3345 2956 3345 2984 M 3320 1779 3320 1751 M 3220 1751 3220 1779 M 3120 1779 3120 1751 M 3020 1751 3020 1779 M 2920 1779 2920 1751 M 2820 1751 2820 1779 M 2720 1779 2720 1751 M 2620 1751 2620 1779 M 2520 1779 2520 1751 M 2420 1751 2420 1779 M 2320 1779 2320 1751 M 2220 1751 2220 1779 M 2120 1779 2120 1751 M 2020 175
--- before.svg 2016-12-31 18:12:20.648539920 +0000
+++ after.svg 2016-12-31 18:12:27.276539685 +0000
@@ -371,7 +371,7 @@
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="3445" y="1270"/>
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="3445" y="2370"/>
<use xlink:href="#Bk4eIZtfQHx_pad-10" x="1445" y="2970"/>
- <path d="M 1585 2984 1585 2956 M 1685 2956 1685 2984 M 1785 2984 1785 2956 M 1885 2956 1885 2984 M 1985 2984 1985 2956 M 2085 2956 2085 2984 M 2185 2984 2185 2956 M 2285 2956 2285 2984 M 2385 2984 2385 2956 M 2485 2956 2485 2984 M 2645 2984 2645 2956 M 2745 2956 2745 2984 M 2845 2984 2845 2956 M 2945 2956 2945 2984 M 3045 2984 3045 2956 M 3145 2956 3145 2984 M 3245 2984 3245 2956 M 3345 2956 3345 2984 M 3320 1779 3320 1751 M 3220 1751 3220 1779 M 3120 1779 3120 1751 M 3020 1751 3020 1779 M 2920 1779 2920 1751 M 2820 1751 2820 1779 M 2720 1779 2720 1751 M 2620 1751 2620 1779 M 2520 1779 2520 1751 M 2420 1751 2420 1779 M 2320 1779 2320 1751 M 2220 1751 2220 1779 M 2120 1779 2120 1751 M 2020 175

Footwork is an experimental KiCAD footprint (text) editor written in Racket. Footwork takes advantage of Lisp's code-data equivalence to offer a unique approach to PCB design: KiCAD's footprint format becomes a domain specific language embedded in the Racket programming language.

  • The interface is text-first allowing users to make arbitrary edits: their needs need not be anticipated by the user interface
  • Users still immediately see the effects of their edits through a graphical preview
  • Users can use a fully featured general purpose programming languages to generate and modify footprints
  • Traditional (mouse based) manipulation is being added as calls to scripting
  • Racket's Rosette language, an interface to SMT solvers, offers the exciting opportunity to make use of cutting edge techniques in programming synthesis for design automation

https://github.com/monostable/footwork

#lang typed/racket/gui
(require/typed
racket/sandbox
[make-evaluator
(->*
(Symbol)
(#:requires (List String))
(-> String Any))])
require: unknown module
module name: #<resolved-module-path:'#%builtin>
context...:
/usr/share/racket/collects/racket/private/pre-base.rkt: [traversing imports]
/usr/share/racket/collects/racket/private/base.rkt: [traversing imports]
/usr/share/racket/collects/syntax/module-reader.rkt: [traversing imports]
(submod /usr/share/racket/collects/racket/main.rkt reader): [traversing imports
#lang racket/gui
(define mv (new frame% [label "gui"]))
(define buffer (new canvas% [parent mv]))
(send mv create-status-line)
(send mv show #t)