nDiki : ソースコード
ソースコード - source code
スポンサード リンク
Related term
2010年3月16日 (火)
■ 今日のさえずり - 紫のハンドタオルを口に当てた人が電車から下りてきた

@ 2010年03月15日
- 09:33 JR 3月13日にダイヤ改正したんだっけ。先週とちょっと電車の時間が違ってあれって思った。
- 09:53 ヨドびの公式サイトができたって。 (@ ヨドバシカメラマルチメディアAkiba) http://4sq.com/77WGwe
- 15:01 CoTweet サインアップしてみた。
- 15:02 ヨドびも Twitter やってるんだ。 RT @yodobi: @Naney わーい!ヨドびちゃんも仲間入りです。よろしくお願いします!
- 17:25 お茶 103円。 (@ ファミリーマート神田佐久間町店) http://4sq.com/biJuCj
- 20:17 あー、今日の夜何食べるかまだきまらない(会社で食べるつもりだったけど予想外にキリがついたので退社済み)。
- 20:20 隣の人が15分以上、中古 CD のシールを剥がして残った糊を猿のようにペタペタやってる。
- 20:25 ちょっと雨。さぼてんにした。 (@ アトレ大井町) http://4sq.com/8jv27N
- 23:10 おサイフケータイ対応ゴールドポイントカード削除。
- 23:20 おサイフケータイ Edy のサービス登録削除。
- 23:34 何もしていないブログマーケットを退会しようと思ったが、退会機能がない。FAQ によると問い合せフォームを使えと。
- 24:36 Gmail の特定のラベルに対応する Mew 上の IMAP ディレクトリを howm-search-path に指定しておけばウハウハじゃんと思ったが検索できなかった。そうか charset が違うんだよな。惜しい。
@ 2010年03月16日
- 09:33 紫のハンドタオルを口に当てた人が電車から下りてきて目を丸くした。
- 09:36 もしかしてクーラーかかってる? この京浜東北線。
- 09:43 @junjun_ あ、やっぱりクーラーかかってますか。上着きていると暑いぐらいなので、クーラー入っていると確かに快適です。
- 09:44 RT @miyawaki: みんなでブログ更新しましょう方式って、だいたいうまくいかないよね。なんでだろう?
- 12:13 オーブントースター見にきた。 (@ ヨドバシカメラマルチメディアAkiba) http://4sq.com/77WGwe
- 12:24 オーブントースター第1候補はサンヨー SK-CW12 かな。3月19日まで3310円。
- 12:34 ビッグマックセット(昼食) 590円。 (@ マクドナルド秋葉原昭和通り店) http://4sq.com/cVnVl2
- 13:29 Evernote のノートブックの共有ってもしかして「閲覧のみ」だとデスクトップには(read only とかで)同期されないの?
- 16:18 C++ ソースコードを Uncrustify したら、1行コメントの次の行のコードまでコメントアウトされていて驚愕した。
- 16:41 やばし。スコッティ切れた。
- 21:03 I'm at 秋葉原駅 (秋葉原駅, 千代田区) w/ 6 others. http://4sq.com/68fhHr
- 21:33 ヤマダ電機 3480円だった。
- 23:59 Evernote への転送/ラベル設定用 Gmail フィルタ・コンタクト設定をした。
- 25:02 Evernote プレミアムにした。
- Evernote 使用開始 (2009-03-03)
- 今日のさえずり: 本社誰も応答しないと思ったら、やっぱり総出で雪かきしてたらしい (2011-01-17)
- 今日のさえずり - ファミリーマートにクリスマスケーキ4号・5号 (2008-12-24)
- Evernote プレミアムにした (2010-03-17)
- 今日のさえずり - ここ最近裏紙が激しく不足している (2010-03-19)
2010年5月21日 (金)
■ 最強? 極小対応等幅フォント MeiryoKe_Console。

Visual Studio でコーディングしていると定期的にやってくる「もっと小さくても綺麗に見えるフォントを探して同時にたくさんのソースコードを見たい!」病が再発。
プログラミングに適しているフォントのオレ基準としては、
- コードで使う英数字記号がきちんと判別できる。
- ビットビットしていない。
- 和文文字が可読で、できればそこそこ綺麗(文字列リテラル・コメント)。
- あまり高くなくて同じ縦幅でたくさんの行数が表示できる。
- もちろん等幅。
なのだが、なんだかんだいって MS ゴシックのサイズ 10 が見やすくて、これを超えるものが見つからなかった。
今日はまず 小夏等幅サイズ 10 にしてみた。個人的には MS ゴシックの方が見やすい。
次に M+2VM+IPAG circle にトライ。サイズ 8 にすると表示できる行数がちょっと増えたものの、このサイズだとコロンがセミコロンみたいに下の点がちょっと大きくなってしまう。サイズ 9 にすると MS ゴシック サイズ 10 に行数で負けてしまう。 残念。
お次が MeiryoKe_Console。……こいつは! すごい。サイズ 8 でも十分見やすい。
常用決定。
- 今日のさえずり: 社内侍魂化計画発動に違いない (2010-07-14)
- PPM とか (2003-10-01)
- 今日のさえずり - GDrive ずっと待っています (2009-02-26)
- 今日のさえずり: 1万円たれぱんだぬいぐるみとバイバイしてきた (2011-01-19)
- 今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした! (2011-01-29)
2010年7月14日 (水)
■ 今日のさえずり: 社内侍魂化計画発動に違いない

@ 2010年07月14日
- 08:22 あちゃ、靴濡れ濡れ。
- 10:29 会社のノート PC からプラレールみたいな音がする(物理的に)。
- 10:33 PC ががんばると走り出すから、たぶんファン。早晩駄目になるな、こりゃ。それ以前にうるさいし。 RT @Naney: 会社のノート PC からプラレールみたいな音がする(物理的に)。
- 10:48 Logitech Marble Mouse が出てきたので接続してみた。既存のマウスと速度がちょっとあわない。
- 12:01 「このソースコード酷いね」「我が夫となる者はさらにおぞましきものを見るだろう」
- 12:11 パン 240円。 (@ ライフ 神田和泉町店) http://4sq.com/aMU2tQ
- 12:14 見にきてみた。 (@ コンゴ民主共和国大使館) http://4sq.com/brhYP5
- 12:29 コンゴ民主共和国大使館。 http://movapic.com/...
- 13:06 「記者ハンドブック第11版」的には餃子はギョーザ。 http://amzn.to/bYgWWY
- 13:17 缶コーヒー 100円。
- 16:30 今日は微妙にフォントいじりされている事務関連メールが続けて届いている。社内侍魂化計画発動に違いない。
- 17:14 都合により退勤。
- 17:20 和民本日オープンだって。
- 17:25 山手線もうすぐ運転再開との構内放送。 L:秋葉原駅
- 17:39 車掌が車内放送で「次の電車も続いておりますので……」と言いたい気持ちはよくわかるが、それは構内放送の仕事だ。
- 22:46 明日ちょっと時間があるので映画でも見ようと思ったが、めぼしいものがない。
- 23:05 妻が日中、見知らぬ人に手助けしてもらった話を聞いて、自分もそうしていきたいなと思った次第。
- 23:09 GTD 的行きたいところリストを確認したら「サンリオピューロランド」って書いてあったけど、さすがに行けない。
- 23:14 ドクター中松創研の頭のよくなるカフェも気になるが。
- 23:35 @madaaamj ペイ・フォワードを日常にしたいですね。
- 24:02 Remember The Milk for Android がアップデートされた。目玉は Smart Add 補完。 #Android #RTM
- 今日のさえずり: 今年身につけたスキル「2010 とタイプできるようになった」 (2010-12-31)
- 今日のさえずり - メタボメって何だ、メタボメって (2010-04-11)
- 今日のさえずり - ミニパトに男性警官が乗っているとガッカリする (2009-11-26)
- 今日のさえずり: 最初に受信したのが「うんこ」だった。Arrow の全てがわかった気がした。 (2011-12-15)
- 今日のさえずり: iGoogle にタブ追加して Remember The Milk ガジェット2つ追加 (2010-11-10)
2010年10月5日 (火)
■ 今日のさえずり: これでセンサスくんともお別れかと思うと寂しい

@ 2010年10月05日
- 09:23 今日は電車も冷房入ってる。
- 10:38 C++ コードリーディングの日。まずは doxygen 通すか。
- 12:05 気がついたら昼休み。
- 12:23 ハッピーセットとチーズバーガー 470円。
- 13:17 今日は後ろの @as_tone がいないのでエアコン入ってる。今日は暑いし、そもそも出社したらすでに入ってたし。
- 13:37 RT @as_tone: 有明では場内放送で熱中症に気をつけてねって言ってます。RT @Naney: 今日は後ろの @as_tone がいないのでエアコン入ってる。今日は暑いし、そもそも出社したらすでに入ってたし。
- 14:43 レグザAppsコネクト 対応機種: [テレビ] CELLレグザ X2 / XE2シリーズ。おい CELL REGZA だけか。
- 14:53 @as_tone なんかスゲー楽しそう。
- 16:06 なんか1つだけ cpp ファイルの charset が UTF-8 になってる。そして Emacs で shift_jis にしようと思っても諦められてしまう。
- 16:09 予想通り cpp ファイルに中国語でコメントが入ってた。
- 16:12 @y_aki 8000行オーバーだったので目視で探すのに一苦労しました。
- 16:36 @y_aki なるほど iconv -f UTF-16 -t cp932 で iconv: illegal input sequence at position 331642 と出ました(ちなみに UTF-8 じゃなくて BOM あり UTF-16 リトルエンディアンでした)。
- 17:49 EASEUS Todo Backup が 1.1 になってる。去年死にかけた ThinkPad X31 の内蔵 HDD を外付け USB HDD にマルっとコピーするのに使った。 http://bit.ly/aK3eyY
- 18:06 ソースコードに「// 既存の手順の……を変更しる!」とか書いてある。2ちゃんねらー?
- 19:43 テレビ注文してる。
- 19:50 他店値段出して値引きしていただけたが「2台買う攻撃」は効かなかった。
- 22:10 エコポイントってオレンジカードと交換できるのか。
- 22:15 国勢調査入力するか。
- 22:34 国勢調査インターネット回答完了。直筆より気分的に楽だな、やっぱり。
- 22:35 国勢調査のサイト、URL 中の拡張子が do だったから Struts?
- 22:36 これでセンサスくんともお別れかと思うと寂しい。
- 22:39 センサス君って平成2年(1990年)国勢調査から使われているのか。
- 22:40 正式にはセンサス君じゃなくて、センサスくんか。
- 23:02 RT @kokuseichousain: 5年ごとに数十日しか姿を見せないので、まだ赤ちゃんの姿なのです。(^^♪ RT @Naney センサス君って平成2年(1990年)国勢調査から使われているのか。
- 23:03 ちなみにセンサスくん、前回は全然記憶にない。今回初登場だと思ってた。
- 23:05 統計局のサイトに「クイズ・ザ・国勢調査」ってページがある。国勢調査もクイズにしちゃえばいいのに。
- 23:17 ちなみに国勢調査は Google Chrome 7.0.536.2 dev on Debian GNU/Linux sid から普通に回答できた。
- 25:09 YouTube 用アカウントを作成。
- 25:15 「Gmail アカウントに YouTube アカウント追加」「YouTube メイン用に専用 Google アカウント作成」「Android の YouTube アプリに後者アカウントを設定しようとしたら、既に前者がバインドされてしまっていた」
- 今日のさえずり - Xperia を Debian GNU/Linux で初マウント (2010-04-07)
- 今日のさえずり - 紫のハンドタオルを口に当てた人が電車から下りてきた (2010-03-16)
- 納品前日なのに /var が壊れた! HDDからのブートで Debian 再インストール (2005-09-27)
- 今日のさえずり: 昔は例外処理を好んで使っていたが、最近はできるだけ使いたくない派 (2011-02-01)
- 今日のさえずり: テレビコーナーの阿鼻叫喚ぷりを思うとわくわくする (2010-11-28)
2010年11月24日 (水)
■ 専用 Ruby と OpenSSL をビルドして Redmine を入れるときの落とし穴

新しい開発プロジェクトでは Git + Redmine を使おうと思う。 で例により使えるのが Red Hat Linux 8.0 サーバなので対応する Ruby やライブラリを含めてソースコードからビルドしてインストールしたのだが、ちょっとハマったのでメモ。
システムにインストールされている OpenSSL を(パッケージがなくアップデートできないので)残したまま、新しい OpenSSL をいれて使うのだが Ruby でこれを使えるようにする方法に辿りつくまで8割の時間を費した。
@ OpenSSL をインストールする
OpenSSL のデフォルトである /usr/local/ssl へビルドしてインストールする。
tar zxvf openssl-1.0.0b.tar.gz cd openssl-1.0.0b ./config shared make make test make intall
何も指定しないと共有ライブラリ(so)がビルド・インストールされないのが落とし穴。
@ Ruby 1.8.7 をインストール
後は /usr/local/redmine 以下に Redmine に必要なものを入れる。
tar jxvf ruby-1.8.7-p302.tar.bz2 cd ruby-1.8.7-p302 CFLAGS='-I /usr/local/ssl/include' \ LDFLAGS='-L /usr/local/ssl/lib -Wl,-rpath=/usr/local/ssl/lib' \ ./configure --prefix=/usr/local/redmine --enable-rpath make make install
大きな落とし穴は Ruby に含まれている ext/openssl。 OpenSSL 用の共有ライブラリが作られるのだが、いくらやってもこいつが /lib に入っている古い OpenSSL 共有ライブラリの方をリンクしてしまい /usr/local/ssl/lib の方をリンクしてくれない。
configure や make 時に LD_RUN_PATH やら -rpath を指定しても効かないし、ext/Setup で openssl を静的に指定しても駄目だし。
結局 configure.in を眺めて AC_ARG_ENABLE(rpath, ...) があるのを発見して --enable-rpath したところようやく -rpath が共有ライブラリのビルドに反映されるようになった。
30m ぐらいの深さの大きい落とし穴。
@ RubyGems をインストール
/usr/local/redmine に Ruby が入ったので必要なものを入れていく。 確実にそこの Ruby を使うようにしばらくは /usr/local/redmine/bin 以下を絶対パス指定で作業。
tar zxvf rubygems-1.3.7.tgz cd rubygems-1.3.7/ /usr/local/redmine/bin/ruby setup.rb
@ SQLite をインストール
Redmine のデータベースは一番お手軽な SQLite を使う。これもインストール。
tar zxvf sqlite-amalgamation-3.7.3.tar.gz cd sqlite-3.7.3 ./configure --prefix=/usr/local/redmine make make install
@ sqlite3-ruby をインストール
Ruby から SQLite を使うためのライブラリをインストール。
/usr/local/redmine/bin/gem install sqlite3-ruby -- --with-sqlite3-dir=/usr/local/redmine
SQLite のありかを示す --with-sqlite3-dir を -- の次に指定するというところに気がつくのに浅い落とし穴。
@ Passenger
Redmine のインストールの説明では Passenger を推奨しているようなので入れてみる。
/usr/local/redmine/bin/gem install passenger
OK。しかし Apache モジュールを
/usr/local/redmine/bin/passenger-install-apache2-module
でインストールしようとすると失敗。Apache の dev 系のファイルがシステムに入っていないので、それはそうだな。しかし Passenger のコマンドは寡黙ではなく何が駄目で何をすべきかきちんと表示してくれるのでわかりやすい。
この落とし穴は、横を通って回避。
@ Rack のダウングレード
Passenger のインストールで最新の Rack が一緒にインストールされるのだが、Redmine には新しすぎて後の手順でエラーで止まる。 ので、ここで 1.0.1 にダウングレードしておく。
/usr/local/redmine/bin/gem install rack -v 1.0.1
これは皆が知っている落とし穴。
@ Redmine をインストール
tar zxvf redmine-1.0.3.tar.gz mkdir -p /usr/local/redmine/var/lib mv redmine-1.0.3 /usr/local/redmin/var/lib/redmine
以下 /usr/local/redmine/var/lib/redmine で作業。
cd /usr/local/redmine/var/lib/redmine
@ Redmine のデータベース設定をする
config/database.yml を作成する。SQLite を使うように設定。
production: adapter: sqlite3 database: /home/naney/var/redmine/redmine.db
データベースは定期バックアップのある自分の home 以下に。
makdir -p ~/var/redmine
@ Remine のメール設定をする
config/email.yml を作成する。今回は専用の redmine@example.com を作成して、その SMTP サーバ/アカウント経由で送信するようにする。
production:
delivery_method: :smtp
smtp_settings:
address: smtpserver.example.com
port: 25
domain: redmine.example.com
user_name: "redmine@example.com"
password: "mypassword"
@ Redmine の初期化をする
必要なファイルやらデータベースの初期化やらを行う。
/usr/local/redmine/bin/rake config/initializers/session_store.rb /usr/local/redmine/bin/rake db:migrate RAILS_ENV=production /usr/local/redmine/bin/rake redmine:load_default_data RAILS_ENV=production
最後のコマンドでは言語を選ぶプロンプトが出るので ja を指定。
@ Passenger で Redmine を起動する(NG)
Apache 経由ではなく Passenger スタンドアローンで Redmine を使ってみる。
/usr/local/redmine/bin/passenger start
失敗。途中の処理で rake が見つからないという。
PATH=/usr/local/redmine/bin:$PATH passenger start
やっぱり失敗。自動的にダウンロードした ngix のビルドに失敗しているっぽい。 落とし穴。
@ WEBrick で Redmine を起動する(OK)
/usr/local/redmine/bin/ruby script/server webrick -e production
Redmine 的には 本番向けではない WEBrick は無事起動。
http://インストールしたサーバ:3000/
にブラウザにアクセス。Redmine のページが見えたよオッカサン! admin:admin でログインしてあとは Web ブラウザから設定。 Git リポジトリの連携もすんなり。
やったね。
@ 追記 (2010年12月2日)
WEBrick で使い続けるなら script/server 起動時に -d オプションを指定する(記事)。
- 今日のさえずり: 衝撃の事実: /usr/local/ssl/lib に .so が無かった (2010-11-24)
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイルを検索 (2006-08-08)
- 今日のさえずり: 仕様卓袱台返し (2010-11-25)
- 今日のさえずり - 京都の小学校のコンピュータ室にいったら、Squeak が (2008-03-06)
- 今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした! (2011-01-29)
2011年1月19日 (水)
■ 今日のさえずり: 1万円たれぱんだぬいぐるみとバイバイしてきた

@ 2011年01月19日
- 08:28 1万円たれぱんだぬいぐるみとバイバイしてきた。
- 12:28 「うんこ!」っていうのがMOE絵本屋さん大賞第1位らしい。
- 12:31 チラッと見たらうんこが歩いてた。
- 12:34 ビッグマックセット 590円。 (@ マクドナルド 秋葉原昭和通り店) http://4sq.com/en9GEB
- 12:35 この歳になってもうんこに弱い。
- 12:46 これだ。 http://amzn.to/hkQT6N 子供は絶対喜ぶ。 RT @Naney: 「うんこ!」っていうのがMOE絵本屋さん大賞第1位らしい。
- 14:35 Test::More で TODO: {} で囲めばいいの何故だろうってソースコード見たら勘違いだった。$TODO 見てるだけなのか(あるいは Test::More->builder->{Todo} が defined か)。 #Perl
- 14:35 Test::More での TODO: {} のブロック名は何でもよかった。 #Perl
- 14:36 Test::More->builder->todo_start と Test::More->builder->todo_end も理解した。 #Perl
- 14:37 @__gfx__ 今時の TODO のやり方ってどんなですか? #Perl
- 14:45 あ、TODO: {} の TODO: ってもしかしてただのラベルか。文法的に何だろって思ってた。 #Perl
- 14:46 @__gfx__ perldoc Test::More 通りですね。
- 14:49 「TODO:」? あんなの飾りです。偉い人にはそれがわからんのですよ。 #Perl
- 15:23 Test::Harness の prove に --state なんてオプションがあったんだ。 prove --state=save して以降 prove --state=failed,save すると。 #Perl
- 15:28 RT @pomchon: 1月23日は秋葉原の歩行者天国復活の日なので、私の会社は毎年祝日となるそうです。社長が朝礼で宣言しました。
- 16:08 ああ、こういう場合は git-cherry-pick か。
- 16:19 ちょっとドキドキするバグ発見。
- 18:38 あれ、今 Test::Harness::TAP って無くなっちゃったのか。TAP の仕様今いずこ。 #Perl
- 18:42 Test-Harness-2.64 には Test::Harness::TAP がある。 #Perl
- 18:46 本題は「このテストスクリプト、Thread::async で実行しているブロックの中で is() しちゃってて TAP で吐く test number が重複しちゃってるんですけど」。 #Perl
- 18:58 @__gfx__ とりあえず : shared な変数に結果を入れて join してからまとめて is() するようにしました。
- 19:01 @__gfx__ perldoc Test::More 再びみてみました。ほんとだ use threads; use Test::More しましょうって書いてありますね。 #Perl
- 19:04 use threads; use Test::More; したらサクッと直った。 TNX @__gfx__
- 19:55 Xperia、アイコンが 3G になったり H になったりする。
- 21:04 NTTドコモの電池パック安心サポート、スマートフォンは7月1日から要1500ポイントになるのか。4月になったらすぐもらいにいこう。
- 今日のさえずり - 英辞郎で英辞郎を検索 (2010-03-12)
- 今日のさえずり: ケータイ大便器水没事故防止のためシャツの胸ポケットは禁止すべき (2010-06-29)
- 今日のさえずり: こんばんは4月バカ (2011-04-01)
- 今日のさえずり - なんかバグパイプな音楽がオフィスにかかってる (2010-03-25)
- Xperia で「バックアップと復元」を kill してはいけない (2010-09-29)
2011年1月29日 (土)
■ 今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした!

@ 2011年01月28日
- 11:39 Evernote for Android の prelease 版使っていたんだけれど public 版も 2.5.1 になっていたので、出勤中にアンインストールしてマーケットから入れ直した。 #Evernote
- 11:40 Evernote for Android の同期のやりなおしでまだサムネイルガンガンダウンロードしている。Skype for Android も起動しっぱなしだったし電池の減りばハンンパない。
- 14:59 ローカル用に短縮 URL サービスが欲しいんだけれど Perl 実装でインストールが簡単でごっつい RDBMS 使わないやつでいいのないかな。
- 16:04 MIME::Base64::encode_base64url が入ったのって MIME-Base64-3.11 (2010年10月24日)からか。最近のバージョンじゃないと入ってないな。encode_base64 の結果ちょっと置換しているだけだけど。 #Perl
- 19:25 必ず上限まで使ってるからパケ・ホーダイ フラットに変更かな。3月15日提供開始だけれど、月末/月初で切り替えた方がいいのかな。 #Xperia
- 20:33 prove RED です! @as_tone
- 20:56 prove GREEN です! @as_tone
- 21:48 RT @tomooyoda: 来月の要求開発アライアンス定例会 バリューソース神崎さんと、モデリングとソースコード解析を組み合わせた画期的な現状分析手法についてお話しします。 http://kokucheese.com/event/index/7486/
@ 2011年01月29日
- 11:30 公園行ってくる。
- 13:40 ミシン付属の DVD 観てる。淡々と操作説明が続くので記憶に残らない。
- 14:03 なに? 最近のミシンって針穴糸通し装置もついてるの。
- 14:13 ありがとうございます! お年玉付き年賀はがきの当選番号チェックしました。全滅でした!
- 14:28 次の有給休暇の日に花粉症の薬もらいに病院に行こう。今年は多いのに出遅れ気味。
- 15:56 ノート PC バックアップ中。Mew から Gmail に過去メールを移動してがっつりファイルが減ったから、バックアップ時間が多少減るかな。
- 17:34 今晩24:00から「当たり前田の加賀まさし」 #NHK #sada #namasada
- 17:51 ドミノ・ピザの「生活応援キャンペーン!! Aセット」注文。
- 今日のさえずり: 「We はーと blog」シールをさっそく貼っといた (2010-10-15)
- 今日のさえずり: 昔は例外処理を好んで使っていたが、最近はできるだけ使いたくない派 (2011-02-01)
- 今日のさえずり: 危機感で人は動くのか? (2011-01-12)
- 今日のさえずり: 「玄関開けたら2分でごはん」って韻が素晴らしいんだな (2011-02-21)
- 今日のさえずり: 「さくりんごはん」が何だか知りたくてたまらない (2010-09-02)
2011年4月27日 (水)
■ cpanm 入れて perltidy 入れて

perltidy が無いと Perl のソースコードが書けない体なのです。 なので cpanm でホームディレクトリ以下にインストール。
まずは ~/local/perl 以下に CPAN モジュールをインストールして使えるように、Bash の設定ファイルに以下を追加。
export PERL_CPANM_OPT="--local-lib=$HOME/local/perl" PERL5LIB=$PERL5LIB:$HOME/local/perl/lib/perl5:$HOME/local/perl/lib/perl5/x86_64-linux-thread-multi PATH=$PATH:$HOME/local/perl/bin
そして以下を実行(~/local/bin は PATH に設定しているところ)。
cd ~/local/bin curl -LO http://xrl.us/cpanm chmod 755 ./cpanm
cpanm のインストールはこれで OK。後は
cpanm Perl::Tidy
あとはお好みな .perltidyrc を用意したり Emacs から呼べるように設定したりすれば OK。
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- WiKicker の Makefile.PL を Module::Install ベースに (2006-02-10)
- Notepad++ で perltidy する (2011-03-01)
- 今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした! (2011-01-29)
- Perl プリティプリンタの定番 perltidy (2006-04-23)
2011年5月25日 (水)
■ なぜ Perl で配列に対して defined を使ってはいけないのか?

defined の挙動で相談されたのでソースコードを見てみたら、配列に対して defined を呼んでいた。 最近の Perl では配列に対して defined を使うのは非推奨である(perldata や perlfunc 参照)。 ほとんどの人が望むような判定結果は返ってこない*1。
perl -e '@a = (); print defined @a ? 1 : 0; push @a, 1; print defined @a ? 1 : 0; shift @a; print defined @a ? 1 : 0'
配列が空かどうかならスカラーコンテキストで評価するだけで OK なのだが、Perl プログラミング経験上、1度は defined を使用してしまうだろう。 ただ通常は警告が出るのですぐ気がつく。 この警告は Perl v5.6.0 以降で出る。
#!/usr/bin/perl use warnings; use strict; my @a = (); print defined @a ? "defined\n" : "undefined\n"; push @a, 1; print defined @a ? "defined\n" : "undefined\n"; shift @a; print defined @a ? "defined\n" : "undefined\n"; # defined(@array) is deprecated at test.pl line 7. # (Maybe you should just omit the defined()?) # defined(@array) is deprecated at test.pl line 9. # (Maybe you should just omit the defined()?) # defined(@array) is deprecated at test.pl line 11. # (Maybe you should just omit the defined()?) # undefined # defined # defined
しかしながら、配列への参照をデリファレンスしたものに defined を呼んでも警告を出してくれない。 相談ではまっていたのはこのケースだった。
#!/usr/bin/perl use warnings; use strict; my $a = []; print defined @$a ? "defined\n" : "undefined\n"; push @$a, 1; print defined @$a ? "defined\n" : "undefined\n"; shift @$a; print defined @$a ? "defined\n" : "undefined\n"; # undefined # defined # defined
なお配列(とハッシュ)に対する defined はメモリが割り当てられたかどうかを得るために使われていた。 Devel::Peek::Dump の結果を見てみると次のような感じ。 配列に要素を push した後に pop して空にしても、メモリは割り当てられた状態になるので defined が真を返すようになるのである。
#!/usr/bin/perl use warnings; use strict; use Devel::Peek 'Dump'; my @a = (); Dump(\@a); push @a, 1; Dump(\@a); shift @a; Dump(\@a); # SV = IV(0x9a6d064) at 0x9a6d068 # REFCNT = 1 # FLAGS = (TEMP,ROK) # RV = 0x9a7dcd8 # SV = PVAV(0x9a6e0a8) at 0x9a7dcd8 # REFCNT = 2 # FLAGS = (PADMY) # ARRAY = 0x0 # FILL = -1 # MAX = -1 # ARYLEN = 0x0 # FLAGS = (REAL) # SV = IV(0x9a6d184) at 0x9a6d188 # REFCNT = 1 # FLAGS = (TEMP,ROK) # RV = 0x9a7dcd8 # SV = PVAV(0x9a6e0a8) at 0x9a7dcd8 # REFCNT = 2 # FLAGS = (PADMY) # ARRAY = 0x9a78a20 # FILL = 0 # MAX = 3 # ARYLEN = 0x0 # FLAGS = (REAL) # Elt No. 0 # SV = IV(0x9a6d064) at 0x9a6d068 # REFCNT = 1 # FLAGS = (IOK,pIOK) # IV = 1 # SV = IV(0x9a6d064) at 0x9a6d068 # REFCNT = 1 # FLAGS = (TEMP,ROK) # RV = 0x9a7dcd8 # SV = PVAV(0x9a6e0a8) at 0x9a7dcd8 # REFCNT = 2 # FLAGS = (PADMY) # ARRAY = 0x9a78a24 (offset=1) # ALLOC = 0x9a78a20 # FILL = -1 # MAX = 2 # ARYLEN = 0x0 # FLAGS = (REAL)
ちなみに Perl v5.14.0 の pp_hot.c を見ると以下のようになっている。 配列だと AvMAX が 0 以上になっていれば真になる(十分条件)。 上の例でも pop した後も MAX = 2 となっていることから、defined が真を返しているわけだ。
PP(pp_defined)
{
dVAR; dSP;
register SV* sv;
bool defined;
const int op_type = PL_op->op_type;
const bool is_dor = (op_type == OP_DOR || op_type == OP_DORASSIGN);
if (is_dor) {
PERL_ASYNC_CHECK();
sv = TOPs;
if (!sv || !SvANY(sv)) {
if (op_type == OP_DOR)
--SP;
RETURNOP(cLOGOP->op_other);
}
}
else {
/* OP_DEFINED */
sv = POPs;
if (!sv || !SvANY(sv))
RETPUSHNO;
}
defined = FALSE;
switch (SvTYPE(sv)) {
case SVt_PVAV:
if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
defined = TRUE;
break;
case SVt_PVHV:
if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
defined = TRUE;
break;
case SVt_PVCV:
if (CvROOT(sv) || CvXSUB(sv))
defined = TRUE;
break;
default:
SvGETMAGIC(sv);
if (SvOK(sv))
defined = TRUE;
break;
}
if (is_dor) {
if(defined)
RETURN;
if(op_type == OP_DOR)
--SP;
RETURNOP(cLOGOP->op_other);
}
/* assuming OP_DEFINED */
if(defined)
RETPUSHYES;
RETPUSHNO;
}
結論としては、良い子のみなさんは配列やハッシュに defined を使わないでねということで。
- [ www.naney.org ] サーバ重い (2004-01-20)
- 今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした! (2011-01-29)
- Perl プリティプリンタの定番 perltidy (2006-04-23)
- assertion (2004-05-16)
- emacs-wiki の中の Perl ソースコードを整形できるように (2002-06-08)
2011年6月14日 (火)
■ 今日のさえずり: 1/f ゆらぎを導入すれば bot も心地よくなるかな

@ 2011年06月13日
- 09:47 @rtmjp iPad でのリストの並び順変えられるんですか? ぜひ手順を教えてください! (ちなみにリスト内のタスクの並び順じゃなくてリストの並び順です)。
- 09:58 @rtmjp いえいえ、わざわざありがとうございます。リストの並び順変更ができるか、Web 版の並び順と同じになると嬉しいです。指定リストの非表示ができるともっと嬉しいです。
- 11:14 週末と今朝で Remember The Milk ルーチンワーク見直した。これでスムーズ感が少し戻るはず。
- 11:39 mixi 「足あと」機能改修。昨日の時点で総アクセス数 184352 だった。 #mixi
- 11:45 先週末納税通知書が届いていたのでそれをもって、特別徴収のお願いしてきた。
- 12:39 若鶏唐揚二段弁当 450円。 (@ ローソン渋谷東一丁目店) http://4sq.com/jUQIGi
- 13:29 「先週の訪問者」きた。
- 14:05 ちょうどいい機会なので次の説明会は iPad でノート取ってみるよ。
- 20:54 退勤。
@ 2011年06月14日
- 09:20 告白手当とかいいな。
- 09:25 RT @s_harada: 人のコードは平気で糞だと言うくせに、プロダクトに関して糞だと言えない時点でやっぱり部署間の空気の違いを感じる。
- 12:49 渋谷駅周辺で RODHIA 安く売ってるのどこだろ。
- 12:51 キムカル丼 490円。 (@ 松屋 渋谷宮益坂店) http://4sq.com/kS7ZiQ
- 12:53 1/f ゆらぎを導入すれば bot も心地よくなるかな。
- 13:20 ヒグチで FRISK 165円。この辺りで底値か。
- 17:12 iPad 2 の書類出した。
- 17:13 1フロア上のコーヒーの方が若干濃い。若干ね。
- 17:56 iPad 場所を変えて何か検討するときにいいね。タイピングもまあまあいける。親指2本で。
- 21:27 意思決定会議が不足している。
- 21:49 退勤。
- 22:03 ソースコードのフォーマットは基本的には郷に従え(ただし死んだバッチャンの遺言によるところは除く)。
- 今日のさえずり: NEW MEGALOPOLIS 背負ったら腐れニューヨーカーって罵られた (2011-10-07)
- 今日のさえずり: ええ、カセットテープでデータを LOAD/SAVE るの知っている世代ですとも (2011-06-28)
- 今日のさえずり: シャクティーパットされた (2011-12-04)
- 今日のさえずり: 崩御クラス (2011-10-06)
- 今日のさえずり: 出社用にかっぱえびせんが支給されました (2012-04-20)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 0.191789s / load averages: 1.14, 1.88, 1.91
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker
Base theme by Nana (for tDiary)





◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。
◇ 2GB 無料のオンラインストレージサービス Dropbox に次のリンク先から登録すると今なら 250MB プラス! → Dropbox