• Stars
    star
    138
  • Rank 264,508 (Top 6 %)
  • Language
    JavaScript
  • Created over 11 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A ClojureScript-based HTML5 Canvas and SVG Graphics Playground, much like http://bl.ocks.org/ but specifically for showcasing small ClojuresScript code demos: The underlying agenda is to show how small simple functional programs can generate complex behaviour.

Programming Enchiladas

A ClojureScript-based HTML5 Canvas and SVG Graphics Playground, much like http://bl.ocks.org/ but specifically designed for showcasing small ClojuresScript code demos: The underlying agenda is to show how small simple functional programs can generate complex behaviour.

I was getting sick of setting up yet another lein/noir for every new folly, so it made more sense to have a framework which loads public ClojureScript gists directly from github, compiles them on the fly and serves them out.

This allows shared/social and version-tracked editable ClojureScripts to be run by anyone anywhere with a reasonably modern browser (tested in Chrome/FF/Safari). In order to compile and run any .cljs files in gist https://gist.github.com/rm-hull/5278162 (for example), go to http://programming-enchiladas.destructuring-bind.org/rm-hull/5278162 - see below for more examples.

As part of the available 'stack' (for want of a better word), the following client-side clojureScript bindings are available:

Function Notes
enchilada/canvas A canvas object, which you can resize, move, whatever.
enchilada/ctx The graphics context, on to which you draw your stuff.
enchilada/svg An SVG object, on to which you insert DOM stuff (initially hidden).
enchilada/proxy-request Returns a URL which will be proxied through self.
turtle.* https://github.com/rm-hull/turtle graphics library
dommy.template/* Templating based on Clojure's Hiccup html templating library.
monet.* All the https://github.com/rm-hull/monet canvas drawing functions.
jayq.* https://github.com/ibdknox/jayq jQuery bindings.
c2.* Kerninglabs C2 data visualization library.
vomnibus.* https://github.com/lynaghk/vomnibus bindings.
cljs.core.logic/* MiniKanren implementation.
cljs.core.async/* Communicating sequential processes implementation.
tailrecursion.priority-map/* Clojurescript implementation of data.priority-map

The following javascript libraries are loaded and available:

NOTE: This software is definitely alpha work-in-progress, please treat as such.

Examples

Prerequisites

You will need Leiningen 2.1.2 or above installed.

Running

To start a web server for the application, run:

$ lein ring server

This will start the server at port 3000 or thereabouts. Then create your ClojureScript gist, and slot in the login and id, and hack on.

Optional: If a connection to a MongoDB database is supplied via config variable MONGODB_URL as below (substitute values for user, password, host and db as appropriate), then minimal usage stats will be written out for gamification purposes:

$ export MONGODB_URL=mongodb://user:password@host:10046/db

If using heroku, add a config param:

$ heroku config:add MONGODB_URL=mongodb://user:password@host:10046/db

Optional: By default, Github aggressively throttles requests if requests are anonymous (60 requests per hour); Set GITHUB_OAUTH_TOKEN to a generated authentication token to increase the rate limit to 5000 requests per hour:

$ export GITHUB_OAUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxx

or

$ heroku config:add GITHUB_OAUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxx

(See application note on authorizing 3rd party access to github here: http://developer.github.com/v3/oauth/#create-a-new-authorization)

Troubleshooting

Q. Why doesn't my clojurescript compile, it looks ok?

A1. Did you include a namespace? e.g. (ns example)

A2. Did you name it with a .cljs extension?

NEW! Now supports source maps

Clojurescript debugging/line-stepping in Chrome is now supported. And it works really well! :)

TODO

Known Bugs

  • Routing does not support private gists properly FIXED: 21/12/2013
  • Arbor/PhiloGL externs don't work properly - must be compiled with no optimization
  • Capture all error scenarios (inc. Google closure warnings and errors & trap javascript errors)

Contributing

If there are other ClojureScript (or JavaScript) libraries that would be useful to include, please create a new issue.

There is plenty to do, let me know if you can help out; submit a request for commit access.

References

License

Copyright © 2013 Richard Hull

Use/copy/fork as per: Creative Commons.

Bitdeli Badge

More Repositories

1

luma.oled

Python module to drive a SSD1306 / SSD1309 / SSD1322 / SSD1325 / SSD1327 / SSD1331 / SSD1351 / SH1106 OLED
Python
809
star
2

pifm

Copy of http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter
C++
524
star
3

luma.led_matrix

Python module to drive LED Matrices & 7-segment displays (MAX7219) and RGB NeoPixels (WS2812 / APA102)
Python
519
star
4

luma.examples

Companion repo for running examples against the luma.oled, luma.lcd, luma.led_matrix and luma.emulator display drivers.
Python
348
star
5

nvd-clojure

National Vulnerability Database dependency checker for Clojure projects
Clojure
268
star
6

OPi.GPIO

RPi.GPIO drop-in replacement library for Orange Pi Zero and other SBCs
Python
185
star
7

luma.lcd

Python module to drive PCD8544, HT1621, ST7735, ST7567 and UC1701X-based LCDs
Python
157
star
8

luma.core

A component library providing a Pillow-compatible drawing canvas, and other functionality to support drawing primitives and text-rendering capabilities for small displays on the Raspberry Pi and other single board computers.
Python
148
star
9

sql_graphviz

Generates graphviz commands to graphically display tables and show foreign key links.
Python
138
star
10

infix

A Clojure library for expressing LISP expressions as infix rather than prefix notation
Clojure
101
star
11

bme280

Raspberry PI schematics & python module to drive a Bosch BME280 digital sensor module
Python
96
star
12

spidev-test

C
88
star
13

big-bang

ClojureScript event loop abstraction, loosely based on Racket's big-bang and implemented on top of core.async
Clojure
66
star
14

barebones-toolchain

Barebones [ i686-elf / ARMv7-eabi / MIPS ] cross-compiler & toolchain
C
64
star
15

jasentaa

A parser combinator library for Clojure and ClojureScript
Clojure
60
star
16

wireframes

A lightweight 3D graphics rendering engine in Clojure & ClojureScript.
Clojure
60
star
17

byok

A bare-metal x86 Forth interpreter & compiler
C
54
star
18

skull-canyon

Notes on setting up Ubuntu 18.04 (Bionic Beaver) on Intel NUC6i7KYK
46
star
19

luma.emulator

Provides a series of pseudo-display devices which allow the luma.core components to be used without running a physical device.
Python
43
star
20

inkspot

A small Clojure/ClojureScript library for creating colour swatches
Clojure
39
star
21

lindenmayer-systems

An L-system or Lindenmayer system is a parallel rewriting system, namely a variant of a formal grammar, most famously used to model the growth processes of plant development, but also able to model the morphology of a variety of organisms. Clojure / Heroku.
Clojure
38
star
22

clj-wordnet

An interface to the WordNet database using idiomatic Clojure
Clojure
35
star
23

markov-chains

A library (and application examples) of stochastic discrete-time Markov Chains (DTMC) in Clojure
Clojure
31
star
24

st7735fb

Schematics and build info for assembling a custom Raspberry Pi kernel with ST7735 TFT-LCD framebuffer drivers
Python
28
star
25

k8055

Velleman k8055 linux driver and GUI sources for the Raspberry Pi
C
27
star
26

wam

Gradual WAM implementation using Hassan Aït-Kaci's tutorial reconstruction
Clojure
25
star
27

hmc5883l

Python wrapper class for HMC5883L magnetometer (using smbus I2c)
Python
22
star
28

clustering

Implementation of K-Means, Self-Organising Maps, QT and Hierarchical clustering algorithms, in Clojure.
Clojure
21
star
29

weatherstation

TypeScript
16
star
30

project-euler

Clojure solutions to Project Euler problems
Clojure
14
star
31

turtle

A logo-style turtle graphics library for Clojure & ClojureScript (renders to SVG, bitmaps & HTML5 Canvas)
Clojure
11
star
32

wiringPi

A fork of Gordon Henderson's git://git.drogon.net/wiringPi but with python bindings
C
10
star
33

corewar

A clojure / clojurescript / core.async implementation of A. K. Dewdney's Core War
Clojure
9
star
34

linux-journal-archive

Copy of the Linux Journal archives (issues 1–293)
HTML
8
star
35

local-cast

Stream local video/audio content to a Chromecast on your network
JavaScript
7
star
36

maze

Maze generator and solver, in ClojureScript with a HTML5 canvas
Clojure
7
star
37

turmites

A turmite is a Turing machine which has an orientation as well as a current state and a "tape" that consists of an infinite two-dimensional grid of cells. ClojureScript / HTML5 Canvas / Heroku.
Clojure
6
star
38

yalix

Seven LISPs in seven languages
Python
5
star
39

task-scheduler

Fork/Join task scheduling in Clojure
Clojure
5
star
40

luma.docs

Python
5
star
41

ars-magna

A multi-word anagram solver, based on the article "Anagrams and Pangrams" from The Armchair Universe
Clojure
5
star
42

byok3

A forth interpreter and compiler implemented in scala using typelevel/cats
Scala
4
star
43

ambages

A small prolog interpreter, implemented in Clojure.
Clojure
4
star
44

table

Display ascii tables for almost any data structure with ease.
Clojure
4
star
45

apds9960

Python
4
star
46

mcp23017

Schematics and build info for assembling a Raspberry Pi breakout board with multiple MCP23017 input/output port expanders
Python
3
star
47

jwi

(Mavenized version of) JWI 2.3.3
Java
3
star
48

zaup

TOTP authentication using ZeroSeg
Python
3
star
49

8-bit-trip

Algorithmic music streaming
TypeScript
3
star
50

helpmate

A Clojure library for emitting SGML (HTML,SVG,XML,MathML) fragments
Clojure
3
star
51

implicit-equations

A graphing library for implicit equations, in Clojure
Clojure
3
star
52

colorforth

cvs->git conversion of http://colorforth.cvs.sourceforge.net/viewvc/colorforth/colorforth/
Assembly
3
star
53

loose-labels

An implementation of "Nice numbers for graph labels" from Graphics Gems, vol. 1
Clojure
2
star
54

TR4-monitor

Small utility script to display TR4 system information on a 2.42" SSD1309 OLED
Python
2
star
55

treebank-viz

SVG graph generation of treebank language parsing
Clojure
2
star
56

zaup2

A TOTP authenticator for the web
TypeScript
2
star
57

newell-teapot

Shadow of ftp://ftp.funet.fi/pub/sci/graphics/packages/objects/teaset.tar.Z
C
2
star
58

image-preview

CLI takes in an image file, and using ANSI escape sequences, outputs a low-fidelity preview of the image in the terminal.
Rust
2
star
59

pysensors3

Python3 bindings to libsensors (via ctypes)
Python
1
star
60

rg-matrix

Python library to drive a 32x16 red/green LED matrix
1
star
61

vim-locate

A vim plugin that integrates the unix locate database
Vim Script
1
star
62

henry

HTML
1
star
63

glsl-transpiler

A ClojureScript to GLSL cross compiler ... probably
1
star
64

webrot

Clojure, Noir and Clojurescript toy implementations for mandlebrot, julia & sierpinski fractals
Clojure
1
star
65

sound-flour

An experiment in collaborative broadcast streaming computer-generated music, in Clojure
Clojure
1
star
66

polyhedra

A Clojure/Clojurescript library for reading netlib polyhedra data files
Clojure
1
star
67

boyer-moore-search

Boyer-Moore string search library in Clojure
Clojure
1
star
68

ods-search-appliance

A JSON full-text search endpoint API onto NHS ODS data
Clojure
1
star
69

kebab

An ad-scrubbing web proxy, focusing on subverting commercial tracking and other general panoptic shenanigans. [Scala / Play 2.1]
CSS
1
star
70

proliant-microserver

1
star
71

led-blaster

C
1
star
72

nostalgia

A trip back though some personal 1980's & 90's computing memorabilia
1
star
73

cellular-automata

Migrating from CA code in webrot into separate stand-alone project
Clojure
1
star
74

cljs-dataview

A ClojureScript library for asynchronously fetching & dicing remote binary objects
Clojure
1
star
75

dotfiles

Essentials pour le vim exigeants basés programmeur informatique agiotage
Vim Script
1
star
76

speedtest-logger

Broadband speedtest logger
JavaScript
1
star