11 Jan 2014, 13:34

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

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と連携させて利用したいところですが、それはまた今度。

11 Jan 2014, 08:10

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

ブログは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を参照。

11 Jan 2014, 05:34

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

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

10 Jan 2014, 15:41

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

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'

参考

10 Jan 2014, 12:56

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

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

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

task 20 annotate hoehoge

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

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

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

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

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

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

$ taskcomments 20

07 Jan 2014, 13:53

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

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



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

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

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

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

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

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

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

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

内容

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

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

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

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

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

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

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

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

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

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

07 Jan 2014, 12:27

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

なにかのアイデアを忘れないように、アイデアは思いついたときに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'
    

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

05 Jan 2014, 12:25

ストレスフリーの境地、だからGTDとTDDが好きだ

medium_4774087006

2年以上前の自分のつぶやきをふと見つけたので、これについて書いてみる。

TDDとGTDの共通点

TDDが好きだ。その理由はTDDがGTDに似ているからだ。

[//www.youtube.com/embed/ie_HQwQ5YZE]

以下、似ている点を列挙してみる。GTDでのタスクという言葉は、TDDではテストという言葉に置き換えることができる。

  • [リスト化]TODOリストにしたがってタスクをこなしていく。
  • [最小化]大きな問題を最小単位のタスクまで分解して取り組む。
  • [ボトムアップ]タスクを確実に積み上げて大きなことを成し遂げる。
  • [NextAction]具体的で着手可能なNextActionのタスクを常に意識する。
  • [フロー状態]目の前のタスクに集中する。
  • [規律]規律(Kata)を遵守することでプロジェクトを推進する。

TDDを知らないころ、GTDにしたがってNextActionをこなしていくことを生活の規律にしていた。なので、GTDのように開発もしたいなと思っていた。TDDを知ると、その方法論にすぐに魅了されてしまった。

ストレスフリー

GTDのなかでとくに好きな考え方は、以下のようにたとえられるもの。

  • ストレスフリー
  • 水のように澄み切った状態
  • 働くだけの幸せバカ

空手が両者と関係しているのも、偶然ではないだろう。(6:30の空手パンチ!)

ストレスフリーはGTDの売り文句だけれども、TDDにもその感じは当てはめることができる。フリー状態とはいえないまでも、TDDをしていると、安心と集中を得ることができる。だから、TDDが好きだ。

人生の意味について

人生の意味はなんだろうかと思う。人生の意味はないと思う。

それだと不安に耐えられないので、無理やりにでも目標を定めてその達成を目指し、そこに意味を見出そうとしている。そして、目標の達成のために集中している状態が、幸せだと思っている。

また、目標は達成できない大きな目標ではなくて、小さなもの、達成可能なもの、瑣末なものがよい。ションベンをより遠くまで飛ばすことだって素晴らしい。小さくて具体的な次の一手を決めて、その達成に対して精一杯集中する。その過程におけるストレスフリーな状態が素晴らしい。

ターゲットを決めて前に進むことが大事。そういう人生観に、GTDやTDDの考え方はマッチしている。

だから、GTDやTDDが好きだ。

参孝


photo credit: net_efekt via photopin cc

05 Jan 2014, 03:44

2013年に読んだ技術書一覧

2014年はたくさん技術書を読もうと思う!

去年はあまり本を読まなかった気がするが、はてさてどんな本を読んだか、一覧にまとめてみました。

だいたい18冊くらい。

Web関係の本も読んだ気がするが、タイトルすら忘れてしまったのでノーカウント。 2014年は、2週間に1冊は読んでいきたいところだ。目指せ24冊!!


美しさってなに?リーダブルコードを読んで思ったこと。 | Futurismo


[CleanCoder]断片的なプロ意識に感銘!プログラマは[CleanCoder]でプロの感性を学ぼう。 | Futurismo


[本]IPv6ネットワークプログラミングを読んだ感想 | Futurismo


百科事典のようなワクワク感!IT技術者のための「ストレージの原則と技術」を読みました | Futurismo


[本]Jenkins (オライリー・ジャパン)を読んだ読書メモ | Futurismo


『よいコードを書く技術』とよいクラス名のつけ方について | Futurismo


Cygwin使いならば絶対に身につけておきたいコマンド5選+apt-cyg | Futurismo


プログラマ必読!「UNIXという考え方―その設計思想と哲学」でUnix哲学の真髄と美徳を学ぶ | Futurismo


レガシーコード改善ガイドを読了しました!心に響いた考え方の覚書 | Futurismo


テスターの視点を手に入れるために『実践アジャイルテスト』を読みました | Futurismo


モダンディなTDDの最新動向が集結!『Modern C++ Programming with Test-Driven Development』 | Futurismo


「モダンC言語プログラミング」を読んだ!C言語の組込みエンジニアのためのモダンテクニックが満載 | Futurismo





これはなかなか死ねたよ。



02 Jan 2014, 14:46

2014 年の目標

ドラクエ 8 のレベル上げをしていたら年が変わってしまった, そんな年越しだっだ. 今年の目標は, ドラクエ 8 を全クリすることだ.

2 番目の目標は, ムークを頑張ること.

去年の夏からムークを頑張ってきたが, 今年はさらに力を入れようと思う. 今年はムークを趣味にしてもいいと思ってる.

大学生のときに勉強しなかったことを後悔している. もっと時間に余裕のあるときに, コンピュータサイエンスやプログラミングに時間をかけて取り組んでおくべきだった.

しかし自分は大学院にはいかなかったが, それは後悔していない. なぜなら, 就職することで, プログラマになるという自分の道を決めることができたからだ.

自分は応用数学を勉強していたが, 勉強のやる気が起きなかった. 大学生のときはそれが社会にでて役に立つとは思わなかったからだ.

・・・

今は違う. 意欲的に学習できる.

その理由は, 一つに学習が将来の可能性につながると信じているから. だから, いくら時間をかけてもそれが苦にはならない.

もう一つの理由としては, ムークの講義はとてもおもしろい. 大学 1,2 年生のときは基礎科目を勉強していたのであまりおもしろくなかった. 大学 3 年生になると, 内容が専門的になっておもしろいなと感じたがそのまま就職活動だった. 大学 4 年のときは勉強はそれなりにしたけれども, ガチガチの数学だったのでつまらなかった. ムークの内容は, 大学 3 年生のころに感じたおもしろさを思い出す.

・・・

大学生のときに CS をしっかり学ばなかったことを後悔している. ムークは, そんな自分に学ぶ機会を与えてくれる. 素晴らしいことだ. ムークを利用して今年はコンピュータサイエンスの基礎を徹底的に学ぼうと思う. 今年は学びの年にしたい, それが新年の目標だ.