| Andrew Cooke | Contents | Latest | RSS | Twitter | Previous | Next

C[omp]ute

Welcome to my blog, which was once a mailing list of the same name and is still generated by mail. Please reply via the "comment" links.

Always interested in offers/projects/new ideas. Eclectic experience in fields like: numerical computing; Python web; Java enterprise; functional languages; GPGPU; SQL databases; etc. Based in Santiago, Chile; telecommute worldwide. CV; email.

Personal Projects

Lepl parser for Python.

Colorless Green.

Photography around Santiago.

SVG experiment.

Professional Portfolio

Calibration of seismometers.

Data access via web services.

Cache rewrite.

Extending OpenSSH.

C-ORM: docs, API.

Last 100 entries

Calling C From Fortran 95; Bjork DJ Set; Z3 Example With Python; Week 1; Useful Guide To Starting With IJulia; UK Election + Media; Review: Reinventing Organizations; Inline Assembly With Julia / LLVM; Against the definition of types; Dumb Crypto Paper; The Search For Quasi-Periodicity...; Is There An Alternative To Processing?; CARDIAC (CARDboard Illustrative Aid to Computation); The Bolivian Case Against Chile At The Hague; Clear, Cogent Economic Arguments For Immigration; A Program To Say If I Am Working; Decent Cards For Ill People; New Photo; Luksic And Barrick Gold; President Bachelet's Speech; Baltimore Primer; libxml2 Parsing Stream; configure.ac Recipe For Library Path; The Davalos Affair For Idiots; Not The Onion: Google Fireside Chat w Kissinger; Bicycle Wheels, Inertia, and Energy; Another Tax Fraud; Google's Borg; A Verion That Redirects To Local HTTP Server; Spanish Accents For Idiots; Aluminium Cans; Advice on Spray Painting; Female View of Online Chat From a Male; UX Reading List; S4 Subgroups - Geometric Interpretation; Fucking Email; The SQM Affair For Idiots; Using Kolmogorov Complexity; Oblique Strategies in bash; Curses Tools; Markov Chain Monte Carlo Without all the Bullshit; Email Para Matias Godoy Mercado; The Penta Affair For Idiots; Example Code To Create numpy Array in C; Good Article on Bias in Graphic Design (NYTimes); Do You Backup github?; Data Mining Books; SimpleDateFormat should be synchronized; British Words; Chinese Govt Intercepts External Web To DDOS github; Numbering Permutations; Teenage Engineering - Low Price Synths; GCHQ Can Do Whatever It Wants; Dublinesque; A Cryptographic SAT Solver; Security Challenges; Word Lists for Crosswords; 3D Printing and Speaker Design; Searchable Snowden Archive; XCode Backdoored; Derived Apps Have Malware (CIA); Rowhammer - Hacking Software Via Hardware (DRAM) Bugs; Immutable SQL Database (Kinda); Tor GPS Tracker; That PyCon Dongle Mess...; ASCII Fluid Dynamics; Brandalism; Table of Shifter, Cassette and Derailleur Compatability; Lenovo Demonstrates How Bad HTTPS Is; Telegraph Owned by HSBC; Smaptop - Sunrise (Music); Equation Group (NSA); UK Torture in NI; And - A Natural Extension To Regexps; This Is The Future Of Religion; The Shazam (Music Matching) Algorithm; Tributes To Lesbian Community From AIDS Survivors; Nice Rust Summary; List of Good Fiction Books; Constructing JSON From Postgres (Part 2); Constructing JSON From Postgres (Part 1); Postgres in Docker; Why Poor Places Are More Diverse; Smart Writing on Graceland; Satire in France; Free Speech in France; MTB Cornering - Where Should We Point Our Thrusters?; Secure Secure Shell; Java Generics over Primitives; 2014 (Charlie Brooker); How I am 7; Neural Nets Applied to Go; Programming, Business, Social Contracts; Distributed Systems for Fun and Profit; XML and Scheme; Internet Radio Stations (Curated List); Solid Data About Placebos; Half of Americans Think Climate Change Is a Sign of the Apocalypse; Saturday Surf Sessions With Juvenile Delinquents; Ssh, tty, stdout and stderr; Feathers falling in a vacuum; Santiago 30m Bike Route

© 2006-2015 Andrew Cooke (site) / post authors (content).

Initial Scheme code for Napito

From: "andrew cooke" <andrew@...>

Date: Mon, 13 Aug 2007 21:04:14 -0400 (CLT)

Wrote this over the weekend, with help from people on various mailing
lists and #scheme.  Finally got it running just now.  It shows the basic
structure, but the code is still a mess - I need to write functions
(possibly macros) to help simplify things.

There seems to be more emphasis on higher order functions than I believe
normal in Scheme, but really I don't have much of a clue (someone on
#scheme didn't seem to follow it, but I probably didn't explain it well,
and they may have been a student).

":";exec snow -- "$0" "$@"

(package* napito/v1.0.0

  (provide:
   (define (nap-line x1 y1 x2 y2))
   (define (nap-generate engine drawing)))

  (author: "Andrew Cooke <andrew at acooke.org>")
  (homepage: "http://www.acooke.org")
  (description: "Napito drawing description language")
  (keywords: graphics)
  (license: gpl/v3.0)

  (require: napito-base/v1)
  (require: napito-test/v1))

; napito is separated into a user api (this file), some common support
; code (napito-base), and various engines.  the engines all implement
; (extend) the same "engine api".

; the user api is used to describe a drawing.  the api looks like a
; program but, when evaluated, constructs a function that takes and
; returns an engine.

; in other words, a drawing has the type engine -> engine.

; this interface is ubiquitous, since drawings can be nested (for
; example, a single line is a drawing).

; when an engine is passed to a drawing the internal api is invoked to
; generate the image on the engine's output device (eg. by creating a
; postscript file).

; for simple actions the engine api is similar to the user api.  for
; example, the user api to draw a line is the function (nap-line x1 y1
; x2 y2).  the engine api is (engine 'line (list x1 y1 x2 y2)).

; the job of the user api is to hide the engine api (which is generic
; with late binding) behind something that looks nice and simple.

; there are two advantages to this approach:

; first, late binding allows different engines to be used with the
; same drawing.

; second, the handling of the context (for example, the current
; coordinate transformation) is made implicit to the user, without
; losing referential transparency in the implementation.

(define (nap-line x1 y1 x2 y2)
  (lambda (engine)
    (engine 'line (list x1 y1 x2 y2))))

(define (nap-generate engine drawing)
  (drawing engine))

(test*
 (expect* (equal? (let ((engine (nap-engine (nap-default-transform))))
                    ((nap-generate engine (nap-line 0 0 1 1)) 'results '()))
                  '((line 0 0 1 1)))))

(write
 (let ((engine (nap-engine (nap-default-transform))))
   ((nap-generate engine (nap-line 0 0 1 1)) 'results '())))


":";exec snow -- "$0" "$@"

(package* napito-test/v1.0.0

  (provide:
      (define (nap-engine initial-transform)))

  (author: "Andrew Cooke <andrew at acooke.org>")
  (homepage: "http://www.acooke.org")
  (description: "Napito drawing description language - test engine")
  (keywords: graphics)
  (license: gpl/v3.0)

  (require: napito-base/v1))

(define (nap-engine initial-transform)
  (let ((state (make-state '() initial-transform)))
    (new-engine state)))

(define (new-engine state)
  (lambda (action args)
    (case action
      ((line) (new-engine (line state args)))
      ((scale) (new-engine (scale state args)))
      ((results) (get-results state)) ; specific to this engine
      (else (error "unsupported action" action)))))

(define (get-results state)
  (car state))

(define (get-transform state)
  (cadr state))

(define (make-state results transform)
  (list results transform))

(define (line state args)
  (let ((results (get-results state))
        (transform (get-transform state)))
    (make-state (cons `(line ,@args) results) transform)))

  (define (scale state args)
    (display "scale"))


Andrew

Comment on this post