2018年08月25日

はじめに

9月8日・9日に群馬県の前橋市に行く用があり、交通手段を思案していた。
ここですぐに思いつくのは

  • お金はかさむけど速い、新幹線で東京経由
    • ただ、工夫はいろいろ考えられる。新幹線をぷらっとこだまにするとか、東京〜前橋は普通列車にするとか。
  • 夜行バス(名古屋から前橋の直通もある。日本中央バス「シルクライナー」の一部が名古屋に停車する)

というところなのだが、JRの路線図を見ていると、「長野経由にして一周の乗車券にしたら、時間をそれほど伸ばさなくてよいうえに、そこそこ安く乗れるのでは?」ということに気づいたのであった。で実際にちょうどよかったのでチケットも買ったのである。


経路

20180825-名古屋-群馬
(画像クリックで拡大)

基本的には「特急しなの→北陸新幹線→東海道新幹線」です。
ここで、前橋はこの経路から外れるわけですが(高崎から分かれないとならない)、この場合は上記のように乗車券を買ったうえで、高崎〜前橋の往復乗車券を別に買うほうがよいです(名古屋→長野→高崎→前橋 と 前橋→高崎→東京→名古屋 に分けるよりも安く済む)。
もっとも今回は、会場が公共交通機関だと行きにくい場所なので、輪行して高崎〜会場を自転車で移動しますが。

運賃

  • 乗車券:11120円
  • 特急しなの 自由席特急券:1190円(乗継割引適用)
  • 北陸新幹線(長野→高崎)自由席特急券:2590円
  • 北陸新幹線(高崎→東京)自由席特急券:2470円
  • 東海道新幹線(東京→名古屋)自由席特急券:4100円
  • 合計:21470円(高崎→東京で新幹線ではなく高崎線普通列車を使えば19000円)

これが高いのか安いのかというところであるが、いくつか比較してみる。まず、名古屋〜高崎の移動手段のみを個別で確保した場合はどうなるか、いくつかモデルケースを見てみる。

  • 東京経由(東海道新幹線+北陸新幹線):3時間程度 14130円(※乗車券のみでは7560円)
  • 東京経由(東海道新幹線+高崎線普通列車):3時間40分程度 11660円(※乗車券のみでは7560円)
  • 東京経由(ぷらっとこだま+高崎線普通列車):4時間50分程度 10240円(※ぷらっとこだま通常期8300円+東京〜高崎1940円)
  • 長野経由(特急しなの+北陸新幹線):4時間20分程度 10040円(※乗車券のみでは6260円)
  • 夜行バス:6時間程度 7000円(※往復割引12600円 +30分で前橋駅までも行ける)

という具合である。往復とも夜行バスにするならそれがもちろん安いのだが、それは回避したかったので別の方法を考えると、

  • 例えば「往路夜行バス、復路東京経由新幹線+新幹線」だと21130円となり、上記の一周経路に比べて費用がほとんど変わらなくなるのである。
  • また「往復ともに長野経由」にすると20080円となり、費用がそれほど浮かないのである。
  • 冒頭で名前を挙げた「ぷらっとこだま」利用は利点が薄すぎた。東京に寄りたいという理由がないのであれば、長野経由を選んでおけばよいので。
  • 単にこの条件であれば、単純に安いのは「片道夜行バス、片道長野経由」だろうか。ただ今回は列車にすることで輪行できることが利点となったので、全区間列車の経路を選んだ。

このような結果になったのは、JRの乗車券は「1枚を長くすると、その長くなった区間のキロ単価が安くなる」という性質があるためである(300kmを超えると安くなり、600kmを超えるとさらに安くなる。なお今回の一周経路では800kmを超える)。

ということで、「通常の乗車券を買うことで」費用を抑えるところは抑えて旅行経路を組めた、という話でした。

注意

特急しなのの新幹線乗継による特急料金割引は、乗継が前提なので、当然ですが新幹線区間の特急券も一緒に購入する必要があります。



maraigue at 00:45コメント(0)旅行 

2018年07月12日

※初版公開:2014年5月28日

先日購入したWindows8ノートパソコン「Thinkpad Edge E145」は、CPUがクアッドコアでこそあるものの1.5GHzと弱いため、せめてレスポンスを良くしようとSSDを導入することに。Crucialの256GBで16,000円くらい。

そこではまったこととかを挙げておく。

【追記】(2018.7.12)

先日、これに近い状況が起きて、なおかつなかなか解決することもできなかったのですが、いろいろ調べて&試しているうちに、「EaseUS Todo Backup Freeをアンインストールすると問題が解消する」ことが発覚しました。
他のドライブクローンツール(ドライブを丸ごとコピーする。下記記事では他の例として、Acronis True Imageも挙げられていました)でも同様のことが起きうるようです。
Windows10にアップグレードしたら起動後にフリーズする現象が発生したので対処した | uinyan.com

【結論】

HDDの中身を直接SSDにコピーしても、そのままでは動作に支障をきたす可能性あり。

HDDの中身を直接SSDにコピーしてから、Windows8の「リフレッシュ」機能(インストールしたソフトなどを初期状態に戻すが、ユーザフォルダや一部のユーザ別設定は残す)を用いると正常に動いた。

上記の「追記」に該当する場合は、以下のことを試す前に追記の内容を試してください。

【試したこと】

当のパソコンを買った時点で、当初はすぐに使える必要があったことからしばらくHDDのまま利用しており、ソフトもかなりの数を導入していた。
ということで、できることならこれらのソフトもそのまま残して環境を移行したいということで、まずは元のHDDの中身をSSDへ直接移行できるソフトとしてEaseUS Todo Backup Freeを利用した。これでひとまずHDDの中身がSSDへ移行され(ただしSSDのほうが容量が小さいため、Cドライブへの割り当て領域を縮小し、起動領域やリカバリ領域などその他の領域はそのままのサイズとした)、そのSSDをパソコンに取り付ければとりあえず動くようにはなった。

だがしかし、その方法でパソコンを立ち上げると、ある程度の時間が経つとフリーズするのである。マウスの動作は受け付ける、新規のアプリ立ち上げができないという状況から、おそらくSSDへの書き込みが止まったものと推測し、ぐぐりながら以下の対応を試してみた。

  • ディスクアクセスを行うドライバのアップデート(AMDのドライバがSSDと相性がよくないという話が某所であった)
  • SSDへの電源供給が止まるような設定を無効化
  • 高速スタートアップ」を無効化

………が、依然としてフリーズは発生していた。

これはもうリカバリするしかない?と思っていたのだが、以前に起動に失敗するようになったときに「リフレッシュ」というオプションがあったな、と思い、リカバリディスクからリフレッシュを試してみたら無事に動くようになった。
「リフレッシュ」とは、ユーザフォルダなど一部の設定を残したまま、システム全体の設定やインストールされたソフトなどを初期状態に戻すものである(参考:Windows 8レボリューション:第8回 Windows 8によるPCの「リフレッシュ」と「リセット」 (1/2) - @IT)。これを適用した結果、ソフトはすべてインストールし直す必要はあったものの、ユーザフォルダが残るため、完全なリカバリに比べると負担はかなり減った。ソフトの再インストールについても、「インストーラーを保存したフォルダで、インストーラーを順に起動する」という形で対応できた。



maraigue at 00:32コメント(3)コンピュータ全般 

2018年04月26日

ここ最近、メインマシンとして使っていたノートパソコンのCPUファンの音がうるさくなってきていた。
そもそも買ったのが7年前だったので、そろそろ寿命なのかなと思っていたこと、また(メーカー修理ではない修理をしてくれる)店に問い合わせてみたら修理部品の確保ができないとのことだった&メーカー修理するにも最低2万円くらいするということで、新たに購入することに。

ネットショップでいくつか候補を決めていたのだが、店頭で同等のスペック・価格のものが買えるところを見つけたので買った。8万円ちょっと。
LAVIE Direct NS PC-GN254FRDB
ちなみに最終的に買ったものもネットショップで見てた候補も、型落ちなので安かったというところ。

ちなみに7年前のときは、持ち運びを考慮して13.3インチディスプレイの機種を選んだのだが、現在だとそのサイズでCPU性能もそこそこ、となると20万円くらいの予算が必要で断念した。15.6インチディスプレイの機種なので気軽には持ち運べなくなりました。



maraigue at 23:21コメント(0)一般コンピュータ全般 

2018年03月02日

注意

NoxPlayer 6.0.5.3 + Windows10での結果です。環境によっては異なる可能性があります。

結論

パソコンによっては、「グラフィックスレンダリングモード」を「急速モード(DirectX)」にするとAndroidが起動しなくなる場合がある(一部アプリは急速モードでないとまともに動かないらしいが)。設定ファイルをいじって「互換モード(OpenGL)」に戻せば起動する場合がある。

問題と対処

NoxPlayer

WindowsやMacのパソコン上でAndroid環境を動かすエミュレータ。これで動かしたいアプリがあって使ってみていたのである。

で最初につまづいたことだったのだが、一度これを使ってAndroid環境を立ち上げ、その後「システム設定」(画面右上の歯車のマーク)からエミュレータの設定を変えたあと再起動すると、起動が99%で止まってその先に進まなくなったのである。
20180302-NoxPlayer設定
その際、対処法が書かれたページへのリンクが表示されるとともに、単に再起動するか環境をリセットして再起動するかするためのボタンが表示されるのだが、ここにある方法のどれに従っても症状は変わらないのである。

その過程で、「もしかしてシステム設定において、このパソコンでは不都合が起きる設定をしてしまったのでは?」と思い至ったのであった(詳細後述)。しかしながらNoxPlayerのシステム設定画面は、エミュレータ上のAndroidが正常に起動してからでないと表示できないという仕様になっており、「その設定を変更できれば起動するかもしれないのに!」という状態に陥ってしまったのである。

その後、いくつか当たりを付けてフォルダを探してみると、ディレクトリ %userprofile%\AppData\Local\Nox にある conf.ini が設定を保存しているファイルだと気付き、その中にある graphic_engine_type=1 (システム設定画面の「高級設定」→「グラフィックスレンダリングモード」を「急速モード(DirectX)」にすることに相当)を graphic_engine_type=0 (同、「互換モード(OpenGL)」にすることに相当)に変更したら、エミュレータ上のAndroidが起動するようになったのであった。

補足

システム設定が原因だと気付いたのは、上記「対処法が書かれたページ」においてNoxPlayerを管理者で起動して所定のソフトを動かすという解決策が掲載されていたのだが、管理者ではそのまま起動したのであった(私は普段のアカウントは非管理者として作っているので)。
ということは、起動しないのはユーザ別の設定が原因?と思って管理者のほうでもシステム設定を同様に変えて試したところ、やはり起動しなくなったのであった。

ちなみに、開発元にはこの対処法もぜひ載せてくれと連絡しておいてあります。



maraigue at 22:34コメント(0)Androidコンピュータ全般 

2017年12月13日

不具合が起きていたときのスクリーンショットを取っていなかったのですが。
AndroidのiWnnで、漢字変換ができなくなり(変換キーを押してもひらがなが出るだけ)候補も出なくなる、という事象が起きた。
Screenshot_20171213-214315
で、まずぐぐってみるのだが、最初に見つかったのは「別のIME入れたら?」ってアドバイス。ただ、自分の端末は残りメモリが少ないため、その対応は見送り。
その後調べていて見つかったのは、私の事象とはかなり違う状況ではあったのだが、「辞書ファイルが読み込めない?」ってもの。その可能性を考えて、以下の手順で「iWnnが保持しているデータを一度削除する」ということを行ったらまた使えるようになった。(※私の端末はHTC Desire EyeのAndroid6.0アップグレード適用済みのものです。端末やバージョンによっては方法が違うかもしれません。)
  1. Androidのアプリ一覧で、「設定」→「アプリ」を開く。
  2. その中にiWnn IMEが出ていればそのまま選ぶ。なければ、右上の「…」メニューから「システムの表示」を選ぶとiWnn IMEが選べるようになる。
  3. その中から「ストレージ」→「データを消去」を選ぶ。
なお、この操作を行うともちろんですが、設定は全部消えるのでご注意を。



maraigue at 22:20コメント(0)Android 

2017年04月30日

tootsuite/mastodon: A GNU Social-compatible microblogging server(公式、英語)

ポストTwitter? 急速に流行中「マストドン」とは - ITmedia NEWS

マストドン(Mastodon)が流行しだしていて、自分も試しに使ってみたのだが、あまり使わなくなりそうだと感じた。その理由をまとめておく。

なぜなのか

「誰でもインスタンス(サーバ)を立ち上げられる」こと以上の、Twitterに対する技術的メリットが見いだせないから。

あくまで「技術的」ってのが重要です。が、自分のTwitterの使い方を考えるとそこがどうしても重要になってきて。

もう少し詳しく言うと

  • インスタンスを跨いでアカウントをフォローできるとはいえ、それぞれのアカウント自体はインスタンスに紐づいているため、もしインスタンスを立ち上げているサーバが落ちたり維持不能(「金銭的に」や「管理者のモチベーションにより」なども含む。引き継ぎ先が見つかったなどの場合は除く)な状況になった場合、アカウントがあったこと自体が失われてしまう
    • 「マストドンに2か所以上登録して、投稿内容やフォロー先を連動させる」ということを行えば、上述したアカウントの存在性の分散化という対応もできるのかもしれないが(自分も最初はそのように使い始めた)、こういった利用は想定されていないと思われる(おおむね「自分が見たい・発信したいと思う内容に応じてインスタンスを選ぶ」というものになっている)。
    • しかも上記の理由により、マストドンは分散型とはいっても、負荷分散という観点では分散にならないどころか、むしろ特定のサーバに負荷が集中する。日本で早いうちにマストドンのインスタンスを立ち上げて有名になったところが、一気に負荷が上がってクラウドへの移行をすることになり、運営費もとてつもない金額になったという話もあったし。
    • ※こんな記事ありました→mstdn.jpにアカウントをとって「企業アカウント始めました」はダサい - shi3zの長文日記 そういう用途なら、個人運営のマストドンより大きいところで運営しているマストドンを使うのがいいよ、って話だけど、私としては個人だろうが大きいところだろうが本質的には変わらないと思っている。
  • 自分はTwitterを、その時に思ったことを発信する場であると同時に、発言・行動記録でもあると思っているので(つまり、パーマリンクを取って参照するなど。自分の発言に限っていえば、ログこそ自前で確保しているが)、その前提だとどうしても、存在性の意味でマストドンよりTwitterのほうが有利だと感じる。
    • よって、マストドンを使うにしても、いつ消えてもよい(Twitterだっていつ消えるかわからないわけだけど)一時的な発言にしか使いたくないと感じた。「チャットツールの、投稿がオープンなもの」みたいな具合で。

もし「マストドンがこうだったら自分は積極的に使ってた」というものは

上記と重複するが、アカウントの存在性を複数インスタンスに分散できるのなら、もっと積極的に使ってたし、自分もインスタンス立ち上げようかなと考えてた。具体的には、

  • 複数インスタンス間で、「このアカウントはこのアカウントと連動している」という情報を付けられる
  • 発言やフォロー関係を同期できる
    • それらの結果として、同一の内容の発言が複数のインスタンスに渡されるので、重複除去の機構も必要になる

という機能がほしいし、もっと言えば「全員がそのように使うことを想定した」ものになっていてほしかった(「どこのインスタンスに登録するかは重要でない」、ということが重要)。

ってところです。

てことで、マストドンは自分から積極的には使わなさそうですが、動向は追っていようと思います。

自分のマストドンアカウント

「≒」で結んだアカウントは、投稿内容を原則として連動させています(フォローは連動させていません)。



maraigue at 13:31コメント(0)トラックバック(0)Webサービス 

2017年03月25日

でじぽろ#13 & 札幌C++勉強会 - connpass

3月19日(日)に開催しました。
でじぽろが開催を検討していたところに、札幌C++勉強会も加わらせていただく形で開催しました。

でじぽろとは

  • 初心者に優しく
  • 他の勉強会への踏み台
  • 発表者が話したいことを話す
を三本の柱として、
  • 「IT技術に興味はあるけど、北海道の勉強会ってよくわかんないしハードルが高い」と感じてる方や、
  • 「Linuxには触ったことがあるけど、武器にできる言語がまだない」方や、
  • 「Linuxを触ったことがないけど、興味がある」
といったレベルの方に照準を合わせて行います。

でじぽろ - connpass

もっと初心者向けな勉強会が欲しくない?ということで立ち上げられた勉強会、と聞いていました。
ということ自体は話として知っていたのですが、普段札幌にいない身としては、雰囲気を実際に感じ取ることができたのはよかったなと思いました。やっぱり、勉強会に参加しないと勉強会の…もっといえばその地域のコミュニティに対する肌感覚って得られないなあというのは感じました。
初心者でもどんどん発表していこう、という雰囲気を作っているのだなというのが感じられました。

私の発表

これまでC++勉強会ではライブラリの活用等について話すことが多かった私ですが、C++はそれを話すとどうしても込み入った話になってしまうことが多い(計算時間とかメモリとか)ため、初心者向けというでじぽろのコンセプトも考慮し、今回は「C++で〜をしたければ標準ライブラリの〜を使おう」ということを紹介していくという内容にしました。
C++を初めて使う方には他の言語の比較になるように、またC++をすでに使っている方も「知らないライブラリに出会えるかもしれない」ということを目指した内容にしました。

C++11以降ではスマートポインタ・スレッド・関数オブジェクト関連など標準化されたライブラリも増えたので、このあたりもちゃんと紹介しました。併せて、「今の最新のコンパイラならC++11の機能はだいたい使えるよ」ということも強調しておきました。



maraigue at 18:14コメント(0)トラックバック(0)イベントプログラミング 

2017年02月12日

名古屋Ruby会議03

2月11日、地域Ruby会議の「名古屋Ruby会議03」が開催された。
私はスタッフとしてお手伝いさせていただいた。

私は名古屋に移ってきてから、Ruby東海に参加できるときは参加するようにしていた。
そんなことで、名古屋Ruby会議が開催されるとなれば出なければ!…と思っていたのだが、仕事の繁忙期にぶつかるため参加は不透明に。
ただその後、仕事の状況から参加できそうになったため参加することに。

いくつかピックアップしてレポートを。

全体として

今回の会場は、大須演芸場という、普段は落語等で利用している会場。そんなこともあって、発表者の表示はめくりで、めくりや幟のフォントも寄席文字。発表は座布団に正座。
また、発表内容も落語を意識した構成(マクラ・オチ)にしていた人がいた。

IMG_-giz2q8

小芝敏明さん「Ruby/Railsはじめてチームの力をメキメキつけた!」

氏が、すでに動いているチームに対して開発力を高めるための施策を行ったときの話。
行ったこととしては「issueを終わらせる」「ペア作業習慣を付ける」「デプロイ方法の統一(開発と本番)」「開発環境の統一」「ドキュメンテーション」。精神的に作業しやすいことも重要とのこと。ちなみに、そのチームはすでにテストやCIを利用していたこともあり、氏はこれは改善はしやすそうかな?と感じたとのこと。
結果、開発の進展が6倍程度よくなったとのこと。それなりに開発のための環境を整えていても、やり方次第でここまでよくできるんだな…と。

須藤功平さん「Apache ArrowのRubyバインディングをGObject Introspectionで

メモリ上の異なるデータフォーマットのデータをやり取りするためのシステム「Apache Arrow」をRubyから利用するためのライブラリ。
Rubyで用意したデータ(Rroonga)をPythonの機械学習ライブラリに与え、その結果をさらにRubyに戻して結果を表示…ということをデモで示されていた。

三浦英樹さん「mrubyのJIT」
奥村晃弘さん「Dynamic certificate internals with ngx_mruby」(参考:2016年10月のGMO HosCon 2016での発表資料
近藤宇智朗さん「未来のサーバ基盤へのHaconiwa/mrubyの関わり - コンテナ仮想化のその先へ

怒涛のmruby(組み込みなどを想定したRuby)3連続。
ここを聞いて思ったのは、mrubyは単にパフォーマンスに制約がある場合のためのものではなく、CRubyよりパフォーマンスを出すためにも利用できるということ。またHaconiwaにおいては、システムコールを利用することとの兼ね合いでCRubyよりもmrubyのほうが有利であるという理由でmrubyを利用しているとのことであった。

antimon2さん「RubyでTensorFlow

結論:「RubyでTensorFlowは辛い」………(´・ω・`)
バインディングが簡単に作れないライブラリは辛い。

クックパッド様(スポンサーLT)

クックパッドの悩みは、世界最大のRailsによるサービスでないかと言われるくらいに肥大化してしまったこと、とのこと。静的解析もまともにできないとのことで、デプロイは何とかできるようにしているが、今後は分割していきたいとのことだった。

大喜利

つまりはパネルディスカッションである。須藤さん・mzpさん・咳さんが参戦。
即答するのが難しい話題が増えてきたところに、会場から一人がさらに参戦させられることになり、結局竜之介さんが途中から参戦することに。
須藤さんとmzpさんで二度も意見が対立したのが個人的なハイライト。(collect派の須藤さん vs map派のmzpさん、「次にRuby会議をしたい場所」という質問に対して「青森出身だから東北でやりたい」という須藤さんに対して「名古屋から東北行きづらい」と言ったmzpさん)



maraigue at 02:40コメント(0)トラックバック(0)イベントプログラミング 

2017年01月05日

公開した。Ruby CGIで動くソフトです。

maraigue/lastupdatelist: タスクを最後に実施した日を記録/表示する

作った経緯

もともと、一人暮らしするようになって「いつ最後に●●●を洗濯/掃除したっけ…」ってのを覚えておくのが難しかったので、それを管理するためのソフトとして作ったのであった。
タスクを実施した直近2回の日時を記録しておくことができるようになっている。

このソフトの原型は1年近く前に作っていて、非公開で個人的に使っていたのだが、思い立ってこの年末年始休みを使って公開可能な形に持っていった。
公開するにあたって改良したのはこんなところ。

  • 認証に対応していなかった(非公開の当時はBASIC認証をかけていた)ため、Cookieを利用したパスワード認証を可能にした。RubyのCGIライブラリにはその辺をすべてラップしてくれる機能があるので(CGI::Session)、(楽とまではいかないけど)一から書くのに比べればだいぶ簡単に作れた。
  • 簡易Webサーバのスクリプトを追加し、別途Webサーバにアップしなくても動かせるようにした。
  • 言語の切り替えを可能にした。

同じような悩みをお持ちの方、使ってみていただけると幸いです。

Last Update List スクリーンショット



maraigue at 23:11コメント(0)トラックバック(0)プログラミング一般 

2016年12月10日

この記事は、Kawaz Advent Calendar 2016の12/7ぶんです。Kawazのサイト内で公開されている記事と同じものです。

担当の日を勘違いして2日遅刻した。

概要

今年に入って、sapporo.cppの企画においてopenFrameworksという、ゲーム向きなマルチプラットフォームフレームワークを使い始めたのですが、そんなこともあって最近は個人的な制作物にも使い始めるようになった。
ということで、openFrameworksを使っての感想とか気づいたことを紹介するとともに、最近作ったもの「スクロールバー」を紹介する。

経緯をもう少し詳しく

昨年のKawaz Advent CalendarにてオセロAIを作ったという話を書いたのだが、こういったものをGUIで動くようにすればもっと目を引くのでは?ということで作ったのであった。

こちらで、作成した「4目並べ」を公開しています(sapporo.cppとしての制作物です)。sapporocpp/4moku: 4目並べ

使ってみての感想

  • 基本的には、よくありそうなゲーム向けフレームワークという雰囲気。
  • 割と便利だと思ったもの
    • 最小限のフォントが組み込まれている。デバッグ表示したいときとかに便利。
    • 画面表示に限らず、ファイル読み込みとかスレッドといったものに対しても、プラットフォームに依存せずコードを書くためのラッパーが提供されている。ファイルを開くとかのダイアログも提供されていたのだが、非ASCII文字が正常に扱えない(もしかしたらWindowsの場合のみ?)という問題があって利用を断念した。
  • WindowsとAndroidのマルチプラットフォームを対応したかったのですが、そもそもAndroid向けサンプルプログラムのビルドを通すことすらできず断念しました…。なお開発環境としてWindowsのほかUbuntuで試してもだめでした。
    • 結局現在は、Windows向けアプリ制作のために使っています。Visual Studioから使うのがすごく楽なので。(公式サイト内に掲載の手順に従えば簡単に動く)
  • この手のフレームワークではよくあることではありますが、グローバルな状態管理(例:描画色を指定する関数ofSetColorはグローバルに機能する)が多い。
    • 最近罠にはまったのは、ofSetColorが読み込んだ画像の描画にも適用されるということ(例えば、ofSetColorで赤を指定したら、読み込んだ画像を描画する際に赤みがかかる。元の色で表示したければofSetColor(255)を事前に呼んでおかないとならない)。

作ったもの:スクロールバー

openFrameworks向けスクロールバー

openFrameworksにスクロールバーが欲しくなって作った、というもの。
まあWindows APIを呼んで生成してもよかったのだが、他に何かに使えるかもということで自分で作ってみた。作って公開している人が他に見当たらなさそうだったし(いるのかもしれないけど)。

ソースコード/サンプルプログラムはこちら。GitHub - maraigue/ScrollBar4OF

なぜこれを作ったのか

もともとは某音楽ゲームの譜面シミュレータを作りたかったのだが、その過程でスクロールバーがないと操作しにくい、ということで作成することにした。

じゃあ何で某音楽ゲームの譜面シミュレータを作りたかったかというと、「音楽ゲームの難易度表示が妥当か機械学習的に判断したい」という構想があって、それをするためには譜面が入力できないとどうしようもない、という事情があったのである。また、(自分が作ろうとしている件の音楽ゲームについて)そういうツールを作っている人もいなさそうなのでじゃあ作ろうかな、という気持ちもあった。
これはこれで、出来上がったらどこかで記事にします。

実装のポイント
  • 座標計算は工夫した。スクロールバーは縦と横の両方を出せるようにしたかったのだが、その両者でなるべくソースコードを共通化したかったのである。そのため、
    • 縦横のスクロールバーで共通のコードについては、座標計算に縦横という概念を用いず、「スクロールバーの長さ方向の座標」「スクロールバーの幅方向の座標」というものを導入した。
    • 上記の座標と、普通の(画面表示における)縦横の座標を変換するクラスを作り、それをテンプレートの引数に与えることで、縦スクロールバー・横スクロールバーを出せるようにした。
  • 境界条件(取りうる値の最大値/最小値を超過しないか、など)は結構気を使った。
  • スクロールバー内部の状態管理を行う変数が増えてしまうのは、仕方ないとはいえ面倒だった。例えば「現在ツマミをドラッグしている途中である」とか「マウスをクリックしてから押しっぱなしにしている」とか。

(割と)汎用的に作ったつもりなので、openFrameworksで必要な方はもちろん、他のプラットフォームに対する移植もしやすいほうじゃないか…と思っています。



maraigue at 01:58コメント(0)トラックバック(0) 
livedoor プロフィール

H. Hiro

  • ライブドアブログ