/ 最近 .rdf 追記 設定 本棚

log[2009-01-17]



20090117()

[Ruby][tDiary] 昨日(「引き続き rexml/source.rb:16requireSecurityErrorになる原因を探る)の続き

step1 load.c:147 (rb_feature_p)
   if (!load_path) load_path = rb_get_expanded_load_path();
step2 load.c:44 (rb_get_expanded_load_path)
   VALUE path = rb_file_expand_path(RARRAY_PTR(load_path)[i], Qnil);
step3
   Insecure Operation - require (SecurityError)

いましたRuby1.9.1SecurityErrorを量産する rb_get_expand_path()どうも汚染された load_pathの一つを展開しようとして SecurityErrorになってる気がする


$:($LOAD_PATH)の要素が汚染されてるのはこちらの責任では?と思って確かめてみた

SecurityErrorの直前で$:の各要素が tainted?かどうかを TDiary::Config#debugを使って出力した結果

D, [2009-01-17T23:36:46.289008 #1212] DEBUG -- : false Y:/server_root/www/ds14050/tdiary_on_ruby191
D, [2009-01-17T23:36:46.289008 #1212] DEBUG -- : true Y:/server_root/www/ds14050/tdiary_on_ruby191/misc/lib
D, [2009-01-17T23:36:46.289008 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/site_ruby/1.9.1
D, [2009-01-17T23:36:46.289985 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/site_ruby/1.9.1/i386-msvcr90
D, [2009-01-17T23:36:46.289985 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/site_ruby
D, [2009-01-17T23:36:46.289985 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/vendor_ruby/1.9.1
D, [2009-01-17T23:36:46.289985 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/vendor_ruby/1.9.1/i386-msvcr90
D, [2009-01-17T23:36:46.290961 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/vendor_ruby
D, [2009-01-17T23:36:46.290961 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/1.9.1
D, [2009-01-17T23:36:46.290961 #1212] DEBUG -- : false C:/Program Files (x86)/ruby/lib/ruby19/1.9.1/i386-mswin32_90
D, [2009-01-17T23:36:46.290961 #1212] DEBUG -- : false .

ひとつありましたねtDiaryが該当パスを $LOAD_PATHに挿入する部分で下のように untaintをつけるだけで理不尽な SecurityError解決しました(ただし、ASRでは依然 SecurityErrorになる解決したのは、20090116p01で書いたようにload.c501行目をコメトアトした Ruby-1.9.1RC1での)

-tdiary.rb:12: $:.insert( 1, File::dirname( __FILE__ ) + '/misc/lib' )
+tdiary.rb:12: $:.insert( 1, File::dirname( __FILE__ ).untaint + '/misc/lib' )

今回の一連の流れ(20090113p0120090114p0120090116p01)$SAFE=1SecurityErrorで使い物にならなくなる(>添付ライブラリの requireにも失敗する)二つのルトが見つかったそれらは requireするライブラリの拡張子を明示したり$LOAD_PATHの中身をすべて untaintすることで回避できたりload.cの一行をコメトアトしたりで回避できたがスクリトで対処すべきものではないと考えるfile_expand_path$SAFE>0のとき汚染された入力を一切受け付けないという前提のもと(rb_)file_expand_pathを呼び出しているコドを見直すかfile_expand_pathが汚染された入力を受け入れて適切に処理するかどちらかの変更が必要だと思うfile_expand_path()の結果が汚染された入力$LOAD_PATHの汚染された一要素に基づくときその展開されたパスも汚染されている$SAFE=1のとき最終的に requireするファイルのパスが汚染された引数や$LOAD_PATHの汚染された要素に基づくときSecurityErrorというのではいけないのだろうRuby-1.8.7はそのへんうまくやっているのだが……

改めドキュメトを読んだら汚染された文字列を引数にした Fileのクラスメソスタスメソドは禁止されていた($SAFE=1のと)

ドキュメトに従うなら rb_file_expand_pathSecurityErrorを出すのは正しいのかも(Ruby-1.8.7がまちがっている)それならば$LOAD_PATHの汚染された要素を不用意に展開しようとして SecurityErrorを出したり(load.c:44:rb_get_expanded_load_path)もともと汚染されていなかった文字列を複数回展開しようとして SecurityErrorを出したり(load.c:501:search_required)するほうを修正しなければ

私見では(最下層で実際の仕事を行う)file_expand_pathは汚染フラグを適切に伝播させるものの SecurityErrorは出さないでおき(スクリトから呼ばれる)File.expand_pathの実体である rb_file_s_expand_pathfile_expand_pathに仕事を丸投げする rb_file_expand_pathでセーフレベルに基づくチックを行うのが呼び出し側にとって便利だと思う

tDiaryのプラグインの recent_list.rbを書き換えたのは今思えば不要だったみたいだ(Rubyの方が変わるに違いないも)


20090116()

[Ruby][tDiary] Ruby1.9.1RC1Insecure Operation - require (SecurityError)が頻発する原因

20090113p0120090114p01で発生したエラーを起こす最小のスクリトとそれを回避する方法

>type a.rb
puts "a.rb required."

>ruby19 -v
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-mswin32_90]

>ruby19 -e "$SAFE=1; require 'a'"
-e:1:in `require': Insecure operation - require (SecurityError)
        from -e:1:in `<main>'

>ruby19 -e "$SAFE=1; require 'a.rb'"
a.rb required.

二つの違いは requireするライブラリの拡張子(.rb)を明示しているかどう拡張子なしの場合に発生する SecurityErrorは間違いだと思うそうでないと $SAFE = 1がまるで使い物にならない添付ライブラリだってまともに動かなくなるんだから

ところで、Ruby 1.9 - 1.9.1 RC2 issues - Ruby Issue Tracking Systemにはチケトを作成するためのフームがないruby-dev MLはアーカイブをときどき閲覧しているが購読はしていない是非ともこの SecurityErrorは消して欲しいのだが報告を受け付ける間口が狭い直通ルトがないどうすべ


どうすべと言ってる間に原因究明

 load.c:500: type = rb_find_file_ext(&tmp, loadable_ext);
 load.c:501: tmp = rb_file_expand_path(tmp, Qnil);

501行目が不要に思えるそしてこれが SecurityErrorの原因rb_find_file_extは内部で rb_file_expand_pathfile_expand_pathを呼びその結果を tmpにコピーしてくれている二度目を呼ぶ必要はないのでは? rb_file_expand_pathは適宜汚染されたStringオブジトを返しまた $SAFE>0のとき汚染された引数を SecurityErrorで拒絶するので複数回の (rb_)file_expand_path呼び出しは容易に SecurityErrorを引き起こす。これは Ruby1.9.1Ruby1.8.7とは異なっている動作

>irb
irb(main):001:0> File.expand_path("a")
=> "Y:/a"
irb(main):002:0> File.expand_path("a").tainted?
=> true
irb(main):003:0> File.expand_path(File.expand_path("a"))
=> "Y:/a"
irb(main):004:0> $SAFE=1
=> 1
irb(main):005:0> File.expand_path(File.expand_path("a"))
=> "Y:/a" # $SAFE>0で、taintedな文字列でも展開する。(Ruby1.8.7)
irb(main):006:0> exit

>irb19
irb(main):001:0> File.expand_path("a")
=> "Y:/a"
irb(main):002:0> File.expand_path("a").tainted?
=> true
irb(main):003:0> File.expand_path(File.expand_path("a"))
=> "Y:/a"
irb(main):004:0> $SAFE=1
=> 1
irb(main):005:0> File.expand_path(File.expand_path("a"))
 # $SAFE>0で、taintedな文字列を引数にすると SecurityError (Ruby1.9.1RC1)
SecurityError: Insecure operation - expand_path
        from (irb):5:in `expand_path'
        from (irb):5
        from C:/Program Files (x86)/ruby/bin/irb19.bat:20:in `<main>'
irb(main):006:0>

問題設定が間違っていたのか? load.cの一行をコメトアトしたことでたしかに一つの SecurityErrorは消えたが tDiaryは動かない。20090114p01のエラーがまだ出る

ただ、20090114のタトルにちらっと書いたopen-uriSecurityErrorはでなくなってる

>irb19 (野良パッチ済み)
irb(main):001:0> $SAFE=1
=> 1
irb(main):002:0> require 'open-uri'
=> true
irb(main):003:0> open 'http://www.example.com'
=> #<StringIO:0x2b8e924>
irb(main):004:0>

比較として ASRでエラーが出るのを確認するただASRでも二回目以降の openはエラーにならない謎の挙動この SecurityErrorも本来発生すべきものではないのだろう

>"C:\Program Files (x86)\ActiveScriptRuby-1.9.1\bin\irb.bat"
irb(main):001:0> $SAFE=1
=> 1
irb(main):002:0> require 'open-uri'
=> true
irb(main):003:0> open 'http://www.example.com'
SecurityError: Insecure operation - write
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:375:in `write'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:375:in `<<'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:375:in `<<'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:322:in `block (3 levels) in open_http'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/protocol.rb:373:in `call_block'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/protocol.rb:364:in `<<'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/protocol.rb:88:in `read'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:2333:in `read_body_0'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:2288:in `read_body'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:321:in `block (2 levels) in open_http'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:1120:in `block in transport_request'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:2251:in `reading_body'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:1119:in `transport_request'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:1103:in `request'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:312:in `block in open_http'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/net/http.rb:564:in `start'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:767:in `buffer_open'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:669:in `open'
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/open-uri.rb:33:in `open'
        from (irb):3
        from C:/Program Files (x86)/ActiveScriptRuby-1.9.1/bin/irb.bat:21:in `<main>'
irb(main):004:0> open 'http://www.example.com'
=> #<StringIO:0x2b611a4>
irb(main):005:0>

引き続き rexml/source.rb:16requireSecurityErrorになる原因を探る(tDiaryを起動しないと再現させられないのが辛)


20090114() $SAFE=1だと添付ライブラリ(open-uri)SecurityErrorを出しまくるんだけど……260行目の require 'net/http' で出る375行目の StringIOに書き込むところでも出る破綻してる気がする

[tDiary][Ruby] 昨日のつづきrecent_listを実際に修正

方針は昨日書いたとおりプラグインが自由に日記データを取得できる手段を提供した

日記を一日書いたとたんにエラーということはなくなったみたい


$SAFE=1requireが失敗する(ァイル名の untaintもしているのに)のがそもそもおかしいopen-urirexmlで同様に requireSecurityErrorエラーが生じていることからも疑惑の目がウチの Rubyに向いてきた1.9.1RC1だからではな「ウチでコンパイルしたからあるいは(開発者に)利用者が少なそうな Windows(それも Vista)だからなのかもしれない


ASRをイールしてみたけどダメだった同じtDiaryをセキュアモドで動かしているわけではないので Rubyのセーフレベルは最高でも 1taintedな文字列を使った requireが失敗するならわかるでも rexml/source.rb16行目require 'stringio'ったべたのリテラルだ

500 Internal Server Error

Insecure operation - require (SecurityError)

C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/source.rb:16:in `require'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/source.rb:16:in `create_from'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:146:in `stream='
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:123:in `initialize'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:9:in `new'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:9:in `initialize'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/document.rb:228:in `new'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/document.rb:228:in `build'
C:/Program Files (x86)/ActiveScriptRuby-1.9.1/lib/ruby/1.9.1/rexml/document.rb:43:in `initialize'
(plugin/amazon.rb):231:in `new'
(plugin/amazon.rb):231:in `amazon_get'
(plugin/amazon.rb):322:in `isbn_image'
(TDiary::Plugin#eval_src):32:in `block in eval_src'
Y:/.../server_root/www/ds14050/tdiary_on_ruby191/tdiary.rb:787:in `eval'
Y:/.../server_root/www/ds14050/tdiary_on_ruby191/tdiary.rb:787:in `block in eval_src'
Y:/.../server_root/www/ds14050/tdiary_on_ruby191/tdiary.rb:112:in `block in safe'

20090113() [Vista] >clipboard 'clipboard'内部コマドまたは外部コマ操作可能なプログラムまたはバッチ ファイルとして認識されていません >clip: "CLIP /?" と入力すると使用法が表示されます。 >clip /? コマド ライン ツールの出力を Windows クリップボドにリダイレトします。(っぱりあるよね手コピしなくてすんでよかったなお XPには…)

最終更: 2015-07-09T23:54+0900

[tDiary][Ruby] Insecure operation - require (SecurityError)

tdiary/trunk (r3394)ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-mswin32_90] で動かしてみた

dot.htaccesstdiary.conf.beginnerを編集&リネームしてップページの表示と一通りの設定変更を済ませて記念すべき最初の書き込ップページすら表示されなくなりました

Insecure operation - require (SecurityError)

Y:/.../tdiary_on_ruby191/tdiary.rb:434:in `require'
Y:/.../tdiary_on_ruby191/tdiary.rb:434:in `block in load_styles'
Y:/.../tdiary_on_ruby191/tdiary.rb:433:in `glob'
Y:/.../tdiary_on_ruby191/tdiary.rb:433:in `load_styles'
Y:/.../tdiary_on_ruby191/tdiary/defaultio.rb:142:in `initialize'
Y:/.../tdiary_on_ruby191/tdiary.rb:1069:in `new'
Y:/.../tdiary_on_ruby191/tdiary.rb:1069:in `initialize'
Y:/.../tdiary_on_ruby191/tdiary.rb:1660:in `initialize'
Y:/.../tdiary_on_ruby191/tdiary.rb:1858:in `initialize'
(plugin/recent_list.rb):39:in `new'
(plugin/recent_list.rb):39:in `block (3 levels) in recent_list'
(plugin/recent_list.rb):37:in `reverse_each'
(plugin/recent_list.rb):37:in `block (2 levels) in recent_list'
(plugin/recent_list.rb):36:in `reverse_each'
(plugin/recent_list.rb):36:in `block in recent_list'
(plugin/recent_list.rb):35:in `catch'
(plugin/recent_list.rb):35:in `recent_list'
(TDiary::Plugin#eval_src):67:in `block in eval_src'
Y:/.../tdiary_on_ruby191/tdiary.rb:787:in `eval'
Y:/.../tdiary_on_ruby191/tdiary.rb:787:in `block in eval_src'
Y:/.../tdiary_on_ruby191/tdiary.rb:112:in `block in safe'

プラグイン:recent_listが原因(外したら解決し)

$SAFE==1の状況で TDiaryMonth.new()するのがダメっぽい

recent_list()を呼ばれたときにそのたびにTDiaryMonth.new()するんでなくて読み込まれたときに必要なデータを準備しておけばいいんじゃないかとか思ったけどevalTDiaryMonthクラスにアクセサを追加したりしているあたり*反則泥縄の対応では気が済まないプラグインが日記データを要求できるようなインターフェイスが求められている(現在は TDiaryXXXX#initializeで読み込まれたもののみPlugin@diariesからアクセスできる)然るべき手段を用意したのちrecent_list.rbはそれを利用するべき

* 歴史的経緯>http://kitaj.no-ip.com/tdiary/20021106.html#p03


20090109() 親指ボールは中途半端マウスなのかトラボなのか?なにより不細工トラックボールに無線は必須ではないむしろ有線の方が信頼できて充電も不要でメリトが大きい

最終更: 2013-10-20T21:53+0900

[][TM-150] Logicool TrackMan Marble [TM-150] が来た

ケンジトンの新: SlimBlade Trackballが発売予定なのを昨日知ったのだけどもうロジクールトラックボールを注文していたのでした(量販店には置いてなかったのでアマゾン)

しばしば 10000円を超えトラックボール界にあって売価 3000円の入門機なれどそのスペックが侮れないのはこちらを参照のこと > http://mineko.fc2web.com/box/tb-room/items/logitech-st-45upi.html ここを読んでこトラックボールに決めました

 初めてトラックボール

一瞬で慣れた渋かったボールの転がりもすぐに滑ら慣らしが必要なのねやけに手前にあると思った右ボタン(大と小)それぞれ薬指の先と第二関節(っこの方)で押せばいいと気付いた

 スクロールモ

SetPointにその機能があったUniversal Scrollデフトで右側の小さいボタンに割り当てられているドのオンとオフに 2クリック必要(オフにするのはどのボタンでも可能)なのは正直面倒くさいけどすぐに意識せずに済むようになるはず。ただ上下左右にスクロールが自由自在というのは諸刃の剣で下方向だけにスクロール右方向にだけスクロールということは不可能サクラエタでテキトファイルをスクロールしながら閲覧するのが非常に煩わしかった

ーボドの Ctrlを押しながらだとFirefoxの文字サイズを変更することも可能

ーボドの Ctrlを押しながらでもExplorerの表示モドを変更することは不可能

スクロールバーの付いてるものには大抵有効だけど展開する前ドロップダウンリトを動かしたり直線上のつまみを移動したりMedia Player Classicのボリームを上げ下げしたりはできない

Universal Scrollの機能はスクロールであってホイール(ッセージの送信)ではないホイールの一機能を担うだけということ

Universal Scrollボタンを押すとポインタの真下のアプリケーションがアクブになるのも困ったところそういうのを好む人もいるのだろうけど俺が主に注目しているのはフーカスであってポインタではないし文字を読むときに邪魔だからとポインタを端っこにやったりもするその状態でスクロールをしたい

スクロールモドを解除した後もカーソルを移動させるまでカーソル画像が元に戻らないものがある > Firefox現在のモドがわからなくなるのでけっこう不快

Firefoxのテキトエリアにフーカスがあるときャレトが同時に動いてしまっておかしなことになる

素早い操作は無視されるトラックボールの良さが台無し速度が遅くスクロール量がボールの回転とリニアに対応していないためにたるい

スクロール速度の設定もあるにはあるのだけど対象アプリケーションごとに感度がまちまちなのでというか IEコンポーネトに限ってスクロールが超微速なんだけどそれにあわせて一律の設定を速くはできないかといって設定の遅さをボールの回転速度で補うことができないのは既に書いたとおり>「素早い操作は無視される

<追記 @2010-01-25>Universal ScrollSafari 4のスクロールはできません主要なブラウザだし最新の SetPointではできる可能性もあるけど。</追記>

<追記 @2010-03-28>Universal ScrollOpera 10.51のスクロールもできない以前はどのブラウザでも使えたと思ったが……SetPointを最新の 6.0にしたら結果は違うかもしれないが SetPointに期待はできないので試さないFirefox(3.6)IE(8)は変わらずページのスクロールが可能でGoogle Chrome4.1でもできるのだがったことにどのブラウザもスクロール速度が異なる( Chrome > Fx > IE )</追記>

<追記@2011-01-12>Opera 11.00Universal Scrollでスクロールできる。</追記>

 慣れないのは

ーボドとの使い分思い通りにポインタが動くから今までキーボドを使っていた操作もついつトラックボールでやってしまうマウスがポインングデバイスとして不便だからトカトキーを登録したボタンがたくさん必要になったりーボドの補助が必要だったりしたのだ

 やりたいのは

4ボタンしかない TM-150で唯一余っているといっていい左の小ボタン(デフ「戻るボタン)を多機能ボタンにすることボタンを押しながらのボールの上下左右に機能を割り当てたら 1ボタンで 4ボタン相当(注意しないといけないのはールを厳密に上下左右に回転させることはできないので一定以上の移動量を以て方向を判断してもらわないといけないこ)

SetPointにその機能があるのか他のプログラムでできるのかこれから調べる

 SetPoint

最新ではない 4.00を引き続き使ってるけどMarble Mouse (ST-45UPi)の名前と画像が表示されて使えている(マウスの名前は 1000070.xmlを修正して変更でき)

画像は SetPointに現れた新しいタブトラックボールの Y(X)方向を決められるのでどんな角度で持っても違和感なく操作できるZ軸はもちろん変更できない平面に置いて使うのが前提

SetPointに現れた新しいタブ。トラックボールの Y軸方向を決定する。

 @2013-10-20 持ち方

右利きだけどキーボドの左に置いて左手で使ってるボタン割り当てを左利き用にはしてなくて薬指で左クリック親指で右クリック薬指をコの字に折り曲げて第一関節から爪にかかる面で戻る親指は常に右小ボタンに乗ってて Universal Scroll手のひらは完全に重さを預けてる(Logicoolロゴは消えた)加速なしで 90から 100度の回転で画面の端から端まで(1920ピクセル)移動する


20090108() 横スクロールがないなあタブ切り替えと閉じるをよく使うんだけどどこかに割り当てられるだろう

Kensintonの新トラックボール

スクロールモドなんて必要なかった!!ボールをひねるだけ!

アモーモド切り替えでボールの役割をスイッチSetPoint並みにカスタマイズがきけば望んでいたェスチャモドによる仮想的なボタン追加が実現する

デザインも良いなにこのボールの大きさと露出量

20081231に書いた以上のものが手に入る(かもしれない手にとって実際に使用してみるまでは…)

発売日はいつですか64-bit Vistaでも使えますか


20090103() helpとタイプする最初の一歩が厳しい > XPの回復コンソール (Vistaでは全自動だったけど)

今度は成功(->20081214p01)

XPが起動しないロゴが出てプログスバーが動き続けるーフモドでは起動したシスムの復元が起動しないーフモドとネトワークも失敗CHKDSKを実行しようにもシスムパョンのチックは即座に実行できないし実行を予約して再起動しても CHKDSKの実行までたどり着かないXPの回復コンソールでもぞもぞしてたら「回復できないエラHDDに見つかっていつのまにか起動しましたよっとWindowsの自己修復機能はすごい起動にいつもより時間がかかって明らかに何かあったのにデスップの表示までこぎ着けるんだから


20090102() [MX610] マウストラッキングを無効化したいときがある具体的にはモニタをサスペドしたときと動画再生中簡単なドライバを一枚挟むだけで済むと予想してるんだけどドライバの作成が簡単ではない(経験と開発&ト環境がないから)マウスをひっくり返すのがいやなんだよ動画再生中もボタンは使いたいんだよ


20081231() トラックボールにホイールを付ける意味がわからんホイールより優れたボールで上下左右スクロールも自由自在じゃない移動とホイールを切り替える 2ドボタンを付けてくれるだけでいいよェスチャボタンというのも欲しいそれで仮想的にボタンを増やして SetPointで機能を割り当てたいでもまずトラックボールを何かひとつ買うこと


20081229() [Vista] 変だよ! 1.マウスの右ボタンドラッグしてデスップの領域を選択する2.右ボタンを放す。3.選択領域の"始点"を基点にメニーが出る4.遠いよ!間違ってるよ!


20081223() 新☆はてブ < スクロールが重いからピンを抜いたのにカテゴリを選び直すだけで元に戻る鳥頭そこは Cookieを使うべきところです。(潔癖症の人はどうせ拒否設定してるでし)

[SHJS][javascript] SHJS-0.6がリリースされていた(20081215)

アナウスされている変更点は…… (: 日本語部分は俺の勝手な訳のような注釈のようなも)

December 15, 2008 - SHJS 0.6

SHJS 0.6 is available for download.

SHJS 0.6 includes several new features, improvements and bug fixes:

  • SHJS is now distributed under version 3 of the GNU General Public License. (Older releases of SHJS were distributed under version 2 of the GNU GPL.)

    ライセスが GPLv2から GPLv3へ変更

  • Markup inside pre elements is now preserved.

    PREタグの中の HTMLークアップが保存される(以前は Node.dataを再帰的に取り出したもの乱暴にいうと PRE.{innerText|textContent}に相当するものが利用されていたver.0.5ではマークアップとして <br>のみが考慮されていた)

  • Several new languages (from the latest release of GNU Source-highlight) are included: S-Lang, Scala, Java properties files, Desktop files, LSM (Linux Software Map) files, Xorg configuration files, RPM spec files, Haxe, LDAP files, GLSL, Objective Caml, Standard ML, JavaScript with DOM, and C (separate from the C++ language file).

    最新の GNU Source-highlightから新しい言語ファイルを追加JavaScriptには DOMーワドを含んだ lang/sh_javascript_dom.jsが追加された(sh_javascript_dom = sh_javascript + applicationCache|closed|Components|content|controllers|crypto|defaultStatus|dialogArguments|directories|document|frameElement|frames|fullScreen|globalStorage|history|innerHeight|innerWidth|length|location|locationbar|menubar|name|navigator|opener|outerHeight|outerWidth|pageXOffset|pageYOffset|parent|personalbar|pkcs11|returnValue|screen|availTop|availLeft|availHeight|availWidth|colorDepth|height|left|pixelDepth|top|width|screenX|screenY|scrollbars|scrollMaxX|scrollMaxY|scrollX|scrollY|self|sessionStorage|sidebar|status|statusbar|toolbar|top|window + alert|addEventListener|atob|back|blur|btoa|captureEvents|clearInterval|clearTimeout|close|confirm|dump|escape|find|focus|forward|getAttention|getComputedStyle|getSelection|home|moveBy|moveTo|open|openDialog|postMessage|print|prompt|releaseEvents|removeEventListener|resizeBy|resizeTo|scroll|scrollBy|scrollByLines|scrollByPages|scrollTo|setInterval|setTimeout|showModalDialog|sizeToContent|stop|unescape|updateCommands|onabort|onbeforeunload|onblur|onchange|onclick|onclose|oncontextmenu|ondragdrop|onerror|onfocus|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onpaint|onreset|onresize|onscroll|onselect|onsubmit|onunload)

  • Many other languages have minor improvements.

    言語ファイルのアップデ

  • Compressed .min.css stylesheets are now included in the distribution.

    最小化した CSSァイルを同梱(.js.cssYUI Compressorを使用ver.0.5までは .jsのみが JSMinで処理されてい)

Please note that the format of language-specific JavaScript files has changed in SHJS 0.6. JavaScript language files from version 0.6 will not work with sh_main.js from previous releases, and vice versa. Make sure you upgrade both the sh_main.js file and language-specific files.

古い言語ファイル(lang/*.js)と新しいメイスクリ(sh_main.js)は互換性がない(逆も同じ)両方入れ替えるべし

大きな変更は <pre></pre>内の HTMLークアップがシンタックスハイラト後も保存されること(タグがたすき掛けになるときはどうするんだろ)

言語ファイルの変更は小さくて"next""regex""style""exit"というプロパを持ったパターンオブジトが3要素の配列になっている

 異種document対応が必要では? (sh_main.js)

function sh_highlightElement(element, language) {
  sh_addClass(element, 'sh_sourceCode');
  var originalTags = [];
  var inputString = sh_extractTags(element, originalTags);
  var highlightTags = sh_highlightString(inputString, language);
  var tags = sh_mergeTags(originalTags, highlightTags);
  // この documentFragmentはグローバル変数の document由来。
  var documentFragment = sh_insertTags(tags, inputString);
  while (element.hasChildNodes()) {
    element.removeChild(element.firstChild);
  }
  // element.ownerDocument != documentFragment.ownerDocumentのとき失敗しませんか?
  element.appendChild(documentFragment);
}

コメトを参照のことIEのバージョンが 5.5くらいだった時に失敗したような記憶が根拠で確証はないしレアケースだとは思うけど(フレームをまたいで sh_highlightElement(element, language)を呼び出したとき(=スクリトとエレメトが異なドキュメトに属するとき)に起こるかな)

 タグのたすき掛けの結果

 before
<pre class="sh_ruby">
require 'sqlite3'
<strong>require</strong> 'sqlite3'
<strong>req</strong>uire 'sqlite3'
</pre>
<pre class="sh_javascript">
/*
http://example.com
http://example<em>.</em>com
*/
</pre>
 after
<pre class="sh_ruby sh_sourceCode">
<span class="sh_preproc">require</span> <span class="sh_string">'sqlite3'</span>
<strong><span class="sh_preproc">require</span></strong> <span class="sh_string">'sqlite3'</span>
<strong><span class="sh_preproc">req</span></strong><span class="sh_preproc">uire</span> <span class="sh_string">'sqlite3'</span>
</pre>
<pre class="sh_javascript sh_sourceCode">
<span class="sh_comment">/*</span>
<a href="http://example.com" class="sh_url">http://example.com</a>
<a href="http://example.com" class="sh_url">http://example</a><em><a href="http://example.com" class="sh_url">.</a></em><a href="http://example.com" class="sh_url">com</a>
<span class="sh_comment">*/</span>
</pre>

SHJSの挿入するタグは必要に応じてぶつ切りにされるみたい

 追記@2009-02-25: 手製の言語ファイル( rubyjavascript)0.6ーマトに変換した(最小化方法は依然として JSMin)

移行スクリトはこれ( migrate_05_06.js )shjs-0.5までの lang/sh_*.jsァイルドロップすると lang/sh_*.06.jsというファイルができてくるという寸法ちなみに JScript

トもかねてバージョン 0.6を走らせてみたけど軽くなってる道理がない*のでこの日記では shjs-0.4.2に手を入れたものを使い続けている

 追記@2009-04-06: 0.6いいね

言語ファイルのフーマト変更は速度的に有利

パターンマッチの結果を Stateをまたいで保存するようになっているのでこの日記の sh_ruby.jsのようにあっちこっち跳びまわる言語ファイルに有利に働くいちばん時間を消費しているのが RegExp.exec()DOMツリーへの HTML断片の追加なのでパターンマッチ結果のキッシュは大事(っとも 0.4.2のときからキッシュの拡大は個人的にやってい)

* <pre>内のマークアップを保存するためにハイラト前と後の二つの HTML文字列をマージしているでもその機能俺個人はいらないのよね

新☆はてブのスクロール設定の真相

Cookieは使っていましたピンを抜いたときは no_fixed=1ピンで固定された状態(デフ)ではなしところがno_fixed=1でもなんでも <body id="..." class="fixed-header">なんだからせっかくの Cookieが意味なし初期化時に Cookieを読んで適切に設定してくださいでもはてブはそれなりに重たいので読み込み後にスクリトで設定するのでは遅いかも(HTMLを出力する段階で適切な初期値を設定してもらわないと)こちとら下り最大1.5Mbpsの今や見かけない契約なので遅いといえばピンを抜く操作もページの読み込みが完了するまで受け付けないのだよね(っちは Amazonで見かけ「スクリトを必要とする要素はスクリトで追加するメソドが有効かも)

1.スクロールが遅い 2.ピンを抜く(抜けな) 3.読み込みを待つ 4.ピンを抜く(抜け) 5.読む

これではサドバー領域をースHTML中で本文の後方に配置した意味が半減(タブインデックスに与える好影響は残っているがドバーの読み込みを待たずにページを読み始められるメリトはなくなってい)

それにしてもFirefoxはスクロールに追随しない固定背景のようなものの描画が致命的に遅いねIE8beta2では固定を解除しなくても遅さを感じなかったというに

スムーズスクロールONのせいらしいということに思い至ったのだがこの様では本末転倒ですよスクロールそのものを滞らせてスクロール量の把握(スムーズスクロールの目的)もなにもありはしない


20081218() “文学少女”の追想画廊(ガレリア・デ・ール)を三軒目の本屋でやっと発見100円足りなくて隔離してあった 500円のともみちゃんを使用する羽目にあと一枚


20081216() 調教完了

[MX610] SetPoint 4.70がリリースされている

でもイールはしない理由は過去にもう書いてある

[MX610] SetPoint 4.2411月末に出てたみたい -log (2007-12-12)

ップデトしてカスタマイズしたファイルが上書きされたり設定が消えたり新たな不具合を拾ったりしたらたまらないのでイールはしない

不満もないしVistaに対応した最初二番目のバージョン 4.00で十分この境地に至る過程は以下の通り

[MX610] Logitech Pointing Devices SDK v1_1 なんてものを発見 -log (2008-06-20)

MX610HIDが既にあるのでールの受信時にこれを叩けば LEDは点灯する

[MX610]ーもないけど切実Ctrl+WCtrlが残る問題(もう SetPointのアップデトは待たな) -log (2007-11-22)

SendInputっていう APIを試してみたけど Ctrlが残るようなことは起こらなかったひとつの解決法

[][SN25P][MX610] 接点改質剤 -log (2007-11-15)

スイッチをまち針で分解して接点にこいつをぬりぬりしたところ左チトは完全復活

[SN25P][MX610] SetPoint4.00もリリースされてた -log (2007-06-20)

MacroEmail.dllの名前を変更してしまえば SetPointの起動時に WinMailが起動する問題が解決するらしい

記:マンガとバイクと(2006-05-01)

MX-610用の XMLァイル(Devices\PointingDevice\1000055\1000055.xml*)を開いてみて34行目にあったそれっぽい部分

 <Button Number="1" Name="1">

 <Button Number="1" Name="左ボタン">

に書き換えてShift_JISで保存してSetPointを再起動したらリトボックスのラベルが

 1 左ボタンのクリック

から

 左ボタン 左ボタンのクリック

に変わっていた

今ではときどきッシュでレーザー部のほこりを掻き出すだけの手間しかかかりませんよ(結局掃除の手間がありーザーとはいえ使用する場所を選ぶのなら光学マウス以前のボールマウスが仕組みが直接的で好きだな)

 ついでに

どのバージョンかはわからないけどSetPointでプログラムの起動をボタンに割り当てたときにプログラムのパスが C:\HOGE\rHOGE\HOGE.exe というよう\rを含んでいたときAppData\Roaming\Logitech\SetPoint\user.xmlにそのパスが正しく書き込まれない&読み込まれないという不具合がった模様ある

  1. SetPoint 4.00
  2. パスの一部に \r を含むプログラムをボタンに割り当てる(C:\r\exeでも C:\hoge\r\hoge.exeでも適当)
  3. (ここから確定した手順は不明だけ)
  4. いくつかのボタンいくつかのプログラムに対して同じように割り当てる
  5. OKボタンを押す(user.xmlに書き込む)のとSetPointの再起動(user.xmlを読み込む)を繰り返す。
  6. いつのまにか \r が消えている(実は\ruser.xml内の改行に化けているそして改行は設定画面に表示はされないけどャレトが足踏みする部分にその存在を確認することができ)

* SetPoint4.00 on Vista(x64)で確認したところDevicesォルダは C:\ProgramData\Logicool\SetPoint\ に存在した