Browse Source

project init; added three-looper function

Brandon Wong 7 years ago
commit
ed743858f5
9 changed files with 284 additions and 0 deletions
  1. 14 0
      .gitignore
  2. 39 0
      README.md
  3. 24 0
      considerations.txt
  4. 42 0
      dev/user.clj
  5. 107 0
      project.clj
  6. 2 0
      resources/public/css/style.css
  7. 15 0
      resources/public/index.html
  8. 22 0
      src/automata/core.cljs
  9. 19 0
      src/automata/rules.cljs

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+/resources/public/js/compiled/**
+figwheel_server.log
+pom.xml
+*jar
+/lib/
+/classes/
+/out/
+/target/
+.lein-deps-sum
+.lein-repl-history
+.lein-plugins/
+.repl
+.nrepl-port
+*.swp

+ 39 - 0
README.md

@@ -0,0 +1,39 @@
+# automata
+
+FIXME: Write a one-line description of your library/project.
+
+## Overview
+
+FIXME: Write a paragraph about the library/project and highlight its goals.
+
+## Setup
+
+To get an interactive development environment run:
+
+    lein figwheel
+
+and open your browser at [localhost:3449](http://localhost:3449/).
+This will auto compile and send all changes to the browser without the
+need to reload. After the compilation process is complete, you will
+get a Browser Connected REPL. An easy way to try it is:
+
+    (js/alert "Am I connected?")
+
+and you should see an alert in the browser window.
+
+To clean all compiled files:
+
+    lein clean
+
+To create a production build run:
+
+    lein do clean, cljsbuild once min
+
+And open your browser in `resources/public/index.html`. You will not
+get live reloading, nor a REPL. 
+
+## License
+
+Copyright © 2014 FIXME
+
+Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

+ 24 - 0
considerations.txt

@@ -0,0 +1,24 @@
+
+APP STATE
+- colours
+  - occupied cell
+  - empty cell
+  - optional border
+- border existence
+- rule
+
+
+INITIALIZATION
+- random
+- user-defined pattern
+- preset pattern
+
+
+RULES / PROCESSING
+- preset rules (eg: wolfram's classification of rules)
+- user-defined rules (with visual rule-maker)
+
+
+
+
+

+ 42 - 0
dev/user.clj

@@ -0,0 +1,42 @@
+(ns user
+  (:require
+   [figwheel-sidecar.repl-api :as f]))
+
+;; user is a namespace that the Clojure runtime looks for and
+;; loads if its available
+
+;; You can place helper functions in here. This is great for starting
+;; and stopping your webserver and other development services
+
+;; The definitions in here will be available if you run "lein repl" or launch a
+;; Clojure repl some other way
+
+;; You have to ensure that the libraries you :require are listed in your dependencies
+
+;; Once you start down this path
+;; you will probably want to look at
+;; tools.namespace https://github.com/clojure/tools.namespace
+;; and Component https://github.com/stuartsierra/component
+
+
+(defn fig-start
+  "This starts the figwheel server and watch based auto-compiler."
+  []
+  ;; this call will only work are long as your :cljsbuild and
+  ;; :figwheel configurations are at the top level of your project.clj
+  ;; and are not spread across different lein profiles
+
+  ;; otherwise you can pass a configuration into start-figwheel! manually
+  (f/start-figwheel!))
+
+(defn fig-stop
+  "Stop the figwheel server and watch based auto-compiler."
+  []
+  (f/stop-figwheel!))
+
+;; if you are in an nREPL environment you will need to make sure you
+;; have setup piggieback for this to work
+(defn cljs-repl
+  "Launch a ClojureScript REPL that is connected to your build and host environment."
+  []
+  (f/cljs-repl))

+ 107 - 0
project.clj

@@ -0,0 +1,107 @@
+(defproject automata "0.1.0-SNAPSHOT"
+  :description "FIXME: write this!"
+  :url "http://example.com/FIXME"
+  :license {:name "Eclipse Public License"
+            :url "http://www.eclipse.org/legal/epl-v10.html"}
+
+  :min-lein-version "2.6.1"
+
+  :dependencies [[org.clojure/clojure "1.8.0"]
+                 [org.clojure/clojurescript "1.9.89"]
+                 [org.clojure/core.async "0.2.385"
+                  :exclusions [org.clojure/tools.reader]]
+                 [reagent "0.5.1"]]
+
+  :plugins [[lein-figwheel "0.5.4-7"]
+            [lein-cljsbuild "1.1.3" :exclusions [[org.clojure/clojure]]]]
+
+  :source-paths ["src"]
+
+  :clean-targets ^{:protect false} ["resources/public/js/compiled" "target"]
+
+  :cljsbuild {:builds
+              [{:id "dev"
+                :source-paths ["src"]
+
+                ;; the presence of a :figwheel configuration here
+                ;; will cause figwheel to inject the figwheel client
+                ;; into your build
+                :figwheel {:on-jsload "automata.core/on-js-reload"
+                           ;; :open-urls will pop open your application
+                           ;; in the default browser once Figwheel has
+                           ;; started and complied your application.
+                           ;; Comment this out once it no longer serves you.
+                           :open-urls ["http://localhost:3449/index.html"]}
+
+                :compiler {:main automata.core
+                           :asset-path "js/compiled/out"
+                           :output-to "resources/public/js/compiled/automata.js"
+                           :output-dir "resources/public/js/compiled/out"
+                           :source-map-timestamp true
+                           ;; To console.log CLJS data-structures make sure you enable devtools in Chrome
+                           ;; https://github.com/binaryage/cljs-devtools
+                           :preloads [devtools.preload]}}
+               ;; This next build is an compressed minified build for
+               ;; production. You can build this with:
+               ;; lein cljsbuild once min
+               {:id "min"
+                :source-paths ["src"]
+                :compiler {:output-to "resources/public/js/compiled/automata.js"
+                           :main automata.core
+                           :optimizations :advanced
+                           :pretty-print false}}]}
+
+  :figwheel {;; :http-server-root "public" ;; default and assumes "resources"
+             ;; :server-port 3449 ;; default
+             ;; :server-ip "127.0.0.1"
+
+             :css-dirs ["resources/public/css"] ;; watch and update CSS
+
+             ;; Start an nREPL server into the running figwheel process
+             ;; :nrepl-port 7888
+
+             ;; Server Ring Handler (optional)
+             ;; if you want to embed a ring handler into the figwheel http-kit
+             ;; server, this is for simple ring servers, if this
+
+             ;; doesn't work for you just run your own server :) (see lein-ring)
+
+             ;; :ring-handler hello_world.server/handler
+
+             ;; To be able to open files in your editor from the heads up display
+             ;; you will need to put a script on your path.
+             ;; that script will have to take a file path and a line number
+             ;; ie. in  ~/bin/myfile-opener
+             ;; #! /bin/sh
+             ;; emacsclient -n +$2 $1
+             ;;
+             ;; :open-file-command "myfile-opener"
+
+             ;; if you are using emacsclient you can just use
+             ;; :open-file-command "emacsclient"
+
+             ;; if you want to disable the REPL
+             ;; :repl false
+
+             ;; to configure a different figwheel logfile path
+             ;; :server-logfile "tmp/logs/figwheel-logfile.log"
+             }
+
+
+  ;; setting up nREPL for Figwheel and ClojureScript dev
+  ;; Please see:
+  ;; https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl
+
+
+  :profiles {:dev {:dependencies [[binaryage/devtools "0.7.2"]
+                                  [figwheel-sidecar "0.5.4-7"]
+                                  [com.cemerick/piggieback "0.2.1"]]
+                   ;; need to add dev source path here to get user.clj loaded
+                   :source-paths ["src" "dev"]
+                   ;; for CIDER
+                   ;; :plugins [[cider/cider-nrepl "0.12.0"]]
+                   :repl-options {; for nREPL dev you really need to limit output
+                                  :init (set! *print-length* 50)
+                                  :nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}}}
+
+)

+ 2 - 0
resources/public/css/style.css

@@ -0,0 +1,2 @@
+/* some style */
+

+ 15 - 0
resources/public/index.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link href="css/style.css" rel="stylesheet" type="text/css">
+  </head>
+  <body>
+    <div id="app">
+      <h2>Figwheel template</h2>
+      <p>Checkout your developer console.</p>
+    </div>
+    <script src="js/compiled/automata.js" type="text/javascript"></script>
+  </body>
+</html>

+ 22 - 0
src/automata/core.cljs

@@ -0,0 +1,22 @@
+(ns automata.core
+  (:require [reagent.core :as reagent :refer [atom]]))
+
+(enable-console-print!)
+
+(println "This text is printed from src/automata/core.cljs. Go ahead and edit it and see reloading in action.")
+
+;; define your app data so that it doesn't get over-written on reload
+
+(defonce app-state (atom {:text "Hello world!"}))
+
+(defn hello-world []
+  [:h1 (:text @app-state)])
+
+(reagent/render-component [hello-world]
+                          (. js/document (getElementById "app")))
+
+(defn on-js-reload []
+  ;; optionally touch your app-state to force rerendering depending on
+  ;; your application
+  ;; (swap! app-state update-in [:__figwheel_counter] inc)
+)

+ 19 - 0
src/automata/rules.cljs

@@ -0,0 +1,19 @@
+
+
+(defn temp-rule [one two three] true)
+
+(defn proc
+  ([line]
+   (if (empty? line)
+     []
+     (proc false (first line) (second line) (drop 2 line) [])))
+  ([one two three r acc]
+     (let [rule temp-rule]
+       (if (nil? two)
+         (conj acc (rule false one false))
+         (if (nil? three)
+           (conj acc (rule one two false))
+           (proc two three (first r) (rest r) (conj acc (rule one two three))))))))
+
+
+