最新の Emacs とか CUnit とかその他のソフトウェアを home にインストールする。
■経緯:
書類を書く仕事は本当に向いてないなぁと思う。出社してテスト手順書のファイルを開いたところまではよかったのだけれど、一行も書けない。書けば書けるんだけど書く気にならないので結果的に書けない。社会人としては失格だと思うが、そんな自分のことが嫌いではない。
というわけで、まぁ、テストコードなら楽しく書けるんじゃないかなぁ〜ということで CUnit をサーバにインストールしようとしたわけですが、権限不足で /usr にファイルコピーできないぜ って make install に起こられたので調べた。
Emacs もあとで最新版入れよう。
URL なのにリンクが張ってないリンクを右クリックから開く。
http://piro.sakura.ne.jp/xul/_textlink.html にあります。
日本語変換せずにローマ字だけで検索する。
急いでいるときにいちいち「半角/全角」キーを押下するのが鬱陶しいという気の短い方が世の中にどれほどいるのかわからないが、僕はそうなのでこういうのは嬉しい。
http://piro.sakura.ne.jp/xul/_xulmigemo.html から導入する。
こちらに実際に動いている様子の動画がある。YouTube にしてくれれば貼り付けやすいんだけどなぁ。
デフォルトのワークスペースの位置を変更したい
インストールロケーションが C:\eclipse であるならば、C:\eclipse\configuration\.settings\org.eclipse.ui.ide.prefs を開いて RECENT_WORKSPACES の値を RECENT_WORKSPACES=D\:\\_projects みたいに望みの場所に書き換えてやれば OK っぽい。
いつしか GUI の設定ダイアログより設定ファイルをごりごり書くほうが使いやすいと感じるようになった。人間変われば変わるもんだ。
いくつか
grep とかするときにしたいのとは違うディレクトリで grep されるんだがM-x pwdでカレントディレクトリがわかる。M-x cdでEnterしてパス指定すると移動できる。grep で再帰的にサブディレクトリを辿りつつ、拡張子 .c または .h のファイルからだけ検索したいんだがgrep -n -R WORD_TO_SEARCH * ってするとバイナリファイルとかからも検索してしまう。素直な気持ちで grep -n -R WORD_TO_SEARCH *.c ってするとそのようなファイル...
いくつか
以前、(setq grep-command "find -name \"*.[ch]\" -print | xargs grep -n ") として grep のコマンドを find 〜 xargs 〜 grep に変更したけれども、デフォルトで grep-find という関数があって、そちらは最初から find 〜 xargs 〜 grep であるということを発見した。調べ物のスキルが低すぎる…。
ただ、コマンドやキーバインドで使い分けるより、大雑把に M-g で grep を呼び出して、M-p と M-n で過去に打ち込んだ grep コマンドを漁るほうが、個人的には楽なように思う。
対応する括弧まで一気に移動する。
対応する括弧へ飛ぶ を参考に、秀丸でよく使われている対応する括弧への移動(開き括弧の上にいれば閉じ括弧に、閉じ括弧の上にいれば開き括弧に)を Emacs でできるようにした。クソ長い if を読むときとかに便利。通常ケースをわざわざ if 文で囲むことの意味がわからない。ガード節でいいだろ。 シンプルそうな以下のほうの設定を使った。;; By an unknown contributor(global-set-key
対応する括弧まで一気に移動する。
(global-set-key (kbd "C-%")( lambda ()
(interactive)
(cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
((looking-at "\\s\)") (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1))))))
という風に変更した。
(1) ほかで使わないので匿名関数で充分。
(2) キーバインドが % だと何か不便だった(なんだったか忘れた)。
Google から地味に熱い新機能
以下、参考画像。
−−−−ここから−−−−

−−−−ここまで−−−−
矢印をクリックすると検索結果の順番を任意に入れ替えることができる。一度 Firefox のタブを閉じ、再び別のタブで検索すると、さきほど入れ替えた順番で検索結果が表示される。また、ふきだしのアイコンをクリックするとコメントが入力可能で、Web 上にコメントが公開される。これは地味に画期的だ!
まず、ブックマークをしなくてもよい。自分でブラウザのブックマークに「秀丸 > タグジャンプ」のようなフォルダを作って整理しているといつか破綻する。どこにブックマークしたか忘れたり、ブックマークから検索するもうまく検索に引っかからなかったりもする。そうすると結局何度も同じキーワードで検索して「あ、これ以前探した」という気持ちになることが少なくない。
同じキーワードで再度検索したときに、以前、よいと思った URL が上位に表示されるから、実質的にブックマークに対してキーワード検索をかけるのと同じ労力(キーワード入力 > Enter)で以前自分が調べて行き着いたURLに簡単にたどり着ける。いちいち整理する手間がない。
普段、ソーシャルブックマークやクリッピングツールをがんばって使って実現している情報の整理がWeb履歴とこの検索結果のソーティングによって大部分自動化されるような予感がする。精度には若干の不安が残るが。
それからソーシャルブックマークと同じようにコメントが投稿されるわけだが、はてなブックマークやdel.icio.us のようにそれぞれのサービスのページにジャンプしたり、Greasemonkey のスクリプトで拡張しなくても検索結果それ自体からほかのユーザの投稿したコメントを読むことができ、ここでも省力化が図れる。Google は微妙に信頼できない部分があったり、特に日本国内においてはSNS的な使い方をするにはちょっとつながりがゆるすぎる部分もあるので、流行するかどうか微妙なところだけど、個人的にはこのインターフェースはかなり便利な気がする。
Google Wave のようなスケールの大きな心機能もおもしろいけど、こういう身近なところで「この手があったか!」と思わせられるような刷新は心が躍る。ひさびさにおもしろかった。
という話を同僚と上司にしたら反応がいまいちで温度差を感じた。
変数宣言の位置によってエラーになったりならなかったりする。(gcc編)
ここ2〜3日の間、古いC言語のプログラム(1992年作!)を修正しているのですが、ちょっとおもしろいことがあったのでメモメモ。 たとえばtest.cというファイル名で次のようなコードを書いたとする。#include
typedef void *HANDLE;int main(void){ printf(
変数宣言の位置によってエラーになったりならなかったりする。(Visual C++ 6.0, C2275, C2146)
さっき試してみたら、以下のようなコード(convはパック形式のBCDをASCIIに変換する処理。本題じゃないので省略)がエラーになった。
#include <stdio.h>
int main(void)
{
char asc[10] = "";
char bcd[5] = {0x01, 0x02, 0x03, 0x04, 0x05};
conv(&asc[0], &bcd[0], 5);
for(int i = 0; i < 10; i++) {
putchar(asc[i]);
}
return 0;
}
エラーの内容はこんな感じ。
gcc pbcd2asc.c -o pbcd2asc.exe && pbcd2asc
pbcd2asc.c: In function `main':
pbcd2asc.c:69: error: 'for' loop initial declaration used outside C99 mode
トラックバック先の頃はGCCならこういうコードは通っていた(ような気がする)のだけれど、僕の勘違いか、あるいは、通らなくなったのだろうか。対策は、-std オプションを用いてソースコードがC99規格に従って書かれていると明示すること。以下のように。
gcc pbcd2asc.c -o pbcd2asc.exe -std=c99 && pbcd2asc
0102030405
これでエラーが消える。
いまの職場はポータビリティを重視してC90で書くことが義務付けられていて、C99もC++もダメなんだってさ。そのわりにC++のコードを吐くユーティリティを使っていたりしてブチ切れそう。
あと、直接の関係はないけど、先日応募した某大企業は予想通り書類選考落ち。自分のふがいなさ、甘さが許せないので、土日で計画を立てて1年以内に僕が望むような企業の合格ラインに達することができるよう何者にも優先して勉強するように生活習慣を設計する。
まとめ
・C99でしか通用しない位置で変数宣言をしていることが原因でコンパイラがエラーを出力した場合は、-std=c99 という風にオプションで規格を明示する。
・可及的速やかにいまの会社はやめる。(年450万円以上で僕を雇ってくれる人急募)
いくつか
M-x pwd
でカレントディレクトリがわかる。
M-x cd
でEnterしてパス指定すると移動できる。
grep で再帰的にサブディレクトリを辿りつつ、拡張子 .c または .h のファイルからだけ検索したいんだが
grep -n -R WORD_TO_SEARCH * ってするとバイナリファイルとかからも検索してしまう。
素直な気持ちで grep -n -R WORD_TO_SEARCH *.c ってするとそのようなファイルやディレクトリはありませんと怒られてしまう。
そんなときは find -name "*.[ch]" -print | xargs grep WORD_TO_SEARCH ってするといい感じに検索してくれる。
Emacs から常に使うのが上記の grep であるなら、.emacs に (setq grep-command "find -name \"*.[ch]\" -print | xargs grep -n ") と書いておくと Emacs から grep するときに上記のコマンドが出てきてくれるので便利。先日のキーバインドの変更とあわせて設定してみたらCのソースを読むのがずいぶん楽になった。
2009/06/02
とある超有名企業に求人を出した。たぶん書類選考で落ちる。応募することで「夢のまた夢」でなく「夢」程度まで近づいたんだな、努力すればいけるかもしれないな、今後はこういう努力をしていこう、と考えがまとまっただけでも収穫かな。通ったらどうしよう…。
昨日、設計書のレビューがようやく終わって気が抜けたので、気分転換にC/C++に疲れた人のD言語を読んでいる。あぁ、たしかにこういう言語欲しかった…。動作速度が問題ないならC/C++でなく、Dのほうが絶対生産性高いよね。OSとかサーバプロセスを書くにあたっての動作速度はさすがに同じネイティブコードでもC/C++のほうが速かったりするんだろうか。何か機会があれば積極的に使っていきたい。もっと流行れ!!
関数ポインタの解説があったので、もしかして関数のネストや手続きをデータとして扱うことができないんじゃないかと思いきや、デリゲートリテラルがあって安心。LISPのラムダ式やRubyのブロック構文と比較すると微妙にいけてない気もするが、C/C++系統の個人的に読みやすい(慣れの問題。美しいかどうかは別)スタイルで、ネイティブコードを出力できて、手続きをデータとして扱えるというポイントを押さえたうえでこの構文なら十分に魅力的だと思った。




