カテゴリ:IT( 162 )
C言語 (C99) にはBoolean型があるんだね
 CODE COMPLETE (上) の "言語の「中へ」のプログラミング" (言語に含まれていない機能をコーディング規約やライブラリ等で補うこと) という言葉に感動して、以下のような感じで C言語用の Boolean型を定義したりして、悦に入ったりしてたんですよ (C言語なんてろくに使いもしないのにw)。

typedef enum {
false = 0,
true = (!false)
} bool;


 ところが、ふと調べてみたら、最近の C言語 (いわゆる C99) では、_Bool という Boolean型に相当する型が定義されてるんですね (プログラミング言語 C の新機能: 5.1 _Bool 型)。stdbool.h というヘッダファイルをインクルードすると bool, true, false という名前を使用することもできるみたいです(プログラミング言語 C の新機能: 9.4 stdbool.h)。
 Wikipediaにも結構まとまった説明がありますね。

 言語の「中へ」プログラミングする前に、まず、本当にその言語に欲しい機能がないのか、ちゃんと調べろってことですかね。
[PR]
by fkmn | 2008-08-27 23:55 | IT
moccur-grep-find で .svn 以下のファイルを無視する
Emacs でソースコードの検索/置換をするときに欠かせないのが moccur-edit

すごく便利で重宝してるんだけど、moccur-grep-find を実行したときにバックアップファイル(ファイル末尾が "~")とか .svn 以下のファイルまで引っ掛けてしまうので、.emacs にこんな感じで無視するファイルの設定を追加している。
(setq dmoccur-exclusion-mask
(append '("\\~$" "\\.svn\\/\*") dmoccur-exclusion-mask))

これで、上記のファイルは無視されるようになる。

# 「svk とか git 使ったら?」というツッコミはスルーするのでよろしくw


ちなみに、デフォルトの dmoccur-exclusion-mask の設定は以下のような感じ。

(defcustom dmoccur-exclusion-mask
'( ;; binary
"\\.elc$" "\\.exe$" "\\.dll$" "\\.lib$" "\\.lzh$"
"\\.zip$" "\\.deb$" "\\.gz$" "\\.pdf$"
;; Microsoft
"\\.doc$" "\\.xls$" "\\.ppt$" "\\.mdb$" "\\.adp$"
;; image
"\\.jpg$" "\\.gif$" "\\.tiff$" "\\.bmp$" "\\.png$"
"\\.pbm$")
"*List of file extensions which are excepted to search by dmoccur."
:group 'color-moccur
:type '(repeat regexp)
)
圧縮ファイルとか画像ファイルなんかのバイナリファイルを無視するようになっている。
[PR]
by fkmn | 2008-07-16 23:55 | IT
XS ソースコードリーディング - List::Util編 -
 perlXStut(perlXStut - XSUB を書くためのチュートリアル)も一通り読み終わったので、perlxs(perlxs - XS言語リファレンスマニュアル)を参考にしつつ、実際に XS で書かれた CPAN モジュールのソースコードを読んでみることにした。。

 で、とりあえずは、動作が分かりやすい List::Util から読んでみたら、面白いコードがあった。

void
min(...)
PROTOTYPE: @
ALIAS:
min = 0
max = 1
CODE:
{
int index;
NV retval;
SV *retsv;
if(!items) {
XSRETURN_UNDEF;
}
retsv = ST(0);
retval = slu_sv_value(retsv);
for(index = 1 ; index < items ; index++) {
SV *stacksv = ST(index);
NV val = slu_sv_value(stacksv);
if(val < retval ? !ix : ix) {
retsv = stacksv;
retval = val;
}
}
ST(0) = retsv;
XSRETURN(1);
}

 ALIAS というキーワードを使うと、同じ関数を異なる名前で呼び出すことができ、呼ばれた名前に従って ix という変数に値がセットされるらしい。上のコードの例で言うと、min が呼ばれたときは ix に 0 が、max が呼ばれたときは ix に 1 がセットされる。なので、
val < retval ? !ix : ix 
というコードは、min が呼ばれたときには
val < retval ? true : false
という意味になり、max が呼ばれたときには
val < retval ? false : true
という意味になる。

 なるほどなぁ。

参考:perlxs - XS言語リファレンスマニュアル
ALIAS: というキーワードは、XSUB に対して二つ以上のユニークな Perl での名前を持たせ、また、起動されたときに使われている(そういったユニークな Perl での) 名前を知るための手段を持たせます。 Perl での名前は完全修飾されたパッケージ名とすることができます。それぞれの別名はインデックスとして与えられます。コンパイラは、使用される別名のインデックスが格納されている ix と呼ばれる変数をセットアップします。 XSUB が ix という名前と共に呼び出されたとき、その値は 0 となります。

[PR]
by fkmn | 2008-07-08 23:55 | IT
perlXStut を少し読んでみた その2
 perlXStut(perlXStut - XSUB を書くためのチュートリアル)の EXAMPLE 4 と 5 まで写経。そろそろややこしくなってきた。

 外部のライブラリを Perl から呼ぶだけであれば、XS のコードは結構シンプルに書けるっぽいというのが、実感として分かってきた。けど、込み入ったことをやろうとすると、おまじない的お作法がいろいろあって面倒っす。
[PR]
by fkmn | 2008-07-01 23:55 | IT
perlXStut を少し読んでみた
 XS を書くためには、perlXStut を読むと良いということなので、perldoc の日本語訳(perlXStut - XSUB を書くためのチュートリアル)を読みながらサンプルコードを写経してみた。とりあえず EXAMPLE 3 まで(自分用アレンジが少し入ってます)。
 ちなみに、XS のコードは、やっぱり c-mode で書くのが普通なんだろか?インデントが微妙な感じで、ちょっと気持ち悪い。

Mytest.xs

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"


MODULE = Mytest PACKAGE = Mytest

void
hello()
CODE:
printf("Hello, world!\n");

int
is_even(input)
int input;
CODE:
RETVAL = (input % 2 == 0);
OUTPUT:
RETVAL

double
round(arg)
double arg;
CODE:
if (arg > 0.0) {
RETVAL = floor(arg + 0.5);
}
else if (arg < 0.0) {
RETVAL = ceil(arg - 0.5);
}
else {
RETVAL = 0.0;
}
OUTPUT:
RETVAL



 そういえば、RubyKaigi で arton さんの「拡張ライブラリの書き方講座」を聞いたことだし、Ruby の C拡張も試してみようかなぁ。
[PR]
by fkmn | 2008-06-30 23:55 | IT
TechTalk漬けの日
 RejectKaigi と RejectRejectKaigi と Shibuya.pm Teck Talk #9 の動画を見て過ごす、そんな1日。

 RjectKaigi と RejectRejectKaigi は、歌って踊る人とかやる夫とかまで出てきて、いい感じにカオスだなぁ。やっぱり、最後までいればよかった。

 Shibuya.pm の方は、C言語初心者(もちろんXSなんて書いたことない)のオイラにとっては、ちょいキツめの内容だった。でも、最初の二人(ひろせさんと牧さん)の話は分かりやすかったっす。そのうち、自分でも XS を書きたいなぁ。
[PR]
by fkmn | 2008-06-28 23:55 | IT
RubyKaigi2008 の感想
a0057891_1585480.jpga0057891_1572648.jpg

泊まりがけで行ってきたヨ、RubyKaigi2008。
どうもおつかれさまでした&ありがとうございました > スタッフの皆様

印象に残ったセッションの感想を、つらつらと書いていきます。

1日目

The Magic of Rubinius (Evan Phoenix)
 Rubinius というRuby処理系があることを、初めて知った。Smalltalkで実装されているらしいけど、Smalltalkの話はほとんど出てこなかったような。Smalltalkで実装されているのではなく、Smalltalkの技術を使って実装されている、ということだそうです。ご指摘どうもありがとうございました>ささださん。
 結構興味がある話だったんだけど、後半の内容が少し細かくて、ついていけなかった・・・orz。

基調講演 (まつもとゆきひろ)
 "MagLev" という単語が何度も出てきて耳に残った。これもやっぱりRuby処理系のsmalltalk実装だということ。
 Smalltalk ってそんなにすごいの?Rubyを使っていながら、Smalltalk って全然知らないんだよね。ちょっと触ってみようかしら。

Ruby M17N (成瀬ゆい/Martin J. Dürst)
 CSI (CodeSet Independent) といういばらの道を進むお二人の話。いろいろな苦労がかいま見れるプレゼンだった。

RSpecによるRailsアプリケーションBDD事例 (Yugui)
 今回のRubyKaigiの中で一番ためになる話だった。
 RSpec がなかなか身に付かずに、未だに Test::Unit を使っている僕はどう見ても小学生です。本当に(略)。どうやら BDD では、実装コードよりもテストコードの方が多くなる方が自然らしい。なるほど、勉強になる。
 「お前は基本的になにも分からんのだから、黙ってろ!」は至言。

toRubyでみつけた Rubyist人生再出発 (池澤一廣)
 今回のRubyKaigiの中で一番感動した。こういう感動は、技術系カンファレンスでは初めて。

2日目

拡張ライブラリの書き方講座 (arton)
 arton さんのトークのリズムが好きだ。途中で時間切れになってしまったのが残念。

The future of Ruby in Mac OS X (Laurent Sansonetti)
 MacRuby SUGEEEEEEE!!
 これをフルタイムではない環境で一人で作ってしまった Laurent さんはスゴイ。MacRuby で何かを作ってみたくなった。

Real-World Enterprise Ruby (大場光一郎・高井直人)
 今回のRubyKaigiの中で一番感心した話だった。
 漫才形式(?)で楽しげにプレゼンしてたけど、社員数千人規模の会社で、正攻法で攻めて全社的な体制を整えるのは、並大抵の労力じゃなかったと思う。
 大規模なSIerにおける、ほぼ理想に近い Ruby の導入事例じゃないかな、これ?


 RejectKaigi は見ずに帰ってしまったんだけど、そっちもずいぶんと盛り上がったみたいで、見とけば良かったとちょっと後悔。来年は、ぜひとも最後までいよう。


 ということで、来年もよろしくお願いします。できれば、場所は関東近辺 (もしくは、札幌か仙台)で!><
[PR]
by fkmn | 2008-06-23 23:55 | IT
Linux/Unix のシェルで高速タイピングをするためのTips
当たり前すぎて、だれも書かないシリーズ。

 Linux/Unix のシェルでは、Ctrl+何かのキー という組み合わせで、ホームポジションから手を離さずに、各種の入力を行うことができる。この辺がまとまってる記事をあまり見たことが無いのでまとめてみた。bash と zsh で確認 (Bourne系は共通?)。Emacs と共通したキーバインドが多い。

カーソル
  • Ctrl + f => カーソル右 (Forward)
  • Ctrl + b => カーソル左 (Back)
  • Ctrl + p => カーソル上 (過去に入力したコマンドの表示、Previous)
  • Ctrl + n => カーソル下 (Next)
  • Ctrl + a => 行の先頭に移動 (a はアルファベットの最初の文字)
  • Ctrl + e => 行の最後に移動 (End)

特殊キー
  • Ctrl + i => TAB (コマンドの補完)
  • Ctrl + j => ENTER
  • Ctrl + h => Backspace
  • Ctrl + d => DELETE (Delete)
    その他
    • Ctrl + r => 過去に打ったコマンド (history) からインクリメンタル検索
    • Ctrl + k => カーソルから後ろの文字をすべて消去


     今年の新人さんあたりに教えてあげたい感じ。


    6/29 追記
     当たり前すぎて誰も書かない、と書いたけど、鵜飼さんによるラインエディットに関するまとめテキストを見つけました。以下のURLから読めます。このエントリよりも全然詳しいので、そっちを読んだ方が100倍ましかも。

    便利なshell
    [PR]
by fkmn | 2008-06-20 23:55 | IT
Emacs で C とか Perl とか Ruby のデバッグをすると気持ちいい
 全国のprintデバッグ愛好家の皆様、こんにちは。VSとかEclipseとかのIDE以外でデバッガを使ったことのない僕がやってきましたよ。

 最近、C言語でヒーコラ言ってる真っ最中な訳ですが、C言語だとprintデバッグがやりにくい訳で、デバッガ様の力を借りてみたくなった訳です。という訳で、巷で有名な gdb をちょっと試してみました。

 基本的な使い方は、以下を参考にしてます。
 で、なんだか Emacsからも使えるみたいなんで、試してみたんですが、これが使いやすくてびっくり。"M-x gdb" で起動すると、Emacs のソース上に、現在の行が黒三角で、ブレークポイントが赤丸で表示されます。後は、コマンドラインでの操作と同じように、s とか n でステップ実行できます。
a0057891_1245669.jpg


 あー、もしかして、Perl とか Ruby のデバッガもこんな感じで使えるのかなぁ、と思って調べてみたら、ビンゴ。それぞれ、以下の設定を .emacs に追加して、起動してやると(Perlの場合は "M-x perl-debug"、Rubyの場合は "M-x rubydb")、gdb と同じような感じでデバッグできます。
;; Perl デバッガの設定
(autoload 'perl-debug "perl-debug" nil t)
(autoload 'perl-debug-lint "perl-debug" nil t)

;; Ruby デバッガの設定
(autoload 'rubydb "rubydb3x"
"run rubydb on program file in buffer *gud-file*.
the directory containing file becomes the initial working directory
and source-file directory for your debugger." t)

 Emacsでの設定や、それぞれのデバッガの使い方については、以下を参照。

 これは・・・、今まで結構な時間を損していたかもしれない・・・。
[PR]
by fkmn | 2008-06-12 23:55 | IT
eof = ^D; というお話
なんでターミナルでCtrl-Dを打つとEOFになるのかみたいな話を読むと歳の差を感じてしまうなあ。
Practical Scheme
Ctrl-D が入力されるとプログラムの標準入力に EOF が入力されます。
Ctrl-D の話 - ひげぽん OSとか作っちゃうかMona-

な、なんだってー(AA略
全然知らなかった、そんなこと。

実は、今、C言語を勉強中だったりして、K&Rに出てくる下のようなコードで、標準入力から EOF ってどうやって入力するんだろなー、なんて気になってたところ(今までは Ctrl-C で止めてた)。

#include

main()
{
int c;

while ((c = getchar()) != EOF)
putchar(c);
}

プログラミング言語C 第2版 (p.21)
確かに、Ctrl-D を入力すると、プログラムが終了する。



他にも、ひげぽんさんのエントリのコメント欄で話が続いていて面白い。でも、ホント、他でこういう記事とか見たこと無いなぁ。
[PR]
by fkmn | 2008-06-03 23:55 | IT


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX