/ 最近 .rdf 追記 設定 本棚

脳log[2009-11-23~]



2009年11月23日 (月)

最終更新: 2015-11-26T01:15+0900

[C++] これって合法?

class MyClass
{
public:
  MyClass() : hidden_variable_data(0), open_const_data( hidden_variable_data ) {}
  const int& open_const_data;
private:
  int hidden_variable_data;
};

「Microsoft (R) C/C++ Optimizing Compiler Version 14.00.50727.42 for x64」では期待通りにコンパイルしてくれて、期待通り( open_const_dataは書き換えられず、hidden_variable_dataを書き換えると open_const_dataも変更された )に動作した。

でも sizeof(MyClass)が 16(bytes)になる。これは int 4個分のサイズ。const int&を const intにするだけで、サイズは int 2個分と妥当なサイズになる。いったい何をしてるんでしょうね。


 サイズに関して@2009-11-25

x86 向けにコンパイルした結果と比較すると、参照のサイズはポインタのサイズらしい。それはわかるんだけど、64ビット(ポインタ 1つ) + 32ビット(int 1つ) = 12(bytes) とならないで 16になったのはなんでだろう、と。アラインメントってやつなのでしょうか。


/Zp[n] pack structs on n-byte boundary

試しに /Zp4 オプションをつけてみたら sizeof(MyClass)が 12(bytes)になった。やっぱりアラインメントだったのね。

ところで、合法なんでしょうか? (見たことがないんだけど)

だとしても () を省くためだけに、ポインタ分のサイズ増加と間接アクセスによる実行コスト増加を受け入れられるかといえば、やっぱり割に合わないか。


 @2009-11-28 n-byte boundary

「n-byte boundary」の byteが単数形なのは nが 1かもしれないからではなくて、n-byteが形容詞みたいになっているからだとか。退屈な例を出すと 10-year-old boyとか。64-bit OS もそうだな。たぶん塾で最初に聞いた。

なんで書いたかといえば、byteの複数形って bytesでいいのかなあ、と書いてから疑問に思ったから。「情報の単位」には「1MB = 1,000KB = (10^3)^2 = 10^6 = 1,000,000 Byte」というように書いてあって不安にさせられたが、「Byte - Wikipédia, a enciclopédia livre」には「Megabyte (MB) / 1 024 KB / 1 048 576 (2^20) Bytes / 8 388 608 Bits」と、Bytesが使われている。日本語ソースよりは ptと略される言語を信用する。ポーチュギーズ?


日本人が桁を 3つずつ区切るのが全く理解できない。

10,000,000 bytesを ten milion bytesだとか ten mega bytesだとか読むのであれば理解できる。でもたいていの場合、単位は円だ。4桁で区切れよ。そうすればカンマが万、億、兆だ。円以外の日常的な単位は n,µ,m,d,h,kを使って単位が 0を内包するから桁区切りなんて不要だし 3桁 4桁区切りが両方必要(円だけ例外扱い)になったりはしない。さすがに $は 3桁で区切ったほうがよさそうだけど、俺の日常に $という単位はない。

そんなわけで極力、桁を区切らないで済ますことにしてる。あんなもんは飾りだ。そして、飾りは不要だ(後半に異論はあるでしょう)。


2009年11月22日 (日)

最終更新: 2009-11-23T01:26+0900

スパムメール

Subject: Re: #Pharmacy Viagra Vicodin and Valium !!!
From: <ds14050@vvvvvv.sakura.ne.jp>
Date: Sun, 22 Nov 2009 02:28:21 -0500
To: <...>

こういうメールが受取人不明だとして Postfixから突き返されてきた。

送った覚えはないし、Toに書かれたアドレスに見覚えもなければアドレス帳に入ってもいない。

スパムとしての内容(リンクの URL)はすべて Toに書かれたアドレスをターゲットにしているから、スパマーは Postfixを使って俺にスパムを送りたかったのでもないだろう。

それだけなら他人(俺)のアドレスを囮にしたスパムメール(ただし未達)というだけなんだけど、ポイントは To に書かれたアドレスのホストがまるっきり知らないものではない、ということ。本当の送信者は俺のアドレスと To に書かれたアドレスの両方をアドレス帳に入れているウィルス感染者じゃないのかなあ、とか想像した。(送る当てもないメールアドレスをアドレス帳にしまう理由が想像つかないけどね)


2009年11月21日 (土) [本] 著者名がカタカナの本や教科書が好きだ。一つには、日本語であるということ。滅多なことで読み違えないし、斜め読みもできるから。二つ目は著者が日本人ではないということ。数少ない経験からの判断だけど、日本人の著者は前提となる読者の知識に過大な期待を持ちすぎている。また、その要求基準を明示しない。ほかにも、依存する文脈の説明をはしょりがちで、部分を取り出すと内容が間違ったものになりやすい、とか。まだある。単語帳や受験参考書みたいに知識の羅列になってしまっていて、ストーリーがない。書きたいことを書くんじゃなく、読者が知りたいことを書く、もしくは読者に知りたいと思わせるように流れをつくらないといけないのにできていない。全部印象だけで書いたけど、たとえ分厚くなってもストーリーがあって毎度毎度の説明を怠らない文章を、日本人著者には期待していない。

最終更新: 2011-11-30T12:36+0900

[Vista] shutdown.exeの役立たず。

Vistaの新機能:ハイブリッドスリープを有効にしているのに、Vistaになって新設された /h オプションで休止状態にはできてもスタンバイ(ハイブリッドスリープ)にはできない。

なんだってこんな基本的なことができないんだろう。マウスを使わせようとするな。キーボードを使わせようとするな。

#! rubyw
require 'Win32API'
SetSuspendState = Win32API.new('powrprof.dll', 'SetSuspendState', %w(i i i), 'i');
SetSuspendState.call(
	0, # hibernate: S4(TRUE) or S3(FALSE)
	0, # force: アプリケーションに事前に通知(PBT_APMQUERYSUSPEND)しない(TRUE)。通知する(FALSE)。
	0  # disableWakeEvent: イベントによる復帰を許可しない(TRUE)。許可する(FALSE)。
);

 @2011-11-30 rundll32.dllと powrprof.dllでなんとかなると思ってる人へ

>20110911

rundll32.dllが要求する仕様を知っていますか?乱用されてもクラッシュせず黙って耐える rundll32.dllのことを知ってあげてください。


2009年11月20日 (金) DDセイバーオルタはやばい。限定販売でよかったね。

最終更新: 2010-04-08T22:28+0900

[SHJS][SakuraEditor] 色分けにこんな機能があると便利。

参照(説明の丸投げ)> 萌ディタの Lex 周り - miau's blog?

SHJSと萌ディタ、共通の泣き所。そもそも論を言えば、入力に対応した stateを一つ一つ定義していけば対応できなくもないし、Rubyの括弧を使った %記法、%r(pattern)flag のようなものでは括弧に分類される文字種が 4つしかなかったために実際そうしたのだが、非英数1バイト文字や識別子が使えるとなると状態数があっという間にふくれあがってしまう。

SHJSの場合は、JavaScriptであることと eval()で評価されることを利用して、ネイティブの RegExpオブジェクトの代わりに execメソッドと lastIndexプロパティを定義したオブジェクトを登録することで抜け道を用意できるように感じたが、どんな形で特定のキャプチャを参照するのか決めかねた。

今日試しにダウンロードしてみた K2Editorではヒアドキュメントの色分けが可能なようだ。配布パッケージに含まれる Ruby.txtと K2Editor.chmによると書式はこう。

・<<(["'`]?)(\w+)\1 .... ^$2$
    ヒアドキュメント1。後ろのディスクリプターは行内に唯一でなければ
    ならない。

右側の検索文字列には、後方参照が使えます。 左側で()でくくってグルーピングしたマッチ文字列を、 右側の検索文字列の中で取得できます。

取得するには、 K2Editorの置換機構の 後方参照と同じように、$1,$2などを使います。

\1、\2でなくて $1、$2だから、右側のパターンは左側のパターンマッチングが終わった後で、置換されてからコンパイルされるのかも。

SHJS(と萌ディタ)にあてはめた場合、$1、$2がどのマッチングのキャプチャを指しているのかが明らかではない。というところで二の足を踏んでいる次第。

 @2010-04-08: くわえて

  formatted_text = <<TEXT.strip.gsub(/\t/, " "*8)
TEXT
  texts = [<<TEXT1, <<TEXT2]
TEXT1
TEXT2

こんなんどうする?

最終更新: 2009-12-06T02:34+0900

[SakuraEditor] 再度WSHプラグイン

たとえば、http://sakura.qp.land.to/?Junk%2F31 で展開されている GNU Global対応。息の長い支持があるが本体に取り込まれてはいない。こういう万人向けでない機能がプラガブルになっていると、

  • エディタ本体は「大きなパッチ」を取り込んで、バイナリを肥大化させたり、安定性を損なうリスクを避けられる。
  • 本体とは別のサイクルで、また、ユーザーサイドで GNU Global対応を進めることができる。
  • 機能が不要な人はインストールしないから、目にすることもコストを払うこともない。

プラグイン化を推し進めると、不要な機能をそぎ落として、メニューも整理して、必要な機能は自分で用意する。自分だけのエディタになる。

っていうのが xyzzyや Emacsの方向性? そう思うと途端につまらなく思えてくるのは何故? プラットフォームだと思うとアイデンティティが希薄に感じられるのと、なんでもできる/やろうとする/できてしまう無節操さが嫌いなのかも。

いったい自分はどうしたいんだ?

なんでもできるエディタで、やりたいことだけを可能にする!?

でも実際は、エディタなんてなんでもいい&使い比べもしないものぐさな人間だということを行動が示している。最初はメモ帳でスクリプトを書いていて、エラー行を見つける手段(行ジャンプ、行番号表示)がないのに困って最初にダウンロードした TeraPadを 2、3年使い、正規表現検索がないのを不便に思って最初にダウンロードしたサクラエディタを 5年以上使い、ソースが公開されてるもんだから色分けの不足を補えてしまって萌ディタをカスタマイズする機会を逸したまま現在に至る。名前の良さと最初から大概のことができる間口の広さで誘い込まれ、ソースをいじる究極のカスタマイズができる自由さで閉じ込められた。

  1. 見た目がよくて、(ダウンロード)
  2. (適切なデフォルト、複雑すぎない設定など)とっつきがよくて、(しばらくつかってみよう)
  3. 幅広いユーザーのニーズを満たす機能セットが揃っていて、(使用をやめる理由がない)
  4. なくても困らないニッチな要求にも応えられる。(乗りかえる理由がない)

という要素を自分は求めている(らしい。サクラエディタに最初の二つはなかったが、必要だとは思う)ので、プラグイン化で機能をそぎ落とせる必要はなく、それなりに需要のある機能をプラグインで置き換える必要もないかもしれない。プラグインの本命はニッチな機能、取り込むには大きすぎる機能、ライフサイクルの異なる機能の実現にある。……が、なんでもプラグインにしてしまって柔軟にデフォルトを設定できるような状態にしておく、というのもやはり魅力的だ。(それに、デフォルトのタイプ別設定(AWK、アセンブラ、COBOL、Java、TeX、Visual Basec、……)のうち使わないものは目にするのも嫌だという人種(潔癖だね)が一定数いるらしいから、それに応えることにもなる)

っていうのが Linuxの現れては消えるディストリビューション? 適切なデフォルトが対象別に無数に存在する状態を、適切なデフォルトが用意されている、とは言いたくないな。適切なデフォルトはとっつきの良さのために導入した指標だから(注:Linuxの話ではない)。

この展開の着地点を Windows ということにしてみよう。エディタ界の Windows。普及(利益)を目指すなら当然の帰結、とかいって。とりあえず Linuxには、何も考えずこれを入れとけ、っていう強力なディストリビューションが一つだけ、ほしいね。(Ubuntuが五年後も続いていたらいいポジションだ)


2009年11月19日 (木)

最終更新: 2009-11-20T01:27+0900

slashdot.jpから。コメントはソースコードを表す? - スラッシュドット・ジャパン

/*
 * (略)
 * @author ピクミン
(以下略)

何故・・・。

ピクミンをやったことはないけど、全体の利益のために我が身を敵に投げ出す白ピクミンの境遇を連想した。白ピクミンに限らず、ピクミンって個々は全く尊重されないよね。人間はもちろんそんな扱いを受けるはずがないけど……。


2009年11月17日 (火) [SakuraEditor] メリーさんはアンドゥで選択範囲も復元してくれるよ。


2009年11月16日 (月) [790FX-GD70] BIOS v1.7


2009年11月15日 (日) [SakuraEditor] 矩形選択入力をフォーマットの決まったファイルの一括整形に使うとき、選択範囲を移動する機能がほしい。1.幅0で複数行選択。2.文字挿入 3.選択範囲右シフト 4.文字挿入 5....


2009年11月14日 (土) [Vista] Appキー押し下げを Winキー押し下げとして使いたい。Win+Breakの代わりに App+Breakとか。


2009年11月13日 (金) [C++] bcc5.5.1でコンパイルできないっていわれても、無料化のはしりとしてすでに役目を終えたものでしょう、それ。今からダウンロードしようにも住所や電話番号を書かされるのが嫌だ。ところが Program Files (x86)には bcc55というフォルダがあって、コマンドプロンプトで bcc32って打つとスイッチの一覧が表示されるからパスも通ってるんだよね。bccを最初にダウンロードしたときはインストール手順の「パスを通す」がわからなかったものだ。そのあとも、オブジェクトファイル何それ?コンパイル?リンク?コンパイルしたら実行ファイルができるんじゃないの?スタティックライブラリ?インポートライブラリ?#include <stdio.h>ってソースに書いてあるんやから必要なライブラリを勝手に選び出すくらいできひんの?なんでソースファイルが数十KBしかない Hello Worldプログラムが、50KBの exeになるの?と怒濤の疑問に襲われていました。


2009年11月12日 (木) だれかがもう英語で書いてたけど。Subversionの Tree conflictは本当に腹立たしい。もう存在しないファイルに対して「競合しています」「競合しています」「競合しています」--accept mine-fullでも theirs-fullでも workingでもなんでもいいんだよ。俺が編集してるファイルじゃないんだから。いらいらさせて邪魔さえしてくれなければ。Tree conflictでマージが全く進まない。同じファイルを二回三回削除することのなにがコンフリクトだってーの。


2009年11月08日 (日) [C++]「『ifとelse』を用いれば『三項演算子』でできる処理は全て記述できますよね。しかし逆は必ずしもできません。」< 一時変数を必要とするような複雑な初期化をするために ifが値を返してくれたら、と思うことしばしば。条件演算子で書こうにもスコープがないし長すぎるし、if-elseで書くと constにできない(const厨乙)。処方箋は、if-elseや一次変数が必要な初期化を関数にして、戻り値で const変数を初期化する。


2009年11月06日 (金) [SakuraEditor] 「検索/置換ウィンドウが検索文字列と重なる場合、検索/置換ウィンドウをずらしてほしい。」<< こういうのって、どの辺にどかすのが最適かっていう人間が行う判断をコードにするのは案外難しい。1.エディタが画面のどこにあるか。2.検索文字列がエディタウィンドウのどこにあるか。3.検索はどちらの方向に進んでいるか(毎回ちらちら移動させないために)。色々考えてしまうよ。実際のところ気にするのは検索文字列のスクリーン座標だけでいいのかもしれないけど。