Written for Ubuntu LTS 10.4
$ sudo aptitude update $ sudo aptitude upgrade
| ;; stolen from http://cemerick.com/2010/08/02/defrecord-slot-defaults/ | |
| (defmacro defrecord+defaults | |
| "Defines a new record, along with a new-RecordName factory function that | |
| returns an instance of the record initialized with the default values | |
| provided as part of the record's slot declarations. e.g. | |
| (defrecord+ Foo [a 5 b \"hi\"]) | |
| (new-Foo) | |
| => #user.Foo{:a 5, :b \"hi\"}" | |
| [name slots & etc] |
| # NOTICE: to get Nginx+Unicorn best-practices configuration see the gist https://gist.github.com/3052776 | |
| $ cd /usr/src | |
| $ wget http://nginx.org/download/nginx-1.2.1.tar.gz | |
| $ tar xzvf ./nginx-1.2.1.tar.gz && rm -f ./nginx-1.2.1.tar.gz | |
| $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz | |
| $ tar xzvf pcre-8.30.tar.gz && rm -f ./pcre-8.30.tar.gz | |
| $ wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz |
| ; A REPL-based, annotated Seesaw tutorial | |
| ; Please visit https://github.com/daveray/seesaw for more info | |
| ; | |
| ; This is a very basic intro to Seesaw, a Clojure UI toolkit. It covers | |
| ; Seesaw's basic features and philosophy, but only scratches the surface | |
| ; of what's available. It only assumes knowledge of Clojure. No Swing or | |
| ; Java experience is needed. | |
| ; | |
| ; This material was first presented in a talk at @CraftsmanGuild in | |
| ; Ann Arbor, MI. |
This installs a patched ruby 1.9.3-p327 with various performance improvements and a backported COW-friendly GC, all courtesy of funny-falcon.
You will also need a C Compiler. If you're on Linux, you probably already have one or know how to install one. On OS X, you should install XCode, and brew install autoconf using homebrew.
| (ns n01se.externs-for-cljs | |
| (:require [clojure.java.io :as io] | |
| [cljs.compiler :as comp] | |
| [cljs.analyzer :as ana])) | |
| (defn read-file [file] | |
| (let [eof (Object.)] | |
| (with-open [stream (clojure.lang.LineNumberingPushbackReader. (io/reader file))] | |
| (vec (take-while #(not= % eof) | |
| (repeatedly #(read stream false eof))))))) |
| (ns blog.errors.core | |
| (:require-macros | |
| [cljs.core.async.macros :refer [go]] | |
| [blog.utils.macros :refer [<?]]) | |
| (:require | |
| [cljs.core.async :refer [>! <! chan close!]])) | |
| ;; convert Node.js async function into a something | |
| ;; that returns a value or error on a channel | |
| (defn run-task [f & args] |
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
| (comment ; Fun with transducers, v2 | |
| ;; Still haven't found a brief + approachable overview of Clojure 1.7's new | |
| ;; transducers in the particular way I would have preferred myself - so here goes: | |
| ;;;; Definitions | |
| ;; Looking at the `reduce` docstring, we can define a 'reducing-fn' as: | |
| (fn reducing-fn ([]) ([accumulation next-input])) -> new-accumulation | |
| ;; (The `[]` arity is actually optional; it's only used when calling | |
| ;; `reduce` w/o an init-accumulator). |