トップ(最新) | <前

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 プレミアムにした。

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


[ 3月16日全て ]

2010年5月21日 (金)

最強? 極小対応等幅フォント MeiryoKe_Console。 このエントリーを含むはてなブックマーク

Visual Studio でコーディングしていると定期的にやってくる「もっと小さくても綺麗に見えるフォントを探して同時にたくさんのソースコードを見たい!」病が再発。

プログラミングに適しているフォントのオレ基準としては、

  • コードで使う英数字記号がきちんと判別できる。
  • ビットビットしていない。
  • 和文文字が可読で、できればそこそこ綺麗(文字列リテラル・コメント)。
  • あまり高くなくて同じ縦幅でたくさんの行数が表示できる。
  • もちろん等幅。

なのだが、なんだかんだいって MS ゴシックのサイズ 10 が見やすくて、これを超えるものが見つからなかった。

今日はまず 小夏等幅サイズ 10 にしてみた。個人的には MS ゴシックの方が見やすい。

次に M+2VM+IPAG circle にトライ。サイズ 8 にすると表示できる行数がちょっと増えたものの、このサイズだとコロンがセミコロンみたいに下の点がちょっと大きくなってしまう。サイズ 9 にすると MS ゴシック サイズ 10 に行数で負けてしまう。 残念。

お次が MeiryoKe_Console。……こいつは! すごい。サイズ 8 でも十分見やすい。

常用決定。


[ 5月21日全て ]

2010年7月14日 (水)

今日のさえずり: 社内侍魂化計画発動に違いない このエントリーを含むはてなブックマーク

naney:4801271745

@ 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

[ 7月14日全て ]

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 ファイルの charsetUTF-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:15Gmail アカウントに YouTube アカウント追加」「YouTube メイン用に専用 Google アカウント作成」「AndroidYouTube アプリに後者アカウントを設定しようとしたら、既に前者がバインドされてしまっていた」

[ 10月5日全て ]

2010年11月24日 (水)

専用 RubyOpenSSLビルドして 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インストール

ようやく 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 オプションを指定する(記事)。


[ 11月24日全て ]

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月になったらすぐもらいにいこう。

[ 1月19日全て ]

2011年1月29日 (土)

今日のさえずり: お年玉付き年賀はがきの当選番号チェックしました。全滅でした! このエントリーを含むはてなブックマーク

@ 2011年01月28日

@ 2011年01月29日


[ 1月29日全て ]

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

perltidyインストール完了。

あとはお好みな .perltidyrc を用意したり Emacs から呼べるように設定したりすれば OK。


[ 4月27日全て ]

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 を使わないでねということで。

*1以下 Perl 5.14.0 で確認。


[ 5月25日全て ]

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 ソースコードのフォーマットは基本的には郷に従え(ただし死んだバッチャンの遺言によるところは除く)。

[ 6月14日全て ]

この日記のはてなブックマーク数 Add to Google RSS

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)