08 Apr 2015, 13:39

ミライの スマートカーの エンジニアになる

はじめに

日記です.

昨日会社で席替えをして, 新しい部署に移動した. しかし, 所属はいまのまま変わらずに席だけ移動した.

4/21 から, 新しい仕事が始まる.

ミライの IT 自動車のお仕事

今度の仕事は, 自動車関連だ.

現在, 自動車の IT 化が急速に進んでいる. その波にうまくのろうというお仕事.

しかし, 困ったことに, 自分はまったく車に興味がないということだ!! これはイタい.

興味があるとすれば, Back to the future ででてきたようなデロリアンを開発すること. 空飛ぶ車は映画では 2015 年にあるはずなのに, おかしいなぁ.

あと, レースクィーンに興味がある.

外にでていく勇気

移動した部署は, 社外活動が活発な部署だ. たくさんのひとが気軽に展示会に足を運ぶ. そこが内気でなかなか外にでていけない自分には不安だ.

オープンソースのコミュニティに関わる機会もあるみたいだけれども, 果たして自分に一体なにができるのだろうかと, 不安になる.

しかし, 逆に考えれば, これは今までの自分から変わるための転機ともとらえられる.

社交性や社会性のなさはいつも自覚しているのだが, そんな自分を変えたいといつも思う. 弱い自分の声に負けないように, いつも気を強くもとう.

08 Apr 2015, 11:24

Hackernews や Reddit で 海外の技術情報をギャンギャン収集するのだ

はじめに

Hackernews と Reddit で英語の技術情報を漁る方法, およびそれを Emacs からみる方法の紹介.

[toc]

きっかけ

社内で, 英会話のサークル活動をすることなった. 初日の今日は, 半年後の目標を英語で 1 分話した. 自分が話したことは,

英語の技術情報を素早く収集する力をつけること

そのためには hackernews を毎日速読すること

と言うわけなのだ. 今現在は, 主にはてなブックマークで話題になったものを読んでいる. それは日本に閉じている.

海外サイトのほうが

  • ユーザ数が圧倒的におおい.
  • よりおもしろい情報だったり,
  • 技術の最新情報は英語ででてくるだろう

という理由から, 海外で話題の hackernews と reddit を毎日読むことにした.

Web サイトで読む

reddit

reddit とは, 2ch のような掲示板の海外版. 最近人気が急上昇.

reddit は default では, いろんなキーワードをもとに情報を集めている. 以下のサイトを参考にして, 一旦すべてのキーワードを unsubscribe にする.

その後, Programming と Emacs のみを購読するように設定.

hackernews

世界中のハッカー・ギークが読んでいるウェブサイト. 英語圏で話題になったニュースやブログ投稿が集まっていて, 日々更新される.

最近, Hackernews で話題になった記事を翻訳するサイトも現れた.

Hackernews で話題になった記事のタイトルだけ翻訳されているものもあった.

Emacs で読む

Emacs を利用しているひとは, なんでも Emacs ですませたいはず. さがしてみると, Emacs で reddit や hackernews を読むための elips があった.

おわりに

よーし, これで準備は整った. たくさん読むぞー.

02 Apr 2015, 13:17

障害発生時のログ解析のコツはなに?

はじめに

今日は, 昨日テストした内容のログ解析を一日 (+ 残業時間含む) やってた.

途中でよくわからなくなってきて, WireShark のバグを疑ったりしたけれども残念ながら自分のバグだった.

どうすれば, ログ解析を素早くできるようになるのだろうか?

そこで, 思いつくままにアイデアを書いてみる.

[toc]

事象を把握する

まずは, エラーメッセージ見るところからスタート.分析の前提となる

  • 試験手順
  • 環境

を確認する.メールで依頼がきたら欲メールを読む.これは, まずは頭の中に前提を把握したほうが分析がしやすいから.

前提を見逃していて全然関係ないところを防ぐためでもある.

分析

ロジカルシンキングの方法で有名なものが 2 つある.

  • 仮説思考
  • なぜなぜ分析

この二つは真逆のアプローチだが, 両者を状況によってつかいわけるのがいい.

仮説を立てる

一番大事なことは, アタリ をつけること.

障害が入り組んでいるときは, 注意深くログをチェックする部分を絞り込む必要がある.

これが原因だろう というアタリをつけて調べることで, 時間を節約することができる.

コンサルの世界では, 仮説思考がもてはやされているのも, 限られた時間内で, 素早く成果にたどり着くため.

なぜなぜ分析

これが王道の手段.

エラーログから始まって,

  • なぜ -> なぜ -> なぜ ->

と原因を探っていく.複雑な事象の場合は, 複数のバグがいりまじっていた り, 二次障害, 三次障害と絡み合っている.ロジカルに注意深く, 事象を追いかける.

追いかけているうちに迷子になったら次の項へ.

時系列にテキストに整理する

やみくもにログをおっていると, ときどき迷子になる.

そういうときは, テキストとログを交互に並び替えながら事象を列挙していく.

ログを別のテキストに転記することは, やや面倒ではあるものの, これをすると, わからなくなったときの地図になる.

その他

相談する

これは自分の悪いところではあるけれども, わからなくても一人で悩みつづけることがある.

きいてしまったほうがはやいときは, 相談したほうがいい. 実は, 相手はもう答えを知っているかもしれない.

そのためには, 普段からよい人間関係を保つことも必要.

諦めない

原因を曖昧にしたまま先に進んではいけない. その場で発生したことは最低限原因判明させてから次へいくクセをつける.

それはかならず再発する. 定時で帰りたくたって, 原因を判明させるまで は会社に残って頑張るほうがいい. 明日になるとわすれてしまうので.

この姿勢は, 最近チームメンバの先輩から学んだ.

ツールを揃える

ログを解析するには, ログ解析を助けるツールがあると便利.

  • ログをダウンロードするためのコマンドラインツール.
  • キーワードによる検索, フィルタリング
  • ログのハイライト.
  • 容易なテキスト抜きだし & 整形
    • これは,時系列にテキストに整理するため

今のプロジェクトでは, 決まりきったログツールがないので, テキストで吐き出されたプログラムのログを解析している.

自分は Emacs を駆使しているけれども, Emacs は大規模ファイルに大して遅い のが最近のストレス. 軽さでは秀丸に勝てない.

30 Mar 2015, 23:41

Emacs で家計簿をつけよう! プログラマブル複式簿記, Ledger.

はじめに

コマンドラインから 家計簿をつけることができる ledger を試してました.

ledger は

Ledger は, *nix システムのコマンドラインで動作する, 複式簿記記録ツール.

メリットは,

  • command line
  • 複式簿記
  • データはプレーンテキストで保存
  • シンプル

以下から, ダウンロードできる. マルチプラットフォーム.

つかいかた

.dat 形式の独自 ledger フォーマットで記録していく.

以下, 3 日間の自分の記録. budger.dat で保存する.

; -*- ledger -*-

2015/03/30 .
    食費:外食:主食                              4.00
    食費:外食:飲み物                            2.00
    食費:自炊                                  17.00
    資産

2015/03/28 .
    光熱費:水道                                25.00
    食費:外食:カフェ                            3.00
    食費:外食:カフェ                            3.00
    食費:外食:主食                              6.00
    食費:自炊                                   3.00
    資産    

2015/03/27 .
    食費:外食:カフェ                            3.00
    食費:外食:カフェ                            3.00
    資産

バランスシート

集計は, bal を指定する.

$ ledger -f budget.dat bal
                  25  光熱費:水道
                 -69  資産:支出
                  44  食費
                  24    外食
                  12      カフェ
                  10      主食
                   2      飲み物
                  20    自炊
--------------------
                   0

トランザクション

項目の支出の確認には, reg を指定する. もちろん reg (項目) でフィルタリングできる.

$ ledger -f budget.dat reg 外食
15-Mar-30 .                      食費:外食:主食                        4             4
                                 食費:外食:飲み物                      2             6
15-Mar-28 .                      食費:外食:カフェ                      3             9
                                 食費:外食:カフェ                      3            12
                                 食費:外食:主食                        6            18
15-Mar-27 .                      食費:外食:カフェ                      3            21
                              食費:外食:カフェ                      3            24

Emacs 連携 (ledger-mode)

Emacs 用の lisp もある.

ledger のデータファイルを編集するときのメジャーモード. Emacs から ledger コマンドを発行するための 関数がとても豊富に容易されている.

よく利用するのが, M-x ledger-report (C-c C-o C-r) これで, いろいろな情報を簡単にまとめることができる.

org-capture との連携

(require 'ledger-mode)
(add-to list 'load-path  "~/.emacs.d/el-get/repo/ledger-mode/lisp")
(add-to-list 'auto-mode-alist '("\\.dat$" . ledger-mode))

flycheck-ledger

ledger ファイルを flycheck でチェックすることもできる.

(with-eval-after-load 'flycheck
  '(require 'flycheck-ledger))

org-mode (org-babel) 連携

legder -f xx org とかくと, org-table 形式で出力.

これをやると, コマンドラインから使えなくなってしまうのが欠点.

以下の設定を追加. これで, org-babel で ledger が利用可能になる.

(org-babel-do-load-languages
 'org-babel-load-languages
 '((R . t)
   (shell . t)
   (ledger . t)))  ;; ★

#begin_src ledger :cmdline bal とかいてコードを書く. これを評価する と balance コマンドが発行される. :cmdline というオプションにいろい ろと指定すれば, 自由に ledger のコマンドが発行できる.

#begin_src ledger :cmdline org :results raw とかくと, org-table 方式でテーブル出力が可能だ. org-table からならば, R を利用し てデータ集計が可能.

まとめ

デメリット

ledger の最大のメリットは, データを簡単にフィルタリングできるという ことだと思う. しかし, 以下のようなデメリットもある.

  • データの加工は不自由 (ledger 仕様)
  • グラフもかけない
  • クラウド連携もできない

あわよくば複式簿記をみにつけたい

しかし, 自分はしばらく ledger を利用しつづけようと思う. あわよくば ledger を通じて複式簿記をみにつけたい.

ledger には, 複式簿記用の大量の機能が備わっている. これらはほとんど理解していない. データ加工は, 必要に応じて Excel や Gnu Cash をつかいわけることにする.

environment

  • Arch Linux
  • Ledger 3.1.0

Bookmarks

29 Mar 2015, 11:49

Emacs org-mode と freemind の変換と関係性についての考察

概要

Emacs の org-mode と freemind の連携について書きます.

また, 両者の関係性について考察します.

[toc]

背景

以前の自分は freemind ジャンキーだった. なんでもかんでも freemind を利用して管理していた.

Emacs を 利用しはじめてから, または, 以下を読んでから.

…. やっぱプレーンテキストだよな!!

と思って, freemind は使わなくなってしまった.

最近になって, ふと freemind を久しぶりに思わず便利さを思いだしたので, ここで, org-mode と freemind 連携を長短や連携をかんがえた.

freemind to org-mode

目的

freemind はよくわからない独自フォーマットだ. プレーンテキストでないところが気にくわない. しかもバージョンがあがると開けなくなるかもしれない.

そこで, 保存のため には freemind から org-mode への変換が必要.

障害解析に freemind を

最近, とくに freemind の効果を感じるのは, バグを出して, 障害解析をしているとき.

障害解析は 仮説をたてて, ログを確認して, 原因をかんがえる というプロセスを繰り替えし続ける. 難しいバグだと, このサイクルをまわしているうちに, 自分が今どこにいるか輪からなくなってしまう. 自分がなにを調べていたの かわすれてしまうこともある.

そこで, freemind を利用して, 何でもかんでもどんどんまとめていくことで, 障害調査中に迷子にならずにすむ.

ブログ記事の下書きを freemind で 推敲を org-mode で

このブログ記事は org-mode で書いている.

アイデアをだすのは freemind を利用して, それを org-mode に変換して ブログ記事として完成させてみるというアイデアはよい.

手段

freemind から org-mode への直接的な変換方法はない. freemind は html への export をサポートしているので, html から org-mode へ変換しようと試みた. (pandoc 利用) しかし, 変換したものは, org-mode でなかった!!

諦めずに別の方法を探してみると, vym という mindmap ツールが mindmap から org-mode への変換をサポートしていた.

vym は freemind 0.9 version を開くことができる. なので,

  • freemind 0.9 -> vym -> org-mode

という変換ルートで変換ができた.

追記:

もっといい方法を見つけた. 必要なノードを選択して org-mode へ 直接 コピペ 必要に応じて整理すればいい.

てか, これすごい.

org-mode to freemind

目的?

いろいろかんがえたのだが, org-mode から freemind にわざわざ変換する 利用シーンが思いつかなかった.

手段

目的がないのに手段があるというのもへんだけど, org-mode には 標準で freemind へ変換する手段がある.

また, この方法だと, freemind を利用して, org-mode で作成した freemind のリアルタイムプレビューなんかもできる.

(require 'ox-freemind)

以下を評価して, M-x org-export すれば freemind が選択肢にでる.

おわりに

org-mode と freemind の比較

org-mode はいわゆるアウトラインエディタだ. mindmap が アウトラインエディタに比べて優れている点は, 自由さ にあるとおもう.

逆に言えば, org-mode が freemind に対して優れている点は, 軸がある 点にあるだろう.

結論

両者, 必要に応じてつかいわければいい.

今までは org-mode にこだわすぎた. もっと柔軟にツールをわけたほうがいい.

または, freemind から org-mode へは

  • 保存
  • まとめ

のために変換する利用シーンがありそう.

  • freemind は, アイデアをだすための 使い捨てのフォーマット.
  • org-mode は保存のためのフォーマット.

28 Mar 2015, 23:47

Emacs で C/C++ の開発環境をめちゃガチャパワーアップしたまとめ

はじめに

次の業務が C/C++ をつかいそうなので, Emacs で C/C++ 開発環境を構築してみました.

題名は, なぜかけっこうアクセス数のあった Ruby 編にあやかった.

[toc]

IDE が備えるべき機能

優れた IDE が備えるべき機能と Emacs での代表的な実現方法は以下.

  • シンタックスハイライト/ インデント
    • major-mode
  • 検索・置換
    • たくさんあるよ.
  • タグジャンプ
    • gtags
    • ggtags
  • コード補間
    • auto-complete
    • company
  • エラーチェック
    • flymake
    • flycheck
  • リファクタリング
    • emacs-refactor
  • インタープリタ・デバッカ
    • emacs-dbgr
  • プロジェクト管理
    • projectile
  • ドキュメント参照
    • eldoc

最近, 以下の記事を見つけたので, 刺激をうけてまとめた.

Eclipse よりも Emacs が好き

かつて, Eclipse に洗脳されていた若き日の自分は, Eclipse における C/C++ の開発環境を徹底的に調べた.

Emacs と Eclipse どちらが優れているか?

機能的には, 優劣つけがたい. あとは好き嫌いだと思う.

  • ゴテゴテの Eclipse の UI が嫌い
  • Emacs のテキスト操作における圧倒的優位性

を考慮すると, 今は Emacs のほうが好きだ.

ただ, Emacs は 以下に書くように 設定が大変 なので,

  • 導入が面倒なひと
  • 初心者
  • サラリーマン

は Eclipse CDT でよいのでは??

実際の設定

github の dotfiles のリンクをはっておきます.

major-mode

C 言語・ C++ のためのモード.

cc-mode

C, C++, Objc, Java などなどをいっぺんに設定するモード

マニュアル.

c-mode-common-hook は java にも適用されてしまうようだ.

(require 'cc-mode)

;; c-mode-common-hook は C/C++ の設定
(add-hook 'c-mode-common-hook
          (lambda ()
            (setq c-default-style "k&r") ;; カーニハン・リッチースタイル
            (setq indent-tabs-mode nil)  ;; タブは利用しない
            (setq c-basic-offset 2)      ;; indent は 2 スペース
            ))

c++-mode

C++ 言語固有設定.

以下の記述でヘッダファイルが c++ として認識される.

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

Error Check

今は, flymake よりも, flycheck でしょう.

flycheck

gcc, clnag, cppcheck が default のチェッカーとして用意されている.

参考: 今は自分で定義しなくても build-in されているよう.


(add-hook 'c-mode-common-hook 'flycheck-mode)
  • checker の変更は M-x flycheck-select-checker
  • helm-flycheck で helm i/f から エラーを選択.

gcc

gcc だとなにも検出してくれない.なんでだろう. -> 結果が日本語表示だったから

(defmacro flycheck-define-clike-checker (name command modes)
  `(flycheck-define-checker ,(intern (format "%s" name))
     ,(format "A %s checker using %s" name (car command))
     :command (,@command source-inplace)
     :error-patterns
     ((warning line-start (file-name) ":" line ":" column ": 警告:" (message) line-end)
      (error line-start (file-name) ":" line ":" column ": エラー:" (message) line-end))
     :modes ',modes))
(flycheck-define-clike-checker c-gcc-ja
                   ("gcc" "-fsyntax-only" "-Wall" "-Wextra")
                   c-mode)
(add-to-list 'flycheck-checkers 'c-gcc-ja)
(flycheck-define-clike-checker c++-g++-ja
                   ("g++" "-fsyntax-only" "-Wall" "-Wextra" "-std=c++11")
                   c++-mode)
(add-to-list 'flycheck-checkers 'c++-g++-ja)

Refactoring

semantic-refactoring

Semantic Refactor is a refactoring tool for C/C++.

ついに見つけた, extract method. menu で番号を選択するとバグっているので, Enter で選択.(そのうちなおるかと)

(require 'srefactor)
(define-key c-mode-map (kbd "M-RET") 'srefactor-refactor-at-point)
(define-key c++-mode-map (kbd "M-RET") 'srefactor-refactor-at-point)

Completion

auto-complete-c-headers

ヘッダの情報源

(require 'auto-complete-c-headers)
(add-hook 'c++-mode-hook '(setq ac-sources (append ac-sources '(ac-source-c-headers))))
(add-hook 'c-mode-hook '(setq ac-sources (append ac-sources '(ac-source-c-headers))))

clang-complete-async

clang を利用した 補完. 構造体とかもばっちり!

(require 'auto-complete-clang-async)

(defun ac-cc-mode-setup ()
  (setq ac-clang-complete-executable "~/.emacs.d/el-get/repo/clang-complete-async/clang-complete")
  (setq ac-sources (append ac-sources '(ac-source-clang-async)))
  (ac-clang-launch-completion-process))

(defun my-ac-config ()
  (add-hook 'c-mode-common-hook 'ac-cc-mode-setup)
  (add-hook 'auto-complete-mode-hook 'ac-common-setup)
  (global-auto-complete-mode t))
  (my-ac-config)

function-args

C/C++ 用の 補完. CEDET のモダンな置き換え.

moo-complete で構造体やクラス変数が置換できるのがうれしい.

  • M-o moo-complete semantic な補完
  • M-i fa-show 関数ヒントをポップアップ
  • M-j fa-jump-maybe ポップアップ状態でオスとジャンプ
  • moo-propose-overide オーバーライドを suggest
  • moo-propose-variable 変数を suggest
(require 'function-args)
(fa-config-default)

(define-key function-args-mode-map (kbd "M-o") nil)
(define-key c-mode-map (kbd "C-M-:") 'moo-complete)
(define-key c++-mode-map (kbd "C-M-:") 'moo-complete)

(custom-set-faces
 '(fa-face-hint ((t (:background "#3f3f3f" :foreground "#ffffff"))))
 '(fa-face-hint-bold ((t (:background "#3f3f3f" :weight bold))))
 '(fa-face-semi ((t (:background "#3f3f3f" :foreground "#ffffff" :weight bold))))
 '(fa-face-type ((t (:inherit (quote font-lock-type-face) :background "#3f3f3f"))))
 '(fa-face-type-bold ((t (:inherit (quote font-lock-type-face) :background "#999999" :bold t)))))

rtags

clang をつかった便利機能詰め合わせ.

設定が大変そうだな.. これは今回は挫折.

fixit って, 自動エラー修正? スゴそう.

Document

ggtags

ggtags も c 言語ように eldoc 機能を提供している. ggtags は後述.

c-eldoc

C 言語用 eldoc 機能.

(require 'c-eldoc)
(add-hook 'c-mode-hook 'c-turn-on-eldoc-mode)
(add-hook 'c++-mode-hook 'c-turn-on-eldoc-mode)
(setq c-eldoc-buffer-regenerate-time 60)

Debugger

gdb

M-x gdb 標準搭載.

emacs-dbgr

デバッグ用 統一 I/F M-x realgud:gdb

gdb との違いはよくわからない.

(require 'realgud)

その他

タグジャンプ

ggtags

タグジャンプ用のツール. GNU Global を利用.

(require 'ggtags)
(add-hook 'c-mode-common-hook
          (lambda ()
            (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode)
              (ggtags-mode 1))))

;; use helm
(setq ggtags-completing-read-function nil)

;; use eldoc
(setq-local eldoc-documentation-function #'ggtags-eldoc-function)

;; imenu
(setq-local imenu-create-index-function #'ggtags-build-imenu-index)

(define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol)
(define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history)
(define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference)
(define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file)
(define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags)
(define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags)

(define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark)

helm-gtags

helm I/F を利用した gtags 操作. 自分は ggtags をつかってる.

projectile

プロジェクト管理用の デファクトスタンダード.

自動でプロジェクトのルートディレクトリを探して, それ以下のファイルを見つけたり色々できる.

.projectile ファイルをマニュアルで作成することで, そのフォルダを Route Folder と認識出来る.(要 Emacs 再起動)

(require  'projectile)
(projectile-global-mode)

;; windows indexing 高速化のおまじない.
(setq projectile-indexing-method 'alien)

  ;; 大きいプロジェクトだと劇的に速度が改善するらしい.
(setq projectile-enable-caching t)

GNU Global と組み合わせるには, ggtags が必要.(gtags ではないので注意)

以下で GTAGS を作成.

  • projectile-regenerate-tags
(when (executable-find "gtags")
   (setq projectile-tags-file-name "GTAGS")
   (setq projectile-tags-command "gtags")))

helm-make

C 言語といったら make でしょう. make 用 helm I/F.

(require 'helm-make)

(eval-after-load 'makefile-mode
  '(define-key makefile-mode-map (kbd "M-\"") 'helm-make-projectile))
(define-key c-mode-map (kbd "M-\"") 'helm-make-projectile)
(define-key c++-mode-map (kbd "M-\"") 'helm-make-projectile)

Special Thanks

27 Mar 2015, 12:27

鮮やかにデータを可視化する! coursera で Exploratory Data Analysis を受けた

はじめに

R を利用してグラフを書く方法を学ぶために, coursera で Exploratory Data Analysis を受けた.

[toc]

R を利用してグラフを書く方を学べる内容

この講座は, 探索的データ解析を学ぶ講座. 探索的データ解析とは, 未知の関係性を データの可視化 によって探る方法.

といっても, 前半は グラフの書き方を学ぶ.

3 つの代表的なライブラリが紹介される.

  • Base: “artist’s palette” model
  • Lattice: Entire plot specified by one function; conditioning
  • ggplot2: Mixes elements of Base and Lattice

後半は, クラスタ分析を扱う. これもデータを可視化することで, データの関係性を調べる方法.

Exploratory Data Analysis:

未知の関係性を見つけることが目的.

可視化することで関係性を見つける.

  • To understand data properties
  • To find patterns in data
  • To suggest modeling strategies
  • To “debug” analyses

基本的な手法

  • Five-number summary
  • Histograms
  • Density plot (Scatter Plot)
  • Boxplots (for Numerical Data, ヒゲ)
  • Barplot (for categorical Data)

感想

部内意識調査アンケート

この講座をとったのは, 職場でアンケート調査をする機会があったから. これは, 学んだ統計的手法を生かす絶好の機会だと思った.

集計したデータをまとめて可視化するスキルの取得か急務だったので, 取り組んだ. こういう, 目的があるときは知識の吸収がはかどる ( \^ω\^ )

今まで, R に標準搭載されていた base package で グラフの描写を していたのだが, ggplot2 の qplot をつかうことで良さげなグラフがかける ことに喜んだ. 参考書には, 以下を利用した.

しかし, Excel に嫉妬…

R でグラフを書くには, スクリプトで設定を指定する必要があるので, 使いこなすまでに時間がかかる. なにを指定すれば, どんな図が生成され るのか, いまいちわからない. 試行錯誤しながらも, なんども試しつつ, ようやく一つのグラフをプロットできる. そんな繰り返しだ.

アンケート結果をなんとか R をつかって棒グラフで可視化してみた. しかし, すでに同僚が Excel をつかって帯グラフと折れ線グラフを ちゃちゃっと作成していた…

これには, ショックを受けた. 自分は, 結構苦労して R でグラフ をかけるようになるまでにけっこう時間がかかった. しかし, Excel つかえば, だれでも簡単に, それなりのグラフが作成できてしまうのだ.

Excel すごいと思うとともに, 嫉妬…

もしかしたら, 本格的なデータ解析をする場合以外は, R は必要ないのかも しれない.普通の一般人は, R をつかうよりも Excel を利用するほうが, 学習対効果においてよいのではないかと思う.

CLI と GUI

しかし, 自分はすでに中途半端に R を学んでしまった. こうなったら, い くところまでいこう. Excel にはもう戻れない, 戻らない!!

R と Excel の関係は, CLI と GUI の関係と同じ.

CLI は身につけるまでは苦労するが, 一旦身につければ GUi よりも高い 生産性が出せると信じている.

25 Mar 2015, 04:13

Windows 版 タイル型ウィンドウマネージャーの衝撃!! bug.n の紹介

はじめに

Windows のデスクトップ環境をタイル型 WM bug.n の紹介.

[toc]

背景

以前, タイル型 Window Manager というものを知ってとても驚いた. それ以来ずっと, Linux 上では xmonad を利用するようになった.

タイル型 Window Manager の一番良い所は, マウスを利用しなくてもアプリの移動や管理かできるというところだろう. 今回, 実はマウスが壊れてしまったので, これを機会に Windows で利用でき るものはないか, 調査をしてみた.

Windows 上で利用できるものは, 意外にすくない. bug.n というものを試すことにした.

bug.n をつかう

bung.n は AutoHotKey を利用した, Windows 用タイル型ウィンドウマネージャーだ.

Install

AutoHotKey を入れる. windows はインストーラがある.

次に bug.n のソースをダウンロード.

zip を展開して, 中にある bugn.exe を起動.

つかってみる

まずは, 起動画面.

  • いつくかアプリケーションを立ち上げると, 自動整列 !!
  • しかも, 等間隔に並んでいて気分も上々.
  • Win + 数字 を押すことで 仮想ディスプレイ を利用することも可能.

操作感は, xmonad と同じ. コレはすごいぞ!

ここにデフォルトのキーバインドがある. 一つ一つためして覚えていく.

設定

設定ファイル

C:\Users\tsu-nera\AppData\Roaming\bug.n\Config.ini を作成. 以後, win + ctrl + e で編集を呼び出せる.

xmonad と同じキー操作にする

操作感は xmonad とかなり似ている. そのため, いっそのこと xmonad のキーバインドにする.

かたかなひらがなを changekey で修飾キーにする.

bug.n は Autohotkey を内部でりようしているので, 設定ファイルの書き方も autohotkey と同じ.

Linux 環境ではカタカナひらがなを Default Key に割り当てているが, Windoes 環境でもわりあてようとしたが, ここでひと苦労.

Autohotkey のマニュアル通りに sc070 に なにかを割り当てても動かない.

あくせくした結果, 以下のページを参考に カタカナひらがなキーを F13 に 割り当て, F13 を bug.n のデフォルトキーにした.

カタカナひらがなキーを F13 に割り当てるために, Change Key というソフトを利用した.

おわりに

このアプリケーション, 感動した!!

マウスをつかうことから開放されることが一番の喜びだ. 面倒なウィンドウの並び替えに気を紛らわすこともない. 仮想ディスプレイ間も自由自在に移動できる.

xmonad のような操作が Windows で実現できるなんて, 夢のようだ. もともと Linux で タイル型ウィンドウマネージャーに開眼したのだが, 2 度目の感動.ベートーヴェンは言った.

音楽は人々の精神から炎を打ち出さなければならない

そのように言おう.

プログラミングは人々の精神から炎を打ち出さなければならない

24 Mar 2015, 14:50

ボーイスカウトの規則に従った結果 www

仕事でミスった…

ボーイスカウトの規則とは

まずは, ポーいスカウトの規則とはなにかから. 以下のサイトの解説が詳しい.

以下, 引用.

コードを, チェックアウトしたときよりもきれいにして, チェックインしま す. これを「心構え」として常に持って, 「習慣化」します.

コードの洗練を継続して行う, ということです. それは大仰なことではなく, 変数名をよりよいものにし, 大きすぎる関数を分割し, 小さな重複を排除し, if 文の連なりをなくす, という小さな活動の積み重ねです.

背景

今回の開発は, スクラッチから Java でコードがかけるというまたとない機 会なので, 今まで学んできた TDD を今こそ発揮しようとかんがえた.いつも 以上にはりきって,レッド・グリーン・リファクタリングのサイクルを回し たつもりだった.

失敗したこと

ボーイスカウトの規則に従うと…

ボーイスカウトの原則にしたがって,

  • 変数名をよりよいものにし, マージで競合が発生しまくった.

  • 大きすぎる関数を分割し, 予定コード量が 見積りの 2,3 倍になる.

  • 小さな重複を排除し,if 文の連なりをなくす. 予定完了日が 見積りの 2w に対してさらに 1w 遅延.

    今日は上司に, せっかく動いているのになぜなおすの? と注意された.

そしてマージミス

そして最大の失敗を今日犯す.

SVN で他人のブランチに自分の開発用ブランチをマージしたら, マージミ スが発生.レベルダウンが発生して,チーム全員でマージ箇所のコードレビュー を実視.全員の一日の工数を奪ってしまった.

競合がたくさんでてしまい, 多数の手動マージが必要だった. 注意してい たが, やっぱりまちがってしまった…

もう名前変更もうかつにできない, リファクタリングも相談して許可を得 てからするようにと, 注意される.

ここから学ぶこと

なぜ発生したか?

マージミスがなぜ発生したかというと, あせっていたから.

実は, マージしたときに JUnit がグリーンからレッドになったのは知ってい た. しかし, JUnit は他人のコードをとりこむとすぐにレッドになる, これ は日常茶飯事だったので,気にすることが泣く, 実機確認を急いでしまった.

立ち止まってでも, 実機の前に JUnit をグリーンにしておくべきだった.

また, もっと JUnit をグリーンにすることをチーム内にアピールするべきだっ た. なんかいつも, 自分が壊れたテストコードをグリーンにする作業をし ている気がする.

手動マージのコツとかってなんだろう?? 今回, 自分ひとりで手動マージ作業をすることに無理があった. 他人の修正を把 握できないのに. マージ完了後にレビュー依頼をするべきだった.

リファクタリングは悪いことか

今の状況では, 悪いことだった.

工程の遅延とレベルダウンにつながってしまった. 今の自分のコーディング能力では, リファクタリングをすることのリスク のほうが大きい. くやしいけれども, 力不足を感じた.

家で, ゆっくりときれいなコードを書くのはよい. しかし, お金を対価と して働いているので, 目的を達成するために, リファクタリングが必要か どうか, かんがえることをしなかった. TDD 頑張るぞーという幼い思い込み で今回のようなことになってしまった.

実は今日, このプロジェクトを離れて別のプロジェクトへ移動する話がき た. 今のプロジェクトもあと 1 ヶ月だ. くいのないように, 自分の実力を発 揮してプロジェクトに貢献したい.

22 Mar 2015, 05:20

分散システムの専任アルゴリズム (Election Algorithms) の学習メモ

要約

分散システムにおける専任アルゴリズム (Election Algorithms) の学習メモ.

代表的なアルゴリズムには, 以下がある.

  • Bully Algorithm
  • Ring Algorithm

背景

以前の記事のつづき.前回は, 異常検出についての古典的なアルゴリズムを記事にした.

今回は, 異常を検出したあとの動作についてメモ. coursera で Election Algorithms を学習した.

Master 決定の論理でも, 古典的なアルゴリズムがすでに存在することに驚いたので 詳しくしらべてみた.

Leader Election

選任アルゴリズム.

通常, 分散システムでは, Coordinator が存在する. Coordinator で異常が発生したさい, 次の Coordinator を決定する必要がある.

また, 異常な Coordinator が復旧したときに Coordinator を戻す必要がある.

古典的な Coordinator を決定するためのアルゴリズムは以下.

  • Bully algorithm
  • Ring algorithm

実際の実装例.

  • Google Chubby
  • Apatch ZooKeeper

Bully Algorithm

Bully (ガキ大将) アルゴリズム. つよいものが勝つというもの.

3 種類のメッセージがある. * Election Message: Sent to announce faster election * Answer Message: Respond to the election message * Coordinator message: Sent to announce the identity of the elected process

手順は以下

  1. あるノードが Master の異常を検出したとき, Election を開催する. Master が異常状態から復旧したときも, Election を開催する.
  2. あるノードは自身よりも高い ID をもつノードにたいして, Election Message をおくる. (生存宣言)
  3. Election Message をうけとったノードは, Answer Message をかえす. そして, 自身よりも高い ID をもつノードにたいして, Election Message をおくる.
  4. 2, 3 が続いた結果, どのノードからも応答がない, 送信するノードがな い場合に, そのノードが Master となる. Master は Coordinator messag をおくる.

Ring Algorithm

リング上にノードの ID が割り振られる. あるノードは自身のとなりにならぶノードにメッセージを送る.

となりとなりにメッセージをおくることで, リングを一周したら, リングを構成するノードの生存確認がとれるので, もっとも高い ID をもつノードが Master になる.

Bookmarks

おわりに

以前はストレージ装置における異状検出機能を担当していたことはすでに書いた.

Master-Slave 構成において, Master で異常が発生した際に, 次期 Master を決定する必要がある.

自分の所属していたチーム内ではこのロジックを 次期 Master 決定論理 などど呼んでいた. 自分たちでなんとなく考えたものだった.

世の中をみわたせば, この領域は Election Algorithms と呼ばれていて, 研究も進んでいるのだった.

この分野は 自分がはじめて出した特許に関係する部分だったので, 自身の無知をしった.