Clojure Snippets

(doseq [x ["a" "b" "c"]]
  (intern *ns* (symbol x) 666))

The above will dynamically define variables (a, b and c and set them to 666), ripped from this stackoverflow question.

(ns some.namespace
   (:require [clojure.contrib.str-utils2 :as string]))

(defn ip-str-to-int [str-ip] 
   (let [nums (vec (map read-string (string/split str-ip #"\.")))]
      (+ 
         (* (nums 0) 16777216) 
         (* (nums 1) 65536) 
         (* (nums 2) 256) 
         (nums 3))))

The above will convert a string representation of an IP number to its integer form. Note how we make use of the string utils library no2 and read-string in order to first split the ip string up into a list with strings and then converting the strings into integers. Finally we use vec to convert the list into a vector and the fact that (vector pos) can be used to retrieve the value at pos.

(defn stamp-today  []
  (let [cur-time (time/now)]
    (time/in-secs
     (time/interval
      (time/epoch)
      (time/date-time
       (time/year cur-time)
       (time/month cur-time)
       (time/day cur-time))))))

The above will get today’s UNIX time stamp where time is clj-time. Good when storing data that needs to be indexed by day.