by shigemk2

当面は技術的なことしか書かない

Emacs root権限でファイルを開き直すやつを読む

これ読んでました。Emacsでroot権限でファイルを開くの面倒なんです。

qiita.com

コードはこんな感じ。

(defun reopen-with-sudo ()
  "Reopen current buffer-file with sudo using tramp."
  (interactive)
  (let ((file-name (buffer-file-name)))
    (if file-name
        (find-alternate-file (concat "/sudo::" file-name))
      (error "Cannot get a file name"))))

(global-set-key "\C-x\C-v" 'reopen-with-sudo)
  • buffer-file-name 現在開いているファイルの絶対パスを取得
  • find-alternate-file ファイルを入り直す
  • concat 文字列連結

これらを駆使して、ファイルをroot権限で開きなおしています。

Scala関数型デザイン&プログラミングのサンプルを試したい

Scala関数型デザイン&プログラミングのサンプルコード

最近出たこの本

Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)

Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)

サンプルがあります。

github.com

サンプルには

  • テキスト内のソースコード全文
  • 練習問題の概要と解答

が入っており、sbtで動いているので一通り実行可能な環境が揃っておりますが、sbt is 何みたいな人、つまり僕からすると結構不親切です。

sbtを勉強しろと言われればそれまでですが、sbt自体についてはこちらを参考にするといいと思います。

www.casleyconsulting.co.jp

サンプルコードを実行したい

以下のコマンドを実行してみましょう。

$ git clone git@github.com:fpinscala/fpinscala.git
$ cd fpinscala
$ sbt answers/console
> import fpinscala.gettingstarted._
scala> MyModule.abs(42)
res2: Int = 42

サンプルコード 解答編のGettingStarted.scalaの、MyModuleオブジェクトのabsメソッドを試したい場合のコマンドです。

なお、sbt内でこんな感じでタブを押すと、どんなモジュールが入っているか、そのモジュールにどんなメソッドが入っているか補完してくれます。ソースコードを読んでもいいですが、こういう方法もあるのです。

scala> import fpinscala.
applicative      errorhandling    iomonad    localeffects   monoids       parsing   streamingio   
datastructures   gettingstarted   laziness   monads         parallelism   state     testing       

scala> import fpinscala.gettingstarted.
AnonymousFunctions   FormatAbsAndFactorial   MonomorphicBinarySearch   MyModule   PolymorphicFunctions

scala> import fpinscala.gettingstarted.MyModule.
abs   asInstanceOf   factorial   factorial2   fib   formatResult   isInstanceOf   main   toString

(なお、自分の環境はoh-my-zshなので、素のzshやbashだとどうなるかわかりません)

適当でざっくりした解説

  • git cloneでソースコードを落とす
  • sbt answers/consoleでanswersディレクトリに移動しつつREPLを起動する
  • import fpinscala.gettingstarted._でモジュールをimport

公式のREADMEもあわせて読むとよいでしょう。

github.com

とりあえずこれ実行しときゃおーけーで終わらせたような感じになりましたが、それで終わらせるのではなくここからは各自勉強していく必要があります。

雑感

sbt→project exercises→runで実行できるものはmainの中で実装されているものだけで、すべてのメソッドがカバーされているわけではありません。まあ、全部のメソッドについて試せるようにコード書いていたら実行結果も何がなんだかわからなくなりそうですし。