#+TITLE: DarkLimericks

https://darklimericks.com

The world's largest metal limericks archive on the Web.

This is just meant to be a live demo of a Clojure phonetics library (https://github.com/eihli/phonetics) and a Hidden Markov Model use-case for a Tightly-packed Trie (https://github.com/eihli/clj-tightly-packed-trie).

I also borrowed some functionality from a NLP/rhyme-related codebase that is not yet ready for release (https://github.com/eihli/prhyme).

* How To Initialize Development Environment

** Required Software

- [[https://www.docker.com/][Docker]]
- [[https://clojure.org/releases/downloads][Clojure Version 1.10+]]
- [[https://github.com/clojure-emacs/cider][Emacs and CIDER]]

** Steps

1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
   a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
2. Start a Clojure REPL in Emacs, evaluate the ~dev/user.clj~ namespace, and run ~(init)~
3. Visit ~http://localhost:8000~

* How To Run Software Locally

** Requirements

- [[https://www.java.com/download/ie_manual.jsp][Java]]
- [[https://www.docker.com/][Docker]]

** Steps
1. Run ~./db/run.sh && ./kv/run.sh~ to start the docker containers for the database and key-value store.
   a. The ~run.sh~ scripts only need to run once. They initialize development data containers. Subsequent development can continue with ~docker start db && docker start kv~.
2. The application's ~jar~ builds with a ~make~ run from the root directory. (See [[file:../Makefile][Makefile]]).
3. Navigate to the root directory of this git repo and run ~java -jar web/darklimericks.jar~
4. Visit http://localhost:8000

* Development

Requires [[https://github.com/tachyons-css/tachyons/][Tachyons CSS]]. There is a symlink in ~web/resources/public~ to the pre-built ~tachyons.css~ and ~tachyons.min.css~ found in the repo.

Build ~.jar~ with ~clojure -X:depstar uberjar :jar prhyme.jar~.

* Deployment

Since I'm developing this independently, it's not a very robust deployment system.

It's nice to have some parts of the repo available on the server; the db/kv scripts for example.

But obviously the album images and the data in the db/kv are going to be different between local and prod.

You can use ~rsync~ with ~--exclude~ to only sync over the code bits.

~rsync --exclude '*/data/*' --exclude '*/images/*' -aLP ./ root@darklimericks.com:/root/darklimericks/~

Note the ~-L~ to follow symlinks. Locally, I'm symlinking tachyons.css.

The other shortcut I'm taking is that images are stored and served relative to the path of the running application.

That means you need to launch the jar file from the ~web~ directory.
