c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programming に分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡)

音樂は SoundCloud に公開中です。

考察は現在は主に Scrapbox で公表中です。

Programming は GitHub で開發中です。

日本の祝日を扱ふholiday_jpをElixirに移植したholiday_jp-elixirを作った

日本の祝日を扱ふ holiday_jp を Elixir に移植した holiday_jp-elixir を作った

github.com

普段は Ruby や Elixir や Python や Crystal を扱ってゐる。祝日と云ふのは本質的に難しい。何時が祝日であるかは国民の祝日に関する法律と云ふ法律に依って決まる。一年のいつが祝日であるか此の法律に書いてあるし、例外處理も書かれてゐる。故に此の法律から祝日は決定出來る。では現在の此の法律を基に祝日を扱ふ處理を書いて了って好いだらうか。ところが法律は改正されるのである。即ち現在の此の法律の algorithm は過去に遡って適用出來ないし、未來に下って適用も出來ない。無論改正を全て algorithm に組み込む事は出來る。然し其んな面倒な事をするよりも、數少ない祝日を全て羅列した方が安全で簡單である。Ruby ではholiday_jpと云ふ gem が此れをやって呉れ、皆便利に使へる樣に成った。此の度 Elixir で祝日を扱ふ必要が在ったので、此れを移植した。

mix.exs の deps/0 に :holiday_jp を追加し、同じく mix.exs の applications/0 にも :holiday_jp を追加すれば使へる。HolidayJp.between/2HolidayJp.holiday?/1 と云ふ二つの函數を提供する。

iex> HolidayJp.between ~D[2016-03-01], ~D[2016-03-31]
[
  %HolidayJp.Holiday{date: ~D[2016-03-20], name: "春分の日", name_en: "Vernal Equinox Day", week: "", week_en: "Sunday"},
  %HolidayJp.Holiday{date: ~D[2016-03-21], name: "振替休日", name_en: "Holiday in lieu", week: "", week_en: "Monday"},
]

iex> HolidayJp.holiday? ~D[2017-01-02]
true

iex> HolidayJp.holiday? ~D[2016-01-02]
false

祝日の一覧はholiday-jp/holiday_jpを git submodule して依存してある。

因みに holiday_jp-elixir を使って作ったのは、平日丈罵倒して呉れる Slack botbot の framework にはHedwigを使った。打倒 Hubot。

JSONを整形してからdiffをとるtool、diff-with-jsonを作った

JSON を整形してから diff をとる tool、diff-with-json を作った。

github.com JSON を jq command に通して整形し、colordiff が在れば其れを、無ければ diff を使って差分を表示する。

次の a1.json と a2.json が在ったとしやう。

// a1.json
{ "m": 42, "n": 57 }
// a2.json
{ "m": 42, "n": "parrot" }

.n を 57 から"parrot"に変へたものだ。此れを diff で diff -u -L a1.json -L a2.json a1.json a2.json として差分を出すと斯う成って了ふ。

--- a1.json
+++ a2.json
@@ -1 +1 @@
-{"m":42,"n":57}
+{"m":42,"n":"parrot"}

JSON の構造は全く無視される。代はりに diff-with-json を使へば diff-with-json -L a1.json -L a2.json a1.json a2.json として、

--- a1.json
+++ a2.json
@@ -1,4 +1,4 @@
 {
   "m": 42,
-  "n": 57
+  "n": "parrot"
 }

JSON の構造を保った差分が見られる。

情報を JSON で、一行に圧縮して Git や SVN に入れてゐる場合に好く使へる。特に svn diff と共に使ふ樣に作ってある。svn diff --diff-cmd diff-with-json と--diff-cmd option として diff-with-json を指定してやれば、SVN に一行にして格納してゐる JSON の差分が見易い。

使ふ時は jq command と、diff 或いは colordiff command が必要だ。

Crystal で作った。

OCamlでJavaScriptが幸せ

ML Advent Calendar 2016 - Qiita 12/11 參加。

JavaScript[]ふ言語に變換[へんかん]する言語は沢山[たくさん]在った。活溌[かっぱつ]に活動してゐるものは[]だ多いものの、多勢はTypeScriptElmに流れたやうだ。TypeScript の型 system は[やが]て ES.next に[]JavaScript[]の物に成るかもしれない。Elm は軈て ECMAScript で自然に FRP (Functional Reactive Programming) が行なへる機能が提案され役目を終へるだらう。OpalHaste[など]其々[それぞれ]RubyHaskell と云ふ人氣[にんき]の在る言語を JavaScript實行[じっこう]機でも使へる tool として活溌に[つづ]くだらう。

別の觀點[かんてん]を二つ入れてみよう。TypeScript や Elm は、實行時に必要最低限に近い型しか持たぬ JavaScript[たい]してもう少し廣汎[こうはん][]つ compile 時に計算する型を[あた]へるものだ。一つ目の觀點は型だ。Opal や Haste は、[ひろ]い community や長い研究を持つ言語を JavaScript の世界に應用[おうよう]しようとするものだ。二つ目の觀點は言語だ。TypeScript や同等のFlowや、Java 風のDartは、型の觀點から見れば弱い。構造的部分型や漸進的型付けは見事[みごと]なものだ。JavaC#とほぼ同等の廣さの型 system で満足するならばしてもよい。だがより廣汎な型 system が廣く使はれてゐる現代で[]の型 system に不満を持った場合でも、我慢しなければならないだらうか?  Haste (Haskell) や Elm は型の應用範圍[はんい][ひろ]げ不満を[]やして[]れる。だが二つ目の觀點が在るのだ。JavaScriptJavaScript 實行機の上で動く何かである[だけ]でなく、言語だ。言語は思考を持ってゐる。Haskell遲延評價[ちえんひょうか]で非正格な型 system は、先行評價である JavaScript と遠く離れたものだ。[また]Elm の FRP ベースで非 OOP な構造も JavaScript と遠く離れたものだ。

欲張ってみよう。二つの觀點を共に深く滿[]たす事は出來[でき]るだらうか?  OCaml が在る。OCaml は、System F に近い廣汎な型 system を[そな]へてゐる。ML から續く長い研究の伝統を持ち、金融系等の産業界に使はれてきた廣い實用の伝統も持つ。PHP に斬進的型付けを実装したHackや Docker 社に買収[ばいしゅう]されたMirageOSdocker-syncの backend であるUnison、強い型付けの AltJS であるHaxe證明[しょうめい]支援系のCoqOCaml で作られてゐる。Flow や、WebAssembly の現狀[げんじょう]の參照實裝も實裝言語は OCaml なのだ (どうやら Facebook 社は PHP 丈でなく OCaml も好んでゐるやうだ)。又 OCaml は、JavaScript と同じく λ 計算に基附[もとづ]き、JavaScript と同じく OOP に基附いてゐる。OCaml函數[かんすう]JavaScript の函數に對應[たいおう]し、OCaml の class は ECMAScript の class に對應するだらう。OCaml の豊かな型 system は compile 時に計算され、實行時には JavaScript と同等水準の型丈が[のこ]るだらう。JavaScript は正格であり其の評價戦略は先行評價だ。此れも OCaml のものだ。OCaml はごまかしの無い data 構造自體[じたい]の immutable 性を持つが、さうしたければ自然に mutable 性を利用出來る。JavaScript は逆の傾向を持つが、両方が同居する上で immutable 性が中心であるのは過去や遠い未來[みらい]では[][かく]現代では好ましいだらう。

[]まり OCamlJavaScript なのでは?

其處[そこ]BuckleScriptReasonを紹介したのが以下の slide だ。BuckleScript は OCaml を其の[まま]JavaScript に變換する compiler だ。OCaml compiler の一部である Camlp5 等を使ひ美しく仕上げられてゐる。BuckleScript が吐く JavaScript も中々美しい。扱へる言語は、OCaml の亜種ではない、OCaml 其の物である。Reason は、JSX を含む OCaml の亜種である。Camlp5 の力で、BuckleScript は OCaml と Reason を同時に扱へる。OCaml の immutable 性はImmutable.jsが提供する。FRPRxOCamlReact等多くの OCaml での FRP library が担当しよう。Bloomberg 社と Facebook 社が支える將來[しょうらい]は暗くはない。

OCaml で JavaScript が幸せ // Speaker Deck

Crystalで殺せ

Crystal で殺せ // Speaker Deck

Crystal で作る簡單インタラクティブ CUI。Crystal で面倒臭い作業を殺せ

Git の要らない local & remote ブランチを撰んで消すツールを作ったで書いた tool を紹介したものだ。其の後多量の branch が在っても scroll 出來る UI を作ってゐるが、UI を組む DSL がどうあるべきか惱んでゐる。

private-values : Delete private values and private files from your git repos.

private-values // Speaker Deck

private-values: 秘密情報や個人的な file を共有リポジトリから隠す爲のツールで紹介した tool だ。今あたらしい機能を一つ考へてゐる。複數の team で使へるやう、site (假り名) と云ふ概念を入れやうと思ってゐる。後方互換性は保てる見通しでゐる。