18 Mar 2015, 23:18

Emacs で高速快速カーソル移動をするための小技 3 点セット

はじめに

Emacs 上でカーソルを移動するための Tips を紹介.

たいした技ではないのだけれども, この設定でかなり改善されてビックリしたので思わず記事にします.

おまけで, 最近ややビックリした改善もあわせて紹介.

[toc]

背景

Emacs で カーソル移動をするときにもっさりしていたので, なんでこんなことになっているのか調べてみました.

その 1 カーソル移動を速くする

Keyboard に入力をしたときに次の入力までの Delay が OS によって強いられる. この Delay 時間を変更することで, リピートするような入力の入力効率が劇的に上がる.

この改善の効果には感動しました!

Linux

ArchLinux の設定.

以下を.xinitrc 書く

xset r rate 200 25

Windows

windows は 設定が簡単.

  • コントロールパネル > キーボード > 速度を選択.
  • 表示までの待ち時間, 表示の間隔のバーを右にもっていく.

参考: windows でキーボードのカーソル移動速度を上げる. ばびゅーん. - 酒は血液, 呑んだら献血

コントロールパネルからだと, 表示の間隔が 31 までしかさげることができな い.しかし, レジストリをいじると, その限界を越えることができる.

自分は, レジストリをいじって, 25 に設定した.

Mac

Mac をもっていないので, ブックマークだけ. Karabiner というフリーソフトをつかうそうな.

その 2 スクロールを鮮やかにする

この改善もやや感動.

以下の elisp を導入するとスクロールがかっこよくなった.

(require 'smooth-scroll)
(smooth-scroll-mode t)

参考:

その 3 カーソル移動で小指を守る

最近, 小指がいたくなってきて (とくに休日) Emacs の弊害を感じている. たぶん, Emacs じゃなくて, Let’s Note のへんな Ctrl の 位置だと思うのだけれども.

そこで, これは小指をつかわないでカーソル移動をする技.

hydra というパッケージを利用することで, これが可能.

C-z で hydra-move が発動. あとは, 小指を外して移動可能. 先ほどの scroll も組み合わせてみた.

(require 'hydra)

(global-set-key
 (kbd "C-z")
 (defhydra hydra-move ()
   "move"
   ("f" forward-char "right")
   ("b" backward-char "left")
   ("n" next-line "down")
   ("p" previous-line "up")
   ("SPC" scroll-up-command "down")
   ("<backspace>" scroll-down-command "up")
   ("." hydra-repeat "repeat")))

hydra は, おもしろい記事をかく abo-abo さんの作品だ.

17 Mar 2015, 23:11

リッカート法によるアンケートの相関分析を R でする方法のメモ

はじめに

5 段階アンケートで欲利用されるリッカート法と, アンケート結果の相関関係をを調べる方法を紹介します.

アンケート結果はカテゴリカルデータなため, そのままでは相関係数が求められないので, 一工夫必要.

[toc]

背景

職場でアンケートを実施したのだけれども, 分析の仕方が分からなかったので, カテゴリカルデータの相関分析方法を調べてみた.

リッカート法の紹介

リーカート法は, 5 段階評価, 7 段階評価のアンケート.

リッカードの視覚化には帯グラフが適している.

R で 相関を調べる

cor 関数を使う.

二変数の相関

cor (bull$YearsPro, bull$BuckOuts)

多変数の相関. 配列で渡す.

myvars <- c ('YearsPro', 'Events', 'BuckOuts')
cor (bull[,myvars])

カテゴリカルデータの相関

numeric データに変換

ここからが本題. カテゴリカルなデータの相関を出すには, カテゴリを数値に変換する必要がある. as.factor, as.numeric を利用する.

val <- as.numeric (as.factor (var))

plot で描写

相関関係の散布図を一度に生成することは, plot 関数で可能だ. しかし, カテゴリカルデータに対しては, あまりみても情報が得られない.

ここにシャレたグラフの R スニペットがある.

ポリクコック相関係数

相関係数はでピアソンを利用するよりも, ボリクコック相関係数を利用するのがよいらしい.

これはまだ試していない.

以下のようなデータから相関関係を読み取る.

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 21- 長野 3 3 5 5 11-20 川崎 2 3 5 4 11-20 川崎 4 5 4 4 21- 長野 4 3 5 4 -10 川崎 1 1 5 3 21- 川崎 1 1 4 2 -10 川崎 1 1 4 4 21- 川崎 4 2 5 5 11-20 長野 1 1 4 1 -10 川崎 2 1 5 3 21- 長野 4 5 3 4 21- 川崎 4 4 4 4 21- 長野

データ処理

カテゴリカルデータを変換.

answerNum <- answer
answerNum$勤続 <- as.numeric (as.factor (answer$勤続))
answerNum$所属 <- as.numeric (as.factor (answer$所属))
print (answerNum)

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 3 2 3 3 5 5 2 1 2 3 5 4 2 1 4 5 4 4 3 2 4 3 5 4 1 1 1 1 5 3 3 1 1 1 4 2 1 1 1 1 4 4 3 1 4 2 5 5 2 2 1 1 4 1 1 1 2 1 5 3 3 2 4 5 3 4 3 1 4 4 4 4 3 2

相関をもとめる

factors <- names (answerNum)
result <- cor (answerNum[,factors])
result <- round (result, 4)
       向上心    好奇心    危機感    責任感   勤続      所属

向上心 1 0.822 -0.1041 0.6775 0.1867 0.4872 好奇心 0.822 1 -0.3991 0.5277 0.3136 0.2521 危機感 -0.1041 -0.3991 1 0.2198 -0.2306 0.0195 責任感 0.6775 0.5277 0.2198 1 0.3947 0.2823 勤続 0.1867 0.3136 -0.2306 0.3947 1 0.4739 所属 0.4872 0.2521 0.0195 0.2823 0.4739 1

散布図

plot (answerNum)

15 Mar 2015, 02:38

R で Excel のデータを読み込む方法のメモ (Windows)

はじめに

Windows 環境に R をインストールします. また, Excel データを R から読み込んでみます.

[toc]

Environment

<div class="outline-text-3" id="text-1-1">
  <ul class="org-ul">
    <li>
      windows 8.1
    </li>
    <li>
      R version 3.1.3
    </li>
  </ul>
</div>

R のインストール

以下から最新版をインストール.

インストール後, パスを通す.

[sourcecode language=”text” title=””]
C:\Program Files\R\R-3.1.3\bin\x64
[/sourcecode]

コマンドプロンプトをを開いて R と打ち込んで R プログラムが立ち上がれば OK.

文字化けする場合はコンソールで chcp 65001 と入力で UTF-8 になる.

Excel 用のパッケージ取得

xlsx パッケージを利用することで, Excel ファイルを R から読みこむことができる.

CRAN からインストール.R コンソール上で,

[sourcecode language=”bash” title=””]
install.packages ("xlsx", dependencies = TRUE)
[/sourcecode]

使い方マニュアル.

読み込みテスト

<div class="outline-text-3" id="text-3-1">
  <p>
    以下のサイトからサンプルデータ習得して読み込んでみる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.lanlan.co.jp/mtuinfo/exceldata.html">Excel データサンプル</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> require (xlsx)
  </p>

  <p>
    # read excelsample.xls sheet1<br /> data <- read.xlsx ("C:\\Users\\tsu-nera\\Downloads\\excelsample.xls", 2)<br /> head (data)<br /> [/sourcecode]
  </p>
</div>

<div id="outline-container-sec-3-1-1" class="outline-4">
  <h4 id="sec-3-1-1">
    result
  </h4>

  <div class="outline-text-4" id="text-3-1-1">
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> 仮設工事 1 1 401350 320888 401350 79.953 100 401350 320888 401350 33.83 0<br /> 基礎工事及び土工事 1 1 7861394 6296746 7854794 80.098 99.917 7861394 6296746 7854794 0 0<br /> 屋外付帯工事 1 1 435800 348640 435800 80 100 435800 348640 435800 0 0<br /> 木工事 1 1 515720 412576 515720 80 100 515720 412576 515720 0 0<br /> 外壁工事 1 1 3239500 2575650 3207600 79.508 99.016 3239500 2575650 3207600 0 0<br /> 屋根及び板金工事 1 1 402400 321920 402400 80 100 402400 321920 402400 0 0<br /> [/sourcecode]
  </div>
</div>

その他

RExcel を利用すると R へ Excel データを読み込まずとも, Excel 上から R を呼び出すことも可能.

14 Mar 2015, 04:42

LPIC 102 合格

できなかった.. 不合格.

11 Mar 2015, 15:35

Emacs からビッグデータの叡智へ瞬速アクセスだ! 新しい Emacs Evernote Cleient の geeknote がイイ

はじめに

Emacs の Evernote を 2 つ紹介します.

  • evernote-mode
  • geeknote

きっかけ

数年前に Evernote を Emacs でつかう記事をかいた.

記事をかいてしばらくして, Evernote API の仕様変更で一時期使えなくなってしまった.(アクセス token)

メイン PC が Linux に変えたら, Evernote すら利用をしてなかった.

最近, 久しぶりに Evernote にアクセスしてみて, また Evernote を触りたく なってきた.=geeknote= という新手の Evernote クライアントが登場したため, 最近の Evernote 事情について調べてみた.

evernote-mode

本家のリポジトリはメンテされてない.

install

基本は, doc 配下にある readme を読む.

ポイントは ruby 1.9 が必要!! 以下を実行.

$ gem-1.9 install evernote_oauth
$ ruby-1.9 ruby/setup.rb

/usr/bin/enclient.rb error

/usr/bin/enclient.rb がないとエラーする件は, readme に解決方法がかいてあった. 複数 ruby バージョンインストール時に発生.

setup.rb 実施後に, マニュアルでコピーする.

$ sudo cp /usr/bin/ruby1.9/bin/enclient.rb /usr/bin

auth token

事前にトークンを取得して, 以下のようにかく必要あり.

(setq setq evernote-developer-token "Your developer token.")

config

(setq evernote-ruby-command "ruby-1.9")

(require 'evernote-mode)
(global-set-key "\C-cec" 'evernote-create-note)
(global-set-key "\C-ceo" 'evernote-open-note)
(global-set-key "\C-ces" 'evernote-search-notes)
(global-set-key "\C-ceS" 'evernote-do-saved-search)
(global-set-key "\C-cew" 'evernote-write-note)
(global-set-key "\C-cep" 'evernote-post-region)
(global-set-key "\C-ceb" 'evernote-browser)

感想

頑張って導入してみたものの, あまり使えない子だった.

  • スピードが遅い.
  • 通信中のしばしハングが苛立つ.
  • ときどき動かない.
  • evernote-mode でかいたものしか見れない. (これは w3m をつかうと解消できるが)

geeknote

コマンドラインベースのツール. geeknote.el は Emacs の Evernote クライアント.

Geeknote の設定

以下からダウンロードしてインストール.

git clone git://github.com/VitaliyRodnenko/geeknote.git
cd geeknote
sudo python setup.py install

geeknote login
geeknote settings --editor "emacsclient"

Emacs の設定

Emacs は server モードで立ち上げておく必要あり.

(requier 'geeknote)
(global-set-key (kbd "C-c g c") 'geeknote-create)
(global-set-key (kbd "C-c g e") 'geeknote-edit)
(global-set-key (kbd "C-c g f") 'geeknote-find)
(global-set-key (kbd "C-c g s") 'geeknote-show)
(global-set-key (kbd "C-c g r") 'geeknote-remove)
(global-set-key (kbd "C-c g m") 'geeknote-move)

geeknote コマンドを eshell 経由で emacs からコールして, 結果を eshell buffer に出している.

geeknote の elisp wrpper といったところか.

感想

コマンドラインからの検索の サクサク感に驚いた.

  • 早い
  • 簡単
  • 便利

というわけで, すぐに気に入ってしまった.

そして, もう一点気に入ったのは, テキストはすべて Markdown 形式に変換されて表示される こと.

自分は twtitter や ブログや はてぶを全部 Evernote につっこんでいるのだが, これらの情報源から, 単語をもとにサクッと検索できる.

  • 未知のものは eww で Google 検索.
  • 既知のものは geeknote で Evernote 検索.

この二つの情報源に Emacs から素早くアクセスできることは素晴らしい.

さらに, Emacs から geeknote を呼べるというこで, カスタマイズ次第では追加機能を簡単に実装できそうなところも気に入った.

08 Mar 2015, 07:19

Eshell を使い倒すための Tips いろいろ

はじめに

以前から, Emacs の shell 環境として eshell をつかいつづけてきた.

だいたい, ノウハウがまとまりつつあるので, ここらでスナップショットと して設定をメモしておこうと思う.

Eshell 固有

prompt のフォーマット

prompt のフォーマットを自分独自のものにする.

(setq eshell-prompt-function
      (lambda ()
        (concat "[tsu-nera"
                (eshell/pwd)
                (if (= (user-uid) 0) "]\n# " "]\n$ "))))

eshell alias

eshell の alias 設定

eshell 上では eshell/hoge というコマンドは hoge に置き換えられる.

(setq eshell-command-aliases-list
      (append
       (list
        (list "ll" "ls -ltr")
        (list "la" "ls -a")
        (list "o" "xdg-open")
        (list "emacs" "find-file $1")
        (list "m" "find-file $1")
        (list "mc" "find-file $1")
        (list "d" "dired .")
        (list "l" "eshell/less $1"))))

eshell からファイルを開く.

find-file を利用すると, emacs [ファイル名] というかたちでファイル を開くことができる.

(list "emacs" "find-file $1")
(list "m" "find-file $1")
(list "mc" "find-file $1")

eshell から dired を開く.

(list "d" "dired .")

eshell から less を開く

独自巻数を追加.

;; written by Stefan Reichoer <reichoer@web.de>
(defun eshell/less (&rest args)
  "Invoke `view-file' on the file.
\"less +42 foo\" also goes to line 42 in the buffer."
  (interactive)
  (while args
    (if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))
    (let* ((line (string-to-number (match-string 1 (pop args))))
           (file (pop args)))
      (view-file file)
      (goto-line line))
      (view-file (pop args)))))

新しいシェルを開く

Eshell を複数起動するためには, 一工夫必要.

(defun eshell/make-new-eshell (name)
  "Create a shell buffer named NAME."
  (interactive "sName: ")
  (setq name (concat "$" name))
  (eshell)
  (rename-buffer name))

eshell with helm

Eshell と helm を組合せ.

つかいかた

(use-package helm-eshell
  :init
  (add-hook 'eshell-mode-hook
        #'(lambda ()
        (define-key eshell-mode-map [remap eshell-pcomplete] 'helm-esh-pcomplete)))
  (add-hook 'eshell-mode-hook
        #'(lambda ()
                (define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history))))

shell 共通

ここからは, eshell 以外でも利用できるものを.

shell-toggle

現在ページに移動してでシェルを起動する.

(require 'shell-toggle)
;; eshell をつかう.
(setq shell-toggle-launch-shell 'shell-toggle-eshell)

;; フルスクリーンで切り替え
(setq shell-toggle-full-screen-window-only t)

(global-set-key [M-f1] 'shell-toggle)
(global-set-key [C-f1] 'shell-toggle-cd)

shell-pop

シェルをポップアップ.

設定すると, 下からピョコットシェルがでてくるので便利.

(require 'shell-pop)'

(custom-set-variables
 '(shell-pop-default-directory "~/")
 '(shell-pop-shell-type (quote ("eshell" "*eshell*"
                                (lambda nil (eshell shell-pop-term-shell)))))
 '(shell-pop-term-shell "/usr/bin/zsh")
 '(shell-pop-universal-key "C-t")
 '(shell-pop-window-height 30)
 '(shell-pop-full-span t)
 '(shell-pop-window-position "bottom"))

exec-path-from-shell

環境変数 PATH を引き継ぐ.

(require 'exec-path-from-shell)
(exec-path-from-shell-initialize)

Emacs の起動フォルダを変更する.

C-x C-f で開くディレクトリがデフォルト. Windows だと, Emacs の起動ディレクトリになってしまう.

default-directory を利用する

(when windows-p
  (setq default-directory "C:/cygwin64/home/tsu-nera"))

term-run

interactive なターミナルアプリを動かす.

これで, ますます Emacs に引きこもれる.

(require 'term-run)

(defun term-run-alsamixer ()
  (interactive)
  (term-run-shell-command "alsamixer"))

07 Mar 2015, 11:56

システム制御は奥が深い! 井戸の中の蛙な自分.coursera で Cloud Computing Cocepts をうけた

はじめに

coursera で クラウドコンピューティングを学ぶ講座をとりました.

分量が多いので, Cloud Computing Concepts は Part1,2 に分かれている. 今回は, Part1 についての記事.

これは, クラウドコンピューティング 3 シリーズのなかのはじめに位置する講座です.

  • Distribute Systems
  • Cloud Application
  • Cloud Networking.

内容

内容は分散コンピューティングについての古典的な理論から, 最新の研究の話題まで, 幅広い.

Part1 では, 以下を学んだ.

  • Introduction

Clouds, Mapreduce, Key-value stores

  • Classical Precursors

Peer-to-ppeer systems, Grids

  • algorithms

Gossip, Membership, Paxos

  • Classical algorithms

Time and Ordering, Snapshots, Multicast

NoSQL や P2P の最前線の話題についても触れる.

動画がとても早口 (通常速度で x1.3-5 くらい?) あまり英語を聞き取れず. もっぱら以下の本の該当個所を読みながら進めた.

プロクラミングの課題もある. C++ で実装する.

感想

以前の仕事について

この記事とかぶる部分もあるが, もう一度.

今働いている会社の部署は, サーバやストレージ製品の制御ファームをつくっている. クラウドコンピューティングに関わる製品の設計開発だ.

そして自分はというと, 今でこそ名実ともに窓際族であるので 部署の仕事とまったく関係ない遊び人をしているが, かつてはストレージ製品の開発に関わってた.

自分の担当していた機能は, 異常検出.

2,4,8 ノードのそれぞれ独立した RAID コントローラが, それぞれを互いに監視しあう. あるコントローラで異常が発生したときは, 別のコントローラが異常をすばやく検出して, エラーリカバリを実施する.

なので, 以今回学んだことは前の仕事にかなり関わってた.

あまりに無知だった

8 ノードでの異常検出について自分の頭でいろいろ考えた.

自分の知らないところでは, そのような知識は体系化されて, 理論的な裏付けがされていて, 改良されていることなど, 想像だにしなかったことだった.これには, とても驚いた.

以下, 具体例をあげる.

Failure Detector/HeartBeating

異常検出については, 以前の記事でまとめた.

Membership List

自分の関わってきた製品は, 最大 8 ノードまでだったが, 今後はノードが動的に追加できる, スケールアウト型ストレージの需要がでてくるかもしれない.

今までは, 固定の構成で仕様を考えていたが, 動的に変更されるような構成で仕様を考えることになるかもしれない.

スケールアウト型の制御方法で王道的な制御方法として MembershipList による制御があることをしった.

Consensus

Master-Slave アーキテクチャで制御しているとき, Master であるノードで異常が発生したさいに, 次の Master ノードを決定する必要がある.

また, 複数ノード同時に異常を検出した場合, 被疑個所がノードにあるの か通信経路にあるのかを決定して, たのノードと合意をとる必要がある.

このような, 複数のノード間で単一の結果について合意を得るプロセス は Consensus 問題と呼ばれていて, それに対して効果的なアルゴリズム の研究がされている.

システム制御は奥が深い! そして自分は井戸の中の蛙だった

自分の所属している部署は, 自称システム制御を得意としているが, それは井戸の中の蛙のような気がしてきた. いったい, なにと比較して得意だといっているのだろうか? 年月だけ重ねても, 世の中についていけなければ意味がない.

他のクラウド製品が, フォルトトラレント性を確保するために どのようなことをしているのか, まったく無知である. それらは企業秘密ということもあり, 特許で防衛しているところもある.

しかし, 世の中では, 分散コンピューティングの理論やアルゴリズムが 日進月歩で開発されていて, Yahoo, Google, Facebook などの先端企業は そのような技術を取り入れている.

新しい技術に対して無知であることは, 世の中からとりのこされるばかりか, 自分たちの仕事すらなくなってしまうおそれのある, 非常に危険なことだ.

継続して技術動向を追いかけていくような態度が必要だ. それは, 自分にも必要だが, 組織にも必要だ.

07 Mar 2015, 05:00

吉田松陰の志と Futurismo

はじめに

NHK の大河ドラマ 花燃ゆ の 第 9 回を偶然みた. (というより, カフェのテレビで字幕放送を読んだ)

世の中がつまらんという高杉晋作に対して, 久坂玄瑞が以下のような台詞を言う.

世の中がつまらんのではなく, お前がつまらんのだ

この台詞が少し自分にも引っかかったので,突っ込んで調べてみる.

ドラマの背景知識の整理

高杉晋作

高杉晋作の以下の格言を知っていた.

おもしろきこともなき世をおもしろく

おそらく, 今回の回の台詞はこの言葉への伏線になっているのだろう.

吉田松陰

松陰が, 晋作に対して, あなたの志はなんですか と問う. 志を立ててそれに向かって突き進めば, つまならいことなどないということだ.

Wikipedia から, 以下のような格言を引用.

志を立てて, 以って万事の源となす.

立志尚特異 (志を立てるためには人と異なることを恐れてはならない) 俗流與議難 (世俗の意見に惑わされてもいけない) 不思身後業 (死んだ後の業苦を思い煩うな) 且偸目前安 (目先の安楽は一時しのぎと知れ) 百年一瞬耳 (百年の時は一瞬にすぎない) 君子勿素餐 (君たちはどうかいたずらに時を過ごすことなかれ)

はたして, 志とはなんだろうか?

これも Wikipedia にしたがうと, 目的, 目標. 信念.

感覚的には, とても大きな目標, 生活や人生をかけるような目標につかうのがあっている.

オレの志

ドラマがこころにのこったワケ

冒頭の久坂玄瑞の言葉がこころに残ったのも, 自分も世の中がつまらんとおもってたかたからだと思う. そして, つまらんのは自分自身だったというわけ.

志を立てて, 以って万事の源となすとは, よい言葉だ. 果たして, 自分の志とはなにか?

スゴいプログラマになりたい

いろいろ考えてみたのだが, 具体的になにも思いつかなかった. できれば, なにもしたくないというのが本音だったりする. 最近, 朝起きるのがつらくて, このままずっと眠っていたいと思う.

ただ, これだけは思う.

スゴいプログラマになりたい

なにをもってスゴいというのか, そこが具体化できないという, 情けないことなのだが, こう目標を掲げると, ふとんから出る気力がわく.

  • たくさんの人が利用してくれるようなプログラムをかく.
  • プログラムの歴史で新規領域を切り開く
  • プログラミングで世界を変える

どうなるかわからない, また数年後にはそれは変わるかもしれない. 数年前は, このような志はおもってなかった. 変わったら変わったでそれでよい. 先のことはわからない.今の自分の活力の源となればいい.

今は, 志がより具体化できるように, CS に関わるいろいろなことを学んでいる. この領域というものが見つかればいいのだが, まだコレというものが見つからない.

趣味は暇つぶし

最近, 趣味はなんですかと聞かれることがある.

以前は, 趣味がたくさんあったのだが, 最近は過去の趣味を捨て去るようにつとめている.

趣味とは, 暇つぶしだと定義する. 志がない人にとっての人生の慰め. 志があり, 以ってそれを万事の源にするならば, 趣味はつまらん世の中の暇つぶし.

そして Futurismo へ

上にかいているようなことは, よく思うことで, このブログを立ち上げたときも, そう思っていた.

このブログを立ち上げたときから, 3 年がすぎた. この 3 年間で, 自分はプログラマとしてはとても成長した.

futurismo. そうだ, オレは未来派ハッカーになることが志だった. オレの志は, Futurismo だった.

ハッカー未来派宣言という, 酔った勢いでかいたような目標だけれども, この掲げた志に向かって, 進み続けてきたし, これからも進みつづける.

追記

深堀りが足りなかった気がする.

なんのためにスゴいプログラマになりたいのか?

地位や名声を得るため? お金持ちになるためか? そのようなものに興味かない.給料明細なんて, 2 年くらいみたことがない. いや, 正確には, 地位とお金に興味はないが, 名声がほしい.

退屈がこわい

きっと退屈なんだ, なにかに夢中になっていないと. 退屈が嫌いで怖くて, 耐えられない. 退屈は虚無とも言い換えられる.

退屈から逃げたいために,熱中できるなにかを探している.

それは, プログラミングでなくてもいい. 自分がフローになれるなにかならばなんでもいい.

立川談志というひとは, 爪楊枝の先を眺めて過ごしたり, たち小便をいかに遠くまで飛ばせるかに夢中になっているひとと, 天下国家に夢中になっているひとと, 差はないといった. それは, 落語と歌舞伎の関係と関係している.

虚しさに耐えられないから, なにかに夢中になることを求めている. その恐怖感は, ひとときの快楽よりも大きい. 恐怖感の逃げ道が世のため人のために向けられればそれは志となる.

あらためまして

改めて, 問う. オレの志はなんだ?

それは, プログラミングを通じて夢と感動を追い求めること.

夢を見つづけていたい. 夢中になっていたい. 夢中になれるものを探している. それは利己的な目的だ. あえて, 利他的にいいかえれば, 夢中になっている自分を他人にも 見せることで, 他人を刺激し, 元気をあたえ, ともに高め合う.

興味の対象を限定することで,より深く対象の本質に近づけると思うので, 興味の対象をプログラミングに向ける. 0 と 1 のバイナリの世界とにらめっこをすることは, 天下国家を論じることと価値の高低はない.

なんだか, “xxxx によって夢と希望を!“みたいな月並みな志になってしまった.

02 Mar 2015, 13:21

SICP 手続きによる抽象の構築を読んだ

はじめに

SICP を今年から読んでいます. 第一章を読むのに 2 ヶ月かかった!

こりゃ, 全部読みきるのに 1 年くらいはかかりそうだ… or2.

気長に楽しみながら頑張る. 切りがいいので, ここまでの要点をまとめてみる.

手続きとは

大事な, そしてややこしい用語がでてくるので, 整理する.

式 (Expression)

計算機の解釈系に渡される前の表現. 解釈系に評価されると, 式はプロセスになる.

以下, wikipedia からの引用も.

言語によって定められた優先順位や結びつきの規定に則って評価 される値, 変数, 演算子, 関数の組み合わせ.

プロセス (Process)

プロセスは計算機のなかに潜む抽象的な存在. プロセスはもう一つの抽象的な存在, データを操作する. プロセスの進行は, 規則のパターン, プログラムにしたがう.

プログラム (Program)

プロセスの進行を指示する, 規則のパターン.

プログラムは二つの要素をもつ.

  • 手続き: データの処理方法 (能動的) ex.) +, -
  • データ: 処理したいもの (受動的) ex.) 1,2,3

手続きによる抽象の構築

この章のおもしろいところは, はじめは基本的な手続きからはじまり, ひとつずつ抽象度をあげていくところにある.

章でいうと, 1.1 と 1.3. 1.2 は再帰手続きについてかかれている.

                     procedures       data

primitive element +, *, <, = 23, 1.738 means of combination () combination
if
cond
means of abstraction defun

言語は以下の仕掛けを有している.

Level0: 基本式 (プリミティブな手続きの構築)

もっとも基本的な手続き.

  • which represent the simplest entities the language is concerned with,
  • 言語が関わるもっとも単純なものを表す.

primitive expressions 基本式:

  • which represent the simplest entities the language is concerned with,
  • 言語が関わるもっとも単純なものを表す.
1, +, -

Level1: 組合せ法 (組み合わせ手続きによる抽象の構築)

複数の手続きを組み合わせて一つにした手続き.

  • by which compound elements are built from simpler ones.
  • より単純なものから合成物をつくる.

Emacs Lisp では 組合せ (combination) は () で表現する.

(* 1 1)

Level2: 抽象化法 (名前つき値による抽象の構築)

オブジェクトを値 (value) とする変数 (variable) を識別するものが名前. 名前をつけることで, 値を識別する.

Emacs Lisp では 名前つけは defun で表現する.

(defun size () 2)
(size)

Level3: 手続き定義 (名前つき手続きによる抽象の構築)

名前付けは, 値だけでなくて手続きにもできる.

  • by which compound elements can be named and manipulated as units.
  • 合成物に名をつけ, 単一のもとして扱う.

名前のつけられた手続き. これをいわゆる関数と呼ぶ.

(defun square (x) (* x x))

手続き定義は, 細部をかくすことができる. いわゆる 手続き抽象 という.

Level4: 高階手続きによる抽象の構築

手続きをあつかう手続きを高階手続きという

  • 手続きを引数にとる
  • 手続きを戻り値として返す
(square (square (square 2)))

Level5: lambda (名前なし手続き による抽象の構築)

高階手続きの引数にいちいち, defun で定義された手続きをわかすのは煩わしい.

名前なしの手続きを扱いたい. プロセスを生み出す特殊形式を lambda という.

Emacs Lisp では lambda で表現する.

名前つき手続きは, 以下の糖衣構文となっている. Lisp インタプリタは実際には以下のように解釈している.

(defun square
    (lambda (x) (* x x))

さいごに

さいごに, 感動したセンテンスをぬきだして, 第一章を締めくくる.

われわれはプログラマとして, プログラムの根底にある抽象をみつけ, より強力な抽象化ができるように努めてなければならない.

高階手続きの重要さは, それにより抽象をプログラム言語の要素して 確かに表せ, 他の計算要素として扱えるようになる点にある.

01 Mar 2015, 15:58

org-table の表で記録した睡眠時間を R で折れ線グラフにして表示する方法

はじめに

最近, 寝坊がひどいので, 睡眠時間管理をちゃんと使用と思います.

記録は org-mode で実施しようと思うので, org-mode で作成した表を R をつかって折れ線グラフをかく方法を調べました.

やりかた

org-table を R 言語の中で利用するには以下が必要.

  1. table に tblname をつける
  2. begin_src のオプションで :var オプションをつける.

実例: 睡眠時間の可視化

org-table

以下のようなテーブルを用意します.

#+tblname: sleeptime
 | Date            |  Bed | Wake | Total | fisical |
 |-----------------+------+------+-------+---------|
 | <2014-09-01 月> |   25 |  7.5 |   6.5 |      0. |
 | <2014-09-02 火> |   23 |  5.5 |   6.5 |      0. |
 | <2014-09-03 木> |   23 |  7.0 |    8. |     1.5 |
 | <2014-09-04 木> |   23 |  7.0 |    8. |     1.5 |
 | <2014-09-05 金> |   23 |  7.5 |   8.5 |      2. |
 | <2014-09-06 土> |   25 |  8.0 |    7. |     0.5 |
 | <2014-09-07 日> | 28.5 | 11.0 |   6.5 |      0. |
 | <2014-09-08 月> |   24 |  7.5 |   7.5 |      1. |
 | <2014-09-09 火> | 22.5 |  5.5 |    7. |     0.5 |
 | <2014-09-10 水> | 23.5 |  7.5 |    8. |     1.5 |
 | <2014-09-11 木> |   22 |  7.5 |   9.5 |      3. |
 | <2014-09-12 金> |   21 |  7.5 |  10.5 |      4. |
 | <2014-09-13 土> |   20 |  8.0 |   12. |     5.5 |
 | <2014-09-14 日> | 28.5 |  9.5 |    5. |    -1.5 |
 | <2014-09-15 月> | 23.5 |  7.5 |    8. |     1.5 |
 | <2014-09-16 水> | 22.0 |  7.5 |   9.5 |      3. |
 | <2014-09-17 水> | 23.0 |  5.5 |   6.5 |      0. |
 | <2014-09-18 木> | 24.0 |  7.5 |   7.5 |      1. |
 | <2014-09-19 金> | 24.0 |  7.5 |   7.5 |      1. |
 | <2014-09-20 土> | 24.5 |  8.0 |   7.5 |      1. |
 | <2014-09-21 日> | 26.0 |  8.0 |    6. |    -0.5 |
 | <2014-09-22 月> | 23.0 |  7.5 |   8.5 |      2. |
 | <2014-09-23 火> | 28.5 |  8.5 |    4. |    -6.5 |

表の先頭に, tblname:をつけるのがポイント

#+tblname: sleeptime

R

次に 表を R のデータフレームとして取り込んで処理します.

  #+begin_src R :file sleeptime.png :width 500 :height 500 :results graphics :var sleeptime=sleeptime
  date <- strptime (sleeptime$Date, "<%Y-%m-%d")
  plot (date, sleeptime$Total, xlab='date', ylab='Sleeptime', main='Plot of Sleeptime (2014/09)', type='l')
# #+end_src

:var オプションがポイント.

:var sleeptime=sleeptime

評価すると,以下のような折れ線グラフができました.