18 Nov 2012, 07:50

WordでEmacsキーバインドをしてみたメモ

Wordでも、Emacsのキーバインドができるらしいので、メモしとく。
以下、Word2010の環境で。多分他のバージョンでも同機能はある。

以下の手順で設定画面へ。
[ファイル] > [オプション] > [リボンのユーザ設定] > [ユーザ設定]

右側に表示されているコマンドに対して、
[割り当てるキーを押してください]からショートカットを入力。

image

基本的なコマンドとショートカットの対応表

コマンド ショートカット 意味
StartOfLine Ctrl+A 行頭へ移動
EndOfLine Ctrl+E 行末へ移動
CharRight Ctrl+F 次へ移動
CharLeft Ctrl+B 前へ移動
LineUp Ctrl+P 上へ移動
LineDown Ctrl+N 下へ移動
EditClear Ctrl+D 一文字削除
EditCut Ctrl+W 切り取り
EndOfLineExtend Ctrl+K 行末までを選択
EditPaste Ctrl+Y 貼り付け

小さなライフハック。

28 Oct 2012, 03:50

EvernoteでEmacsを使う(emacs-evernote-mode)

Evernote、いつも常用しているけれども、なにしろ

エディタが使いにくい!

毎日Emacsを使っている自分としては、是非Emacsの入力がしたいと思った。

毎度、Google先生にお伺いをたてたら、こんなツールを見つけたので、使ってみた。

その名も、emacs-evernote-mode(そのままの名前だぁ)

emacs-evernote-modeのダウンロードとインストール方法

Windowsユーザなので、CygwinでEmacsを利用しています。

なので、ここではCygwinでのインストール方法で。

ダウンロードは以下のサイトから

emacs-evernote-mode

インストール方法と使い方の日本語訳は、以下のサイトから見ることができる(感謝)

http://emacs-evernote-mode.googlecode.com/svn/branches/0_21/doc/readme_ja.html

解凍したら、適当な場所において、おいたディレクトリで以下のコマンドを実行。

Rubyスクリプトインストール

[text]

ruby ruby/setup.rb

[/text]

ただし、注意が必要だ。

evernote-mode-0_41.zip では、バグが2つくらいあった。

下に書いたエラーメッセージがでたときは、Rubyスクリプトを手動で修正する必要がある。

evernote-mode.el をロードパスにコピーする

[text]

cp evernote-mode.el (load-path)

[/text]

(load-pathってなんだよって人は以下のサイト参照)

http://d.hatena.ne.jp/sandai/20120304/p2

evernote-mode設定を.emacs に追記

.emacsでもいいけれでも、自分の場合は~/.emacs.d/init.elファイルに書いた。

[text]

(add-to-list ‘load-path “”)

(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)

(setq evernote-username “USERNAME”) ; Evernote アカウント名

[/text]

使い方

動画で説明。

[http://www.youtube.com/embed/Z6yCFAcOyh0]

evernote-modeのバグを手動修正しよう

evernote-mode-0_41.zip では、Cygwin環境で使おうとすると、バグがあるっぽい。

そのままでは、以下のエラーが出て使えなかった。

以下のサイトを参考にして、直接Rubyソースを修正し、再度 ruby setup.rbを実行するとできた。

バグ修正(その1)

error in process sentinel: enclient.rb exited abnormally with code 1

-e:1: syntax error, unexpected tINTEGER, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END

:1: Use RbConfig instead of obsolete and deprecated Config.

http://code.google.com/p/emacs-evernote-mode/source/detail?r=198

バグ修正(その2)

SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A

http://code.google.com/p/emacs-evernote-mode/issues/detail?id=16

http://code.google.com/p/emacs-evernote-mode/issues/detail?id=17

28 Oct 2012, 02:26

プログラミングについて本気出して考えてみた

プログラミングに定義をあたえてみよう

自分の仕事は、プログラマだ。

そして、この仕事はどのように定義できるのか、考えてみた。

人生の定義は、幸福の定義は、仕事の定義は・・・
人それぞれで解釈が違う言葉について、自分は個人的に言葉の定義をしている。

ここでの定義は、一般的な言葉で概念を捉えようとしているのではなくて、あくまで個人的な定義だ。定義を与えることによって、安心感を得ることができる。

プログラミングの目的は、自動化による労働からの解放

自分は、プログラミングを自動化と定義する。

そしてプログラミングの目的は、

コンピュータに働かせることで、人間が楽をする

ためだと決める。

『決める』ということが、大事なキーワードだ。正しい定義など、存在しないのだから。

コンピュータは、計算機として生まれたわけだが(スパコンもそうだが)、
それは、人間の計算を自動化することが目的だ。人間がすれば、一生かかっても終わらない計算を、コンピュータを働かせることで、寝ている間に計算させておく。

それが転じて、人間がする作業をあらかじめブログラミングしておき、コンピュータに実行させるようになる。プログラミングとは、人間の作業を機械に実行させるためにある。

プログラマとは、人間を日々の労働から解放するもの、と定義する。

革命は、人間を労働から解放するために起るのだ

産業革命によって機械が発明されて、人間は楽ができるようになった。

洗濯だって、洗濯機のスイッチを押せば勝手にやってくれるし、
料理だって、薪を拾ってきて、火を起こすこともない。

IT革命によってコンピュータが生まれた。インターネットが発達した。
人間は楽ができるようになった。

図書館に行かなくても、パンツ一丁で世界中の情報を収集できる。
お金を持ち歩かなくても、電子決済で買い物ができる。

世の中は、文明は、人間が楽できる方向へ、日々進化している。

はたして、なぜ自分の人生は楽ができないのだろうか

しかし、自分の現状はどうかというと、人間が働き、一向に仕事は楽にならない。
毎日残業は続き、体調を崩している。腰が痛い。平日のリフレッシュは100%諦めている。
これは、今決めた哲学からすると、根本からして目的と矛盾している。

開発手法や開発環境へこだわることは、本当に瑣末なことだと感じる。
効率化やライフハックは、それ自体が目的であってはいけないと思った。
(困ったことに、効率化できると無上の喜びを感じるのだが)

それは、このブログのテーマである、ライフハックを否定することになるけれども。

プログラミングをすることで、労働から開放されなければならない。
そのためには、自分が働くのではなくて、プログラムに働かせなければならない。

22 Oct 2012, 07:30

KinectとMMDを組み合わせて落語をしてみた(その2)

前回の記事に引き続き、Kinect for WindowsとMMDを組み合わせて、落語をしてみたので、アップロードします。

KinectとMMDを使って落語をしてみた。

MMD古典落語3品

寿限無

[http://www.youtube.com/embed/5JpCXKQzJsg]

 

がまの油

[http://www.youtube.com/embed/sVJ5OpWfb8k]

 

あたま山

[http://www.youtube.com/embed/MFW_eOixg_Q]

 

Kinect落語の課題

技術的なところは前回となにもかわっていないけれども、いくつか課題に気づいた。

Kinect で記録できる時間が7分くらいしかない

MikuMikuMovingでモーションを記録していると、7分くらいモーションを記録したところで、記録が止まっていることに気づく。(そのせいで、何度撮り直したことか・・・)

解決策が是非欲しいところ。Youtubeへのアップロード時間も考えると、長い話の場合は、分割したほうがいいのかな?

リップシンクは手動での記録しかみつからない

自分のリップシンクの理想では、音声に合わせて口パクしてくれるソフトが欲しかったが、そのようなソフトは見つからなかった。

手動で、タイミングを教えてあげる必要がある。

それだと、ちょっと時間がかかりすぎるので、挫折。

手動でのリップシンク補助ソフトには以下のようなものがあった。

21 Oct 2012, 13:25

Eclipse CDT リファクタリング機能について調べてみた。

偶然、以下のリンクの動画を見つけて、ものすごくカッコ良かった。

実践!リファクタリング – WEB+DB PRESS Vol.37

ほぼパクリだけれども、自分でもEclipse CDT版で紹介動画を作ってみた。
ソースとかは思いつきなので、参考にならないけれども。

[http://www.youtube.com/embed/huxHVMcMfR0]

 

Eclipse CDTのリファクタリング機能はJDTに比べてショボかった

Eclipse CDTのリファクタリング機能はJDTに比べて、思ったよりもショボかった。

  • インライン化の機能はない。
  • 関数の抽出でも、重複コードを見つけてくれない。
  • 関数の移動ができない

。。などなど。

できることは、以下の通り。

  • 名前変更
  • ローカル変数の抽出
  • 定数の抽出
  • 関数の抽出
  • Toggle Function

開発元のサイト(http://r2.ifs.hsr.ch/cdtrefactoring)をのぞくと、今後機能追加がされそうな雰囲気。

CDT リファクタリング機能の簡単な紹介

リファクタリング機能の簡単な説明。

実際にC言語でどのようなリファクタリングが有効かというのは、以下のサイトが非常に参考になった。リファクタリングの経典、マーチン・ファウラーの『リファクタリング』の中で、C言語で使えるものだけを選択して紹介している。

Refactoring C-code

名前変更(Alt + Shift + R)

同一ファイル名の変数名や関数名を変更できる。
個人的には、とてもよく使う。

ただし、ファイルをまたいで置換は失敗する。
この場合は、検索&置換機能で変更したほうがよい。

ローカル変数の抽出(Alt +Shift + L)

選択した部分をローカル変数に抽出することができる。
長い条件文を簡単にするときなどや、わかりにくい式に簡単な名前を与えるときに使用する。

実行すると、選択した行のすぐ上に、型つきで変数の定義と代入文があらわれる。

int sample = ( 選択した式)
if(sample(選択した式) {
}

個人的には、この逆の変数のインライン化とセットでできればいいのにと思う。

定数の抽出( Alt + C)

数字や文字列など、むき出しな状態でコードに書いてあるときは、定数の抽出を使う。
実行すると、ファイルの先頭に、定数が 『static const 』つきで宣言される。

関数の抽出( Alt + Shift  + M)

関数の抽出もよく使う。

関数として抽出したい部分を選択して実行すると、関数の頭に選択した部分を含む関数が生成される。選択した部分にreturn文が含まれると動作しないので注意が必要。また、選択した部分に含まれる変数を自動的に検出して、仮引数とする。

これはJDTのように重複する部分を自動で検出して置換してはくれないのが悲しい。

Toggle Function( Alt + Shift + T)

指定された関数をソースファイルからヘッダファイルへ移動する。
関数をインライン関数に変更したい場合に使う機能。

参考リンク

21 Oct 2012, 12:35

『cdt-tests-runner』GoogleTestの結果をEclipse CDTから見るプラグイン

自分は、Eclipse CDTからGoogleTestを利用している。
Eclipse CDTから GoogleTestの結果を見るプラグインを見つけたので、紹介。

[http://www.youtube.com/embed/vObiKSSNJEY]

 

JUnit ViewerのCDT版『cdt-tests-runner』

プラグインの名前は『cdt-tests-runner』。公式サイトは以下。

https://github.com/xgsa/cdt-tests-runner/wiki/Tutorial

GoogleTestだけでなく、Boost Test, Qt Testにも対応している。

Eclipse CDT 8.1 からは、デフォルトで搭載されているらしい。
が、自分のCDT 8.1には入っていなかったので、手動でダウンロードした。
以下のパスを[ヘルプ] > [新規ソフトウェアのインストール] > [作業対象] に貼り付けて、C/C++ Test Runnerをインストール。

https://raw.github.com/xgsa/cdt-tests-runner/tests_runner_demo/testsrunner/org.eclipse.cdt.testsrunner-updatesite/site.xml

image

cdt-tests-runnerの設定方法

インストールできたら、GoogleTestを走らせたいプロジェクトの[実行の構成]を見る。
C/C++ Unitという新たな項目を選択して、実行構成を新規作成。

GoogleTestを利用するためには、[C/C++ Testing]タブを開いて、Tests RunnerでGoogle Tests Runnerを選択する。

image

[実行]を選択すると、テストが走り、実行結果が表示される。

実行結果

image

失敗したテストをクリックすると、そのテストまでジャンプできるところが嬉しい。
これはEmacsではできるよと書いてあったが、Eclipseでもしたかった。

Emacs で直接,失敗した行に移動するにはどうすればよいでしょうか? 窶錀 GoogleTests

Eclipse のプラグインでなければ、Guiterもあるよ

Eclipseのプラグインにこだわりがなかったり、Eclipseユーザでなければ、『gtest-gbar(Guiter)』というツールをつかうという選択肢もある。

http://code.google.com/p/gtest-gbar/

これならば、Visual Studioユーザでもレッド・グリーンが楽しめる。

今までは、自分もこっちを利用していた。
エラーしたときのメッセージ表示の欄が広くて見やすいので、またこっちに戻るかも。

21 Oct 2012, 11:46

KinectとMMDを使って落語をしてみた。

前回は、Kinect for Windowsと MikuMikuMovingを組み合わせて、3DのキャラクターをKinect で操作する方法を知らべた。

Kinect for Windows によるMMDの使い方

今回は、それをちょっと応用してみて、Kinect で 落語をしてみた。

(実はこれがやりたくて、Kinectを購入した)

味噌豆 on MMD

[http://www.youtube.com/embed/eb3YkpOUrNQ]

演じてみたのは、古典落語の小噺『味噌豆』。

出囃子は志ん生師匠の一丁入りを拝借しています。

(http://www.youtube.com/watch?v=RK0UUX-K31s)

ステージは、MMD演芸場(http://www.nicovideo.jp/watch/sm12172730)

モデルは、双音レンジ(http://mmd.dip.jp/files/320)

を利用させていただきました。

もう少し改善したい点は、

  • 手の仕草(パーしかできない)
  • 表情
  • リップシンク
  • 自分の部屋の狭さ(えっ?(・0・)?)

まあ、鑑賞に堪える(耐える?)ようなので、よしとしよう。

17 Oct 2012, 22:33

Kinect for Windows によるMMDの使い方

MMDが自分の動作に合わせて動いたら楽しそうだなーというだけの理由で、Kinect for Windows をAmazonで衝動買いした。価格は、22000円。

KinectをつかってMMDのモーションをキャプチャーする方法はインターネット上にたくさん紹介されている。しかし、よくよく調べてみると、これはすべて xBoxタイプの方法だった・・・orz。

えっ、Kinect for WindowsだとMMDつかえないの?
2万円したんだよー!

という思いとともにいろいろと調べたら、なんとか使う方法がわかったので、メモしておく。

Kinectには2種類あるらしい

Kinectには、Xboxに接続して使うタイプと、PCに接続して使うタイプの2つがあるらしい。そして、あたしはxboxをもっていないという理由で、PCに接続してつかう、Kinect for Windowsを購入した。

2つの機能比較は、以下のリンクが参考になる。

http://thinkit.co.jp/story/2012/07/03/3605

  • Xboxに接続するタイプ

 

  • PC(Windows 7)に接続するタイプ

 

Kinect for Windowsでミクを動かせ

MMM(MikuMikuMoving)がKinect for Windowsに対応している

MMDではダメだけれども、MikuMikuDanceの互換ソフトMikuMikuMoving(以下MMM)がKinect for Windowsに対応していることがわかった。ダウンロードは以下のサイトから。

MikuMikuMoving

MMMを起動するとリボンの[Kinect]タブをクリックして、キャプチャをクリックすると、Kinectから動作を取り込むことができる。image

こんな感じで、踊ってみた。ふう。

[http://www.youtube.com/embed/mPLmooCeXBM]

他、MoggNUI 導入でMMDをつかう方法について

どうやら、MoggNUI を利用するとMMDでもKinect for Windowsが使えるらしい。

ただし、自分の環境(Windows7 64bit)ではエラーして動かなかった。http://masque2525.blog97.fc2.com/?tag=Kinect

おまけ OpenNIを利用しようとして失敗した記録

失敗1 OpenNIをつかう方法

xboxタイプだと、以下の方法が王道パターン。

  1. OpenNIをインストール。
  2. SensorKinect(Kinectのドライバ)をインストール
  3. NITEをインストールする
  4. DxOpenNIをインストール。

しかし、この方法を試しても、Kinectをデバイスとして認識してくれない・・・。この時点で、Kinect for Windows SDKとOpenNIの両方を使うことができないことに気づく。

失敗2ツꀀ kinect-mssdk-openni-bridgeを試す

kinect-mssdk-openni-bridgeをつかうことで、Kinect for Windowsから OpenNIを利用することができる。ダウンロードは以下から。

kinect-mssdk-openni-bridge

しかし、残念、これをインストールしてもMMDからはOpenNIにアクセスできなかった。

OpenNIがインストールされていませんという注意がでて終了。

13 Oct 2012, 02:52

プロファイラgprofをつかう

CPU負荷を測るツール、gprofを試したので、簡単にメモ。

gprofでプログラムの性能をしらべる

プログラムの性能情報を知ることができる(プロファイリングできる)ツール。
実行ファイルから、以下の情報を得ることができる。

  • 実行時間

    • 単位時間内に関数の呼ばれた回数
    どの処理に時間がかかっているのかを、感覚的にではなくて数値情報として得ることができる。CPUに負荷がかかりすぎると組み込みソフトでは異常終了してしまう。このツールが利用することで、時間がかかっているポトルネックを発見できて、処理速度を最適化できる(らいし・・・試してないので)。

使い方

gprofはgccとともについてくるツールなので、とくにダウンロードは不要。
which gprofで見つかった。

ブロファイラ情報を得るには、ビルドするときに、以下のコンパイルオプションをつける。

-pg

MakefileだとCFLAGSに追加すればよい。

CFLAGS += 窶菟g

実行バイナリを実行すると、カレントフォルダにgmon.outというファイルができる。
このgmon.outに解析情報がはいっている。

解析結果を取り出すには、以下のコマンドを叩く。

gprof (実行ファイル).exe gmon.out

(実行ファイルはオブジェクトファイル(hogehoge.o)でもいい)

%   cumulative   self         self     total
time   seconds   seconds    calls      Ts/call  Ts/call  name
0.00      0.00     0.00       1001     0.00     0.00  buffer_over_run
0.00      0.00     0.00        1         0.00     0.00  buffer_over_run2

for文を1000回回してみたらこんな感じ。

その他メモ

Eclipseからgprofの解析結果を表示できるらしい。
試してみたが動かず。 どうやらCygwinは未対応?

http://wiki.eclipse.org/Linux_Tools_Project/GProf/User_Guide




                    

13 Oct 2012, 01:37

Eclipse CDTで gcovの結果を見てみる

gcovの出力結果をEclipseでみる方法を調べてみた。

Eclipse 3.7(Indigo)までは CDT gcov pluginが動いたけど、Eclipse4.2 (Juno)からは、動かない・・・。しかし、代わりに、Eclipse Juno では GCov pluginが動作した。

というわけで、2つの方法を紹介する。

その1CDT gcov plugin

インストール

以下のサイトからダウンロード。

http://sourceforge.jp/projects/ginkgo/

ダウンロードファイルを解凍すると featuresとpluginというファイルがある。

それぞれeclipse.exeと同じフォルダにあるfeaturesとpluginにコピーする。(org.ginko.gcov.feature_0.2.2とorg.ginkgo.gcov_0.2.2.jar)

あとは、- cleanオプションをつけてEclipse再起動。

CDT gcov pluginの設定

[プロジェクトエクスプローラ]からカバレッジを出したいプロジェクトを右クリックしてオプションを選択。

C Coverageという項目があるので、Activate natureを有効にする。

image

gcovを実行して、出力用データを作成する

Eclipseで表示するには、.gcovという形式のファイルをつくる必要がある。
以下の3ステップで作成する。

ビルドして hogehoge.gcnoを作成

ビルドして.gcnoファイルを作成する。
ビルドするときに、以下のオプションをつける。

-fprofile-arcs -ftest-coverage

MakefileだとCFLAGSに追加すればよい。

CFLAGS += -fprofile-arcs -ftest-coverage

実行ファイルを実行して、hogehoge.gcdaを作成

実行ファイル(.exe)を実行すると、*.gcdaができる。
自分の場合はGoogleTestでテストコードを書いて、テストを実行することで、カバレッジを得る。

gcovコマンドを実行して、hogehoge.c.gcovを作成

Eclipseでカバレッジを得るには、もう一工夫必要。
実行してできた、hogehoge.gcdaに対し、以下のコマンドを実行するとhogehoge.c.gcovというファイルができる。

gcov hogehoge.gcda

 

その2 GCov plugin を使う

以下からダウンロード。
http://wiki.eclipse.org/Linux_Tools_Project/GCov/User_Guide

ちなみに、Pleades日本語プロジェクトからEclipse 4.2 CDTを落としてきたら、Defaultでついていた。
http://mergedoc.sourceforge.jp/index.html#/pleiades.html

hogehoge.gcdaを作る

つくりからは上に同じ。
作成したら、プロジェクトビューから、作成したhogehoge.gcdaを開く。
実行バイナリファイルに含まれるすべてのカバレッジデータを出力するか、ファイル単位で出力するかを選択する。

image

ファイル単位で開いてみると、カラー表示されたカバレッジ出力結果が表示される。

image

実行バイナリファイル単位で表示すると、gcovビューにカバレッジの集計が見える。
(開くまで時間がかかる)

image

(GCovユーザガイド)http://wiki.eclipse.org/Linux_Tools_Project/GCov/User_Guide#Installation_and_Set-Up