Skip to content

Instantly share code, notes, and snippets.

@rafaeldff
rafaeldff / README.md
Created December 30, 2019 16:57
Clojure exceptions as data format

Clojure exceptions are really just Java exceptions under the hood. However, at times clojure shows them formatted as a map data structure. For instance, that's what you get if you inspect them in the REBL. This is because clojure implements the Datafy protocol for Throwable objects, delegating to clojure.core/Throwable->map.

This gist is a reminder of how to interpret that data assuming familiary with Java printed stack traces.

@rafaeldff
rafaeldff / error_output
Created November 7, 2018 19:45
badly formed :let exception
clojure.core/eval core.clj: 3206
...
user/eval25472 REPL Input
...
clojure.spec.alpha/macroexpand-check alpha.clj: 689
clojure.core/ex-info core.clj: 4739
clojure.lang.ExceptionInfo: Call to clojure.core/fn did not conform to spec:
In: [0 2] val: (1) fails spec: :clojure.core.specs.alpha/arg-list at: [:args :bs :arity-1 :args] predicate: (cat :args (* :clojure.core.specs.alpha/binding-form) :varargs (? (cat :amp #{(quote &)} :form :clojure.core.specs.alpha/binding-form))), Extra input
In: [0 0] val: i fails spec: :clojure.core.specs.alpha/arg-list at: [:args :bs :arity-n :args] predicate: vector?
@rafaeldff
rafaeldff / lift.clj
Created January 26, 2017 21:27
lift macro to operate on functions
(defmacro lift [n k]
(let [fns (gensym "fns")
args (gensym "args")
arity (int n)]
`(fn [& ~fns]
(fn [& ~args]
(~k ~@(for [i (range arity)] (list 'apply (list 'nth fns i) args)))))))
(def lor (lift 2 or))
@rafaeldff
rafaeldff / playground.clj
Last active August 28, 2015 21:11
Aleph TCP NPE on put!
(ns playground
(:require [manifold.stream :as s]
[aleph.tcp :as tcp]))
(defn log-message [msg]
(println (str "Message received: " msg)))
(def out (s/stream* {:buffer-size 4096 :permanent? true}))
(def server (tcp/start-server (fn [tcp-stream _]
@rafaeldff
rafaeldff / stacktrace.log
Created January 4, 2015 19:13
Riemann NotYetConnectedException
2015-01-04T19:01:16.242Z [ACCOUNTS:New I/O worker #6] WARN c.aphyr.riemann.client.TcpTransport - caught
java.nio.channels.NotYetConnectedException: null
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:407) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.writeFromUserCode(AbstractNioWorker.java:127) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:83) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.channel.Channels.write(Channels.java:725) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.doEncode(OneToOneEncoder.java:71) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:59) ~[accounts-0.4.0-SNAPSHOT-standalone.jar:na]
at org.jboss.netty.channel
WARN c.aphyr.riemann.client.TcpTransport - caught java.nio.channels.NotYetConnectedException: null at org.jboss.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:432)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.writeFromUserCode(AbstractNioWorker.java:129)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:84)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.channel.Channels.write(Channels.java:725)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.doEncode(OneToOneEncoder.java:71)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:59)
~[customers-0.1.2-SNAPSHOT-standalone.jar:na] at org.jboss.netty.channel.Channels.write(Channels.java:686)
~[customers-0.
@rafaeldff
rafaeldff / keybase.md
Created March 12, 2014 13:10
keybase.md

Keybase proof

I hereby claim:

  • I am rafaeldff on github.
  • I am rafaelferreira (https://keybase.io/rafaelferreira) on keybase.
  • I have a public key whose fingerprint is 51DD 2622 9A95 21D6 AE25 A9CB D0B2 0B71 F58F 0290

To claim this, I am signing this object:

@rafaeldff
rafaeldff / 2013-10-25-144453_954x534_scrot.png
Last active December 26, 2015 13:28
Status overview for multiple git repositories
2013-10-25-144453_954x534_scrot.png
#!/bin/sh
# creating security groups
ec2-create-group 'AWS-OpsWorks-Web-Server' -d 'AWS OpsWorks Web server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-Default-Server' -d 'AWS OpsWorks Default server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-Blank-Server' -d 'AWS OpsWorks blank server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-LB-Server' -d 'AWS OpsWorks load balancer - do not change or delete'
ec2-create-group 'AWS-OpsWorks-PHP-App-Server' -d 'AWS OpsWorks PHP-App server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-DB-Master-Server' -d 'AWS OpsWorks database master server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-Memcached-Server' -d 'AWS OpsWorks Memcached server - do not change or delete'
ec2-create-group 'AWS-OpsWorks-Monitoring-Master-Server' -d 'AWS OpsWorks Monitoring Ganglia server - do not change or delete'
// now:
def query[T](predicate: T => Boolean): List[T] = macro queryMacro
def queryImpl[T: c.TypeTag](c: Context)(predicate: c.Expr[T => Boolean]): c.Expr[List[T]]
// with something like closure reflection:
// the library:
class ReflectiveClosure[A,B] extends Function1[A,B] {