バイク(エンジン付き)用に買ったロードメッシュフィットグローブ (GSM6507)が大変具合が良かったので、自転車用にも GOLDWINを選んだ。春夏秋用だけど、防寒&手のひらの保護用として秋冬春に着用するつもり。
GSM6507と同じ Lサイズを選んだのだけど、あちらより指が短い。フィット感はさすがのものだけど、脱げかけのような落ち着かなさが残る。かといって、XLにすると指以外の部分がぶかぶかになりそう。一応許容範囲内。
2年間使用した GSM6507は、1年ほどたった頃に手の甲の縫い合わせてあった部分がほつれて最初の穴があいた。(ほつれたのは手首を水平に走る縫い目。はめるときに力の加わる部分だから、そんな方向に縫い目が走っていたら破けるのもむべなるかな。GWB-881はわりと縦方向に縫い目が走っているので耐えてくれそうだが)。もう 1年の間に、手のひらと指先の皮部分に穴があいてだんだん広がっていった。GWB-881も 1-2年が使用限度じゃないかな。最初に、マジックテープの先端からテープがはがれたり布が破けたりしそう*。
* 先手を打ってかがってみた。相当安心できる。
シフトワイヤーを交換してもらって返ってきたら、ワイヤーを差し込む穴を塞いでいたネジがなくなっていた。
ワイヤーがほつれて、ちぎれて、広がっていて、大変だった(そのせいで 30分で終わるところが翌日までかかった)とは聞いていたけど、ネジを紛失したとは聞いていない。
こんな感じ(ささくれワイヤー) > http://www.otr.jp/2007/12/20/post_24.html
どうすんだよ、上向いてるから雨入るぜ。
これらの他に特に希望(不満)はない。
歯数が 28-38-48のものが付いている。Shimanoの MTBコンポーネントでは 22-32-44と 26-36-48の二種類が一般的。
いつも最大のリングのみを使用していることと、やや下り勾配の国道を走るときには、トップの上にもう一段欲しくなることから、最低でも 48T、できればもう少し大きいものが欲しい。逆に、最小のリングは街乗りには全く必要ないので二段で十分。
ただ、48Tより大きいリングに対応するフロントディレイラーはロード用になってしまう。
また、普段着でまたがるのならチェーンガード(チェーンケース)は必須。裾留めは最初はよくても絶対に面倒臭くなるので、いつでも気負わずに乗るための障害になる。ガードがないと、ズボンの裾が油で汚れのはもちろん、変速してチェーンを内側に落としたときには、ズボンの裾が最大(最外, アウター)のギアの歯に引っかかってペダリングができなくなる。
Shimanoのロード向けコンポーネントにチェーンガードのオプションがほとんどないのが悲しい。(Soraにのみあったけれど、黒色がないので Bad Boyには付けられない)
チェーンガード付きで最大 50Tが理想。
現在の長さはわからない。よく見かける数字は 170mmと 175mm。低回転トルク型のペダリングに合うのは長い方の 175mmだと思う。
歯数 11-32で 8枚組のものが付いている。MTBで一般的なのは 9速で、歯数は 11-32Tと 11-34Tの二種類。
最小(トップ)ギアがリアディレイラーにより事実上 11Tに制限されるので、もう一段上のギアを望むならフロントでなんとかすることになる。11Tから始まっていて 9速であれば何でも良い (MTBの場合)。
Alivioが付いている。インジケーターがコンパクトで目立たないのは良いが必要ない。Deore XTと SLXにはインジケーターを外したあとに取り付けるフタが付いていて良い。Alivioもインジケーターを外すことはできるがフタがない。デザインで優れているのは XTR(SL-M970)のみ。
現在のもの(Deore)で不満はない (上を知らないから!) 油を差してワイヤーのたるみをとっていればきっちり変速する。
以下はリアディレイラーについて最近知ったこと。
シフティングはワイヤーを巻き取る動作とリリースする動作で行われる。リリースしたときにシフトアップするのがトップノーマルで、シフトダウンするのがローノーマル。先に登場して普及しているのはトップノーマル。
リアがトップノーマルの場合、ワイヤーリリースでチェーンが小さいギアに落ちるのがフロントと共通。
リアがローノーマルの場合、ワイヤーリリースでシフトダウンが行われるのが、フロントとの共通部分になる。
チェーンのたるみを取り除く能力。地面の方に伸びたアームの長さに依る。
チェーンが最も張るのが、前後とも最大のギアにしたときで、最も弛むのがその逆。前後の最大歯数の和と前後の最小歯数の和の差がリアディレイラーのトータルキャパシティを超えてはいけない。
何も考えずに変速したいのなら長いもの。使えないギアの組み合わせが生じてもショートゲージ(ショートケージ?)のメリット(何だろ?)が欲しいなら短いものを選ぶ。
Road Warrior 800 (Jet Black, ハンドルの角は外す)が自分にぴったりなんだよな。自転車に目を向けるきっかけになった Bad Boyには特別な思い入れがあるし、黒へのこだわりも気に入ってるんだけど。
Synapse Flat Barというのが、Bad Boyよりスピードが出せそうで、フレームも Cannondaleらしくて、すごくイイ。乗り換えるときに日本でこういう選択肢があるといいな。
最終更新: 2011-05-20T17:45+0900
2003年のモデルが、「Bad Boy かっけー。Cannondaleってところが作ってるのかー。」と、両方の名前を頭に刻みつけるきっかけになったもので、実際に購入したのが 2007年のもの。
両方のスペック表が公開されているので並べてみる。
Frame | 2003 | CAAD3 Mountain |
---|---|---|
2007 | Bad Boy Si | |
Fork | 2003 | Tig-welded chromoly, 1 1/8" |
2007 | Fatty R | |
Rear Shock | 2003 | N/A |
2007 | N/A | |
Rims | 2003 | Mavic X139, 32-hole |
2007 | Mach1 510 w/machined sidewall, 32h | |
Hubs | 2003 | Shimano |
2007 | Shimano M475 | |
Spokes | 2003 | DT Champion |
2007 | DT Swiss Champion | |
Tires | 2003 | Hutchinson Top Slick, 26×1.0" |
2007 | Maxxis Detonator, 700×28c | |
Pedals | 2003 | Wellgo alloy cage w/clips & straps |
2007 | Wellgo alloy cage w/clip and strap | |
Crank | 2003 | Sugino MX300, 22/32/44 |
2007 | TruVatiV ISOflow 3.0, 28/38/48 | |
Chain | 2003 | Shimano 9-speed |
2007 | KMC 8-speed | |
Rear Cogs | 2003 | SRAM 7.0 |
2007 | Sunrace M63, 11-32 | |
Bottom Bracket | 2003 | Shimano 4-Taper |
2007 | Shimano BB-UN26 | |
Front Derailleur | 2003 | Shimano Deore |
2007 | Shimano Alivio | |
Rear Derailleur | 2003 | Shimano XT |
2007 | Shimano Deore | |
Shifters | 2003 | Shimano Deore |
2007 | Shimano Alivio | |
Handlebars | 2003 | Ritchey SC |
2007 | Cannondale C3, 20mm rise | |
Stem | 2003 | Cannondale 3-D forged 25.4 |
2007 | Cannondale XC3 1 1/8", 31.8mm | |
Headset | 2003 | Cane Creek S-1 |
2007 | FSA Alloy integrated | |
Brakeset | 2003 | Cannondale Expert w/cartridge pads |
2007 | Cannondale Fire w/cartridge pad | |
Brakelevers | 2003 | Cannondale Expert |
2007 | Cannondale Fire | |
Saddle | 2003 | Cannondale Expert |
2007 | Selle Royal Viper | |
Seat Post | 2003 | Kalloy SP-263B |
2007 | Cannondale C4 Alloy | |
Colors | 2003 | Ninbus Grey (gloss)(GRY). |
2007 | Jet Black (matte)(BBQ). | |
Sizes | 2003 | P, S, M, L, X |
2007 | P, S, M, L, X | |
Weight | 2003 | N/A |
2007 | ||
Extras | 2003 | |
2007 | Cannondale GRIND Grip, E-13 SRS Chainguide | |
MSRP | 2003 | |
2007 | $779.99* |
価格は税抜き¥110000のまま変わらないが、パーツは毎年変更されている。ほとんどのメーカーと製品名は見てもわからないのだけど、変速装置に使われている Shimanoだけは日本のメーカーでなじみがあるので少し調べた。毎年の変更は、素人目には退化し続けているようにしか見えない。2008年はとうとう Alivioで統一された。
トップグレードの Jekyllはなくなり、変更されたフレームはインパクトがない。そしてパーツは退化していく(ように見える)。志が感じられず商魂しか感じない。
実際のところ、俺みたいな素人が乗ってるんだから、Cannondaleの選択は正しいのかもしれないけど。
リアの話。
やっかいな代物を持ち込んだらしい。変速が決まらないと本当にストレスがたまるので明日には直っててほしい。
- SHJS can now automatically load language script files (feature request #2007022 - thanks to Michal Nazarewicz and Eugene Marcotte).
- Highlighting of C/C++ and JavaScript has been improved.
- A new language file for Oracle SQL has been added (thanks to Mike Breeze).
- Case-insensitive regular expressions are now handled more efficiently.
- SHJS now treats <br> tags as line terminators in input (bug #2054144 - thanks to Altforweilerer).
- Compressed .min.js files are now generated with YUI Compressor.
languageファイルの自動読み込みは Msxml2.XMLHTTPか XMLHttpRequestを利用する。
<script>タグを挿入するのかも*と思っていたが今風のやり方だった。(SourceForgeの Feature Requestsで両派の議論があったようで、0.5では Asynchronous XMLHttpRequestを採用したけど将来かわるかもー、だって)
lang/sh_javascript.jsの全変更点(多分)は
新たに対応したものも対応が外れたものもあるが、どちらも JavaScriptの仕様に近づくための変更という点は共通。
それでもやっぱり Javaっぽいのは、java.langまるごとインクルードだった前バージョンの source-highlight-lang/javascript.langが、java.langの中身をベースに足し引きしたものに変わったに過ぎないから。
「大文字小文字を無視する正規表現を効率的に」っていうのは lang/sh_sql.jsを見るにこういうこと。
/[Vv][Aa][Rr][Cc][Hh][Aa][Rr]/ // ver. 0.4.2 /VARCHAR/i // ver. 0.5
……。
YUI Compressorはローカル変数名を縮めることで JSMin以上の圧縮を図る。
他にも、obj["prop"]を obj.propに(可能なら)したり、連結されるリテラル文字列を予め一つにしたり、オブジェクトノーテイション(って言うの?)のプロパティ名部分の引用符を取り除いたり({"p1":v1, "p2":v2} -> {p1:v1, p2:v2})、するらしい。
おれは JSMinでアグレッシブ(level 3 of 3)に最小化する(と、不要な空白と全ての改行が取り除かれるので、セミコロンインサーションの余地がなくなって、一つのセミコロンも省略できなくなる)のが好きなんだけど。何より Javaの実行環境がないから、YUI Compressorは動かない……。
ブラウザ(クライアントサイド)で実行されるのでサーバーの負荷が増えません。
メインスクリプト(最小化されたものが数KB)は必須ですが各言語ファイルはオプションです。名前も知らない言語の定義ファイルまでブラウザにダウンロードしてもらう必要はありません。
自動認識のような不確かなものに頼りません。(自分の書いているものが何語なのか知らない人は少ないでしょう。あえて情報を削ってスクリプトの仕事を増やす必要はありません)
言語ファイルは、状態オブジェクトの配列です。各状態は正規表現のパターンを一つ以上持ち、マッチしたパターンにより配色と遷移先を決定します。状態が増えるのをいとわなければ何でもできます⁑⁂。
ダブルクォーテーション文字列や数字や URLなどにマッチする正規表現を並べて順番にマッチングさせるだけのハイライターより一段上のパターン認識が可能です。(有名どころの SyntaxHighlighter 2.0は XRegExpというライブラリを使用していて、これが Perl5や鬼車や .NET並の正規表現を JavaScriptでも使用可能にしています。これも一歩踏み出す一つの方法ですが、ほとんど XMLのハイライトでしか使われてないようにも見えるのがもったいない)
JavaScriptの方は letみたいな新しいキーワードには対応していないが、JScript5.5(ECMAScript3)に準拠したスクリプトのハイライトに可能な限り対応している。Javaもどきの実装とは全然違います。
Rubyの方もがんばったけど、こちらは正規表現による字句解析レベルでは判断の付かない要素が多くて、例えば
str1 = % hoge ; #=> "hoge" str2 = "%04d-%02d-%02d" % [2008, 8, 20] #=> "2008-08-20"
% をメソッドと判断する(下段)か %!string! とする(上段)かは文脈がないと決められない。現在は後者が誤って %!string! と判断されている(%!string!記法の区切り文字としてスペースを認めなければ、より多くのケースで妥当な表示が得られるのはわかっているが……)。また、改行を含む %!string! リテラルにも対応していない(はてなはこれができる。悔しい)が、かっこを使った %記法( %[string]など )では改行を含むことができる。
既知の不具合はこれだけ。(知らないだけ)
* その場合スクリプトが実行されないことがあったような……(検索結果>http://la.ma.la/blog/diary_200612061928.htm ) と思ったが、IEで innerHTMLを使った場合の話だった。とはいえ、DOMで <script>エレメントを作成することは可能で、実行もされるというのだろうか?
⁑ 厳密ではない。感覚的な言葉。
⁂ この文では普通の正規表現以上の表現力(例えばかっこの対応を調べられる)があるのを説明できていないような。(ある状態から別の状態へ移動するだけでなく後戻りすることもできるから、というのでは説明になっているだろうか?
*4 2008年12月にリリースされた shjs-0.6でフォーマットが変更になったので shjs-0.5用。
こう書くと
""[[http://vvvvvv.sakura.ne.jp]] ""どこからの引用だかわかるでしょうか? "" ""すくなくとも Firefox3、Safari3.1、Opera9.50ではわかるはずですが、IE7では無理です。
こうなる。
どこからの引用だかわかるでしょうか?
すくなくとも Firefox3、Safari3.1、Opera9.50ではわかるはずですが、IE7では無理です。
HTMLはこんな感じになっている。
<blockquote cite="http://vvvvvv.sakura.ne.jp">...</blockquote>
スタイルシートはこう。残念な子 IE7は contentをサポートしていないのが敗因。
.section blockquote[cite]:after, .section blockquote[title]:after { content: "引用元: "attr(title)" "attr(cite); /* ハイパーリンクにしたい。マークアップもしたい。 */ display: block; text-align: right; font-style: oblique; background-color: #F3F9FF; }
引用の最初の行が二重ブラケットリンクだけだった場合に限り、その中身を <blockquote>の cite/title属性として扱う。こういうパターンがあり得る。
URLANDTITLETITLEONLYhttp://URLONLY
http://vvvvvv.sakura.ne.jp/w/9784320122079/?QuotePageProblem
ちょっと説明。
アンカーが重複するのを防ぐために、quote_pageプラグインが他ページを HTML化する際に prefixを用いるようにした。でもこの prefixがそのままではうまく動かない。
prefixとは Hiki::HTMLFormatter_default#initializeが受け取る五番目のパラメータ。その意味は、見出しに付くアンカーの接頭辞。デフォルトでは prefix='l' となっており、l0, l1, l2,...とアンカーが割り振られることになる。
ところで、quote_pageが様々な prefixを用いてメソッドを呼び出しても、Hiki::HTMLFormatter_default::HEADING_REが
%r!<h(\d)>.*<a name="l\d+">.*?</a>(.*?)</h\1>!
となっており prefix='l' がハードコーディングされている(太字部分)。これの修正が必要だった。
また、rd+スタイルの場合はもっと悲惨で、五番目のパラメータ(なぜか suffixという名前)は全く利用されていない。修正の可能性はリンク先で書いたが自分で使っていないので未対応のまま。
なんでこんな使えないパラメータ(prefix, suffix)があるんだろう。
bugfix in headings in blockquotes (html_formatter.rb, Revision 1.47)
このへんが関係ありそう。引用の中の見出しは TOCに含めたくないとかそういうことだろうか。テストケースがあれば regressionの有無を確認できるんだけど……。
現在の状態で確認したが、引用の中の見出しが TOCに含まれるということはなかった。
ちなみに、Revision 1.46の tocメソッドにも prefix='l' 決めうちのミスがあったが、1.47でのそれにあわせるような変更から考えるに、ミスではなく prefix='l' の見出しだけが TOCに含まれるという仕様なのかもしれない。<ないない
ところで、最初のリンク先の Hikiには最新の HikiDocを入れているのだけど、その場合、html_formatter.rbを最新の hikidoc.rbに対応したものに全面的に書き換えないと、hikidoc.rbの大改造のメリットが半分しか活かせていないことになる。現在の html_formatter.rbはかつての hikidoc.rbを思わせる、正規表現で全体をバッサバッサと置換していく、文脈無視の大味な実装。(そこまで正規表現を信用できないし、最大長のわからない文字列を何度も何度もなめまわすのは避けたいところ)
WikiNameを見つけ出す(自動リンク)正規表現が微妙に違う。
HikiDocにおまかせしたので、連続する大文字が許容される一方、大文字で終わる名前は拒否されるようになります。(GOODWikiName, BadWikiNAME)
日記に書いた手前、どんな風になるのか試してみただけだし、現状で困ってもいないので、この(追記部分の)変更は使用中の Hiki( http://vvvvvv.sakura.ne.jp/w/ )には入れていない。あしからず。
まあ、ポインタと配列は一緒とか云っている人は、一遍
シンデミル?int array[なんかでかいすうじ]; なグローバルな実体を extern int *array; で参照してはまればいいと思うよw
手っ取り早く確かめるのはこんなんで。
たぶんSEGVで落ちるはず。
なぜ SEGVで落ちるのかわからなかったので、試してみた。
/* cmd /V:ON SetEnv cl a.c foo.c bar.c */ #include <stdio.h> void foo(); // foo.c void bar(); // bar.c char array[256]; int main() { printf("main: :array: %p\n", array); printf("main:addr:array: %p\n", &array); foo(); printf("%s\n", array); bar(); printf("%s\n", array); return 0; }
配列(array)を配列(char[])として参照。
extern char array[]; // a.c void foo() { printf("foo : :array: %p\n", array); printf("foo :addr:array: %p\n", &array); strcpy(array, "hello, foo world"); }
配列(array)をポインタ(char*)として参照。
extern char *array; // a.c void bar() { printf("bar : :array: %p\n", array); printf("bar :addr:array: %p\n", &array); strcpy(array, "hello, bar world"); }
main: :array: 0040DAA0 < char array[] main:addr:array: 0040DAA0 > &array == array foo : :array: 0040DAA0 > foo:array == array foo :addr:array: 0040DAA0 > &foo:array == foo:array hello, foo world bar : :array: 6C6C6568 < 6C(l) 6C(l) 65(e) 68(h) bar :addr:array: 0040DAA0 > &bar:array が arrayと同じ (a.exe は動作を停止しました)
確かに落ちた。
例えば arrayと書いたときに得られるイメージが 6C6C6568... だったとする。これを charと解釈すれば 'h'(68h) になるし、intと解釈すれば 1819043176(6C6C6568h) になる。shortなら 25960(6568h)。では char* なら? そのまま 6C6C6568。(ポインタのサイズが 64-bitなら、あと 4バイト先まで読むことになるが)。ではでは char[]なら? 6C6C6568... というメモリ領域を指すアドレスが手に入る。
arrayとラベルされたメモリ領域(6C6C6568...)が存在するときに、それをポインタとして扱った場合と、配列として扱った場合では、得られるものがまるで違う。(6C6C6568というメモリ上の値か、そのアドレスか)
配列とポインタが混同されるのはどちらもアドレスが得られるから。違うのはそのときその変数が参照しているメモリイメージ。配列変数は配列の中身が格納された領域を参照しながらそのアドレスを返すが、ポインタ変数はアドレスが格納された領域を参照しており、その内容をそのまま返している。
* 違うみたい。>http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0808a.html#D20080809-2