第56回愛媛マラソンを走ってきました

第56回愛媛マラソンを走ってきました。

f:id:miyohide:20180204145609j:plain

タイムは、グロスタイムで3:59:41、ネットタイムで3:55:42。自己ベストより7分ほど遅く、サブ4達成とは言えちょっと残念なレースとなりました。

気候としては最悪に近い状況。今季最強寒波が西日本を襲う中、普段は温暖な愛媛県もかなり冷え込み、スタート時点で気温1.5度、最高でも3度に届かず、常時5メートル程度の風が吹くというコンディション。寒いのが苦手な自分にとって悪条件が揃いましたが、それでもやるのがマラソンです。

そのため普段は半袖Tシャツにアームウォーマーという格好で走っていますが、この日に限っては寒さ対策で長袖シャツの下にアームウォーマーをつけるという感じで走りました。それでもちょっと寒い感じで、止まったら低体温症が待っていると半分恐怖を感じながら走りました。

5キロごとの結果は、以下の通り。例によって前半飛ばしすぎです。トイレに駆け込んだのをリカバリーしようとしたのが駄目だったのかなぁ。

距離 ラップタイム 備考
スタート〜5km 27:39 スタート地点の混雑は1kmすぎたあたりで抜けることができた。
5km〜10km 28:40 途中でトイレに駆け込む。
10km〜15km 26:17 順調に走れる。ちょっと早い感じ。
15km〜20km 26:06 ちょっと早い感じ。止まらない感じ。
20km〜25km 26:15 ちょっと早い感じ。止まらない感じ。
25km〜30km 26:38 ようやくいい感じに走れる。これからの坂が怖い。
30km〜35km 30:01 34キロ過ぎに急にハムストリングスに違和感。ちょっと歩く。
35km〜40km 32:46 走ったりジョグしたり。平田の坂を降りた後から徐々にスピードを上げる。
40km〜ゴール 11:20 声援とペースメーカーを見つけて元気が出る。

とりあえず、今シーズンはこれでおしまいです。これからどうやって次のシーズンまでトレーニングをつもうか色々と思案中です。が、全然整理できないでいます。何したらいいかよく分かっていない。まずは決められたペースを守って走るってことかなぁ。

第37回つくばマラソンを走ってきた

第37回つくばマラソン(42.195km)を走ってきました。

タイムは、3時間48分29秒(ネットタイム)。去年出した自己ベスト3時間52分15秒(ネットタイム)を約4分ほど更新する好成績。我ながら出来過ぎの結果です。

f:id:miyohide:20171126132722j:plain

5キロごとのラップタイムは、

距離 ラップタイム 感想
スタート - 5km 31:04 スタート時の混雑。あとちょっと右脇腹に痛みを感じていた。
5km - 10km 27:02 右脇腹の痛みも徐々に引いてきた
10km - 15km 27:26 目標とする5:30/kmのペースに慣れだす
15km - 20km 27:15 4時間のペースメーカーとともに走る。ちょっとだけおしゃべりして楽しむ。
20km - 25km 26:38 途中でテンション高めのランナーと出会う。なんだか元気が出た
25km - 30km 27:03 正念場。ちょっと痛みが出てくるが気のせいということにする。
30km - 35km 26:07 名物のおしるこは今年もスルー。ちょっともったいない。
35km - 40km 26:29 ここまで来たら後は耐える。
40km - ゴール 11:44 1キロが長い...ゴールって本当にあるのか?と思うほど。

という結果。前半抑えて後半勝負が上手く行った形です。こういうレースをずっとしたかった。

今回も多くのボランティアさんに助けてもらいました。いつもありがとうございます。

f:id:miyohide:20171126070259j:plain
朝早くから集合するボランティアさん達。ありがとうございます。

f:id:miyohide:20171126071044j:plain
ゆるキャラに励まされる

f:id:miyohide:20171125200000j:plain
個人的な勝負服。レースのときに必ず着ます...がそろそろ痛みが激しくなってきた。

『RubyでつくるRuby ゼロから学び直すプログラミング言語入門』を読み終わった

f:id:miyohide:20171107215659j:plain

RubyでつくるRuby ゼロから学び直すプログラミング言語入門』を読み終わりました。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

本書は、@tatsuosakurai さんが主催しているオンライン読書会で題材となった本。コードが出てきたら写経をしつつ、あれこれとみんなで意見を言いながら読んでいたので時間はかかりましたが、しっかりと中身を理解して読了することができました。みんなで読み進めると脱落しづらくなるので良いですね。

昔、『ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み』を読もうとしてそのページ数(600ページあまり)に挫折したのですが、『RubyでつくるRuby』は130ページあまり。このコンパクトさも魅力です。

これをきっかけに『ふつうのコンパイラをつくろう』も読めちゃうのでは?とちょっと思ったり。

概要

「はじめに」を読むと、本書は

Rubyの中で特に重要な言語機能だけを抽出した言語MinRubyを使ってMinRubyのインタプリタを作ります。

とのことで、これだけを読むとなんだか難しそうですが、1章から3章ぐらいまでは「変数とは?」とか「if文とは?」みたいなことから書いてあって非常に丁寧に書かれています。

4章の電卓の実装から徐々に難易度が上る感じですが、ときどき出てくる挿絵キャラクターの可愛さに癒やされながら読み進めることができました。

f:id:miyohide:20171107215742j:plain
私のお気に入りキャラクタであるミドリロボ(と勝手に名付けている)。実はこの子、本書を読み進めるにつれて劇的な変化が...

これから

インタプリタを作成することが130ページあまりの書籍で実装できた理由の一つに、第4章から出てくるライブラリ「minruby」があります。本書では「minruby」の内部実装については一切触れていませんでしたが、1ファイル170行で実装ですし実装を読んでみようかと思っています。

RubyWorld Conference 2017で喋ってきた

はじめに

2017年11月1日、2日で開催されたRubyWorld Conference 2017にて「組込みハードウェアモジュールへのmrubyアプリケーション適用試行」というタイトルで喋ってきました。

内容は、ESP-WROOM-32を使ってmrubyアプリを動かすというもの。「業務ですか?」と聞かれたのですが、日本OSS推進フォーラムアプリケーション部会で話題に上がったものを個人的に進めていたもので、基本は個人的趣味です。業務ではこういうことをしないので、ノウハウが全然なかったり時間が取れなかったりと悪戦苦闘しましたが、無事発表にまでたどり着けることができました。

資料は後日、RubyWorld Conferenceのサイトから公開されると思います。

動機

昨年RaspberryPiを使ってmrubyアプリを動かしたことを発表したのですが、PaspberryPiはCRubyが動くのでmrubyを使う必要性があまりなく、その点を多くの人に突っ込まれました。その点は分かっていたのですが、如何せんより小型なハードウェアに関しては全然ノウハウがないため、何から手を付けたら良いのか分からずどうしようかなと思っていました。

そんななか、日本OSS推進フォーラムアプリケーション部会でESP-WROOM-32の存在を知り、おもったよりも簡単そうだったので思い切ってチャレンジしてみることにしました。

苦労した点

発表の中では全然触れませんでしたが、苦労した点としては、

  • センサーのハンダ付け
    • え?そんなところ?って感じですが、そういうところからも苦労するんです。
    • だいたい一つのセンサーで1個はハンダ付けを失敗しています。部品が安くてよかった...
    • ハンダ付けは、中学生時代の授業でちょっとやったぐらいの経験値だったので、まぁしょうがないです。
  • C APIを使ったセンサーデータの取得
    • 久しぶりにC言語を触りました。コンパイルエラーがなかなか取れませんでした(^^ゞ
    • もっと取れなかったのはメモリリークで、よくアプリが落ちました。

です。もうすこし経験値を積まないとなかなか難しい分野だと思います。

RubyWorld Conferenceという場

RubyWorld Conferenceは毎年島根県松江市で開催されるRubyのカンファレンスです。ここ数年は11月に開催されています。島根県松江市の支援のもと開催されているため他のRubyのカンファレンスとは趣が違い、県知事や市長の挨拶があったり、発表内容もよりビジネス向けの内容だったりと面白いです。

f:id:miyohide:20171102092417j:plain
橋にずらっと並べられた幟

今年のRubyWorld Conferenceは『mrubyと教育がテーマなのかな?』と思い、『ちょっと自分には関係ないかな?』って思ったのですが、フタを開けるとすべてが面白く、そのたびに気付きを得られました。

個人的メモ

全部ではないですが、個人的メモです。

東京30K秋大会を走ってきた

毎年10月に開催されている東京30K秋大会に今年も参加し30kmを走ってきました。

f:id:miyohide:20171007223625j:plain

自身の結果

タイムは2:38:15。自己ベストでした。昨日の夜から雨が降り続き、レース中は小雨から曇りになったとは言え、足元が悪い中自己ベストを出せたのは出来過ぎ。ただ、ラスト5kmはかなりしんどかったので、今月末に走る横浜マラソンに対しては若干不安を覚える結果となりました。

5kmごとのラップタイムは次の通り。

距離 ラップ 備考
0km - 5km 26:27 ちょっと早い感じ
5km - 10km 28:27 途中でトイレに入る
10km - 15km 26:41 たまたま近くにいたペースメーカーについていく。風が強く吹いていた
15km - 20km 25:01 風向きが変わったので、ペースを上げて元々のペースメーカーに追いつくようにする
20km - 25km 25:38 22km地点でペースメーカーに追いつく。
25km - 30km 26:01 何とかペースを維持したままゴール

ペース上げ下げが激しいですが、よくもってくれました。

大会の特徴

この大会の特徴は、細かいペース設定ごとにペースメーカーが付いて2分間間隔でのウェーブスタート制という点。その日の体調に合わせてスタート位置を変えられるので、自己確認の場としてかなりいい大会です。

そのためか、参加者もかなり多い大会です。特にトイレの数は全然足りないので、早め早めの行動を心がけたほうが良いと思います。

mruby-mrbgem-templateを使ってmrbgemをつくる方法

はじめに

唐突に mrbgem を作りたくなる時、ありますよね。そんな時、なにかいい方法無いかなと思ったら @matsumotory さんの mruby-mrbgem-template というものが非常に便利だったので備忘録がてら使い方を記します。

環境

  • OS X El Capitan
  • mruby 1.3.0
  • mruby-mrbgem-template commit cb5c0a3887d(2017/10/4時点の最新バージョン)

使い方

導入

mruby を取得する

おそらく master でもよいのですが、バージョンを明確にしたかったので mruby 1.3.0 を取得して build することにしました。

$ wget https://github.com/mruby/mruby/archive/1.3.0.zip
$ mv 1.3.0.zip mruby-1.3.0.zip
$ unzip mruby-1.3.0.zip
$ cd mruby-1.3.0
mruby-mrbgem-template のインストール

mruby-1.3.0/build_config.rb を編集し、mruby-mrbgem-template を使用する gem として追加します。具体的には次のように編集します。

MRuby::Build.new do |conf|
  # load specific toolchain settings

  # Gets set by the VS command prompts.
  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
    toolchain :visualcpp
  else
    toolchain :gcc
  end

  enable_debug

  # Use mrbgems
  # conf.gem 'examples/mrbgems/ruby_extension_example'
  # conf.gem 'examples/mrbgems/c_extension_example' do |g|
  #   g.cc.flags << '-g' # append cflags in this gem
  # end
  # conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
  # conf.gem :core => 'mruby-eval'
  # conf.gem :mgem => 'mruby-io'
  # conf.gem :github => 'iij/mruby-io'
  # conf.gem :git => 'git@github.com:iij/mruby-io.git', :branch => 'master', :options => '-v'
  # ↓↓↓ 追加
  conf.gem github: 'matsumoto-r/mruby-mrbgem-template'
  conf.gem '../mruby-nmea'
  # include the default GEMs
  # (以下省略)
mruby の build

mruby を build します。単純に rake コマンドを実行するだけです。

$ rake
create.rb の作成

mruby-1.3.0 の直下に create.rb を作成します。中身は、次の通り。paramsの各値を編集します。

params = {
  :mrbgem_name    => 'mruby-example',   # mrbgemの名前
  :license        => 'MIT',             # ライセンス
  :github_user    => 'miyohide',  # GitHubのユーザ名
  :mrbgem_prefix  => '..',   # mrbgemのディレクトリのパス
  :class_name     => 'Example',  # 生成するクラス名
  :author         => 'miyohide',  # 作者名
}

c = MrbgemTemplate.new params
c.create
雛形作成

これでmrbgemの雛形をつくる準備が整ったので、

$ ./bin/mruby create.rb

を実行すると、mrbgemの雛形が作られます。上記のようにcreate.rbを設定すると、

[~/work/mruby-1.3.0]$ ./bin/mruby create.rb
Generate all files of mruby-example
create dir : ../mruby-example
create dir : ../mruby-example/src
create file: ../mruby-example/src/mrb_nmea.c
create file: ../mruby-example/src/mrb_nmea.h
create dir : ../mruby-example/mrblib
create file: ../mruby-example/mrblib/mrb_nmea.rb
create dir : ../mruby-example/test
create file: ../mruby-example/test/mrb_nmea.rb
create file: ../mruby-example/mrbgem.rake
create file: ../mruby-example/Rakefile
add gitignore entry: ../mruby-example/.gitignore
create file: ../mruby-example/mruby-example.gem
create file: ../mruby-example/.travis.yml
create file: ../mruby-example/.travis_build_config.rb
create file: ../mruby-example/README.md
create file: ../mruby-example/LICENSE

  > create miyohide/mruby-example repository on github.
  > turn on Travis CI https://travis-ci.org/profile of miyohide/mruby-example repository.
  > edit your mruby-example code, then run the following command:

  cd ../mruby-example
  git init
  git add .
  git commit -m "first commit"
  git remote add origin git@github.com:miyohide/mruby-example.git
  git push -u origin master

  > finally, pull-request mruby-example.gem to mgem-list https://github.com/bovi/mgem-list

[~/work/mruby-1.3.0]$

という実行結果が出力され、mrbgem_prefix + / + mrbgem_name なディレクトリが作成されます。

あとは実装とテストを書くだけ

あとは、mrbgem_nameで指定したディレクトリに移動して、CやRubyで実装を書くだけです。mrblibディレクトリやlibディレクトリにそれぞれRubyとCでの実装を書き、testにテストを書くみたいです。

また、作成した直後でも rake test を実行することでテストを動かすことができます。

[~/work/mruby-example]$ rake test
git clone --depth=1 git://github.com/mruby/mruby.git
Cloning into 'mruby'...
(省略)
             mruby-example
             mruby-bin-mrbc - mruby compiler executable
             mruby-test - mruby test
================================================

>>> Test host <<<
(省略)
Total: 959
   OK: 959
   KO: 0
Crash: 0
 Time: 0.1 seconds
[~/work/mruby-example]$

RubyKaigi 2017にてLT発表をしてきました

はじめに

RubyKaigi 2017にてLT発表をしてきました。このエントリーは発表の概要とその他雑多な感想を記します。

f:id:miyohide:20170921213344j:plain
タイトルをTypoしているのに全然気が付かないぐらいに緊張していた...

LTの内容

LTの内容として、RubyistMagazine、通称るびまの過去資産であるhikiMarkdownに変換する話をしました。技術的にはそんなに複雑なものではないのですが、色々なパターンが有り地味に大変でした。

今のところ、最新号までのMarkdown化までは終わり、jekyll serverで起動すればお手元の環境でるびまが動きます。

反響

LT発表中に「5,000m」というところを「5,000km」と言ってしまったことで爆笑をかっさらい、その後の懇親会等々でも色々お声がけ頂きました。狙ったわけではないんですが、いいネタになったようで怪我の功名といったところでしょうか。

また、「るびま、手伝いましょうか?何か手伝えることがありますか?」って多くの方々からお声がけを頂いたのですが、さっと出せるものがなく、なんとも勿体無いことをしてしまいました。ざっと上げてみると、

思えばたくさんあります。が、これら全部が全部私の頭のなかにあるだけなので、どこかで棚卸しをしないといけない。まぁ、一歩一歩やっていきます。

RubyKaigiに行く意味

毎年RubyKaigiに行っているのですが、去年から首都圏以外で開催されるようになってから行く目的をしっかり持つようになりました。スライドは大方公開されますしセッション動画もすぐ公開されるRubyKaigiにおいて、現地に出向く意味です。え?5,000km走るんでしょってことではなくてですよ。

そのためにCFPを出したり(出すためのネタを作ったり)、知らない人と話をするというのを今回の目標としました。自分の中では結構上手く出来た感じ。ただ、新しい課題も見えてきていて、

  • Rubyだけじゃなく、もっと色々な言語に触れておくべき。Goとか。多分一つの言語・フレームワークで戦える時代ではない。
  • 実戦大事。実際に自分がやったことの話が一番説得力ある。
  • 英語はまぁ、長年の課題ですね。はい。

来年は5月末に仙台で行われると言うので、それまで何らかの結果を出したいです。