I hereby claim:
- I am reiddraper on github.
- I am reiddraper (https://keybase.io/reiddraper) on keybase.
- I have a public key ASCTgRUWMsnLUEBwyA44G_kTvXoTxwmpb2DIRVET0WxXYwo
To claim this, I am signing this object:
<html> | |
<head> | |
<title>This is the title</title> | |
</head> | |
</html> |
I hereby claim:
To claim this, I am signing this object:
terraform plan -var-file terraform.tfvars -out terraform.tfplan | |
Refreshing Terraform state in-memory prior to plan... | |
The refreshed state will be used to calculate this plan, but | |
will not be persisted to local or remote state storage. | |
[0m[1maws_ebs_volume.build-freebsd-01_sdf: Refreshing state... (ID: vol-1291439a)[0m | |
[0m[1maws_ebs_volume.pg6_sdh: Refreshing state... (ID: vol-33cb1587)[0m | |
[0m[1maws_ebs_volume.pg7_sdf: Refreshing state... (ID: vol-3b9f4db3)[0m | |
[0m[1maws_eip.nat-2a: Refreshing state... (ID: eipalloc-cb74a9ac)[0m | |
[0m[1maws_ebs_volume.build-debian-01_sdf: Refreshing state... (ID: vol-65a266e6)[0m |
Here's an explanation from 30k ft. of the generator namespace. There are three monads | |
involved, one of which simply contains the other two (but is not a monad transformer). They're | |
not named explicitly like this in the module, but let's call them: RoseTree, Generator and Gen. | |
Gen is the monad that is a wrapper around Gen (RoseTree a), to use Haskell types. A RoseTree | |
is simply an n-ary. In Haskell, it'd be defined like: | |
data RoseTree a = RoseTree a [RoseTree a] | |
In Clojure I represent it as a two-element vector, the first element being the node's value, | |
and the second being a lazy-sequence of the children. Since we use a lazy-seq, we can |
make[1]: *** [libraries/Cabal/Cabal/dist-boot/package-data.mk] Segmentation fault (core dumped) | |
make[1]: *** Waiting for unfinished jobs.... | |
make[1]: *** [utils/hsc2hs/dist/package-data.mk] Segmentation fault (core dumped) | |
make: *** [all] Error 2 | |
make -j8 131.49s user 2.92s system 99% cpu 2:15.43 total |
We'll be using a tool called redbug, which is an abstraction and safety layer of Erlang's built-in dbg tracing facilities. You can follow along at home:
select(2, [0 1], NULL, NULL, {900, 0}) = 1 (in [0], left {899, 949910}) | |
wait4(1401, 0x7fffe90edd0c, WNOHANG, NULL) = 0 | |
read(0, "10:53:10.322 [error] Supervisor "..., 8192) = 438 | |
lseek(2, 0, SEEK_END) = 90736 | |
write(2, "10:53:10.322 [error] Supervisor "..., 438) = 438 | |
select(2, [0 1], NULL, NULL, {900, 0}) = 1 (in [0], left {899, 958221}) | |
wait4(1401, 0x7fffe90edd0c, WNOHANG, NULL) = 0 | |
read(0, "10:53:14.135 [error] Supervisor "..., 8192) = 461 | |
lseek(2, 0, SEEK_END) |
dd if=/dev/zero of=/tmp/output bs=25k count=1k | |
for i in {1..10}; do time curl -X PUT localhost:8098/riak/foo/a --data-binary @/tmp/output > foo; done |
12:50:24 <{mochiweb_acceptor,init,3}> {riak_client,new,2} | |
12:50:24 <{mochiweb_acceptor,init,3}> {riak_client,instance,2} | |
12:50:24 <{mochiweb_acceptor,init,3}> {riak_client,get,4} | |
12:50:24 <{mochiweb_acceptor,init,3}> {riak_client,mk_reqid,1} | |
12:50:24 <{mochiweb_acceptor,init,3}> {riak_client,recv_timeout,2} |
(require '[simple-check.core :as sc]) | |
(require '[simple-check.generators :as gen]) | |
(require '[simple-check.properties :as prop]) | |
(def sort-idempotent-prop | |
(prop/for-all [v (gen/vector gen/int)] | |
(= (sort v) (sort (sort v))))) | |
(sc/quick-check 100 sort-idempotent-prop) | |
;; => {:result true, :num-tests 100, :seed 1382488326530} |