/ 最近 .rdf 追記 設定 本棚

脳log[2008-03-02~]



2008年03月02日 (日) 結城さんの『数学ガール』が日坂水柯(めがねのひと)の作画でマンガ化。どうだろう。"ガール"の部分はいいとして、"数学"の部分も満足させてくれるだろうか。


2008年02月29日 (金) 地図が不完全だからと街へ入らせてくれない一階の衛士。「あんた、鬼や」「殺意を感じたで」

> ささはら雑記 : いいお知らせと残念なお知らせ

暴風ガールズファイトの 3巻は出ない

いったいファミ通編集部は何を考えているのか。

『暴風ガールズファイト』を読んでいないラノベ読者は何を読んでいるのか。

今や読むのが楽しみなラノベとして "文学少女"シリーズと双璧をなすシリーズだったというのに。


2008年02月27日 (水) Amazonから Edy 1000円分。メールで「当選」とか目にしても「結局、金払わされるんじゃ」としか思えない罠

[Vista]定期バックアップが初めて正常に終了した

理由がわからない。前回の失敗から今日までに、該当しそうな* Windows Updateはないし。

その期間にあったことといえば、再起動時にディスクチェックを強く薦められて

One of your disks needs to be checked for consistency. You may cancel the disk check, but it is strongly recommended that you continue.

Windows will now check the disk.

結果、いくつかのエラーが訂正されたこと。

CHKDSK is recovering lost files.

Correcting errors in the master file table's (MFT) BITMAP attribute.

Correcting errors in the Volume Bitmap.

Windows has made corrections to the file system.

これしかないという気はするが、バックアップが失敗していたのは去年の二月に Vistaをインストールした当初からで、chkdskも今までに何度か実行している。最近になってエラーが発生して訂正されたことがバックアップ成功の理由?

* こういう素人判断が原因の見落としにつながるのだ、と思われる前に書いておくと、「Definition Update for Windows Defender」が 2/22と 2/28にインストールされただけ。


2008年02月26日 (火) 名前をローマ字表記にするときに、アルファベットを使う特定の国の慣習に従って姓と名をひっくり返す必要はないと思っていた。大文字を使うことで姓を示す方法を知った。ふと手元の本の奥付を見たら著者のローマ字表記が SEI Meiになっていて、「お、さっそく」「すでに普及しているのか」と思った。出版社は中央公論新社だが著者は森博嗣。……。著者が要望を出した特殊例だった、に 100ガバス。


2008年02月25日 (月) Firebugのプロファイラの時間分解能は Windowsに依存する。普段は 15ms単位だが音楽を再生しながらだと 1ms単位になる。これに関係する話を「NyaRuRuの日記」だったかどこかで読んだ記憶がある。見つけた > http://d.hatena.ne.jp/NyaRuRu/20080123/p1


2008年02月24日 (日)

[W53S] W53Sで、受信したメールの本文をコピーするときは 5ステップ

http://sho.tdiary.net/20080222.html#p01

ここで W31SAと D705iμの例が出ていたので、にっくき(笑)ソニーエリクソンではどうなっているのかを紹介。

  1. メニュー
  2. [7] 本文コピー
  3. (始点を選択)センターキー
  4. (終点を選択)センターキー
  5. 「コピーしました」(タイムアウト付きメッセージ。せっかちな人はセンターキーかクリアキー)

補足など。

  • 送信メールじゃないので切り取りはできません。
  • (始点を選択)、(終点を選択)というのは画面下部のステータスバーに当たる部分に表示されているメッセージ。(ちなみにタイトルバーには「範囲選択」)
  • D705iμで問題にされているタイムアウト付きメッセージは W53Sにも一か所ありました。
  • W31SA < メールの内容をコピーしたい人に対していきなり「範囲指定」を選ばせるのは直観的でないと思う。**4

* 機種でそのように統一されてるだろうから、二回目からはすぐにわかるだろうけど。

 最後にコピーか切り取りかを選ばせることで他の二機種にある「コピーしました」のメッセージが省けている。

 最初のとまどいよりそれ以降の使い勝手の方がずっと大事。

*4 ということは、やっぱり優秀なのか?


2008年02月22日 (金) DSの FF4は敵が強いらしい。キャラに声があるらしい。初めてプレイした FFであり、パラディンになったあたりで中断してしまってもいるので非常に気になる。セガハードに縁がなかったので、PS2で昨日発売になったナイツとか、ゲームが豊作


2008年02月21日 (木) エクスプローラはバカだエクスプローラはバカだエクスプローラはバカだ。desktop.iniは目障りな上に役に立っていない。(C:\Windowsが音楽フォルダって何? 実体のないフォルダ(マイコンピュータ、ごみ箱、デスクトップ、ユーザー)の表示設定も保存して)

[javascript] JavaScriptの、空文字列にまつわる微妙な点 (String.split(), RegExp.lastIndex)

 空文字列を split()

split()の第一パラメータ separatorが空文字列にマッチするかどうかで結果が異なる。

"".split(" ").length;      // 1 (空文字列にマッチしないから)
"".split("").length;       // 0 (空文字列にマッチするので)
"".split(/\s+/).length;    // 1 (空文字列にマッチしないから)
"".split(/^$|\s+/).length; // 0 (空文字列にマッチするので)

function getClasses(element) {
  return element.className.split(/^$|\s+/);
}
 追記@2008-05-28: 空白で始まったり空白で終わるときのことを考えていなかった。

上の functionでは classNameが空っぽの時には空文字列の要素を作らないが、頭や尻尾に空白が付いていると空文字列の要素が残る (IEを除いて)。事前にトリミングする手間をかけるくらいなら一個二個の空文字列を気にせず(だけど連続する空文字列の要素は気にしてる) className.split(/\s+/) とする方が好みだな。

 空文字列にマッチした後の lastIndex

IE7と Firefox2で異なる。Firefox2の方が正しいが無限ループに陥りやすい。

var re = /\b/g; // 単語境界にマッチする、幅0のメタ文字。
var str = "012 456 89A";
re.lastIndex = 0;
for(var i = 0; i !== 5; ++i) {
  alert("("+ re.exec(str).index +","+ re.lastIndex +")");
  // IE7: (0,1) (3,4) (4,5) (7,8) (8,9) ...
  // Fx2: (0,0) (0,0) (0,0) (0,0) (0,0) ...
}

空文字列にマッチしていれば(IE7でスキップされるマッチがでてくる) exec()の前後で lastIndexの値が変わっていなければ(Fx2でのマッチ回数が IE7より増える) indexと lastIndexが同じならば lastIndexを 1インクリメント、としておくとどちらでも間違いが起こらない。

var re = /\b/g;
var str = "012 456 89A";
re.lastIndex = 0;
for(var i = 0; i !== 5; ++i) {
  var index = re.exec(str).index;
  alert("("+ index +","+ re.lastIndex +")");
  // IE7: (0,1) (3,4) (4,5) (7,8) (8,9) ...
  // Fx2: (0,0) (3,3) (4,4) (7,7) (8,8) ...
  if(index === re.lastIndex) {
    ++re.lastIndex;
  }
}

ループで

  if(index === re.lastIndex) {
    ++re.lastIndex;
  }

なんて分岐を増やすより、文字列末尾にマッチする /$/ を例外として*、正規表現から空文字列にマッチする可能性を排除する方が良さそう。

* /$/.exec("str") の後の lastIndexプロパティは IE7、Fx2とも、最後の文字の次を指す。


2008年02月20日 (水) [世界樹の迷宮] 29F到達。全然龍を倒せる気がしないのにレベルは上限の 70。むむむむむ……。明日発売のⅡはまだ不要。


2008年02月17日 (日) サブメニューを表示するときはマウスポインタが親メニューのどちら側にあるかをチェックして移動量が少なくなるように表示して。


2008年02月15日 (金) [かな変換] F6にかえてCtrl+U。[カナ変換] F7にかえてCtrl+I。[部分確定]↓にかえてCtrl+N。[辞書検索/辞書ページ送り] End。[電子辞典切替メニュー] Ctrl+End。

[javascript]Re: Javascriptのstring型とboolean型、oneOfメソッド他 (agenda)

コメント欄がないのでここでひっそりつっこんでおきます。

 それは valueOf()で

Stringと Boolean(と Numberと Date)だけこのように比較方法を === から == にしたりする必要はなくて、

String.prototype.equals = Boolean.prototype.equals = function(arg){
    return this == arg;
};

こう。

Object.prototype.equals = function(that) {
  return this.valueOf() === that.valueOf();
}

これでオブジェクトに関しては同一性をチェックし、プリミティブでは値が等しいかどうかをチェックする。

ところで、配列の場合、

valueOf メソッドの動作は、オブジェクトの種類に応じて異なります

配列の要素は、カンマによって連結される文字列に変換されます。Array.toString メソッドや Array.join メソッドと同じように動作します。

 Microsoft JScript 5.5 リファレンス (chm)

と書かれていて同一性のチェックができなさそうに思えるけど、JScript5.7、Firefox(javascript1.5)ともにチェックできていた。

 追記

Array.prototype.valueOf() は String、Boolean、Number、Dateのそれと違って特別に用意されてはいなかった。

参照: 15.4 Array オブジェクト (Array Objects)

ということは Object.prototype.valueOf()が呼ばれるはずで、これは thisを返す。

var a = [1];
alert(a.valueOf() === a); // true

JScript5.5のいいかげんなリファレンスを書いた人、出てきなさい。(はじめての言語だった JScriptと HSPのヘルプには、変数の概念から始まる丁寧な説明を受けました。大変感謝しています)


2008年02月13日 (水) ファイルを編集していつものように Subversionにコミットしたら http越しに http://hikidoc.rubyforge.org にコミットしにいっていた。拒否されて本当に良かった。こういうときは SVKか Mercurialですか?

[Hiki][Ruby] HikiDoc(revision 90)のリストアイテムに段落を。

リストを使うと途端にそこから文章に構造がなくなってしまうのが困りもので、できるだけ !!(h4)や !!!(h5)を使うようにしていたのだけど、とうとうリストアイテム内で段落を書けるようにいじってしまった。(少し前の変更で取り除かれた \ エスケープが復活している……)

 hikidoc.rb.extend-listitem.diff (2.4KiB)

HikiDoc(r90)のリストアイテムに文章構造(段落)を持ち込むための変更

 HikiDocフォーマット

*li1-p1\
\
li1-p2A\
li1-p2B
*li2

 HTML

  • li1-p1

    li1-p2A li1-p2B

  • li2

 HTMLソース

<ul>
<li><p>li1-p1</p>
<p>li1-p2A
li1-p2B</p>
</li>
<li>li2</li>
</ul>
  • 影響を最小限にするために \を使って行をまたいだときだけ <p>タグが挿入される。
  • 段落以外の、実はすべてのマークアップが有効になっているが、どういう表示になるかは未確認。
  • 思いつきのやっつけです。

行末の \ は見落としやすいので *-、**-、***- を、前行のリストアイテムを継続する、という意味にするのはどうだろう。

 hikidoc.rb.extend-listitem2.diff (1.6KiB)

HikiDoc(r90)のリストアイテムに文章構造(段落)を持ち込むための変更2 (以前の変更からの差分なので順番に適用する必要がある)

 HikiDocフォーマット

* li1-p1
*-
*-li1-p2A
*-li1-p2B
*li2

 HTML

  • li1-p1

    li1-p2A li1-p2B

  • li2

 HTMLソース

<ul>
<li><p>li1-p1</p>
<p>li1-p2A
li1-p2B</p>
</li>
<li>li2</li>
</ul>

なぜ *+ でなく *- にしたんだろう……。

[Ruby] Ruby-1.9の文字コード関連

面倒くさいという印象しか持っていない。

文字コードに unawareなスクリプトが文字コードがらみで余計なことをされたあげく、動かなくなるというのだけはやめてほしい。

必要なときだけエンコーディング情報を付加するし、そのときだけエンコーディング情報を利用したメリットを受け取りたい

実際のところはどうなってるのでしょう。


2008年02月12日 (火) エクスプローラがメモリを放さない。プライベートワーキングセットは 14MBでも、Vistaより前のタスクマネージャが表示していた数字では 215MBになる。仮想メモリ不足ってメッセージが何度も出るんですけどー。

最終更新: 2010-03-21T03:27+0900

[javascript][SHJS] JSLint <http://www.jslint.com>

SHJSの sh_main.jsを高速化したことを以前書いた。(20080204p01)

 対応ブラウザ

SHJSのページには動作を確認したブラウザとして以下が挙げられている。

  • Firefox 2
  • Internet Explorer 6
  • Internet Explorer 7
  • Opera 9
  • Safari 3

sh_main.jsの修正版は Firefox2IE7Opera9で正しく動作することの確認と速度の比較を行っている。

IE6での確認は IE7から戻すのが面倒なので省略する。

Sarari3は Vistaで動くものがダウンロードできるので確認してみたところ動いた。(表示も正常)

いじったことで対応ブラウザが減っていなくて良かった。(IE6は?)

 JSLint

SHJSの作者は Code Conventions for the JavaScript Programming Languagejslint: The JavaScript Verifier かそれに類似した文書を読んでいるに違いない。(これらのページを今日発見した)

というのも、sh_main.jsを JSLintでチェックしてみたが、こういうエラーしか出なかった。

Error:

Implied global: document 362, sh_languages 347, window 332

このエラーは JSLint向けにコメントを埋め込めば取り除けるものだし、そうしないと不可避だともいえるもの。

 さてさて、自分がいじったことでどれだけお行儀の悪いスタイルが混入したのでしょうか
Error:

Implied global: document 207 360, sh_languages 332, window 329

Problem at line 73 character 48: Use the array literal notation [].

   matchCaches = language.matchCaches = new Array(language.length);

Problem at line 86 character 17: 'i' is already defined.

   for(var i = matchCaches.length-1; i !== -1; --i) {

Problem at line 97 character 22: 'i' is already defined.

   for (var i = state.length-1; i !== -1; --i) {

Problem at line 110 character 17: 'i' is already defined.

   var i = (pair[0] & 0x3F);

Problem at line 280 character 15: Use '!==' to compare with '0'.

   while(0 != this._currentStyles.length) {

Problem at line 389 character 14: 'node' is already defined.

   var node = this.free_;
 いいわけ
  • ローカル変数の再宣言に関するものは全て forループで初期化される変数が原因。(i と node)
  • 「var array = new Array(length);」を「var array = []; array.length = length;」や「var array = Array.prototype.slice.call({length:length}, 0);」 と書き換えることは拒否する。

    (new Array(length)が一番簡潔で自然な書き方)

    (JavaScript 1.7の配列内包に書き換えるのには吝かでない)

  • != 0 の代わりに !== 0 と書け? 書き換えましたm( __ __ )m

(一つを除いて) 無視できる警告*ばかりで良かった。

* 無視したら警告の意味がない。forループの変数なんて(古い VC使い以外には)スコープの誤解を招きやすいという理由で、避けなければいけないものの筆頭ともいえる。