次は何?

年の初めなんで、iOSをアップデートした。6から7にした時も約半年遅れ。7から今回の8に したのも随分と遅らせた。だって、初物にはBugが有るって言うじゃないですか。

Updateで初期化っぽくされたぞ。青歯は使わないのでOFFにしてたけどONになってた。 電池の消費を抑える為に画面を暗くしてたのに、ギンギラギンに明るくなった。 環境保存してくれなきゃ。

8の売りだと言う、顔文字キーボードが大幅に機能アップして出現した。6,7の時は、 うざいので削除してたのにね。ツイターとかメールやる人は嬉しいだろうけど、オイラーに とっちゃ、迷惑そのもの。女房もうざいって言ってたから、即削除。

顔文字はユニコードに目出度く登録されたんで、日本のユーザーの強い要求で入れたんでしょう。 何たって、売ってるのは携帯屋ですから、商売にさわりますな。

8になって、どんなアプリを使ってるってのが、1日、1週間のスパンで確認出来るように なった。なんだ、サファリのブラウザーしか使ってないじゃん。いろいろ入れたアプリは 見向きもされませんよ。

で、ある夜、女房がipadを使ってて、突然繋がらなくなったと抜かす。2年経たずして 壊れたか? 8のBugを目出度く踏んだか? それとも、降っているいる雪で、ケーブルが 切れたか? ネットの上流で、IOSで動いてるルーターが狂ったか? 北の国からネット攻撃を受けて厚いバリアーを張る時に失敗したか? 無線の送信機が壊れたか? 色々考えられるな。

パソコンを立ち上げて、その受信器経由でネットに繋がるか調べれば、アプルに罪を着せられるか 直ぐに判明するだろうけど、夜も遅いのでやる気ゼロ。焦る事は無い。一晩寝かせよう。 若し、ネット側に問題が有れば、徹夜の突貫作業で修復してるだろうから。

翌朝、はやりipadは不調。パソコンは快調。ipadだな。はて、どうすべ? iOSを取り合えず 再起動だな。えと、どうやるんだっけ? パソコン経由でネットに聞いてみたぞ。 消音ボタンを押した状態で、Homeボタンを長押し。これで電源が切れた。後は再起動。

復活した。女房を尋問。悪い物みてたんじゃねぇ。ユーチューブとか、電池喰うので 教えなかったのに、いつの間にかバンバンと動画を見てる。TVだけじゃ飽き足らないのね。

まあ、最近のNHKの番宣は忍耐の度を越して、民放よりひどいんじゃないですか。 (特に年末年始は酷かった。紅白見ろ見ろ攻撃等) 堂々と、番組にゲストで朝ドラの主人公やら日曜夜8の関連を流したり。民放も ここまで露骨にやらんわな。

会長が独裁してて、民放をケ散らせ命令が出たんでしょうな。これが続くようなら、 受信契約打ち切るぞ。続きは、TVにCAT6のケーブルを引きこんで、思う存分DO画を 楽しんで貰えばいい事ですから。

そうすれば、ipadの毎日充電からも、開放される事でしょう。

おいらの見立て

goは既にメジャーな言語、でもgoも秋田んで、去年から棚上げしてたhaskellかな? 技評のWebに、 2015年のプログラミング言語動向 なんてのが出てた。あのMatzさんも型には注目してるようで、型チェックをRubyに入れる なんて事をぶち上げている。

パイソン陣営は、2と3に分かれちゃって、盛んに3へと誘ってるけど、fedora21にも3系は 入っていないので、まだまだですな。

3へのお誘いとして、Python 3.3 以上で使える Python/C API で文字列アクセスを高速化 のも有るけど、もともと3系は2系に比べて、遅かったんじゃなかろうか? まあ、そういうのはおくびにも出さずに、統一して欲しいぞなもし。

で、3に統一するには、 手っ取り早く賄賂を贈って、3を入れてもらえばいいのにって 思うぞ。2の延命策も施されているようだから、様子見ですな。

次は、Haskell。 なんでも、Haskellの人は、コンパイルが通ればBugは無い と、人を惑わずような事を言って ましたから。型々言うのは当たり前。

Haskellと言えども、いろいろなパッケージに支えられていて、gemには負けるけど、頑張って るようです。パッケージマネージャのcabalってやつでコントロール出来るはずなんだけど、 アップデートとかしようとすると、あちらが立てばこちらが立たずっていう、いわゆるcabal地獄が 待っているわけで。。。

それが、新しいHaskellでは解消するらしい。その機構は、砂場。砂場を作ってその中で 遊んでね。よそには迷惑をかけないようにしとくから、らしい。

Haskell

で、やっとこさHaskellだ。型がどうのこうの言ってる人がいる。 型安全とは何か。 そして、学術的に、 やたら難しい 事を言う人が居たかと思うと、 Haskellを愛する若者たちへ と、甘い言葉で惑わず人も居る。

これで何回目かになる環境構築。 Getting The Haskell Cabal そして、 Haskellを快適に使うためのemacs環境の構築 とか、 Using Emacs for Haskell development を参考に。 haskellでも補完が効くと嬉しいなってんで、ghc-modを入れるのが流行みたい。

fedoraのhaskell-platformは古め、ウブなやつも古め、上の砂場遊びをしようと思うと、 最新のにしなきゃならん。ですから、 How to install latest GHC 7.8.3 + cabal 1.20.3 on ubuntu こういう記事が出てくる訳で。。。

まあ、オイラーは楽してhaskellを入れておいて、emacsの環境だけって方向です。

(setq load-path (append '("/home/sakae/.cabal/share/ghc-mod-5.2.1.1") load-path))

ghc-modは、cabalから入れるんだけど、それだけじゃemacsと連携しない。ghd-modが提供 してるelispをemacsに認識させる為、上記の設定を加えた。

苦労の末、 ghc-modを入れると、マニュアルを引けるようになるんだけど、表示機にブラウザーが必要との事。

(setq browse-url-browser-function 'browse-url-generic
      browse-url-generic-program "firefox")

環境構築したのがfedora。なんだかfirefoxを入れるなんて負けたような気持ちになるんで、 w3m-emacsとw3mに肩代わりさせる事にした。

(require 'w3m-load)
(setq browse-url-browser-function 'w3m-browse-url)
(setq w3m-home-page "file:///home/sakae/.w3m/bookmark.html")
(setq w3m-bookmark-file "~/.w3m/bookmark.html")

こんな設定をしておくと、emacs -f w3m で、w3mがemacsに張り付いて上がってくるので とっても便利。

haskell本と言えば、続々と出てるけど、RWHが現実的かな? でもこの本は時代の彼方に なってしまったみたい。 Real World Haskellの古いところ あたりを参考にしますかね。

そうだ、世の中には、 Real World Ocaml本なんてのも有ったな。

ocaml

ocamlもいいかも知れない。ocamlやってる人はトレードで儲けていますから!!

OCaml入門の手引 とか、 Ocaml is an industrial strength programming language supporting functional 経由で、 OCamlチュートリアル あたりを見て復習だな。 何もかもをOcamlでやろうとすると破綻するので、 Ocamlで外部コマンド なんかも参考にね。

Real World OCamlが、トレードで儲けている人達が 書いた現実本だ。富豪は太っ腹で、無料で読めるようにしてくれている。 ここにOcamlの環境構築方法 が公開されてた。

opamと言うパッケージマネージャを中心にしてるようだ。こやつ、ocamlのバージョンも 切り替えられる機能がある。そして、それらが、OSから独立して自分のHomeDir下に 配置するようになってるので、気兼ねなく色々出来る。確かに、OS提供のパッケージに 依存するんじゃ窮屈ですから。

ocaml関係が何も入っていないFedoraに入れてみる。

Install OPAM in 2 minutesから、 https://raw.github.com/ocaml/opam/master/shell/opam_installer.sh を落としてきて、 Binary installerのインストール手順でインストールする。

opam initで初期化なんだけど、ocamlが入っていないので、入れろと促される。 オイラーは、諸般の事情で、4.01.0を指定したよ。

opam主導のocamlを使う時は、各種の環境変数を設定する必要が有る。どんな環境変数が 設定されるかは、

[sakae@fedora ~]$ opam config env
CAML_LD_LIBRARY_PATH="/home/sakae/.opam/4.01.0/lib/stublibs"; export CAML_LD_LIBRARY_PATH;
MANPATH="/home/sakae/.opam/4.01.0/man:"; export MANPATH;
MAKELEVEL=""; export MAKELEVEL;
MAKEFLAGS=""; export MAKEFLAGS;
PERL5LIB="/home/sakae/.opam/4.01.0/lib/perl5"; export PERL5LIB;
OCAML_TOPLEVEL_PATH="/home/sakae/.opam/4.01.0/lib/toplevel"; export OCAML_TOPLEVEL_PATH;
PATH="/home/sakae/.opam/4.01.0/bin:/usr/local/go/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/sakae/.cabal/bin:/home/sakae/godev/bin"; export PATH;

実際に使う時は、上記コマンド列を eval すれば良い。

[sakae@fedora ~]$ opam list
# Installed packages for 4.01.0:
async             111.25.00  Monadic concurrency library
async_graphics        0.5.1  Async wrapper for the OCaml Graphics library
base-bigarray          base  Bigarray library distributed with the OCaml compile
base-threads           base  Threads library distributed with the OCaml compiler
base-unix              base  Unix library distributed with the OCaml compiler
cohttp               0.14.0  HTTP library for Lwt, Async and Mirage
core              111.28.01  Industrial strength alternative to OCaml's standard
core_bench        109.58.01  Benchmarking library
core_extended     111.28.00  Extra components that are not as closely vetted or
cryptokit               1.9  Cryptographic primitives library.
menhir             20140422  LR(1) parser generator
merlin                2.0.0  Editor helper, provides completion, typing and sour
ocp-indent            1.4.2  A simple tool to indent OCaml programs
utop                   1.17  Universal toplevel for OCaml
yojson                1.1.8  Yojson is an optimized parsing and printing library

主要は物は上記の通り、あれ、強力なomake が抜けているな。後で入れておこう。

環境は肥大してるか?

こうして、fedoraにhaskellとocamlの環境を入れたけど、両者共結構大きなシステムだ。 どれぐらい大きいか確認しとく。

[sakae@fedora ~]$ du -sh .opam .cabal
689M    .opam
297M    .cabal

ocamlの環境は、.opamの下に全部入っているから、/usr/local/bin/opamと合わせても700M ぐらいか。haskellは、この他にプラットフォームとしてどーんと鎮座してるはず。どうやってその容量を調べる? 簡易でいいんで、

[sakae@fedora ~]$ sudo yum remove ghc-*
    :
 haskell-platform                 i686   2013.2.0.0-38.fc21     @fedora   1.4 k

トランザクションの要約
================================================================================
削除  113 パッケージ (+4 個の依存関係のパッケージ)

インストール容量: 829 M
上記の処理を行います。よろしいでしょうか? [y/N]N

このうちの5%ぐらいしか、オイラーは使わないんだろうな。もったいない、もったいない。

ghc使うなんて10年早いわ。周回遅れでhugsでも使ってろ。fedoraにはちゃんと収録されてるわい。

[sakae@fedora ~]$ yum search hugs
============================== N/S matched: hugs ===============================
hugs98-alut.i686 : ALUT package for Hugs98
hugs98-demos.i686 : Demo files for Hugs98
hugs98-glut.i686 : GLUT package for Hugs98
hugs98-hgl.i686 : Haskell Graphics Library for Hugs98
hugs98-openal.i686 : OpenAL package for Hugs98
hugs98-opengl.i686 : OpenGL package for Hugs98
hugs98-x11.i686 : X11 package for Hugs98
hugs98.i686 : Haskell Interpreter

次は何?

あの年金ロボットさんもいろいろ書いているけど、 彼のレーダーに引っかからない奴ってことで、 新しいプログラミング言語を作る理由 とか、 Egisonによる関数型プログラミング入門 が出てきました。

TIOBE以外では ってんで、 10 Programming Languages should Learn NOW なんてのも三田んだ。 そしたら、GoもOcamlも知ってるけど、Rustなんてのが出てきた。

FreeBSDのportsに聞いてみたよ。

Rust is a systems programming language that runs blazingly fast, prevents
almost all crashes, and eliminates data races.  Some of its features:

  - Algebraic data types, type inference
  - Pattern matching and closures
  - Concurrency without data races
  - Guaranteed memory safety
  - Optional garbage collection
  - Zero-cost abstractions
  - Minimal runtime
  - Efficient C bindings

Rust is currently work-in-progress.  Its development is driven by Mozilla
with help of large open source community.

WWW: http://www.rust-lang.org/

参考資料として、 関数型プログラマのためのRust を呼んでみた。 そして、こういうのも、

Rustを30分で紹介する

なかなか面白そうなので、次回はRustで行ってみよー。でもRustって、鉄が錆びる、体が 錆びるとかの錆って意味なのね。どうしてこんなネガティブな名前にした? これじゃ錆を嫌って、アンチエイジングに勤しむ女性からは絶対に支持されないな。

いや、それは違いまっせ。世は言語戦争の時代。Rustの敵は、C++ とか D とか Go なのさ。 こいつらを錆させない限り、Rustは浮かび上がってこれないのさ。

真田幸村の旗印は、六文銭。これって三途の川を渡る時の駄賃。死を恐れないって意味が 込められている。あの徳川家康が唯一恐れた武将とか。 Rustもそれに倣ったって事かな?

まてまて、別の解釈も出来るぞ。鉄が錆びて酸化鉄になる。アルミが錆びてアルマイトに なる。純なやつは一部の金属を除いて不安定。酸化してやっと安定になる。 珪素(シリコン)を酸化させて作った絶縁膜があるからこそ、MOSIC(集積回路)が作られる ようになった。ゲルマニウムに針を立てたトランジスタじゃ、今の世代は成り立たないからね。 こう考えると、錆様様だな。

錆びて安定。C言語はいろいろな面で不安定。だから、そいつを錆びさせて安定な物を 作った(まだ、作成途中ですけど)とな。そして、その錆を未来永劫使ってねって気持ちが 込められているんだな。うん、これならポジティブな解釈だな。