Skip to content

Instantly share code, notes, and snippets.

🐬
(*> ᴗ •*)ゞ

Kent OHASHI lagenorhynque

🐬
(*> ᴗ •*)ゞ
Block or report user

Report or block lagenorhynque

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View clojure-rest-api-examples-for-minimalists.md

新たなプログラミング言語に入門したら、早く実用的なアプリケーションを作ってみたくなるものです(ちなみに私 lagénorhynque🐬 は最近、Elixirに入門しました)。

コミュニティの発展とともにClojureの応用領域もますます拡大していますが、定番は何よりWeb開発ということで本記事では素早く最小構成的にREST APIを開発する方法を紹介します。

DuctLuminusなどWebアプリ開発をスムーズにするための(マイクロ)フレームワークが有名なものだけでもいくつか存在しますが、今回はHTTPサーバ抽象と基本的なユーティリティを提供するRingとルーティング機能を提供するbidiによるミニマルな実装を考えます。

サンプルコードはPythonライブラリFlask-RESTfulのドキュメントQuickstartの例を参考にし、敢えて名前空間を分割せず1ファイルにまとめる構成にしています。

@lagenorhynque
lagenorhynque / counter.clj
Last active May 25, 2019
Simple counter programs in Elixir & Clojure
View counter.clj
user> (defn counter [init]
(let [c (atom init)]
#(swap! c + %)))
#'user/counter
user> (def c1 (counter 0))
#'user/c1
user> (def c2 (counter 0))
#'user/c2
user> (c1 2)
2
View elixir-from-a-clojurians-perspective.md

ClojurianからみたElixir


lagénorhynque

(defprofile lagénorhynque
  :id           @lagenorhynque
  :reading      "/laʒenɔʁɛ̃k/"
@lagenorhynque
lagenorhynque / lousy_calculator.clj
Created Apr 30, 2019
Typespecs in Elixir & clojure.spec in Clojure
View lousy_calculator.clj
(ns lousy-calculator
(:require [clojure.spec.alpha :as s]))
(s/def ::number-with-remark (s/tuple number? string?))
(s/fdef add
:args (s/cat :x number?
:y number?)
:ret ::number-with-remark)
@lagenorhynque
lagenorhynque / generic_size.clj
Last active May 1, 2019
Protocols in Elixir & Clojure
View generic_size.clj
(ns generic-size)
(defprotocol Size
(size' [data] "Calculates the size (and not the length!) of a data structure"))
(extend-protocol Size
String
(size' [s] (count s))
clojure.lang.IPersistentMap
(size' [m] (count m))
@lagenorhynque
lagenorhynque / worker.clj
Last active Apr 27, 2019
Sequential vs concurrent execution in Elixir & Clojure
View worker.clj
(ns worker)
(defn random []
(inc (rand-int 100)))
(defn sleep [n]
(println (str "sleep(" n ") started."))
(Thread/sleep n)
(println (str "sleep(" n ") ended."))
(str "result-sleep(" n ")"))
@lagenorhynque
lagenorhynque / logback.xml
Last active Apr 8, 2019
Logback settings for Pedestal
View logback.xml
<configuration scan="true" scanPeriod="1 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyyMMdd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
View introduction-to-intellectual-property-law.md

ソフトウェア開発に関わる知的財産法入門


lagénorhynque

(defprofile lagénorhynque
  :id           @lagenorhynque
  :reading      "/laʒenɔʁɛ̃k/"
View contact.clj
user> (require '[clojure.spec.alpha :as s]
'[clojure.spec.test.alpha :as stest])
nil
user> (s/def :contact/name string?)
:contact/name
user> (s/def :contact-info/type keyword?)
:contact-info/type
user> (s/def :contact-info/email-contact-info string?)
:contact-info/email-contact-info
user> (s/def :contact-info/postal-contact-info string?)
View threads_and_locks.clj
dev> (let [count (volatile! 0)
t1 (Thread. #(dotimes [_ 1000] (vswap! count inc)))
t2 (Thread. #(dotimes [_ 1000] (vswap! count inc)))]
(.start t1)
(.start t2)
(.join t1)
(.join t2)
@count)
1577
dev> (let [count (atom 0)
You can’t perform that action at this time.