Skip to content

Instantly share code, notes, and snippets.

View ivermac's full-sized avatar
👋
Hi there!

Mark Ekisa ivermac

👋
Hi there!
View GitHub Profile
@ivermac
ivermac / clojure-load-and-check-namespace.md
Last active November 23, 2019 16:35
Load and check if a namespace exists
(defn namespace-exists?
  "check that a namespace has been loaded"
  [str-val]
  (-> str-val
      symbol
      find-ns
      nil?
      not))
 
@ivermac
ivermac / javascript-filename-in-resources-directory.md
Last active November 23, 2019 16:07
Using Clojure to retrieve javascript file names in resources directory
(:require [clojure.java.io :as io])

(defn get-file-names [directory-object files-path]
  (let [full-directory-path (.getPath directory-object)
        get-js-file-path (fn [file]
                           (str files-path (.getName file)))]
    (->> full-directory-path
         io/file
 file-seq
@ivermac
ivermac / java-vararg-in-clojure.md
Last active September 19, 2019 09:50
Calling Java vararg function in Clojure

A colleague and I were using Jedis and wanted to delete multiple keys at once without using a loop. The version of Jedis we were using has 2 del functions and the one we wanted use is a java vararg function and can be found here. We understood a Java vararg function as a variadic function in Clojure which simply means a function with infinite arity. Assuming b1 and a1 are keys in redis, the following is what we attempted initially:

(.del jedis "a1" "b1")

The above failed with the following error: IllegalArgumentException No matching method found: del for class redis.clients.jedis.Jedis clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:80)

@ivermac
ivermac / resolve-and-call-symbol-derived-from-a-string.md
Created September 19, 2019 08:21
Resolve and Call symbol derived from a string
clj.user.main=> ((-> "clojure.string/blank?" symbol resolve) "")
true
clj.user.main=> ((-> "clojure.string/blank?" symbol resolve) "ivermac")
false

I used Clojure 1.8.0. The example above has been influenced by resolve clojure function

@ivermac
ivermac / 00_destructuring.md
Created June 28, 2019 12:42 — forked from john2x/00_destructuring.md
Clojure Destructuring Tutorial and Cheat Sheet

Clojure Destructuring Tutorial and Cheat Sheet

(Related blog post)

Simply put, destructuring in Clojure is a way extract values from a datastructure and bind them to symbols, without having to explicitly traverse the datstructure. It allows for elegant and concise Clojure code.

Vectors and Sequences

@ivermac
ivermac / create-test-request-object-in-django.md
Last active March 21, 2019 13:22
Create django request object for testing

The following is a life-saver if you test request objects in django frequently and you don't necessarily need to hit a specific endpoint

from django.test import RequestFactory
request_factory = RequestFactory()
request = request_factory.get('/path', data={'name': u'test'})
@ivermac
ivermac / useful-commads-for-linux-osx.md
Last active December 19, 2018 05:41
Useful commands for linux and/or osx

search for a file

find / -name <file-name>

search for a directory

find / -type d -name "<directory-name>"
@ivermac
ivermac / input-rc.md
Last active December 1, 2018 18:51
Custom .input.rc file

Inspired by this url. From this page, the input.rc file is used to map the keyboard to specific situations.

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
@ivermac
ivermac / redis-client-debugging-101.md
Last active November 26, 2018 05:56
Redis Client Debugging 101

If you are using redis and wanted to check how many open connections are there at the moment, use the client list command in your redis terminal.

127.0.0.1:6379> client list
id=936 addr=127.0.0.1:61277 fd=8 name= age=3 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

This is a powerful debugging tool especially when you have an app that's using redis and seems to be opening connections without closing them, meaning you run out of memory in your redis host server.

Before getting to this stage, a colleague in the SRE team had used the following command to identify the redis problem

@ivermac
ivermac / dont-include-non-cljs-dir-in-checkouts-dir.md
Created October 3, 2018 14:47
Dont include non cljs folder in checkouts folder of a cljs project as a symlink

I included a non-Clojurescript directory in the checkout of a clojurescript project and started getting the following error:

Compiling ClojureScript...
WARNING: no :cljsbuild entry found in project definition.
--------------------------------------------------------------------------------
WARNING: your :cljsbuild configuration is in a deprecated format.  It has been
automatically converted it to the new format, which will be printed below.
It is recommended that you update your :cljsbuild configuration ASAP.
--------------------------------------------------------------------------------
:cljsbuild