summaryrefslogtreecommitdiff
path: root/posts/2014-02-15-cursive-nrepl-cljs-oh-my.org
diff options
context:
space:
mode:
authorFranck Cuny <franck.cuny@gmail.com>2016-08-10 14:33:04 -0700
committerFranck Cuny <franck.cuny@gmail.com>2016-08-10 20:17:56 -0700
commit8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d (patch)
treea6cecddaaea7e87d901a6c28bebe3a531438f24b /posts/2014-02-15-cursive-nrepl-cljs-oh-my.org
parentMerge branch 'convert-to-org' (diff)
downloadlumberjaph-8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d.tar.gz
convert back to md
Diffstat (limited to '')
-rw-r--r--posts/2014-02-15-cursive-nrepl-cljs-oh-my.org155
1 files changed, 0 insertions, 155 deletions
diff --git a/posts/2014-02-15-cursive-nrepl-cljs-oh-my.org b/posts/2014-02-15-cursive-nrepl-cljs-oh-my.org
deleted file mode 100644
index 74e6f9e..0000000
--- a/posts/2014-02-15-cursive-nrepl-cljs-oh-my.org
+++ /dev/null
@@ -1,155 +0,0 @@
-#+BEGIN_QUOTE
- This notes are mostly for me to remember how to get an environment up
- and running.
-#+END_QUOTE
-
-I've tried to play with
-[[https://github.com/clojure/clojurescript][Clojurescript]] a few times
-already, but I never managed to get an environment working as I wanted.
-Granted, I didn't try very hard, and my requirements are probably not
-commons, so I'm not blaming the tools.
-
-This time I've decided to dedicate a little bit more times and try to
-see how far I could go. My requirements are:
-
-- it needs to work in a linux VM
-- I want to have a nREPL connection
-
- - so I can execute code from the REPL and execute them in the
- browser
- - I also want to be able to call functions from the browser REPL
-
-- It needs to work within Emacs and/or Intellij IDEA
-
-The Intellij IDEA requirement is new. I've never used an IDE before and
-I've decided to give it a try. I've installed the
-[[http://cursiveclojure.com][Cursive]] plugin for Intellij and so far
-I'm happy with it.
-
-I'm pleased to say that after a few hours I had a completely working
-environment meeting all my requirements. I'm pretty sure this notes will
-become outdated quickly, so I'll try update this post as I discover more
-things.
-
-** The VM
-
-I like Vagrant and there's no reason to not use it for this kind of
-projects. I've created a
-[[https://github.com/franckcuny/devbox][repository]] on GitHub with my
-setup for that. It's a simple VM with VirtualBox and Vagrant. I'm using
-Ansible to do the provisioning part.
-
-After cloning the repository, you can run =vagrant up= and a virtual
-machine, running Ubuntu 13.10, will be started and provisionned (a bunch
-of tools like tmux are installed, but what really interest us here is
-the openjdk). Once it's up, a I run =vagrant ssh= then I start a =tmux=
-session.
-
-** Create a project
-
-I create a project using the
-[[https://github.com/magomimmo/cljs-start][cljs-start]] template for
-leiningen. To be honest, all the hard work is done by this template, I'm
-just putting the pieces together to have the setup I want build around
-it. With this template, you get:
-
-- the ability to start a HTTP server for serving your static files
-- a browser-repl from nREPL
-
-This plugin relies on [[https://github.com/cemerick/austin][Austin]].
-
-All I needed to do was to run =lein new cljs-start project= (where
-project is the name of my project).
-
-** The REPL
-
-Once you've started to work with a REPL it's hard to go back to a
-language that don't have one. When working with Clojure, you get used
-very quickly to it, especially since nREPL is so nice, and allows you to
-work on a remote box.
-
-The only tricky thing when setting up the VM is to be sure to forward a
-few ports for:
-
-- nREPL - so you can connect from the host to the REPL running on the
- guest
-- the browser REPL - so your REPL can talk to the browser
-
-I run the REPL in headless mode on the VM (in my =tmux= session), from
-my project's directory:
-
-#+BEGIN_SRC sh
- # specify a port that I will be forwarded from my host to the guest
- AUSTIN_DEFAULT_SERVER_PORT=4343 lein repl :headless :host 0.0.0.0 :port 4242
-#+END_SRC
-
-The =AUSTIN_DEFAULT_SERVER_PORT= variable is the port that will be used
-by your REPL to talk to the browser. That's why you need to forward this
-port in Vagrant. The other options (*host* and *port*) are here to tell
-the repl to listen on all the interfaces (so I can connect from the
-host) on the given port.
-
-** Editor
-
-#+BEGIN_QUOTE
- I'm focusing on Intellij IDEA here, but it works the same with
- Emacs/[[https://github.com/clojure-emacs/cider][CIDER]].
-#+END_QUOTE
-
-To install the Cursive plugin, you need to go to
-[[http://cursiveclojure.com/userguide/index.html][this page]] and follow
-the instructions.
-
-I can now open a project in Intellij and start coding. I've configured
-my project to use a remote REPL.
-
-#+CAPTION: remote nrepl
-
-[[/imgs/remote-nrepl.webp]]
-Now I can connect to the remote REPL and do a quick test to see if it
-works:
-
-#+CAPTION: test remote nrepl
-
-[[/imgs/test-remote-nrepl.webp]]
-Great! It's time to start the web server to serve our static files and
-see if I can connect the browser-repl to it too. Running the following
-code in the REPL should do the trick:
-
-#+BEGIN_EXAMPLE
- (run) ;; will start a server with jetty on port 3000, that I can reach from port 4000
- (browser-repl) ;; that’s the *really* cool part
-#+END_EXAMPLE
-
-If I want to test something, all I have to do is to load the file into
-the REPL and then call a function. For example:
-
-#+BEGIN_EXAMPLE
- (.log js/console "Hi from Intellij IDEA!")
-#+END_EXAMPLE
-
-and see the output in my browser's console!
-
-#+CAPTION: it works!
-
-[[/imgs/nrepl-it-works.webp]]
-When working on the project, I can run evaluate the file or a form and
-send it to the browser. Again, this would be the same with Emacs,
-instead of having CIDER to use a local nREPL session, you'll just
-connect to a remote one.
-
-** Conclusion
-
-I realize that it's not the easiest setup. I'm maintaining the build
-system we have at work for our sites; we use javascript and nodejs, and
-I'm really upset by the complexity of our process. If I had to put with
-all of that to build a site I would be pretty mad. Still, I think this
-setup can be simplified a lot. But using a VM also makes it easier to
-give a working environment to a new developer, and it's easy to throw it
-away, after all, I'm using it mostly to run the REPL and to have it
-working in an environment similar to what it would be in production.
-
-I have to admit that so far, I enjoy Cursive, it's stable and it works
-well. I'm still learning how to use the IDE, but some features are
-usefull (creating the functions, checking the number of parameters,
-displaying docstring, etc). We will see how long I stick to it.