2016年10月28日

Vim の使い方 (on Cygwin)

概要
  この投稿では, Vim エディタの使い方について説明する. 目標は,Vim の最低限の使い方を習得することである. 環境は Cygwin 上にインストールされた Vim を対象としている (※ Cygwin でなくとも同じ Vim であれば操作は変わらないはず).Cygwin のパッケージについて,個別に吟味してインストールするのは手間なので,すべてインストールした. なお,この記事は,(状況に習得を強要された) Vim 1 日目の素人によって綴られたことを明記しておく.

2016年10月21日

Python でバイナリファイルを読む

  この投稿では,Python におけるバイナリファイルの取り扱いについて,説明する.
  例えば,C 言語であれば,静的型付け言語のため,非常に簡単にバイナリ処理を記述することができる. しかしながら,Python は動的型付け言語のため,unsigned int32型などを利用したければ,多少工夫する必要がある. 例えば,1 文字ずつ (1 Byte単位で) 読み込んだデータを,bit 演算で 8 Byte分の文字列を結合することも可能ではあるが,できればそのまま読み込みたい.
  上記の目的を達成するコードは次のようにして実装される.

example.py
import numpy
FileDir = "./example.bin"
fp = open(FileDir,"rb")
data = numpy.fromfile(fp, numpy.int32, 1)
print("0x%08X" % data)

読み込むバイナリデータ

実行結果 (実行環境はリトルエンディアンであることに注意)
$ python -u example.py
0x000003E8

参考資料

2016年10月9日

深層学習 (機械学習プロフェッショナルシリーズ) の式展開メモ

  この投稿では,MLP 本あるいは,MLPS 本 (Machine Learning Professional Selease 本) の内の一冊である,深層学習 (岡谷 貴之 著) の式展開のメモを (基本的には,書籍中で,式・話し共に十分丁寧な展開がされているので,一部私が戸惑った部分のみ) 残します. この本では,ニューラルネット周辺の数学的な背景について,網羅的に説明されています. 本記事投稿時点では,ニューラルネットについて網羅的に扱っている書籍は殆ど存在しておらず, また,論理展開が丁寧であることから, 深層学習 (Deep Learning) を用いた機械学習の入門書としては,もっとも優れた本の内の一冊だと思います.

深層学習 (機械学習プロフェッショナルシリーズ)
著者: 岡谷 貴之
出版社: 講談社
発売日: 2015/04/08
メディア: 単行本
ページ数: 176 ページ


数値計算 [新訂版] (サイエンスライブラリ理工系の数学) の 非公式正誤表

  私が数値計算を始めてまともに学んだ書籍が下記の書籍です. 非常に良くまとまっていますが,「なお,これらの誤植訂正につきましては,発行点数も多く,管理上実現可能な方法は,重版時毎の訂正の他ございませんので,ご了解下さいますようお願い申し上げます」とのお返事をいただきました.出版社サイトの正誤表は更新されていないようですので,メモを残しておきます. (本正誤表は,非公式かつ非公認です.本正誤表の利用によって生じたいかなる損害や損失も補償できないことを明記しておきます)

※ブログの幅が足りなかったため,表にはできなかった


数値計算 [新訂版] (サイエンスライブラリ理工系の数学)
著者: 洲之内 治男, 石渡 恵美子
出版社: サイエンス社
発売日: 2002/05
メディア: 単行本
ページ数: 167 ページ


2016年10月8日

Cygwin + Bitbucket で Git する設定 (コマンドによる Git 入門)

概要
  この投稿では,バージョン管理ソフトウェアである Git を Cygwin 上から利用する方法について,説明する. リモートリポジトリには Bitbucket を利用することを前提とする.また,操作は基本的にコマンドを利用する. 目標は,ローカルにある既存のプロジェクトファイルを,リモートリポジトリへ push することである. なお,この記事は,Git 1 日目の素人によって綴られたことを明記しておく.

【語句】 リポジトリ : プロジェクトのこと (ソースコードのまとまり)
Bitbucket : Git が利用できるリモートリポジトリの一つ.GitHub と異なり,無料で非公開にすることができる
  (ただし,一つのプロジェクトに対して,登録できる人数は 5 名までに限られる)

2016年10月2日

$\LaTeX$ のフォントを Times New Roman にする

  $\LaTeX$ のフォントを Times New Roman にするには,下記のパッケージを指定すればよい.
(下記のパッケージは Times 系を指定するが,Times か Times New Roman かはよく分からない.しかし,両者はほぼ同一[1])
\usepackage{newtxtext,newtxmath}

Cygwin + Emacs で $\LaTeX$

  Cygwin のパッケージについて,個別に吟味してインストールするのは手間なので,すべてインストールした.
(エディタにこだわりがない場合は,Cygwin を利用せず,素直に TeXworks をインストールしても良い.あるいは,もし TeXworks で任意のエディタを設定する方法がもしあれば,それでも良い)

2016年8月28日

Principal Component Analysis; PCA (主成分分析)

  この投稿では,複数の画像データ間に対して,主成分分析を適用する場合における,数学的背景を示します.
MNISTのデータ (手書き数字の画像データ) の各画像間の変化に対して,PCAを適用した場合,下記のような式展開となります.
(画像1枚に対して,PCAを適用する場合は,また別の式展開となります.)

2016年8月25日

Emacsの設定 (based on Cygwin)

Cygwinは,後から追加インストールが度々必要となるため,全てインストールすると良い.(10~20GB程度)

Emacsは,下記のように設定した.

[c:/cygwin/home/<usrname>/.emacs]
; このファイルは emacs の設定ファイルです.
; emacs の設定ファイルではセミコロン ';' 以降の文字がコメントとして扱われます.

; ファイル名を指定して起動した場合でも,分割 2 画面にしない.
(setq inhibit-startup-message t)

; バックアップファイルを作成しない
(setq make-backup-files nil)
; 自動保存を無効
(setq auto-save-default nil)

(keyboard-translate ?\C-h ?\C-?);   \C-h: Delete

(keyboard-translate ?\216 ?\C-\S-n);\C-\S-n: [\C-\S-n]でも選択しながら下へ移動できるようにする
(keyboard-translate ?\220 ?\C-\S-p);\C-\S-p: [\C-\S-p]でも選択しながら下へ移動できるようにする

(keyboard-translate ?\206 ?\C-\S-f);\C-\S-f: 前方向に選択
(keyboard-translate ?\202 ?\C-\S-b);\C-\S-b: 後ろ方向に選択
(keyboard-translate ?\227 ?\S-\M-f);\C-\S-w: 単語単位で前方向に選択.[\M-\S-f]に同じ
(keyboard-translate ?\221 ?\S-\M-b);\C-\S-q: 単語単位で後ろ方向に選択.[\M-\S-b]に同じ

(keyboard-translate ?\201 ?\C-\S-a);\C-\S-a: カーソルから先頭まで選択
(keyboard-translate ?\205 ?\C-\S-e);\C-\S-e: カーソルから末尾まで選択
(keyboard-translate ?\203 ?\M-w);\C-\S-c: コピー
(keyboard-translate ?\226 ?\C-y);\C-\S-v: 貼り付け
(keyboard-translate ?\230 ?\C-w);\C-\S-x: 切り取り

(keyboard-translate ?\232 'undo);\C-\S-z: undo
;(global-set-key "\C-z" 'undo);UndoをCtr+z でもできるようにする


;; init.el だけに設定されてしまう
(setq c-basic-offset 4)
;; ホックを使った設定
;(defun my-c-c++-mode-init ()
;  (setq c-basic-offset 4)
;  )
;(add-hook 'c-mode-hook 'my-c-c++-mode-init)
;(add-hook 'c++-mode-hook 'my-c-c++-mode-init)

;(setq-default tab-width 2 indent-tabs-mode nil); タブにスペースを使用する
(setq default-tab-width 4);タブの表示幅の設定
;(setq indent-tabs-mode nil)
;(keyboard-translate ?\t ?\M-i);\C-q \t: タブキーを何が何でも tab キーとして入力するための設定.[タブの入力方法: Ctrl-i/ESC-i/Alt-iのいずれか,または,Ctrl-qでエスケープしてTABキーで入力];これだと 1 タブ = 8 スペースにしないと,1 タブで 1 タブ 4 スペースが 2 つ挿入される
;(setq c-tab-always-indent t); タブ (よくあるタブの設定,上記設定と競合するため注意)

;; 改行コードを表示する
(setq eol-mnemonic-dos "(CRLF)")
(setq eol-mnemonic-mac "(CR)")
(setq eol-mnemonic-unix "(LF)")

(global-linum-mode t);行番号の表示
(setq linum-format "%4d ");行番号との間に1スペース挿入する
(delete-selection-mode t);リージョンを削除できるようにする

(setq scroll-conservatively 1); スクロールを1行ごとにする

(global-set-key "\M-n" (lambda () (interactive) (scroll-up 1)));スクロール
(global-set-key "\M-p" (lambda () (interactive) (scroll-down 1)));スクロール


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://myemacs.readthedocs.io/ja/latest/basic-customize.html
;; xterm のマウスイベントを取得する
(xterm-mouse-mode t)
;; マウスホイールを取得する
(mouse-wheel-mode t)

;; ホイールでポインタを移動できるようにする
;(global-set-key [mouse-4] (kbd "C-p"))
;(global-set-key [mouse-5] (kbd "C-n"))

;; ポインタの移動ではなくて画面をスクロールさせたい場合はこっち
(global-set-key   [mouse-4] '(lambda () (interactive) (scroll-down 6)))
(global-set-key   [mouse-5] '(lambda () (interactive) (scroll-up   6)))

;;;; カーソルのある行のハイライトを有効にする
;(global-hl-line-mode t)
;; ハイライトの色を設定します
;(custom-set-faces '(hl-line ((t (:background "dark gray")))));; これが上手く動かない
(setq hl-line-face '(background "dark gray"))
;; ハイライトのスタイルをアンダーラインにします
;; ただしアンダーバーが見えづらくなる問題があります
;(setq hl-line-face 'underline)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://d.hatena.ne.jp/khiker/20070409/emacs_hl_line
;; 現在行をハイライト
;(global-hl-line-mode t)
;(defface my-hl-line-face
;  '((((class color) (background dark))  ; カラーかつ, 背景が dark ならば,
;     (:background "DarkSlateBlue" t))  ; 背景を黒に.         ; ここ,動作はするが,#FFFFFF で任意の色を指定できないのでダメ.
;    (((class color) (background light)) ; カラーかつ, 背景が light ならば,
;     (:background "ForestGreen" t))     ; 背景を ForestGreen に.
;    (t (:bold t)))
;  "hl-line's my face")
;(setq hl-line-face 'my-hl-line-face)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://keisanbutsuriya.hateblo.jp/entry/2015/02/01/162035
(show-paren-mode t)                       ;; 対応する括弧をハイライト

(setq show-paren-style 'parenthesis) ;対応する括弧だけをハイライト
;(setq show-paren-style 'expression)  ;括弧で囲まれた部分をハイライト
(setq show-paren-style 'mixed)   ;画面内に対応する括弧がある場合は括弧だけを,ない場合は括弧で囲まれた部分をハイライト
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;(keyboard-translate ?\C-\S-b ?\S-\M-b)
;(global-set-key "\C-h" 'delete-backward-char)

;;; 画面右端で折り返さない
(setq-default truncate-lines t)
(setq truncate-partial-width-windows t)

(setq x-select-enable-clipboard t);OSとクリップボードを共有(これだと上手く動作していない. Cygwin だから?)

; for clipborad
(setq sysname system-type)
(if (eq sysname 'darwin)
 (progn
   (defun copy-from-osx ()
  (shell-command-to-string "pbpaste"))
   (defun paste-to-osx (text &optional push)
  (let ((process-connection-type nil))
    (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
   (process-send-string proc text)
   (process-send-eof proc))))
   (setq interprogram-cut-function 'paste-to-osx)
   (setq interprogram-paste-function 'copy-from-osx)
   )
  (message "This platform is not mac")
  )
(if (eq sysname 'cygwin)
 (progn
   (defun paste-from-cygwin ()
  (with-temp-buffer
    (insert-file-contents "/dev/clipboard")
    (buffer-string)))
   (defun cut-to-cygwin (text &optional push)
  (with-temp-file "/dev/clipboard"
    (insert text)))
   (setq interprogram-cut-function 'cut-to-cygwin)
   (setq interprogram-paste-function 'paste-from-cygwin)
   )
  (message "This platform is not cygwin")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(add-hook 'c-mode-hook
;    '(lambda ()
;    (c-toggle-electric-state -1)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\C: Ctrl
\S: Shift
\M: Alt(Meta)
-:「同時に押す」の意味
;:コメント
(keyboard-translate ?[入力] ?[出力])
[\XXX]という番号は,emacs起動中にキーを押すと出てきた数値を入力している.PCによって異なる可能性はありうるので,注意.(当然ショートカットを割り当てた後は,数値は出ずに,割り当てたショートカットが実行される.)

windows上では,[.]から始まるファイル名を指定できないので,
一度 emacs.txt などの別名を指定した後, $mv emacs.txt .emacs のようにして,ファイル名を変更すると良い.

windowsのキー配置では,Emacsを使用し難いため,[Caps Lock]->[Ctrl]に変更しておく(keyswapを利用).
今回は,[無変換]->[英数],[変換]->[かな]の変換も行った(IMEの設定から変更可能).

参考資料
kakakikikekeのブログ 2015年3月24日火曜日 emacs で clipborad を共有する方法