読者です 読者をやめる 読者になる 読者になる

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

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

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

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

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

Programming 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を作った

Programming Crystal

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が幸せ

Programming 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