zshellを導入したときのメモ

ログインシェルをbashから、zshellに変更した。

brewzshをインストール。

$ brew install zsh
... 🍺 ...

$ which zsh
/usr/local/bin/zsh

システムで有効なログインシェルの一覧を、/etc/shellsで見ることができる。
ログインシェルとは、ユーザーがシェルにログインしたときに、最初に起動するシェルのこと。
Mac OS Xだと、bash以外に csh ksh sh tcsh zsh が入っている。

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

システムにプリインストールされていたzshと、brewでインストールしたzshのバージョンを比較する。
brewからインストールしたzshの方が新しい。

$ /bin/zsh --version
zsh 5.0.5 (x86_64-apple-darwin14.0)

$ /usr/local/bin/zsh --version
zsh 5.2 (x86_64-apple-darwin14.5.0)

/etc/shellsに、/usr/local/bin/zshを追記する。

$ sudo bash -c 'echo /usr/local/bin/zsh >> /etc/shells'
Password:

catで追加されたことを確認し、change shellコマンドのchshを実行する。

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh

$ chsh -s /usr/local/bin/zsh
Password for Bambi:


設定は、~/.zshrcに書く。なければ作成する。
~/.bashrcと~/.bash_profileから、エイリアス環境変数を移せば、完了です〜 😋

RubyのClassクラスについてとか、クラスを知るためのメソッドとか、あれこれ(メモ)

Ruby

MyClass.class            # => Class

MyClass.class.class   # => Class

という結果に Σ(・∀・;) となったので調べた。

 (.classはオブジェクトが定義されたクラス名を返す。)

 

まとめ

Rubyでは、定義されたクラスは全て、Classクラスのインスタンスとなる。

Rubyでは、扱われる全ての要素はオブジェクトで(何らかのクラスのインスタンスで)、Objectクラスのインスタンスメソッドを継承している。(Object#classとか)

どうやら、MyClass.classで返る"Class"も、クラスであり、オブジェクトであり、Classクラスのインスタンスとして扱われるため、その結果、MyClass.class.class #=> Class が返るらしい。(難しいなぁ。考え方合ってるのかなぁ。。)

 

やってみよう!

f:id:bambinya:20160110135338p:plain

StringやArrayなどの組み込みクラスも、自分で定義したMyClassも、.classを実行するとClassが返ってくる。

Rubyで扱う全ての値はオブジェクトなので、Objectクラスが持つインスタンスメソッドを継承している。あるクラスが持つインスタンスメソッドを見たいときは、instance_methodsを使う。(↓こんな感じ。)

f:id:bambinya:20160110142407p:plain

 

MyClass.classが返すのは、Classクラスというオブジェクトである。

f:id:bambinya:20160110150442p:plain

Classクラスは"クラス"の一つなので、オブジェクトであり、また、Classクラスのインスタンスであることから、MyClass.class.class #=> Class という結果になるみたい。

 

ちなみに、あるクラスがどんなクラスやモジュールを継承したりインクルードしているかを見るにはancestorsを使う。

出力結果の、配列の順番は、[クラス自身、親クラス、親の親クラス..]となる。クラス名の間にインクルードしているモジュール名がちょこちょこ入ってくる。

実行結果。

Rubyで扱う全ての値はオブジェクトなので、ClassクラスもObjectクラスを継承していることがわかる。)

f:id:bambinya:20160110145829p:plain

 

おしまい。m(__)m

 

emacs key bindingメモ

キーバインドのデフォルトで

C-h がHELPの設定になっていたので、 ~/.emacs.d/init.el ファイルに下記マクロを追加。シンタックスemacs lisp.

(keyboard-translate ?\C-h ?\C-?)

Function: keyboard-translate from to
この関数は、文字コードfromを文字コードtoに変換するように keyboard-translate-tableを変更する。 必要ならばキーボード変換表を作成する。

*1

 

画面操作(ファイル開閉、emacsプロセスの開閉、画面分割と移動、画面削除、ミニバッファから離れる)

  • C-x C-c KILL TASK
  • C-z SUSPEND TASK (fg → foreground)
  • C-x C-f OPEN FILE
  • C-x C-s SAVE FILE
  • C-x 2 split-window-below
  • C-x 3 split-window-right
  • C-x o SELECT ANOTHER WINDOW
  • C-x 0 DELETE SELECTED WINDOW
  • C-] KILL MINIBUFFER

エディタの移動(上下左右の移動)

  • C-p UP
  • C-n DOWN
  • C-b BACK
  • C-f FORWARD
  • C-a GO TO BEGINNING OF LINE
  • C-e GO TO END OF LINE
  • C-o OPEN LINE
  • M-v PAGEUP
  • C-v PAGEDOWN
  • M->(Shift + .) Move to the END of the buffer
  • M-<(Shift + ,) Move to the TOP of the buffer

エディタの操作(文字の削除、行の削除、選択範囲の削除、やり直し)

  • C-h BACKSPACE
  • C-d KILL FORWARD CHARACTER
  • C-k KILL LINE
  • C-w KILL THE REGION(バッファに保存される)
  • C-_ UNDO

 

コピペしたいときのステップ

  1. C+space key(Mark Set)
  2. M+w(copy)
  3. C+y(paste)

 

検索

  • C-r SEARCH

 

置換

  1. M+%(Shift+5)
  2. 置換したいテキスト入力、RET
  3. 新しいテキスト入力、RET
  4. !  (to replace all remaining occurrences without asking again.)

GNU Emacs Manual: Query Replace

 

一括インデント

  1. C+space keyで範囲選択
  2. CM+\

 

一括コメントアウト

  1. C+space keyで範囲選択
  2. M+;

 

操作の解除

  • C+g 実行中の全ての操作をキャンセル

おわり

JavaScript 関数のカリー化と部分適用

引数を複数とる関数から、いくつかの引数を固定値で束縛した新たな関数を生成する。これにより、関数を使うたびに同じ値の引数を入力する手間が省け、見た目も簡潔なプログラムになる。

 

カリー化とは、複数の引数を取る関数を、1つの引数のみを取る関数のチェーンに変換する処理のこと。

みてみよう!

js curry function

 

部分適用とは、複数の引数を取る関数を、それより少ない数の引数を取る関数に変換し、除外された引数には最初から値を指定しておく、という処理のこと。

関数に対して複数の引数を部分的に適用し、残りの引数で構成される関数を新たに作成する。

みてみよう!

js bind method

※bind()メソッドは呼び出されたときに新しい関数を生成する。第一引数は新しい関数のthisキーワードにセットされる。第二引数以降は、ターゲット関数の引数として、第一引数から順に与えられる。

 

JavaScriptのthis

jsのthisは、ある関数が呼び出されたときに、その関数を格納していたObjectを指す。

js how does "this" work?

 

関数を単にfunc();という形で単体で実行した場合、thisにはwindowが入る。

f:id:bambinya:20150729190027p:plain

 

new演算子のthis

jsのnewは任意の関数と一緒に呼び出すことができる。

var x = new func();

上の例では、まずnewで新しい空のオブジェクト{}が生成され、次に関数func()が呼び出される。このとき関数func内のthisには新しく生成された空のオブジェクトが渡され、関数実行後、生成されたオブジェクトがnewの実行結果として変数xに代入される。