来年リリースする bigdecimal 3.2 はどうしようかな

おはようございます。mrkn です。2021年12月23日の朝です。ここでタイマーをセット。

この記事は Calendar for Ruby | Advent Calendar 2021 - Qiita の24日目の記事です。昨日は @tascript さんでした。

bigdecimal 3.1.1 をリリースした

みなさんは bigdecimal というライブラリをご存知でしょうか。このライブラリは任意の桁数の10進小数を正確に表現できる多倍長浮動小数点数を提供する標準添付ライブラリです。多くの環境で2進法による内部表現*1を採用する Float と違い、私たちが普段使ってる10進法での小数点付き演算で誤差が発生しないので、お金の計算をするときによく利用されていると思います。RDB の中では NUMBER 型で表現される数値を Ruby の世界に持ってくるときの表現としても利用されたりします。さらに、Float よりも細かい精度で計算したいときにも使われることがあります *2

今朝、その bigdecimal の新バージョンである 3.1.1 をリリースしました。bigdecimalRuby の新しいバージョンがリリースされるタイミングに合わせて、同じメジャーバージョンとマイナーバージョンを持つ新バージョンをリリースすることにしています。つまり、毎年12月の後半のどこかで新バージョンがリリースされるのです。今回は Ruby 3.1 のリリースに合わせたので bigdecimal 3.1.1 がリリースされました。3.1.0 は昨日リリースされて、その直後にバグが見つかり、一晩で死にました。

bigdecimal 3.1.1 の主な変更点は以下の通りです。

  • BigDecimal#scale で小数点以下の桁数を取得できるようになった
  • BigDecimal#precision_scale で全体の桁数と小数点以下の桁数を同時に取得できるようになった
  • BigDecimal#quo で結果の桁数を指定できるようになった
  • BigDecimal#div の第1引数が Float のときに結果の桁数を指定できるようになった
  • Kernel#BigDecimalto_d による変換速度が向上した
  • いくつかのバグ修正

bigdecimal 3.2 をどうするか

bigdecimal 3.2 でも、手付かずの issue をいくつかやっつけたいです。現時点では次の issue が上がっています。

あと、issue にしていませんが、ずっと昔からこれはやった方が良いんだろうなと考えているものがいくつかあります。

  • 長い桁数の掛け算を Karatsuba と Toom3 で計算するようにして高速化する
  • 掛け算が速くなったら、割り算を逆数の積で計算するようにして高速化する
  • 円周率の計算アルゴリズムを Chudnovsky の公式に置き換える (現在のアルゴリズムは Machin の公式)

まぁ、これら3つは報告されているバグや機能提案を解決してからですね。

まとめ

bigdecimal 3.1.1 を紹介し、来年リリース予定の bigdecimal 3.2 についての展望を簡単に述べました。今後も bigdecimal をよろしくお願いします。バグを見つけたら CRuby の Redmine ではなく ruby/bigdecimal の GitHub Issue ページで報告してください。

*1:IEEE754で規定されている表現である場合が多いです。

*2:本当はmpfrライブラリのような内部表現が2進法の多倍長浮動小数点数を使う方が高速に計算できますが、Rubyに標準で付いてくる利便性から bigdecimal を利用する場合が多いのかもしれません

カメラの話

おはようございます。mrkn です。2021年12月23日の朝です。ここでタイマーをセット。

この記事は やんちゃクラブリスナー Advent Calendar 2021 - Adventar の23日目の記事です。昨日は えむ。 さんでした。

センサーのゴミ

私とやんちゃクラブの関係は次のツイートから始まりました。

センサーのゴミとは動画に黒く写ってるピンクの丸で囲んだようなやつです。

f:id:mrkn:20211223100844p:plain
センサーのゴミ

カメラの沼にハマると、動画を見ただけでどこにゴミがついてるか分かるようになります。この記事では、私がどのような経緯でカメラ沼にハマってしまったかをお伝えします。また、最後に私が考える沼にハマらずにカメラを買う方法もお伝えします。

カメラ沼へのハマり方

私が本格的にデジタルカメラを使うようになったのは2018年にα7IIIを買ってからでした。それ以前にも、2014年にスペインへ行く用事があったとき、せっかく長期間海外に出るんだからとタイミングよく発売されたα6000というカメラを買っていました。SELP1650という電動ズームレンズ付きのキットを書いました。でも、思うような写真が撮れず、撮った写真の取り回しも iPhone の方が便利だったのであまり使っていなかったのです。この流れを変えたきっかけが、単焦点レンズを買ったことでした。

2018年、子供が3歳になる数ヶ月前に急にα6000の存在を思い出してふたたび使い出したのですが、2014年当時と違ってこの時は単焦点レンズという写りが良いレンズが存在することを知っていました。そこでSEL50F18という3万円くらいで買える単焦点レンズを買って使ってみたところ、想像以上に綺麗な写真が撮れてα6000の実力を見直しました。こんなにすごいカメラを持っていたのに、いままでは SELP1650 をちゃんと使えてなくてダメな写真しか撮れなかったんだと気づいたのです *1

その後、Rentio で SEL24105G をレンタルして動物園で動物や子供を撮影したことで、良いレンズの使いやすさを知ってしまいました。このレンズはα6000よりセンサーが大きいフルサイズに対応しているので、フルサイズのカメラも使ってみたいなと思い α7III を書いました。そして、RubyKaigi 2018 にα7III、TAMRON の 28-70、レンタル中だった SEL24105G を持って行って使っているうちに写真を撮る楽しさと、カメラやレンズをいじる楽しさに少しずつ気づいていきます。

大口径単焦点レンズ

α7III を買って RubyKaigi で使ってカメラの楽しさに気づいていったわけですが、いま思うとこの時はまだ沼の入り口にも到達していません。次のステップは、大口径単焦点レンズで撮れる写真の違いに気づいたことです。大口径レンズとは、絞りを最も開いたときのF値が小さいレンズのことで、単焦点レンズではF値が1.8よりも小さいレンズを指して大口径レンズと呼ばれているような気がします。ズームレンズでは焦点距離の全域でF2.8通しのレンズは大口径と呼ぶと思います。

2018年の夏頃に、α7III の購入と同時に予約していた SEL50F14Z が届きました。このレンズで恵比寿ガーデンプレイスの人工芝の上を駆け回る家族を撮影したことで、開放F値が小さいレンズによる綺麗なボケが気に入ってしまいます。

マニュアルフォーカスレンズ

SEL50F14Z で大口径単焦点レンズのボケに気づいた私は、次に NOKTON 40mm F1.2 というレンズに手を出します。これはコシナが作っているマニュアルフォーカスレンズです。マニュアルフォーカスレンズなので、シャッターボタンを押す前に自分でフォーカスリングを回してピントを合わせる必要があるので、写真を撮る時の操作が増えてしまいます。とても不便なもののように聞こえますが、このレンズは当時 SONY のカメラでマウントアダプターを使わずに装着できるレンズとしては、唯一の F1.2 のレンズだったと思います。F1.2 なので SEL50F14Z より開放 F 値が小さくて、ボケが大きくなります。試しに使ってみて、使いにくかったら売ればいいかなと思って買ってみたのです。

するとどうでしょう。まったく不便に感じないし、写りも素晴らしいのです。不便どころか、フォーカスリングを回す感触がすごく良くて、必要ないのにくるくる回してしまう。これはやばいと思いました。しかも、使っているうちにマニュアルフォーカスでの撮影に慣れていき、オートフォーカスよりも狙った位置にピントを合わせやすくなっていきました。SEL50F14Z の写りはとても気に入っていたのですが、700g 以上もある重たいレンズだったのでどんどん使わなくなっていき、最終的には手放してしまいました。

Mマウントレンズ

マニュアルフォーカスの操作に慣れてしまった私は、とうとう禁断の領域に踏み入れます。Mマウントレンズと近接撮影用リングがついたマウントアダプターを買ってしまいました。最初に買ったMマウントレンズは NOKTON classic 35mm F1.4 VM だったと思います。以降、新たに手にするレンズはほぼ全て M マウントレンズか古い方の L マウントレンズになっていきました。

オールドレンズ

Mマウントレンズに手を出してしまったことが沼の入り口です。最初のMマウントレンズの後ろには深くて広い沼が広がっていました。オールドレンズと言います。最初に買ったオールドレンズは JUPITER-3 5cm F1.5 で、その数ヶ月後には Summitar 5cm F2 も買ってました。あとはもう記憶にありません。

Leica M9

手元に M マウントレンズが増えてくると、やっぱり M 型のライカが欲しくなるんです。というわけで、初めて手にした M 型ライカLeica M9 でした。CCD センサーのカメラも使ってみたかったので一石二鳥でした。

沼は深い

沼の底にはまだ辿り着けていません。幸い、動画を撮影する機会は1年に2-3度程度しか発生しないため動画沼にはハマらずに済んでいますが、オールドレンズの沼は底なしっぽいです。77Lの防湿庫が足りなくなりました。

沼にハマらないためには

このような沼にハマらないためにはどうしたら良いでしょうか。私は既にハマってしまっているので正解は出せませんが、おそらくこうしておけば良かったのではないか?という案は持っています。それは、レンズ交換ができないコンパクトデジタルカメラ、それも万能なコンパクトデジタルカメラを最初に1台だけ買ってしまうことです。

そのために私がお勧めするのは Leica Q2 です。このカメラはとても高く、新品は72万円くらいします。しかし、沼にハマってしまうとボディやらレンズやらで72万円なんて数年で消費してしまうでしょう。最初から Leica Q2 を所有していれば、日常でよく使用する焦点距離に関しては Leica Q2 がカバーしている範囲に収まるので、よっぽどのことがない限り不満は発生せず他のカメラやレンズに気移りすることはないと思います。そして、ここでは詳しくは説明しませんが Leica Q2 はとてもコスパの良いカメラでもあります。

Leica Q2 で撮影できない写真のうち日常でよく撮りたくなるとしたら28mmよりも広い写真ではないかと思います。28mmより広い写真も撮りたいなら、iPhone 13 Pro や Xperia PRO-I など、より広角のレンズを持つ良いスマートフォンを買うと良いです。

ほかに、等倍〜1/2倍の程度のマクロ写真や75mm よりも望遠の写真を Leica Q2 より高画質に撮影したくなることがあるかもしれません。マクロ写真に関してはいまは iPhone 13 Pro という良いマクロカメラがありますね。超望遠に関しては、必要なときに COOLPIX P1000 みたいなカメラを Rentio などでレンタルするのが良いと思います。

っと、タイマーだ。じゃ、こんなところで。

ばいばい

*1:GuruShots とかみてるとこのレンズで良い写真を撮ってる人がいるので、技術を持ってる人なら使いこなせるのだと思います

Rubyist近況 Advent Calendar 2021

この記事は Rubyist近況 Advent Calendar 2021 - Advetar の12月17日の記事です。前日は kei-s さんでした。

東京に出て来てから10年たった

2021年11月27日で東京に引っ越してきてから10年が経過した。10年前に東京に出てきた理由は前々職に入社するためだった。このときの引っ越しは、生まれて初めての北海道外への引っ越しだった*1。2021年は初めて RubyConf に参加した年でもある。そして、この RubyConf への参加が私の初海外でもある。いま思うと、2021年は私にとっては起きな転機となる年だったと思う。

はたして、2021年は10年後の2031年に「2021年は転機となる年だったね」と言えるような年だったかな?どうかな?

現職に入社してもうすぐ5年がたつ

2022年2月1日で現職に入社して5年が経過する。つまり、現時点で入社から4年10ヶ月が経過してている。これは私にとって最長勤続年月である。2番目に長いのは4年4ヶ月いた前々職である。

現職では入社当初から一貫してOSSの開発をし続けている。1年目は PyCall をやった。PyCall は1年である程度基礎ができたので、2年目は MXNetRuby バインディングの開発をやり始めた。しかし「Ruby では深層学習より先にやるべきことがある」と考え直し、2016年頃から目をつけていた Apache Arrow にピボットすることにした。それで2年目の途中から須藤さんのチームに参加して Apache Arrow C++ や Red Arrow の開発に取り組んだ。3年目は Apache Arrow の開発と Charty の統計的可視化機能の開発の2つに注力し、4年目は主に Charty の統計的可視化機能の開発を継続した。

このように現職では1年ごとに注力するテーマを決めて Ruby のデータ解析対応に取り組み、ときどき思いつきで新しいことをスポットでやったりしていた。たとえば 2019年には UnicodePlots.jl を見つけて、これを Ruby に移植したいと思って unicode_plot.rb を作ったりしていた。PyCall や IRuby の改善・バグフィックスなども、気づいた時に少しずつ対応するやり方で続けていた。

で、あと約2ヶ月で5年目である。「5年目もこのやり方で Ruby のデータ解析対応業を続けるとしたら何をテーマにするんだろう?」とか、「1つの会社に5年以上在籍したことないんだけど5年以上いても大丈夫なんだろうか?」とか、「そろそろ Julia で仕事がしたいな」とか、いろんなことを考えている。

子供が4月から小学生

子供が4月から小学校に入学する。お受験はしなかったので公立の小学校に入学する。実はお受験をするつもりで、保育園内でやってる受験対策の課外授業をやらせていたのだが、予想外の理由で受験に失敗した。その理由は「子供がランドセルの色を決めていた」こと。受験して行く小学校では好きな色のランドセルは使えないからね・・・

カメラについて

主に子供を撮影するために2018年に α7III を買ったのがきっかけで沼にはまり、いまはもう完全に沼の住人である。

最新技術を駆使したバキバキに映るすごいレンズより、味わい深い写りの古いマニュアルフォーカスレンズの方が好きだし、超高速 AF で連写するよりレンジファインダーでゆっくりフォーカスを合わせて撮影する方が好き。特にコシナのレンズのヘリコイドの感触が好き。これは、おそらく、機械を操作している感覚に喜びを感じているのだと思う。そのおかげで自分に一番合うカメラが M 型 Leica になってしまったのが運の尽きである。お金が足りない。

最近は、77Lサイズの防湿庫に納まらない数のカメラとレンズを所有するまでになってしまったので、そろそろ防湿庫のサイズを大きくしたいなと考えている。

まとめ

私の近況を思いつくままに書いてみた。2022年に自分が何をやっているのか今から楽しみだ。

明日の近況は yancya さんです。

*1:ちなみに、北海道外に転職することにした理由は2つだった。ひとつは、Rubyの仕事がやりたかったこと。もうひとつは、寒さと雪が嫌いでいいかげん北海道を出たかったこと。2つとも叶ったので良い判断だったと思う。雪が降る限り北海道に戻ることはないだろう。

Konica C35 FD の露出計を修理した

古いフィルムカメラに興味があって、CONTAX TVS と Konica C35 FD を最近手に入れた。

CONTAX TVS の方は、液晶の液漏れが無い状態の良いものを運良く手に入れることができ、気に入って毎日持ち歩いている。

Konica C35 FD は、ファインダーは綺麗で二重像もクッキリしているのだが、露出計が動いてなかった。電池を入れると光量に関係なく必ずF16になってしまう。Konica C35 FD の光センサーは CdS フォトレジスタで、光が当たらないと抵抗値が大きく、光量が増えるにつれて抵抗値が小さくなる。光量に関係なくF16になってしまうのは、CdSが劣化して常に抵抗値が小さくなってしまっているのだろう。CdS を交換したら使えるかもしれないので、修理することにした。

CDS はここについている。

分解した状態の写真を撮り忘れてしまった。レンズ名が記載されてるプレートを、外すためにこのカニ目レンチを使った。

これは、取り外したCdS

取り付けたCdSはこのタイプのもの。

CdSを取り替えた結果、光の量に応じて露出計の針が動くようになった。明日、明るい時に外で動きを確認してみて、きちんと動いてそうだったらモルトを張り替えてフィルムを入れて使い始めよう。

Photos taken in Rails Developer Meetup 2019

先日のRails Developer Meetup 2019 で撮影した白黒写真たちです。CC-BY-SA でご自由にお使いください。

photos.app.goo.gl

Rails Developer Meetup 2019にはスピーカーとして参加しました。1日目は15:20から出番だったので、それまでは Speee のコーヒーコーナー付近で発表準備をしていいました。1日目の写真は、その付近の様子を発表準備の合間に撮影したものです。2日目は自分の行動範囲の周辺で適宜撮影しました。

2日間とも白黒写真のみを撮ることに決め、白黒で撮ると良さそうだなと思った絵を残そうと意識しました (DHH 以外)。とても面白い体験だったので来月の RubyKaigi でも同じことをやりたいと思っています・・・・が、RubyKaigi では2日目と3日目に出番があってそれぞれ準備が必要なので写真を撮ってる余裕はないかもしれない。

RubyKaigi 2018 で撮影した写真

RubyKaigi 2018 で撮影した写真をやっと現像できたので Google Photos にアップロードしました。 CC-BY-SA でご自由にお使いください。

photos.app.goo.gl

photos.app.goo.gl

photos.app.goo.gl

photos.app.goo.gl

photos.app.goo.gl