2019-10-15

CADDiのC++勉強会

次のCADDiのC++勉強会は10月29日の19時から行われる。詳細と参加登録は以下から行える。

https://caddi.connpass.com/event/151541/

次はtype erasureの続きと、expression templatesについて教える予定だ。

2019-10-12

東京から行けるスキー場のまとめ

シーズンはまだまだ遥かに遠い。早く滑りたい気持ちを抑えるために、またブログ記事でも書くことにする。今回は東京から行ける、個人的に気になっているスキー場について書く。まだ行ったことがないスキー場もある。

フジヤマ スノーリゾート イエティ|静岡県 富士山2合目のスキー場

例年10月下旬にオープンするスキー場。標高が比較的高く涼しい場所に人口造雪機を使って10月下旬に1kmのコースを作り出している。都内から日帰りできる最も早くオープンするスキー場として有名だ。

東京からはバスで片道2時間半かかる。まだ行ったことがない。

軽井沢プリンスホテルスキー場

11月上旬にオープンするスキー場。同じく人口造雪機を使って400mほどのコースを2本作り出している。イエティの次にオープンするスキー場として有名だ。東京からは新幹線で1時間ほどなので、イエティより交通の便が良い。

スキー場周辺は何もない場所であることが多いが、軽井沢は観光地なのでショッピングモールや飲食店街がある。コテージがスキー場の真横に設置されていて、ドアを開けるとすぐにスキー場というお手軽さもある。ただ、スキー場としての面白さはそれほどでもない。もともとそんなに雪が降る場所ではないのを圧倒的多数の人口降雪機で雪を作り出している娯楽施設だ。それに観光客が多くて休日は結構混んでいる。

この他のスキー場は、11月下旬から12月中旬にかけてオープンしていく。

ガーラ湯沢スキー場(新潟県湯沢町)|GALA YUZAWA

東京から新幹線で90分。ガーラ湯沢は東京から日帰りするのに最も手軽なスキー場だ。新幹線に乗る時間だけを考えると軽井沢よりは長い。ただし、軽井沢は駅到着後にスキー場まで移動しなければならないが、ガーラ湯沢は移動する必要がない。JR東日本直営のスキー場で、駅直結の同じ建物内にリフト券売り場、レンタル、更衣室が揃っていて、同じく建物直結のゴンドラで上に上がるとそのままゲレンデにつく。標高が高いので雪質もよい。ただし、そのお手軽さゆえにあまりにも観光客が多く、かつスキー場も狭い。

雪がもてばGWまで営業している。

湯沢中里スノーリゾート

越後湯沢駅からバスもしくは電車で15分。標高が低く天候に恵まれなければあまり雪質がよくない。3月にもなると雪が汚れている。平日は一部のリフトは動いていない。ただし圧倒的に空いている。そしてスノーボード率が圧倒的に高い。幅広で傾斜もほどほどのスノーボードが滑りやすいコース設計になっている。

舞子スノーリゾート

越後湯沢駅からバスで2-30分。スキー場の作りとしては、標高が高い上のコースをぐるぐる回るか、長い下山コースを繰り返すかの二択になる。

神立高原スキー場

越後湯沢駅からバスで10分。だいぶ異質なスキー場。スキー場に浴場と大部屋仮眠室があり雑魚寝をすることができる。土日祝日はナイターが深夜までやっている。

まだ行ったことがない。東京駅に近い場所に住んでいて日帰りの負担が少ないため、正直ここに素泊まりするよりは一度東京に帰ったほうがマシだろうと思われる。

かぐらスキー場

越後湯沢駅からバスで2-30分。例年11月下旬にオープンし、5月下旬までやっているスキー場。標高も高い。もともと3つのスキー場が合体したスキー場で広いには広いのだが、入り口から雪質のよい標高の高い場所に行くだけで20-30分はかかる。

白馬八方尾根スキー場 | HAKUBAVALLEY HAKUBA HAPPO-ONE

新幹線で90分かけて長野駅まで行き、そこからさらにバスで70分かかる。移動だけで半日潰れてしまう。1998年長野オリンピックの会場にもなったスキー場だ。とても広い。ただしスキー場の作りはスノーボード向きではない。

北海道

キロロ、ルスツ、ニセコ、フラノ、トマム、サホロが有名。東京からの交通は、羽田空港から新千歳空港に行きバスとなる。サホロだけは帯広空港が近い。まだ行ったことがない。

北海道の有名なスキー場は圧倒的に広く、雪質もよいと聞いているが、東京からは交通の便が悪い。東京から羽田空港まで電車で30分、新千歳空港まで旅客機で1時間半、空港からバスでスキー場まで2時間以上。しかも搭乗手続きの関係上、空港にはフライトの一時間前には着いていたい、スキー場に到着するまで6時間以上かかる計算になる。行くだけで1日潰れてしまう。

月山スキー場

山形の豪雪地帯にあり、ハイシーズンは雪が深すぎて営業していない。4月になるとようやくオープンする変わったスキー場。7月頃まで雪が持つので、どうしても夏に天然雪を滑りたい中毒者がやってくるスキー場。今では珍しくなったTバーリフトもある。

乗鞍岳

スキー場ではなく夏でも雪が残っているだけの場所にすぎない。標高2600mぐらいの地点までバスでいくことができる。リフトはない。自力でハイクアップする必要がある。

早く滑りたい。

2019-10-07

Caddi C++勉強会@10月9日

CaddiのC++勉強会が10月9日に開催される。参加は以下から。

https://caddi.connpass.com/event/150414/

今回は派生と継承という、C++の原点に戻ったような内容を説明する。そしてtype erasureを説明する。時間があればexpression templatesなども説明するが、おそらく次回になるかもしれない。

2019-10-06

スキー/スノーボードの怪我統計の考察

そろそろシーズンが近づいてきたのでそわそわしている。去年は3月末で滑るのを辞めてしまったのでもったいないことをしたと反省している。4月も滑ればよかった。とはいえ、右膝に痛みもあったし辞めておくのは正解だったのだろう。

滑りたいのにまだ滑ることができない憂鬱を紛らわすために、全国スキー安全対策協議会のスキー場障害報告書を読んでいる。

全国スキー安全対策協議会

統計は1998年から始まっている。調査に参加したスキー場には増減があるので、単純に年ごとに比較することはできないが、時代の変遷を感じる面白さがある。

1998年は、カービングスキーに主流が移ってきた時代で、スノーボードが流行り始めた時代でもある。カービングスキーによってアスリートではなくてもカービングターンができるようになり、スノーボードがもたらしたパークをスキー場が設置するようになってきた。

1998-1999シーズンではスノーボードはスキーの2.5倍の受傷率があった。これはどんどん下がり続け、ところが前回の2018-2019シーズンではスノーボードの受傷率はスキーの1.4倍になっている。スノーボードはだいぶ安全になったと言える。

具体的な受傷率はスキースノーボード合わせて1万分の1だ。同じ1年で比較すると、年末ジャンボ宝くじの一等が2000万分の1、雷に当たる確率が1000万分の1、交通事故が3万分の1、裁判員に選ばれる確率が1万分の1となる。それほどウインタースポーツの受傷率は高くない。

怪我の中でもかなりの割合を占める頭部への損傷であるが、ヘルメットを着用していれば防げた怪我がおおい。海外では8割にもなるヘルメット着用率は、日本では未だに低い。2018-2019シーズンでは、スキーのヘルメット着用率が初めて4割を超え、スノーボードでは22.9%だという。ヘルメットは着用すべきだし、各部位へのプロテクターもつけるべきだ。

昔の統計はストレートスキーとカービングスキーを分けていたが、今の統計は一緒になっている。今ではすっかりカービングスキーが主流になり、ストレートスキーを使っているスキーヤーはまれになってしまったからだろう。

受傷時刻は毎年決まって11-12時と14-15時が多い。昼に下がるのは昼食のために人口が減るからで、単に人口が多いから受傷率が高いだけだろう。同じように天候も晴のときが受傷率が高い。特に休日の晴れは受傷率が高い。これも単に人口が多いだけだろう。性別や年齢も、単なる人口比としか思えない結果になっている。ただ、1998-1999シーズンの統計ではスノーボードの年齢は20代が大半だったのに、20年たった今では40台まで広がっている。

受傷者の技能をみると、初めての人の怪我はそれほど多くない。初級者から中級者の怪我が圧倒的に多い。スキーはスノーボードの倍ほど上級者の怪我が多い。この理由はなぜだろう。

怪我の部位を見ると、スキーは圧倒的に膝の捻挫が多い。スノーボードは長らく手首、次いで肩だったのだが、最近は肩の怪我の方が多くなっている。手首の怪我はプロテクターをつけていれば防げるが、肩の脱臼はプロテクターで防ぐことができないためだろうか。

怪我をした理由としては、自分で転倒、人と衝突、人以外と衝突、その他があるが、圧倒的に自分で転倒して怪我をする割合が高い。実は人と衝突して怪我をする割合はスキーのほうが高い。去年滑っていて、リフトから落ちたらどうしようとか、崖から落ちたらどうしようなどと不安になったものだが、転落による怪我の割合は極めて少ない。

自分で転倒した怪我の内訳として最も多いのは単に「バランスを崩した」ためだが、スキーは9割を占めるこの理由、スノーボードでは75%しかない。スノーボードはスキーよりトリックを決める文化が強いせいか、ジャンプ失敗やトリック失敗といった理由が増えてくる。スノーボードでは逆エッジによる転倒もある。

人と衝突した場合、何にぶつかったかという統計が出ている。ぶつかる可能性があるのは、スキーヤー、スノーボーダー、それ以外の人だ。スキーヤーはスキーとスノーボードとの衝突がそれぞれ半々ぐらいだ。スノーボードでは圧倒的にスノーボードとの衝突が多い。

人以外との衝突でぶつかったものについては、立木が最も多いようだ。

日本のスキー、スノーボードで気になっていることとして、スキー場で堂々と酒が販売されているということだ。そして多くの客が飲んでいる。ただ、受傷者の飲酒の割合は2.2%で、それほど高くはないようだ。

受傷場所は緩斜面か中斜面が多く、急斜面での怪我は少ない。

リフト付近での怪我は、リフト乗り場とリフト降り場の怪我が大半で、リフト乗車中に怪我をすることはめったにない。何故か私はリフト乗車中に落ちてしまったらどうしようという不安が常にあるのだが、リフト乗車中に落ちて怪我をすることはまずない。リフトから落ちるのは子供が多いようだ。リフトが子供の体格に合わせて作られていないのが問題なのだろう。

スキーでは講習中に怪我をする割合も高い。スノーボードで講習中に怪我をする割合は少ない。報告書はスキーのほうがスクール受講率が高いのだろうとしている。

障害の程度だが、スキーよりスノーボードのほうが若干軽症が低く、中等傷が多い。重症の割合は余り変わらない。

「頭を強く打った疑い」については、スキー、スノーボードともに割合が変わらない。どちらもヘルメットを着用すべきだ。

受傷時の滑走速度の割合は、単に滑走速度の人口を表しているに過ぎないようだ。

興味深いのは、傷害保険、賠償責任保険の加入有無について、わからないとする回答が4,5割いるということだ。保険に入っているかどうかぐらいわかりそうなものだがどういうわけだろう。統計を報告したのは各種スキー場なので、聞きそびれているだけなのかもしれない。

受傷時の雪面は圧倒的に圧雪されていることが多い。ただ、日本のスキー場の大半は圧雪されているし、パウダーやコブでそんなに速度は出せないし、転んでもパウダーやコブに引っかかってすぐ止まることが多いので、当然といえば当然なのだろう。

雪質の割合もあまり意味のある統計には思えない。

2019-10-03

また初心者にプログラミングを教える機会があった

プログラミングでわからないところがあるので教えてほしいと以下のようなことを聞かれた。

こういうJavaScriptの関数がある。

// valuesは配列
// elementはvaluesの要素型の値
// 配列valuesに値elementと等しい要素があるならばそのインデックスを返す。
// それ以外の場合、-1を返す
function find_index( values, element )
{
    for ( let i = 0 ; i !== values.length ; ++i )
    {
        if ( values[i] === element )
            return i ;
    }
    return -1 ;
}

質問は、「なぜreturn -1にelseはいらないのか」というものであった。

似たような問題に、昔遭遇した気がするが、別人だ。

まずここにelseを書くべき文法はJavaScriptに存在しない。if文で何らかの条件を切り分ける必要もない。なぜならば、return -1が評価されるとき、すでにforループを抜けているわけで、その場合要素が見つからなかったということだ。逆に、要素が見つかったのであれば、すでに上のreturn iが評価されているので、すでに処理は関数の呼び出し元に戻っており、return -1は評価されることがない。

ただ、このような机上の説明を繰り返しても理解ができない様子であったので、さらにデバッガーでステップ実行してみせるなどして説明した。

この問題は、逐次実行という概念と、逐次実行がfor文やif文やreturn文によって変わるということ、そしてプログラミングにおける関数の理解が必要だ。しかし、筆者はこのような概念の理解に苦労した覚えはないし、周りの職業プログラマーに聞いても、やはり苦労した覚えはないという。

しかし不思議だ。質問者は数学の素養があり、数学における関数なら理解しているはずだ。聞けば再帰も理解しているという。それならと以下のように再帰で書いてみた。


function find_index( values, element )
{
    function solve( i )
    {
        if ( i === values.length )
            return -1 ;

        if ( values[i] === element )
            return i ;

        return solve( i + 1 ) ;
    }
    return solve(0) ;
}

これを何の説明もせずに見せたところ、「これはとても良くわかる。なんでみんなこう書いてくれないのか」とのことであった。質問者はJavaScriptの初歩の初歩しか学んでおらず、このようなコードは見たことがないはずだ。しかしわかりやすいと言う。再帰は正しく理解できていることが確認できた。

質問者にはHaskellのような純粋関数型の言語のほうが向いているのかもしれない。