Quantcast
Channel: Futurismo
Viewing all 91 articles
Browse latest View live

コマンドラインからgmail経由でメールを送るRubyスクリプト

$
0
0

なにかのアイデアを忘れないように、アイデアは思いついたときにgmailや会社のメールのInboxへリマインダメールを放り込む習慣がある。

コマンドラインからサクッとメールを送信するスクリプトを作成しました。

以下の記事を参考にしました。ありがとうございます。

事前準備として、以下をインストールする必要があります。

gem install mail
gem install tlsmail

Warningエラーがたくさんでるので、対策が必要。これはgmailが原因のようだ。

/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/smtp.rb:806: warning: already initialized constant Net::SMTPSession
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/2.1.0/net/smtp.rb:1063: warning: previous definition of SMTPSession was here
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:687: warning: already initialized constant Net::POP
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:687: warning: previous definition of POP was here
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:688: warning: already initialized constant Net::POPSession
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:688: warning: previous definition of POPSession was here
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:689: warning: already initialized constant Net::POP3Session
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:689: warning: previous definition of POP3Session was here
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:702: warning: already initialized constant Net::APOPSession
/home/tsu-nera/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/tlsmail-0.0.1/lib/net/pop.rb:702: warning: previous definition of APOPSession was here

以下のサイトを参考に対策を実施。

  • ruby on rails – warning: already initialized constant after installing tlsmail gem? – Stack Overflow

    require 'net/smtp'
    Net.instance_eval {remove_const :SMTPSession} if defined?(Net::SMTPSession)
    
    require 'net/pop'
    Net::POP.instance_eval {remove_const :Revision} if defined?(Net::POP::Revision)
    Net.instance_eval {remove_const :POP} if defined?(Net::POP)
    Net.instance_eval {remove_const :POPSession} if defined?(Net::POPSession)
    Net.instance_eval {remove_const :POP3Session} if defined?(Net::POP3Session)
    Net.instance_eval {remove_const :APOPSession} if defined?(Net::APOPSession)
    
    require 'tlsmail'
    

スクリプトは以下のとおりです。


スクリプト言語はプログラマの必須スキル!『Rubyスクリプティングテクニック』を読んだ読書メモ

$
0
0

スクリプトをサクッと書きたいので、こんな本を読みました。



サンプルコードは以下に置いてある。これをダウンロードして読み進めていくのだが・・・途中からサンプルコードが動かない。

しかたがないよ、昔の本だから。 The Pragmatic Bookshelf | Source Code

プログラムとスクリプトは違う!

この書籍では、コードを書くことをプログラミングという言葉を使わずに「スクリプティング」という言葉を利用している。本書におけるスクリプティングの定義は以下だ。

軽妙なニュアンスを含み、また日常の雑用をこなすのにより適した用語

ターゲットはテストエンジニア

また、この本のターゲットはテストエンジニアだ。もともと、Scripting for Testersという題名を考えていたらしい。テストにたいする言及も文章の端々にある。

しかし、結果と期待値の比較のようなテストの自動化は扱っていない。自動化は本当の効率化にならない、また必要以上にコストをかけてスクリプトを書くべきではないと忠告している。スクリプトは問題を解決する手段。

内容

Rubyの文法をまったく知らない初心者でもわかるようにかかれている。

exampleを元に実際に手を動かして進めていく章と、文法の解説の章が交互に現れる。正規表現の重要性も強調されていて、よく説明されている。演習問題の解説がとても丁寧に書いてあり、演習も込みで読み進めていくのがいい。gemやツールのフォルダ構造にについてもかかれていて、ツールとしてどういうふうに共有するかが解説されている irbやUnitTestで小さく結果を確かめながらすすめていく。

テスト駆動開発と名をうっているが、そこまでTDDを熱く語っているわけではない。(TDDを期待するのは別の本がよいと思う)リファクタリングについてもたくさん説明が割かれている。テストでスクリプトを整備してクリーンな状態を保ちつつ、スクリプトの保守をしていこうという趣旨。 おわりに書いてあるまとめのことばが胸に刺さるので、引用する。

多くのスクリプタは自分が書いた個々のスクリプトからなにも得られないままでいます。

廃棄すべきスクリプトの作成にすべての時間を費やしていると、あなたの道具箱の中身が増えないばかりか、自分自身の成長も止めてしまうことになるのです。

スクリプティングで大事なことは、自分自身を駆り立てながら、その一方で自分の給与に見合った結果を安定して生み出していくことです。そのためには、コードを常にクリーンに保ちながら、スクリプティングの技術に少しずつ磨きをかけ、あらゆるニーズに対応するようにすることです

だから、スクリプト言語としてRubyがこの本で紹介されたのだと思う。TDDとリファクタリング、オブジェクト指向によるモジュール分割、フレームワークの継承による再利用、豊富な再利用可能ライブラリ群。

プログラマはスクリプト言語が必須スキル

私はプログラミングは知っているが、スクリプティングはあまり知らない。しかし、なんらかのスクリプト言語はプログラマの必須スキルだと信じていて必ず学ぶ必要があると思っている。

なぜなら、プログラマはより効率的にプログラミングするために日々改善が必要で、そのためには簡単にツールをつくるスキルが必要だからだ。Rubyを勉強しようとするモチベーションもスクリプト言語に対する義務的な知識欲があるからだ。

taskwarriorでタスクにメモを書くシェルスクリプト

$
0
0

最近は、タスク管理のために taskwarriorを利用しています。

タスクに対してメモをつけたいと思い、メモする方法を調べました。簡単にメモするならば、以下で注釈を追加

task 20 annotate hoehoge

もっとがっつり書きたいと調べたところ、以下のような記事を発見。

スクリプトを起動してメモを作成する方法です。さっそく参考にしました。

${HOME}/Documents/wiki/tasks/commentsにメモ保存用ディレクトリ作成

mkdir -p ${HOME}/Documents/wiki/tasks/comments

以下のようなスクリプトを作成

task idを指定してコマンドを実行すると、Descriptionに c が追加されて、メモをエディタで開けます。

$ taskcomments 20

[Linux Mint]xinputでタッチパッドをコマンドラインから有効化・無効化する

$
0
0

Linux Mintを利用していると、ノートPCのタッチパッドの感度がどうもよすぎる。そのため、普段はタッチパッドを無効にして、マウスのみを利用していた。

マウスが利用できないときにノートPCを立ち上げると、タッチパッドが制御不能であるためになにもできなくなる。そんなときに、コマンドラインからタッチパッドを有効化する方法を調べた。

xinputコマンドを利用する。

コマンドラインから制御するためには、まず以下を入力。

gsettings set org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled true

制御デバイスのID or 名前を調べる。

% xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Sony Vaio Keys                            id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ USB2.0 Camera                             id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]

Touchpadという名前がついているものが該当。ここでは、SynPS/2 Synaptics TouchPad id=11

以下のコマンドで有効・無効を切り替える。

# 無効
% xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0
% xinput --set-prop 11 "Device Enabled" 0

# 有効
% xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1
% xinput --set-prop 11 "Device Enabled" 1

ログインシェルにaliasを切っておくとよい。.zshenvに定義した。

alias touchpad_disable='xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0'
alias touchpad_enable='xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1'

参考

namebenchでDNSサーバへの通信速度をベンチマーク!モバイルWifi環境を高速化する方法

$
0
0

namebenchでDNSサーバへの通信速度をベンチマーク!Wifi環境を高速化する方法

普段、家の外でノートPCを利用することが多いのだが、wifiが遅い気がしたので高速化の方法を調べた。

DNSサーバを変更する

DNSサーバを変更すると、名前解決が早くなり、その結果通信速度が上がるらしい。

以下のIPがおすすめらしい。

  • NTT America Technical Operations

    29.250.35.250
    29.250.35.251

参考:「8.8.8.8,8.8.4.4」より速い「129.250.35.250」: 小粋空間

  • Google Public DNS

    8.8.8.8
    8.8.8.4

参考 [N] iPhoneのWiFi接続を高速化する魔法の数字「8.8.8.8,8.8.4.4」

namebench でベンチマーク

しかし、この結果を鵜呑みにしてはいけない!環境によって最適なDNSサーバは異なるはず!

オープンソースのnamebenchを利用すると、自分に最適なDNSサーバを調査することができる。これで最も早いサーバを調べて設定するのがよい。マルチプラットフォームのため、Windows,Mac,LinuxどれでもOK.

ベンチマーク結果

Linux Mintでは、パッケージマネージャからインストールできる。端末を開き、namebenchと入力すると検索が開始する。解析が終了すると、HTMLファイルが生成される。それを開くと…

127.0.1.1が一番早いとのこと。これは、自動で取得できるDNSサーバらしい。ということで、とくに設定の変更は必要なかった。。。

Screenshot_from_2014-01-11 14:28:39

EmacsでMarkdown記法での執筆環境を整えた

$
0
0

ブログはmarkdown記法で作成して、HTMLに変換してwordprssに投稿しています。

Emacsで Markdown記述環境を整えたので、その作業メモです。Emacs で markdownモードを利用するには、emacs-markdown.elを利用します。公式サイトは以下。

以下のサイトを参考にしました。ありがとうございます。

導入手順

以下から emacs-markdown.elを入手して、ロードパスの通ったところへ配置。

 wget http://jblevins.org/projects/markdown-mode/markdown-mode.el

init.elに以下を記述

(autoload 'markdown-mode "markdown-mode.el" "Major mode for editing Markdown files" t)

.mdと書いてあるファイルをmarkkdownモードで起動するように関連付ける

(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

色の変更

色が気持ち悪い場合は、

M-x list-face-displayをでfaceの設定を起動して修正。

minttyとemacsで、黒背景で青が見にくい場合の対策も参考のこと。

HTML形式に変換する

MarkdownでかかれたものをHTMLに変換するには、markdown.plを利用する。

Daring Fireball: Markdownからmarkdown.plをダウンロードしてパスの通った場所ち配置。ここでは、/usr/local/binへ。名前もMarkdown.plから markdownへ変更。

cd /usr/local/bin
sudo mv '/home/tsu-nera/Downloads/Markdown.pl' markdown

プレビュー表示

C-c C-c m でバッファにプレビューを表示できます。
C-c C-c p でブラウザにプレビューを表示できます。

command not found: markdownと出る場合は、Markdown.plがうまく動いていない。

zsh:1: command not found: markdown

その他コマンドは、公式サイトのUsageを参照。

CLIからポモドーロテクニックを実施するためのツール pomo を試してみました

$
0
0

CLIからポモドーロテクニックを実施するためのツール pomo を試してみました。

% gem install pomo

使い方は、visionmedia/pomoにある。

はじめに、設定ファイル作成。

% pomo initconfig

タスクを追加します。

% pomo add pomoの記事を作成する
% pomo ls
1. pomoの記事を作成                                         : 25 minutes

スタートします。

% pomo 1 start

すると、25分のタイマが起動します。タスクを追加しないとタイマも起動しないようです。時間になると、5分の休憩タイマが起動します。

オプションで、以下の表示もできるようです。

  • ポップアップ
  • tmuxのmini bar
  • CUIのプログレスバー

コマンドラインでサクッとタスク管理できるのがいい感じです。taskwarriorと連携させて利用したいところですが、それはまた今度。

GoogleCLを利用してLinuxからpicasaに画像を投稿するスクリプトでブログ執筆効率化!

$
0
0

以前、Windows環境でgoogleclを利用した画像データのUploadの自動化をしたのですが、Linux環境でも同様のことをしてみました。

Environment

  • Linux Mint 16

Install

Googleclは、以下でインストール

% sudo apt-get install googlecl

初回通信でログイン認証する。ブラウザが起動するので認証する。

& google calendar add "Lunch with Jim at noon tomorrow"

Googleカレンダーを起動して、予定が作成されていればOK.

Picasaに投稿

picasa postコマンドで実行します。

% google picasa post Futurismo tmuxinator.jpg

スクリプトにまとめると、ブログ執筆がさらに便利ですね。

#!/usr/bin/env ruby
# Picasaへアップロード
`google picasa post Futurismo #{ARGV[0]}`

# URLを取得
url = `google picasa list --fields=url-direct|grep #{ARGV[0]}`

# 標準出力にimgのURL出力
img = "<img src=\"" + url.chop + "\">"
puts img

Beautiful Colorful Terminal – Emacsターミナル環境をカラフルに彩る

$
0
0

外見大事! 美しいとテンションが上がって作業効率も向上する。

Emacsターミナル環境をカラフルに改造したので、導入したツールを晒します。

Environment

  • Linux Mint 16
  • Emacs 24

Guake

まずは、ターミナルから。デフォルトのGnome端末でも機能としては十分だが、デフォルトツールというところが気にくわないので、デフォルトでない一番人気をさがしたところ、Guakeを入れることにした。

sudo apt-get install guake

Guakeの利点は、画面のサイズが気軽に切り替えられるところ。上からにょきっと現れる操作感がよい。

  • F12で全画面表示
  • ショートカットで半画面表示

暗めの幻想的な背景を探して設定した。

F12を押したときに端末にフォーカスできないバグがあるらしいので、手動で修正。

Ricty

美しいフォントRictyを設定。

tmux-powerline

tmuxのモードラインをカラフルに彩るツール、tmux-powerlineを導入しました。

導入は、READMEに従って作業。カスタマイズはこれから。



Referenced

カラーテーマ

Emacs Color Theme

カラーテーマを変更。Emacsのカラーテーマを変更するには、そもそも Emacs Color Themeを導入する必要があるので、これを導入。

gnuemacscolorthemetest – GNU Emacs Color Theme Test – Google Project Hostingからダウンロードしてきて、ロードパスの通った場所におく。

init.elに以下を追加した。

(require 'color-theme)
(color-theme-initialize)

Molokai

Vimのカラーテーマで有名な、molokaiを導入してみた。カラフルな装飾がMolokaiの特徴。

molokaiのテーマは派生がいろいろあるようなので、Googleで検索して筆頭に現れたこれをいれる。

molokai-theme-kit.el,molokai-theme.elをダウンロードしてロードパスの通った場所へ配置。ここでは、themsというディレクトリを.emacs.dのしたにつくった。

init.elに以下を追加した。


    (add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
     (setq molokai-theme-kit t)
     (load-theme 'molokai t)

emacs-powerline

Emacsのモードラインをカラフルに彩る Emacs Powerlineを入れる。tmux-powerlineと合わせると、画面がとても賑やかになる。

powerline.elをダウンロードして、ロードパスの通った場所に配置。

ここにも数種類のデザインがあるし、ネット上にもさらに多くのものがある。いろいろと試してみる。

init.elに以下を追加

(require 'powerline)

tmux環境作成の自動化!PCの再起動をまたいでSessionを保存/復元を実現する方法

$
0
0

tmuxをノートPCに入れてみたけれども、ノートPCをOff/Onするたびにtmux環境を初めから作り直すのは面倒だ。

面倒なことは自動化しよう!ということで、tmux環境を自動作成するツールを調べました。

Environment

  • Linux Mint 16

tmuxinator

tmuxinatorを利用すると、自動でtmux環境を構築できる。

aziz/tmuxinator

Install

gem install tmuxinator

この設定が必要みたい。.tmux.confに設定してあるか確認。

set-window-option -g pane-base-index 1

SHELLとEDITORの2つの環境変数が設定されているか確認。

% printenv SHELL
/usr/bin/zsh
% printenv EDITOR
emacsclient -nw

起動スクリプトにも記述が必要。以下を追記。

source ~/.bin/tmuxinator.zsh

binから、mux,tmuxinatorをダウンロードして、パスの通った場所におく。

% wget https://raw2.github.com/aziz/tmuxinator/master/bin/tmuxinator
% mv tmuxinator /usr/local/bin

Usage

設定ファイルを作成.

% tmuxinator new default

エディタが開き、設定ファイルが作成されるので、これをカスタマイズする。保存したら、以下で保存した設定を起動。

% tmuxinator default

tmux-session

tmuxinatorの弱点は、自分で設定ファイルをかかないといけないところ。それは、面倒だ。

面倒なので、もうすこしツールを探してみると、tmux-sessionというシェルスクリプトを発見!

使い方は、とても簡単。saveで現在の状態を保存して、restoreで復元する。

% tmux-session save
% tmux-session restore

状態は一つしか保存できないよう。また、画面分割も保存はできない。tmuxinatorならば、できる。

または、同様なスクリプトとして、こんなのもある。これは、複数セッション保存可能。

結論

tmuxの状態保存は、tmux-sessionがよい。save/restoreの簡易なところが、よい。

月夜に輝く滴の如き美しさ!黒背景とカラフルなEclipseプラグイン Moonrise UI Themeに一目惚れ

$
0
0

Eclipse Moonrise UI ThemeいうEclipseを黒背景にするプラグインに惚れ惚れしたので紹介します。

Environment

  • Eclipse 4.3 Kepler

インストール

Eclipseマーケットプレースからインストールする。

ヘルプ > Eclipseマーケットプレースを選択する。検索窓から以下を検索してインストール。

  • Eclipse Moonrise UI Theme
  • Eclipse 4 Chrome Theme

Moonrise UI Themeが今回紹介するメインプラグイン、Chrome Themeは Moon Themeを綺麗に表示するためのプラグイン(Option)

設定

テーマの設定

ツールバーの ウィンドウ > 設定 > 一般 > 外観を選択。

  • Moonrise(Standalone)
  • Moonrise

の2種類がある。Chrome Themeを入れている場合は、Moonriseを選択。

色テーマの設定(Rainbow Drops)

エディタ部分のデザインもムーンライトにふさわしい高貴なものに変更にします。

オススメされているのが、Rainbow Dropsというテーマ。以下から Eclipse Color Theme (XML)を選択してダウンロード。

ツールバーの ウィンドウ > 設定 > 一般 > 外観 > 色テーマを開き、インボートを選択。さっきダウンロードしたテーマを選択する。すると、選択欄に Rainbow Dropsが現れるので、選択し、適用。

調整

コンテンツアシストの色を変更します。

ツールバーの ウィンドウ > 設定 > 一般 > 外観 > 色とフォントを選択。基本の配下にある以下の2つの色を変更。

  • コンテンツアシスト前景色: #DDDDDD
  • コンテンツアシスト背景色: #333333

コンソールの色を変更します。ツールバーの ウィンドウ > 設定 > 実行とデバッグ > コンソールを選択。以下の2つの色を変更。

  • 標準出力のテキストの色: #DDDDDD
  • 背景色 : #333333

導入結果

Elegant!!

感想

以前、黒背景にするための プラグイン Eclipse Juno Darkを紹介しました。

Juno Darkはやや淡さと暗さがあり、Moonriseは色のコントラストが強く明るいです。

-

個人的には、Moonriseの方が好きだ!

ああ、Moonrise…あなたは月夜に輝く滴の如く、美しい。

GTDの規律に従い生産性Up!!3分後にデスクトップ通知と音を鳴らすワンラインスクリプト(Linux)

$
0
0

GTDの規律には、3分以内に片付くタスクはその場で処理して、3分以上かかるものはとりあえずInboxにつっこむというものがある。

コマンドラインからストップウォッチを3分だけ起動したいと思い、そのような方法を考えました。

environment

  • Linux Mint 16

sleep を利用

あまり考えない方法だと、sleepコマンドで時間を止めて、指定時間たつとコマンドを実行するというもの。

$ sleep 3 && echo test

echoだと気づかないので、できれば音やデスクトップ通知が欲しいところだ

cvlcを利用して音を出す

VLCプレーヤーのコマンドラインを利用して音を鳴らす。–play-and-exitで一回だけ再生。

$ cvlc --play-and-exit /usr/share/sounds/LinuxMint/stereo/desktop-login.ogg

notify-sendでデスクトップ通知

Linuxでは、send-notifyでデスクトップ通知ができる。

インストール

notify-sendは libnotify-binに含まれている。

$ sudo apt-get install libnotify-bin

以下で実行して、通知か表示されるか確認

$ notify-send test

notification-daemonのインストール

Gnome terminalからコマンドを実行すると動作するが、Guakeターミナルから実行すると、動作しない。

原因は欲分からないが、notification-daemonというものをインストールすると、Guakeからも動作するようになった。

$ sudo apt-get install notification-daemon

デーモンを起動する。

$ /usr/lib/notification-daemon/notification-daemon &

これで通知がでるようになった。時間指定のオプション -t が動作しないのが気になるが。。。

起動時にデーモン起動

notify-osdからnotification-daemonに切り替える | smokycat.infoを参考に、起動時にデーモンを起動するようにしてみる。

$ sudo emacs /usr/share/dbus-1/services/org.freedesktop.Notifications.service

3行目をコメントアウトして、4行目を追加。どうも、デフォルトでは notify-osdが起動していたようだ。notify-osdだと動かなかったと推測

[D-BUS Service] 
Name=org.freedesktop.Notifications
#Exec=/usr/lib/x86_64-linux-gnu/notify-osd
Exec=/usr/lib/notification-daemon/notification-daemon

タイマを改良

コマンドラインから利用できるカウントダウンタイマを探してみた。。結構時間をかけて探したけれども、結論としては、このツールがよい。

コマンドラインからカウントダウンやストップウォッチが起動できる。こんなツールを探していた!ダウンロードしてインストール。

$ ./configure
$ make && make install

たとえば、こんな感じ。

# 3sec countdowwn
% utimer -c 3
Time Remaining: 0 days 00:00:00.000 (0.000 seconds)

結論

このワンラインスクリプトに決定

/bin/sh -c 'sleep 180;notify-send "time over";cvlc --play-and-exit /usr/share/sounds/LinuxMint/stereo/desktop-login.ogg' &

省エネ時代の軽快ターミナル!rxvt-unicode(urxvt)でサクサクターミナル生活

$
0
0

軽量なターミナルである、rxvt-unicodeを試してみました

urxvtとは

rxvt-unicode(urxvt)とは、軽量なターミナル。

  • Unicode対応
  • 設定ファイルによって、自由にカスタマイズ可能
  • クラッシュしらず
  • 小メモリ、爆速の軽快さ。

などなどの特徴がある。軽量なためxmonadとの相性がよいと、xmonadのサイトで紹介されていたため、ターミナルを乗りかえてみた。

以下でインストール。

sudo apt-get install rxvt-unicode-256color

カスタマイズ

カスタマイズは、~/.Xdefaultsに設定を記入することで実施する。環境は、Linux Mint.

以下のサイトのXdefaultが大変参考になりました。ありがとうございます。

フォントの設定

Rictyを設定。アンチエイリアスも有効に設定。

URxvt.allow_bold:           false
URxvt*font: xft:Ricty:size=12:antialias=true

背景を透過にする

背景に画像を設定して、ターミナルは半透明にすることにする。以下を参考にした。

以下を追記。

urxvt*shading: 80
URxvt*inheritPixmap: true

色テーマをmolokaiにする

色テーマを鮮やかなmolokaiにする。ここを参照。

.Xdefaults結果

余計なツールバーもないし、軽いし、カスタマイズ自由、なかなかいい感じ。

参考

タイル型ウィンドウマネージャという新たな世界観に衝撃を受けた!XmonadをつかってワクワクCUI生活

$
0
0

GUIのウィンドウを自由自在に操ることができる タイル型ウィンドウマネージャ、Xmonadを導入しました。

タイル型ウィンドウマネージャとは

コマンドラインにこだわりはじめると、なんでもかんでもコマンドラインで完結させたくなる。

screenやtmuxのようなマルチプレクサは、とても快適だがそれをGUIでも実施するにはどうすればいいか調べたところ、タイル型ウィンドウマネージャの存在を知った。

タイル型ウィンドウマネージャとは、ウィンドウをコマンドラインで操ることのできるツール。

説明は、Wikipediaに譲るとして、タイル型ウィンドウマネージャを知ったことは、カルチャーショックだった。初めてコマンドラインの世界にふれて、コンピュータにはこういう側面もあるのか、というような感動を受けた。

タイル型WMには様々な種類があるようだ。XmonadとAwesomeが2大勢力のようなので、XMonadの方を導入してみた。

環境

  • Linux Mint 16 Cinnamon

セットアップ

公式サイトの Documentation – Quick start for the impatientに従いセットアップします。

インストール

Linux MintはUbuntuと同様に3つのパッケージが必要。

$ sudo apt-get xmonad
$ sudo apt-get instasll libghc-xmonad-dev
$ sudo apt-get instasll libghc-xmonad-contrib-dev

設定ファイルの作成

$HOME/.xmonad/xmonad.hsに設定ファイルを新規作成する。

もっとも基本的な設定ファイルは以下。Haskellで記述されている。

import XMonad

main = do
xmonad $ defaultConfig

Xmonadの起動

ログアウトする。ログイン画面で、「セッション」とかかれた部分を選択。「XMonad」を選択し、ログインする。ログインすると、なんと真っ黒な画面!

ここでかなりあせったが、実はこれはXMonadでログインしている証拠。あせらず騒がず【右Alt + Shift + Enter】を入力。これで、ターミナルが起動され、操作が可能になる。

Xmonadの使い方

ここまで着たら、ガイダンスに従って操作を覚えていく。

基本をメモ
- mod-shift-return: ターミナル起動
- mod-shift-q: xmonad終了
- mod-p: dmenu起動
- mod-q: 再起動
- mod-space: レイアウト配置変更
- mod-j/k/m: focus変更
- mod-h/l: サイズ変更
- mod-tab: レイアウト移動

manコマンドでも使い方がわかる。

man xmonad

カスタマイズ

一通り操作を覚えたら、カスタマイズを飽きるまで行う。以下のページをベースにカスタマイズ。

dmenuの導入

アプリケーションランチャーである、dmenuを導入する。

$ sudo apt-get install dmenu

Mod-pで上部にランチャーが表示されるので、適当に検索してツールを実行。例えばchromeで検索すると、google-chromeがすぐに引っかかる。

ショートカットキーの変更

Mod Keyはデフォルト 右Altなので、これをカタカナ・ひらがなキーに変更する。(

~/.Xmodmapを新規作成して、以下を書く。既存のmod3をクリアして、Henkan_Modeを設定。

clear mod3
add mod3 = Hiragana_Katakana

キーに対応する名前は、xevを起動して調べることができる。

xmonad.hsの defaultConfig内に以下を追記。

modMask  = mod3Mask,

最後に、以下で有効にする。

xmodmap $HOME/.Xmodmape

起動時にこの設定を有効にするために、~/.xsessionに追記しておく。

これで、使いやすくなったか???いや・・・微妙だ。

ターミナルの変更

ターミナルはMint defaultのgnome-terminalではなくて、軽量なterminalである、unicode-rvxtを利用。xmonad.hsの defaultConfigに以下を追記。

terminal = "urxvt"

XMobar

ステータスバーを表示させるために、xmobarを入れる。他にも、dzen2というツールがある。

$ sudo apt-get install xmobar

次に、設定ファイル~/.xmobarrcを作成。テンプレートを利用してみる。

$ cp /usr/share/doc/xmobar/examples/xmobar.config ~/.xmobarrc

.xmobar/xmobar.hsの mainのすぐ下の行に以下を追記することで、xmonad起動の延長でxmobarを起動することができる。

xmproc <- spawnPipe "/usr/bin/xmobar /home/tsu-nera/.xmobarrc"

キーボードショートカットの設定

以下のように書くことで、キーボードショートカットが設定できる。ここでは、Winキーとの組み合わせで設定

import XMonad.Actions.WindowGo

-- for keyboard shortcut
modm = mod4Mask

`additionalKeys`
 [
 ((modm, xK_e), runOrRaise "emacs" (className =? "Emacs"))
 , ((modm, xK_t), runOrRaise "urxvt" (className =? "URxvt"))
 , ((modm, xK_g), runOrRaise "chrome" (className =? "Google-chrome-stable"))
 ]

クラス名は、このコマンドを端末から実行して、+ のカーソルで調べたいWindowをクリックする。

xprop | grep WM_CLASS

背景の設定

fehという軽量な画像ビューアーで表示する方法が載っていたので、これを利用。

インストール。

sudo apt-get install feh

以下で背景を設定できる。

feh --bg-scale ~/Pictures/wallpaper/moonlight.png

これを.xsessionに書くと、なぜか動作しなかった。しかたがないので、.profileに記入した。

ファイルマネージャー

Mintのファイルマネージャー、nemoを利用すると、勝手にデスクトップを変更されるので、nemoは –no-desktopモードで起動する。aliasを.zshenvに切る。

alias nemo='nemo --no-display'

ショートカットでフルスクリーン

Mod + Spaceを押したときのデフォルトでは、複数回キーを押さないとフルスクリーンにならないので、これを改善。以下のサイトを参考に設定した。これは便利!

まとめ

ほかにも、いろいろと細かい設定が必要だけれども、きりがないので今日はこんなところで。

いろいろな作業をコマンドラインで実施することができるので、とても快適。しかし、残念ながらマウスを使わざるを得ないところもある。たとえば、ブラウザ操作のコピぺはマウスに頼らざるを得ない。

タイル型WMとの出会いはとても感動的だ。

さらなる精進をつんで、立派なCUIマスターになりたい。

Links

世界最高の開発環境~CUIのリズムとハーモニーが生み出す極上の交響楽

$
0
0

ネットサーフィンをしていて、ふとこんな記事を偶然見つけた。

また、同じ時期にこんなつぶやきも偶然見つけた。

 

これらに強く心を突き動かされ、休日2日を利用して最高の作業環境を構築してみた。

最高の開発ツールの条件

よいツールの条件は、

  • 軽快に動作すること
  • コマンドラインであること
  • 開発が活発であること、勢いがあること
  • カスタマイズが可能であること

世界最高の開発環境

この観点で選んだツールたちを以下に列挙。

zsh tmuxは2014年現在でのデファクトスタンダード。
Emacs vs Vimはどちらもそれぞれ優れているが、自分はEmacs派。
Rictyは美しいフォント、molokaiは美しいテーマ、デザイン大事!
ibus-anthyは自分の隠し兵器、親指シフト用。
WMはいいとこ取りをしたXMonad、ターミナルはxmonadと相性のよいurxvt。

OSは、Linuxが大前提、Windowsはありえない。
Mintを選んでいるのはなりゆきだ。
コアな人はArchLinuxを選ぶが、自分はチキンなので可愛いMintを。
XMonadをつかっているところで、もはやMintである意味がないのだが・・・。

また、これらはdotfilesで管理され、常に進化を遂げていく。

CUIの生み出す音楽

CUIをベースとして、お互いのツールが有機的に絡み合あい、ハーモニーを生み出す。
軽快さとストレスフリーな心地よい、CUIのリズムがとても魅力的だ。
最高の開発環境を駆使しながら作業をすることは、極上の音楽の中に浸るようなものである。


実用的EmacsLispが満載!明日から使えるテクニック集 「Emacsテクニックバイブル」を読んだ

$
0
0

Emacsをより極めるために、Emacsテクニックバイブルを読んだ。



内容

サブタイトルが、作業効率を改善する200の技。

その名のとおり、便利なEmacsLispが次々と、そして網羅的に紹介されていく。Emacsでできることを全て紹介してやるみたいな気概がある。

前書きをすこし引用すると、

多くの解説書ではEmacs標準の機能の解説に重点を置いていますが、本書は外部パッケージに目を向けています。
なぜなら、外部パッケージは既存の機能とは異なる発想で製作されていたり、既存の機能をより良くしていくものが多いからです。

導入方法も丁寧にかかれているため、この本に従って作業すれば、簡単に自分のemacs環境も増強できる。実用的な本。

EmacsLispの文法も紹介されている。.emacsを増強するためには、この文法を知っておくと便利。

2010年出版ということで、2014年現在ではすこし古い内容になっている部分もある。

anythingの解説本

Emacsの「今」を紹介するために、anythingとその文法がそれぞれ一章ずつつかって解説されている。 anythingはEmacsをEmacsたらしめるとまで言われている、ライフチェンジ的な便利なelips。 anythingがなにかを知りたいならば、この本を本やで立ち読みするのもいい。

感想

Elisp情報は、この本を買わなくてもネットには散らばってる。 しかし、本にまとまってることで、散らかった情報をまとめてに手に入れることができる。 今回、一気に自分のEmacs環境をパワーアップさせようと考えていたので、そんななか本書に出会えたのは運がいい。

一つ一つの部分が小さいので、時間が少しできたときにコツコツよんで、気軽に増強していけるのがよい。

anythingについて

anythingよりも、現在はそのforkであるhelmの方が有名になっていて、自分もhelmを利用している。 anythingもhelmも考え方や機能はそれほど変わらないため、helmの解説と思って、anythingの章を読んだ。 このanythingの考え方や操作方法は、本当にライフチェンジで、これなしではもうEmacsを触る気がしない、素晴らしいElispだ。

Emacs実践入門との比較

Emacs実践入門のあとに本書を読んだので、テクニックは似通っているところもあった。



Emacs実践入門に比べて、このテクニックバイブルの方がよりマニアック。 ちょっとしたマイナーなelipsももれなく、網羅的に拾い上げて解説している。 入り口としては、Emacs実践入門の方がよい。Emacs実践入門では満足できない人は、この本まで手を伸ばすのがよい。

さいごに

この本に従って作業をすることで、有名な拡張は、一通り自分のinit.elにも導入できた。

Emacsは素晴らしい。この本を読んで、Emacsの拡張性がさらに好きになった。

プログラミングできなくてもAndroidアプリができる!Courseraの「Creative, Serious and Playful Science of Android Apps」を受けた

$
0
0

Androidのアプリを作りたいので、Courseraでイリノイ大学のAndroidアプリ製作の講義を受けた!

初心者にもやさしいAndroid講義

この講義は、以下の2つに分かれているところが特徴。

  • 非プログラマ向けの講義 : 1week – 5week
  • プログラマ向けの講義 : 6week – 9week

前半の1-5weekの講義が終わると、一応講義としても終了の単位がもらえる。後半は意欲があるひとのみが挑戦できるが、成績には影響しない。 怠惰な自分は前半の講義のみを受講したので、感想も前半部分の内容のみということで。

内容は、非プログラマにも理解できるようにということで、とてもやさしくて、丁寧。Javaの文法や、Eclipseの使い方などなど、一つ一つわかりやすく解説される。 しかし、EclipseやJavaに慣れ親しんでいる自分としては、講義の速度が遅く、物足りない部分も多々あった。 そういう人のために、後半の講義も用意されているのだと思う。

開発環境まわりでハマっても、Discussion Forumsをのぞくと大抵解決方法が見つかる。なにしろ、10万人が参加しているのだ。

自分と同じところでハマっている人は五万といる。 StackOverFlowで探すよりも、Forumで探した方がよい。ここが、MOOCの凄さ。

宿題はアプリ製作

Assignmentは、もちろんAndroidアプリ製作だ!5weekを通して、Lectureで3本、Assignmentで4本のアプリをつくる。

一番はじめの講義で、開発環境を整えた。記事にもまとめた。

Eclipse ADTでつくるAndroidエミュレータ開発環境構築メモ(Windows) | Futurismo

それから、2,3回目の講義で、基本的なアプリ製作の流れが解説される。そして、宿題で2本のアプリをこなす。 4,5weekの講義では、音楽や画像をつかうライブラリの解説や、Activityの制御など、やや本格的なものが解説されて、それをベースに宿題で2本のアプリをつくる。

Assignmentが終了すると、PairReviewもある。これは、別の人のつくったアプリをお互いに評価し合う。知らない国の知らない人のアプリを見るのはおもしろかった。

以下、Assignmentで作成したアプリのスナップショット。

ShannonKnuth

CS分野で有名な偉人を2人選んで、その紹介ページを作成する。これはWebベージをつくるようなお手軽な課題だった。

Maracas

自由課題。Android端末の向きを変えるとマラカスの音がなるというくだらないアプリ。portrateとland-scapeの制御を応用。

MisteryTures

4つのlayoutが渡される。ホームのlayoutから4つのページに遷移するようなアプリを作る。それぞれのページで音をならしたり、JavaScriptのゲームを動かしたりと。 ここでは、Activityの制御を応用する。

RosenKavalier

自由課題。オペラ「ばらの騎士」のCDレビューを買いて、適当に音楽を鳴らしてwebページ遷移を作成した。時間がないので、手抜きの突貫工事・・・お恥ずかしい。

おわりに

本当に簡単なならば製作できるスキルはつく。しかし、本当に簡単なアプリしかできないため、売れる気がしないが・・・、いやアプリ製作はアイデア勝負か??

Androidアプリはファームなので、Android製作は泥臭いものかと思っていた。 しかし、実際にはWebページを製作するような感覚だった。こういうのは実際にやってみないと気づかないことだ。

後半の講義を受けないもう一つの理由は、平行してこっちのAndroidの講義を受けているから。

これからは、こっちの講義で頑張る!

Rubyistになった日

$
0
0

仕事で新しいプロジェクトに加わることになった。

そのプロジェクトでの開発言語は、なんとRubyだ!

今まで、気が向いたらRubyをいじったりしていたが、ついに仕事でもRubyが使えるのだ。素直に、とてもうれしい。

開発期間は2ヶ月だが、これから2ヶ月間、本気出す。つまりは、

Rubyistになるのだ!

### Rubyは楽しい 11月から、軽いうつ病だった。このエントリを書いたあたりから、ちょっと精神が病んでた。

仕事もやりがいがなく、途方にくれていた。プログラマとはなにか、どうすればプログラマになれるのだと日々悶々してた。

そんななか、Youtubeでこんな動画を見つけた。

<iframe width=”560″ height=”315″ src=”//www.youtube.com/embed/ZhaqvSpe2X4″ frameborder=”0″ allowfullscreen></iframe>

  • キレイなコード、オブジェクト指向、テスタビリティはRubyにおいて正統である。
  • Rubyは楽しい。
  • Rubyを使えばいい仕事ができる。

とても感動した。

この動画をみて、Rubyがより好きになった。たのしいRubyも読み直した。閲覧数が少ないけど、この動画はもっと評価されるべき。

Rubyをいじっているうちに、だんだん元気になってきた。 Rubyだけが回復の要因ではないが(9割は抗うつ剤のおかげだが)、Rubyとともに元気になったという思い込みもあって、Rubyが今では大好きだ。

そんななか、まさかのRubyの仕事だ。ほんとうに、うれしい。

(日本語) Androidタブレット ASUS Nexus 7 (2012) を買ったよ

$
0
0

先週のことだけれども、Androidアプリの学習がしたいので、NEXUS7を購入した。

今までは、iPhoneとiPadで身を固めたAppleユーザだった。 しかし、12月ごろからAndroidの勉強をcourseraを利用して勉強しているので、Androidデバイスがどうしても欲しかったのだ。 Androidはシミュレータを利用すればデバイスを持っていなくても開発できるが、それでは心が悲しみで満たされる。

ヨドバシで購入した。値段は何と3000円!

もともとが15000円だけれども、WIMAX同時契約で5000引き、ヨドバシポイントで7000円引きだ。 ただし、e-mobile解約金を15000円払ってWIMAXに乗り換えたので、得したのか損したのか良く分からない。

クワッドコア、32GBで15000円。安い理由は、一年前の型落モデルなので。最新ではないか、開発用に利用するには十分だ。

Amazonから持ってきたスペックもメモしとく。

ブランドASUSTek 商品重量340 g 商品の寸法12 x 19.8 x 1 cm メーカー型番NEXUS7-32G カラーブラウン 商品の寸法 幅 × 高さ19.8 x 10 mm 画面サイズ7 インチ 解像度800×1,280 CPUブランドNVIDIA CPU速度1.3 GHz RAM容量1000 MB HDD容量32 GB HDDインターフェースSolid State ワイヤレスタイプ802.11bgn OSAndroid 充電時間4 時間 バッテリー寿命9.5 時間 リチウム電池1 watt_hours リチウム電池パックbatteries_contained_in_equipment リチウム電池 電圧1 V リチウム電池重量1 g リチウムイオン電池数1

散文的ブログラミングの哲学につら抜かれたCleanCodeでカルチャーショック体験

$
0
0

ボブおじさんのProfessionalな哲学につら抜かれた本、CleanCodeを読んだ。

感想

めくるめくカルチャーショック体験

この本は、自分のこれからのコーディングスタイルを変えるかもしれないと思った。 ページをめくる度に、新たな発見と感動を感じた。

カルチャーショックの詳細は、下の方に列挙するが、ダイジェストを書くと、

  • コメントは嘘
  • 関数は20行以内
  • コードは上から下へ物語のように書く

つまり一言で言うと、

文章のようにコーディングする

ということ。

散文的プログラミング

散文的プログラミング、文芸的ブログラミング、それらは考え方としては 知っていたが、所詮は妄想だと思っていた。

しかし、そのような夢を本気で追求し、かつ実践し、 そのようなことは可能であるということを、具体的な方法で示しているのがこの本。

この本では、Fitnesseのコードがよく例として引用される。

それをみると、なるほど完全な文章ではないにしろ、とても綺麗だ。 読んでいて意味が頭に入る。これがCleanCodeなのかと思った。

道を極めた男の武道書

この本は、~すべし、~べきというような、断定的な表現が多用される。

冒頭で、この本はアジャイルマスターによる指南書だとかかれている。

この本にかかれている方法が絶対ではない、とは思う。 武道にも流派はたくさんある。 この本は、道を極めたある男が記した、免許皆伝のための武道書と見ることができる。

詳細

クリーンコード

プログラミングとは、コードとは

まず初めに、プログラミングの定義がかかれている。

  • 機械に実行可能なものとするのがプログラミング、こうした仕様がコード

コードがなくなることはないと語られている。モデル駆動開発がどんどん洗練されて、コードが自動生成されるようになっても、そのモデルを書くことがコーディングだと言っている(と解釈した)コードは要求の表現なので。

Clean Codeとは

CleanCodeの定義について、有名人の意見を募っている。一行に要約してみた。

  • ビャーネ・ストラウストリップ・・・エレガントで効率がよいもの、1つのことをうまくやるもの
  • グラディ・ブーチ・・・単純で直接的なもの
  • デーブ・トーマス・・・文芸的であるもの
  • マイケル・フェザーズ・・・気配りがきいているもの
  • ロン・ジェフリーズ・・・重複を減らし、表現力を高め、単純な抽象化をしたもの
  • ワード・カンニガム・・・その言語が、その問題のためにつくられたように見えるもの

また、CleanCodeを書くため方法はこう書かれている。

  • きれいなコードを書くためには、骨身を惜しまずに獲得した「きれいさ」のセンスをもって、無数の小さな手法を規律を持って適用する必要があります。この「コードのセンス」が必要なのです。
  • 洗練したコードを書くプログラマというのは、まっさらな画面に変形を加えていくことで、エレガントにコーディングされたシステムを造りあげる芸術家なのです。

エレガントなセンス、という言葉に引っかかった。

エレガントとは、優雅さ、洗練さとともに、精神性をも意味する。精神性、つまりその人のスタイルで貫かれた洗練さが、CleanCode。 この本にかかれているボブおじさんのスタイルは、まさに個性的なコードだ。

意味のある名前

名前づけについては、いろいろな本で語られているので新たに知ったことについてのみ、メモする。

  • 発音可能なものをつける
  • ハンガリアン記法は、悪。

ハンガリアン記法はコンパイラが型チェックを実装していないときにできたもの。現代のコンパイラは型チェックを行うので、不要。

  • メンタルマッピングを避ける。

メンタルマッピングとは、読んだ人が、ああこれはこの略だと頭の中で変換する思考プロセス。

関数

この章はなかなかカルチャーショックな部分が多く、興奮した。

  • 関数の第一規律は、小さくせよ、第二の規律は、さらに小さくせよ。

ギャグのような経験則!小さくするための大胆な発言がこの先に続く。

  • 関数の長さが20行に達することなど、ほとんどないようにすべき
  • if文、else文、while文などのブロック文が1行のながさでなければならない。そうすることで、ドキュメントとしての価値も生まれる。
  • インデントレベルは1つか2つ
  • 関数の名前で示される、ある一つの抽象レベルにおけるいくつかのステップでのみ表現されるなら、その関数は一つのことをしています。関数を書く目的は、ある1つのより広い概念を、抽象レベルのいくつかのステップに分解すること。
  • 逓減原則: コードは上から下へと物語のように読める必要がある。関数は、抽象レベルの順番に並んでいる必要がある。
  • switch文は、一度しか現れず、多態オブジェクトを生成し、継承の裏にかくされている場合のみ使う。それ以外はつかわない。
  • 引数は、理想的には0、その次が1、その次が2。3以上は避ける。引数が多くなったらクラスに抽出する。
  • 関数名は、動詞(名詞)の組み合わせ。
  • 出力引数は必要ない、thisが代わりになる。出力引数の使用は避ける。
  • コマンド・照会の分離原則: 関数は、何らかの処理を行うか、何らかの応答を返すか(bool)のどちらかを行うべき。
  • エラーコードはつかわず、例外処理を利用する。なぜなら、コードが単純になるので。try/catch内のブロックは関数として外へ出す。初めにtry-catch-finallyを書く。

どの発言も、自分にとっては衝撃的だ。しかし、筆者は同じ衝撃をケント・ベッグのコードを読んで受けたそうだ。そして、その衝撃を原動力として、自分の手法や考えを洗練させた。自分もそれに倣いたいと思う。

コメント

コメントも刺激的な発言が多く、頭をピリピリさせる興奮を得る。

  • コメントは大して、いやおそらくまったく必要ない!
  • コードでうまく表現するのに失敗したときに、それを補うために使用する。
  • コメントは、メンテナンスされずに嘘が書いてある。コードこそが、真に正確な情報の源。
  • コメントを書く時間があったら綺麗で表現豊かなコードへリファクタリングしろ。

コメントを文章として書くのではなく、Extract Methodすればよいのか!これが、CleanCodeの極意なのか!

前の章で、メソッドの長さの目安はせいぜい20行と書いてあった。あまりメソッドの抽出を実施すると、パフォーマンスに影響がでるのでは?

と思ったが、そのことについては、前に調べたのだった。コンパイラは賢いので、小さいメソッドならばインライン化してくれる。

組込み開発の二大迷信に挑む!リファクタリングにおけるパフォーマンスとスタックオーバーフローについての数値実験

中途半端に小さいことは駄目なのだ。コンパイラの進化を信じる。もっと小さくが正義。

  • コメントアウトは、それを削除する勇気がないだけ。60年代にはコメントアウトする価値はあった。現代は、ソースコード管理システムが覚えているので、もはや必要ない。
  • 変更履歴、日誌コメント、これらはソースコード管理システムのなかった時代のもの。全部削除するべきです。

つまり、ソースコード管理システムで管理するものはソースのなかに書かないということ。こういう考え方もかなりカルチャーショック。

  • 変数にコメントを強要するルールはまったく馬鹿げている。コードを雑然とさせ、嘘を喧伝し、混乱と無秩序へとコードを誘うでしょう。
  • 短い関数に関数ヘッダは不要。関数によく練られた名前をつけ、小さくし、一つのことを行うようにすることは、コメントヘッダをつけることに勝る。

まったくその通り!仕事だと、自明な関数にも仕事ではコメントを強要される。こういう不自由な規則があるから、メソッドの抽出や名前変更が進まず、モンスター関数が量産される。 関数ヘッダに時間を割くならば、よい関数名や変数名を考えることに時間を割きたいものだ。

データ・オブジェクトの非対象性

  • 実装の隠蔽とは、抽象化!クラスというのは、変数をゲッタ、セッタを通してクラスの外に伝えるものではない。抽象インタフェースを公開することで、データの実装を知らせることなしに、利用者にデータの本質を操作させる。
  • オブジェクトは、データを隠して抽象化し、データを操作する機能を与える。

データとオブジェクトの違いを再認識。なにも考えずにgetterとsetterを作るのはpublicにするのと同意。良く考えることにする。

クラス

  • クラスの規則は、小さくすること。第二の規則は、もっと小さくすること。責務の数で、小さくする。
  • クラスの簡単な解説は、もし、そして、あるいは、しかし、といった単語以外の単語をつかって、25語以内(日本語だと100文字)程度で作成するべき。
  • 単一責務の原則(Single Responsibirity Principle) クラス、モジュールの変更となる原因となるものが1つでなければならない。
  • 多くの開発者は、1つの責務を持った小さなクラスが溢れかえることで、全体を見失うのではないかと危惧しています。

ある一つの大きな作業を行うために、小さなクラスを渡り歩かなければならないかと心配します。 しかし、小さなクラスの集まりとして構成されたシステムは大きな少数のクラスで構成されたシステムよりも、可動部分がすくない。

この考え方は実物を見るのが早い。この本で出てくるFitnesseのgithubを除くと、そこには小さく分割された無数のファイルとディレクトリがズラズラとならんでいてビックリした。

git clone git://github.com/unclebob/fitnesse

小さなクラスが適切に管理されたディレクトリの中に整然と並んでいる。管理の単位がファイルごとではなくて、サブディレクトリごとなのだ。一つ、抽象度が高いのだ。 これも、カルチャーショック。

その他

  • 説明的変数。プログラムを読みやすくする強力な手法の1つは、計算の途中結果を変数に格納し、その変数に説明的な名前をつける。
  • 条件をカブセル化する。条件の意図を示す関数で抽出する。
  • 条件の否定形を避ける。否定形の条件は肯定形よりもわかりにくい。
Viewing all 91 articles
Browse latest View live