Skip to content

Instantly share code, notes, and snippets.

View ikitommi's full-sized avatar
💭

Tommi Reiman ikitommi

💭
View GitHub Profile
@ikitommi
ikitommi / errors.md
Last active February 25, 2019 20:23
reitit error messages

Reitit error messages

@ikitommi
ikitommi / app.clj
Created February 16, 2019 13:10
insano10
(ns user
(:require [clojure.spec.alpha :as s]
[reitit.ring :as ring]
[reitit.coercion.spec]
[muuntaja.core]
[reitit.ring.middleware.exception]
[reitit.ring.middleware.parameters]
[reitit.ring.middleware.muuntaja]
[reitit.ring.coercion]
[spec-tools.core :as st]))
@ikitommi
ikitommi / repl.clj
Last active February 10, 2019 19:38
clojure.spec JSON coercion + dropping extra keys for safety
;; [metosin/spec-tools "0.8.2"]
;; from https://github.com/metosin/reitit/blob/master/modules/reitit-spec/src/reitit/coercion/spec.cljc
(require '[clojure.spec.alpha :as s])
(require '[spec-tools.core :as st])
;;
;; define some specs
;;
@ikitommi
ikitommi / test.clj
Last active December 28, 2018 09:55
Elements of Clojure: positional parameters vs options vs dynamic binding
;;
;; Model Name: MacBook Pro
;; Model Identifier: MacBookPro11,3
;; Processor Name: Intel Core i7
;; Processor Speed: 2,5 GHz
;; Number of Processors: 1
;; Total Number of Cores: 4
;; L2 Cache (per Core): 256 KB
;; L3 Cache: 6 MB
;; Memory: 16 GB
@ikitommi
ikitommi / README.md
Last active October 20, 2018 09:52
Interceptors

Interceptors

Some Clojure/Script implementations:

  • Pedestal, mother of all intercepting in cls?
  • Re-frame - cljs
  • Tripod - polished Pedestal version
  • Kekkonen - polished Pedestal version
  • Yada - just one way
  • Eines - interceptors disguised as middleware
@ikitommi
ikitommi / spec-tools.clj
Last active May 3, 2018 07:26
Spec encoding & decoding (X -> y -> x -> y)
(require '[clojure.spec.alpha :as s])
(require '[spec-tools.core :as st])
(require '[clojure.test :refer [deftest testing is are]])
(s/def ::my-spec
(st/spec
{:spec #(and (simple-keyword? %) (-> % name str/lower-case keyword (= %)))
:description "a lowercase simple keyword, encoded in uppercase in string-mode"
:decode/string #(-> %2 name str/lower-case keyword)
:encode/string #(-> %2 name str/upper-case)}))
@ikitommi
ikitommi / aleph-perf.md
Last active April 21, 2018 08:24
Tuning Aleph TechEmpower entry

Current

The original code looks like this:

(ns hello.handler
  (:require
    [byte-streams :as bs]
    [clojure.tools.cli :as cli]
    [aleph.http :as http]
@ikitommi
ikitommi / repl.clj
Last active February 18, 2018 13:10
Overhead of ring api-defaults, 3µs per request?
;; start repl in perf mode (e.g. -server)
(require '[ring.middleware.defaults]) ; [ring/ring-defaults "0.3.1"]
(require '[criterium.core :as cc]) ; [criterium "0.4.4"]
(defn handler [request]
{:status 200
:body "Hello World"
:headers {"Content-Type" "text/html"}})
(def app
@ikitommi
ikitommi / guide.md
Created January 17, 2018 06:17
compojure-api with text/plain
lein try metosin/compojure-api "2.0.0-alpha17" org.immutant/immutant
(require '[muuntaja.core :as m])
(require '[compojure.api.sweet :refer :all])
(require '[ring.util.http-response :refer :all])
(require '[immutant.web])
(import '(java.io InputStreamReader ByteArrayInputStream InputStream))
@ikitommi
ikitommi / repl.clj
Created December 1, 2017 07:42
Streaming large JSON
;; lein try cheshire metosin/jsonista
(def m (for [n (range 3000000)] {:name (str "kikka_" n), :age n}))
(require '[cheshire.core :as c])
(time (c/generate-stream m (clojure.java.io/writer "test.json")))
; "Elapsed time: 3801.018049 msecs"
(require '[jsonista.core :as j])