自作クラスのインスタンスをtallyで集計する
独自に作ったクラスを何らかの基準で「同じもの」と判断させtallyメソッドで集計したい。
ここではDrinkクラスを定義しname(商品名)とprice(値段)がそれぞれ等しいなら「同じ(同値)」だとみなしてドリンクが何本あるか集計したいとする。
やりたいことは以下の通り
Array.new(5) { Drink.new('リンゴジュース', 150) }.tally #=> {<<リンゴジュース>>=>5}
普通にクラスを定義してtallyメソッドを読んでも「同じ」とは判断してくれないのでうまくいかない。
class Drink attr_reader :name, :price def initialize(name, price) @name = name @price = price end def inspect "<<#{name}>>" end end Array.new(5) { Drink.new('リンゴジュース', 150) }.tally # => { # => <<リンゴジュース>>=>1, # => <<リンゴジュース>>=>1, # => <<リンゴジュース>>=>1, # => <<リンゴジュース>>=>1, # => <<リンゴジュース>>=>1, # => <<リンゴジュース>>=>1 # => }
ちなみに Array.new(5, Drink(..) }
みたいな呼び出しをすると集計はされるがオブジェクトIDが等しくなるので本意ではないとします。
tallyはeql?メソッドやhashメソッドを用いて「同じ」と判定している。 なのでこれらのメソッドを適切にオーバーライドする。今回は商品名(name)が等しい かつ 値段が等しいものは「同じ」ものとして集計したいので以下のようなコードになる。
class Drink attr_reader :name, :price def initialize(name, price) @name = name @price = price end private def inspect "<<#{name}>>" end def eql?(other) name == other.name && price == other.price end def hash [price, name].hash end end Array.new(5) { Drink.new('リンゴジュース', 150) }.tally #=> {<<リンゴジュース>>=>5}
めでたし。めでたし。
参考
- hashのドキュメント。hash値を定めるときの注意点が書いてあります。
- eql?のドキュメント
- tallyのドキュメント
備考
仲間とモブプロしているときに思いついてあれこれしてたらうまくいきました。いろいろアドバイスをくれた仲間に感謝します。
2024年2月のふりかえり。
記憶が行方不明。
おしごと
1月から新しいプロジェクトにジョインした。
1ヶ月以上経って少しずつ慣れてきた。「顧客が本当に欲しかったもの」とはよくいうがそこをすり合わせる作業で色々発見があった月だった。仕様を読み込んでも本当でこれでいいのか?みたいな疑念があったらヒアリングしたり、その上でプロトタイプ作って確認取ったりして最後には「これはいらないですね。」となって無駄に作り込んでしまうのを防げたのは大きかったかなと思う。
日常
- 節分で豆食べた
- 調子に乗って豆1kg買ったら多すぎて3月になっても食べ続けてる
- 縄跳びしてる
- おばあちゃんに弟子入り
- 旅行行った
- 本読んだ
- 風邪ひいた
他にもなんか色々あった気はするんだけど、記録に残ってなくて覚えてない。
おばあちゃんに弟子入り
先月公園でいつも縄跳びを飛んでいるおばあちゃんの話をしたが、「なんでそんなに飛べるんですか?」と聞いたところボクシングをやってるらしい。ということで入門した。週1、2回と緩い参加だけど、運動不足解消のために頑張る。
本読んだ
技術書以外だと
- NHKの『100分de名著 リチャード・ローティ『偶然性・アイロニー・連帯』』
- 『レシピを見ないで作れるようになりましょう。』
ローティの本の解説は現在のSNS疲れなんかにも焦点が上がっていて面白かった。
学習
- RustCoder ―― AtCoder と Rust で始める競技プログラミング入門
- 『論理と集合から始める数学の基礎』
- 『プログラミング意味論の基礎』
- 『型システム入門(TaPL)』3章復習
- カリーハワード対応(https://www.youtube.com/@kiharalabmathlogic3995)
こう見ると数学的な分野に偏ってるなぁ。(先月も言ってた気がする) 1月に続いてRust、論理学、集合論の学習は続けている。その甲斐あってか、集合論と論理学が結びついてきて、また論理学とラムダ計算が結びついてきていい感じの1ヶ月だったと思う。
3月は結城先生の群論の教科書も勉強する予定なのでなかなか忙しそう。 AtCoderに関しては不調でA, Bの2完しかできないコンテストが増えてきた。もう一度基礎から見直そうと思う。
最近また英語を勉強する必要があるなと思う頻度が増えてきて。ちょっと長期的に英語の学習をするかもしれない。
3月に向けて
2月の記憶がないので3月はちゃんと記録取りたい。
all? と any? の変換と論理学
昔なんかの書籍でArray#all?
で書いたコードをany?に変換しましょう(逆だったかも)というのがあって結構苦手だったんだけど、これだたの論理式では?と思い直したら楽になったので記しておく。
最近(数理)論理学の学び直しをしてるのにプログラミングと全然結びついてなかったですね。反省。
本題
配列の要素が全て偶数か?偶数ならtrue1つでも偶数でないものがあればfalseを返すという単純なお題。
ary1 = [0, 2, 4, 6, 8, 10] ary1.all?(&:even?) => true ary2 = [0, 1, 4, 6, 8, 10] ary2.all?(&:even?) => false
でこれをany?に変換する。(そんな需要はあるのか?というのは置いていこう!)
!ary1.any?(&:odd?) => true !ary2.any?(&:odd?) => false
構造がわかるようにちょっと同じ意味のコードに変換しておく。
!ary1.any? { |n| !n.even? } => true !ary2.any? { |n| !n.even? } => true
論理
all?
は「すべての(任意の)」という全称量化子()に対応する。またany?
は「ある(~が存在する)」という存在量化子()に対応する。
「配列内の要素が偶数である」を述語で表す。
また命題が同値であることをで表す。
で、「配列内の全ての要素が偶数である」という命題は以下の式に変換できる 配列内の要素の集合をAとすると
二重否定を使って表すと
あとは全称命題の否定は否定の存在命題になることをうまく使って
となる。
最後の式の形が !ary1.any? { |n| !n.even? }
という形になってるので偶数の否定を奇数に変換したり見栄えを整えると最初のコードになる。
なにやら難しい論理記号の仕組みを伝えたいのではなくて、条件式を操作するのは論理式と対応づけられているよということが自分の中の再発見だった(当たり前)というのを伝えたかった。
2024年1月のふりかえり。
2023年の年末を振り返ったときに、やっぱり月ごとのふりかえりがあると振り返りやすいと気づいたため、なんとか記録として残しておきたい。振り返るためのふりかえり。
1月は運動の習慣化と格闘していた1ヶ月だったように思う。
おしごと
1月から新しいプロジェクトにジョインした。自分の中では2プロジェクト目ということでやっと受託の会社に勤めている感が出てきたのかもしれない。プロジェクト間を比較できるようになったので、いい意味でも悪い意味でも安易な比較に気をつけていきたい気持ちがある。何かを基準にすると当然いいところや悪いところが出てくるがそれが改善可能なのかどうか、建設的な比較なのかどうか、そう言ったところを意識しながら改善していけたら良いなぁと思う。
未知なるコードを読むスピードは明らかに上がっていて、前プロジェクトで苦労した甲斐があったなぁと感じている。また、Railsの規約に助けられている部分も大きいと思う。「こういう場合はここにこんなファイルがあるはず!」とか「DBの制約はこれだからバリデーションはこうだな」みたいな予測が立てやすく、これが理解のしやすさに繋がっている。
あとは確実に信頼されるような結果を残していきたい。
日常
- 年始は奈良の実家に帰省
- 正月に今年こそは恒常的な運動習慣を!と意気込む
- 全国女子駅伝の応援にいった
- ZAZEN BOYS の新譜聴いてた
- フィヨルドブートキャンプの輪読会EXPOというイベントに出ていた
- 縄跳びしてたらお婆ちゃんに負けた
- 技術書以外の本も読んでた
運動習慣
去年始めたジムはすっかり行かなくなったので運動が不足している。150歳くらいまで生きたいのだけどこのままでは足腰から老いてしまう。
ということでステッパーを買って運動するようにした。主に朝仕事まえにコーヒーを飲んでいる時間と本を読んでる時間、あとは歯磨きをしている時間など隙間時間にちょこちょこ乗って運動している。これと散歩を組み合わせて長生きを目指したい。
土日の時間のある日には縄跳びもやるようにしている。(まだ2回しかやってない) いつも行く公園でお婆さんが縄跳びをやっていて「これはいいかも!」と思って始めた。3分2セットという感じでやったのに1分くらいやったらバテる始末。挙句のはてにお婆ちゃんよりも後から始めたのにお婆ちゃんより先にやめてしまった。悔しい。これから心の中でお婆さまということにする。
全国女子駅伝の応援にいった
教え子が走るということで京都で行われていた全国女子駅伝にいった。正確には直接の教え子ではないんだけど細かいことは気にしない。なんと区間3位?くらいの好成績だった。応援時間はわずか3秒くらいだったけど初めて見る駅伝は迫力があってよかった。
ひたすら本を読んでいた
普段は技術書ばかりを読んでいるので他の本も読むことにした。
- NHKの『100分de名著 三酔人経綸問答』
- 『きみのお金は誰のため: ボスが教えてくれた「お金の謎」と「社会のしくみ」』
- 『成瀬は信じた道をいく』
などを読んだ。結構ライトなものばかりを読んでいたので技術書の合間の良い休憩になった。100分de名著はTwitterでお薦めされていたから読んでみたんだけど、すごくわかりやすく名著を紹介しており2時間ほどで読めるので毎月読んでみようと思う。
学習
1月はRustの学習を始めた。メモリの扱い方で結構苦戦した。
- The Book(Rust) https://doc.rust-jp.rs/book-ja/
- 例外で学ぶ論理と集合
- フシギなくらい見えてくる!本当にわかる論理学
- プログラマ脳
- Yコンビネータについて
- コンピュータサイエンスと魔法のYコンビネータ https://yj.chibicode.com/
- プログラミング意味論の基礎 途中
12月までは設計についての本を中心に読んでいたけど、こう見るとプログラミング言語そのものの学習は少なくなった印象がある。
Rustは今年勉強したかった言語なので1年かけて学んでいくつもり。 集合論、(数理)論理学、計算機科学など興味があるので今は数学とコンピューターサイエンスの分野をじっくり学んでいる。
Rubyでラムダ計算(主にYコンビネータ)を学ぶならこの動画が大変面白かった。 youtu.be
AtCoderに関しても毎週コンテストに出ている。レートが740当たりになったので緑が見えてきた。
2月に向けて
2023年にやったこと。
日常は地味な日々の繰り返しなのであらためて書くことはほとんどないんだけど、あれこれやっているのは確かなのでやったことを意味づけるためにも改めてふりかえっておきたい。
去年はどうだったの?
こんな感じ。
ふりかえりシリーズについて。
今年は毎月のふりかえりをこのブログで書いていたのだけど、7月?くらいから書く余裕がなくなって書かなくなった。やり始めたら途中で終わることに定評があるので自分の悪い部分が出たと思っている。さらに追い討ちをかけたのは8月に罹患したコロナで、なんかやる気というやる気が一気にもっていかれた。ただ、やっぱり一年をふりかえるときに定点観測している何かがあるのは便利なので来年は1月からふりかえりを残していければと現時点では思ってたり、思ってなかったりする。
仕事について
1年かけてちょっとずつできることを増やしていった感じ。年初はまだまだ力不足を感じていてレビューも自信ない感じだし、そもそもドメイン知識の不足からあまり積極的に出れない期間が多かった。この辺の色々も確か毎月のふりかえりに書いていた気がする。ただ、今までの社会人経験上時間が解決することは見越していて、そこまで絶望的な感じもなかった。確か去年のふりかえりでもそんなこと言ってた気がする。そして、案の定ちょっとずつ貢献できることが増えてきてそれが自信にもなって好循環をもたらしたと思う。
印象に残っているのは、社の全社会で研鑽Rubyの話を角谷さんとしていて、「この書籍は中級者という言葉が出てきますが、中級者っていうのはどのような状態にある人のことですか?」という感じの話をしたら「書いてあるコードの良し悪しを自分(の物差し)で判断できること」という話がずっと頭の片隅にあって、今年の後半はそのことを常に意識しながらコードを書いていたと思う。Rubyに関してはそういった自分の判断をもってコードを書けることが増えてきたが、経験の浅い分野に関しては難しいね。
人と比べるとゆっくりな成長かもしれないが、成長してる感覚はあるので引き続き頑張りたい。
健康面
8月後半にコロナにかかってから11月くらいまで体調が最悪だった。12月は比較的元気なんだけど、一部喉が痛くなるという症状が断続的に続いており完全回復まではもう少しかかりそう。前職の頃は睡眠時間が5,6時間だったのに比べ今は平均8時間は寝るようにしているので睡眠不足のストレスからは解放されてとても嬉しい。
AtCoderの学習のために朝勉強しようと思ったが睡眠時間を削ると続かなかったので自分の適正睡眠時間は8~9時間くらいなんだと思う。
運動に関しては散歩を頑張った。毎日平均5000~7000歩くらいは歩いており最低限の運動は確保したという感じ。ただ、筋トレに関しては3月くらいから外に出るのが億劫になり結局行かなくなった。来年は運動にフォーカスして健康を支えていきたい。
読書
https://scrapbox.io/haruguchi-books/
頑張った。1ヶ月に2、3冊ペースでは読めてる。読んでる内容が血となり肉となっているのかと問われるとまぁ、、、。楽しいからOK!
今年の序盤はネットワーク系の本を読んでいて、5月くらいはオートマトンなどの計算機科学11月くらいはソフトウェア設計やデザインパターンの本を読んでいたので割と幅広く読めたのではないかと思っている。
来年の目標としては数学書の割合を増やしたいのと、一旦離れてしまったオートマトン、コンパイラなど低レイヤ方面の読書を進めていきたい。
AtCoder
- 解いた問題(ざっくり): 300 → 900
- レート: 262→695(+433)
- 色: 灰色 → 茶色
競技プログラミングに関しては1年を通して毎日1時間ほど精進している。目標は年内に緑になることだったが、レートは400ほど上がったのでよしとする。来年はバーチャルコンテストなどに出て少しずつレートを上げていきたい。
今年はレートの上昇とかもそうだけど、競プロ関係で関わった人が増えて良かった。Ruby仲間とか増やしたいなぁ。
コミュニティ
基本的にはRubyコミュニティでの活動がメイン。JS Conf に参加しようと思ってたんだけど、チケット取り損なった。 来年はもっと外に出ていきたい。
その他
個人的に大きなイベントだったのは2月にJS Primerのレビューを行ったこと。商業誌のレビューは初めてだったので自分自身いい経験となった。JavaScriptに特別詳しいわけでもないが、初学者視点で書籍を捉えることができたのではないかなと思っている。
そのほかにはcatnoseさんが11月にリリースしたしずかなインターネットに文章を書き溜めていっている。こっちには前職の仕事のことを書いたり、好きな漫画や音楽のことを書いたり生活感のあることを書いている。特に中身を推敲することもなく割と無責任に書いているのが心地よい。
最後に
今年関わってくれた方、ありがとうございました。来年もどうぞよろしくです。
6月のふりかえり。TOEIC受けた編。
7月も半ばだというのに書くのを失念していた。思い出しながら書いてみる。
学習と生活の記録。いわゆる日記。
先月はこちら。
6月は特に大きなイベントなどはなく、粛々と学習を進めていたイメージ。多分。おそらく。きっと。
おしごと
相変わらずRubyを書いてます。RailsというよりはRubyを書いてる気がする。 先月もいってたかもしれないけど、クラスの設計についてあれこれ考えることが多い。インスタンス変数をどこで初期化するか、そもそも導出可能にしておくか、メモ化してインスタンス変数に詰めておくか。メソッドの粒度はどのくらいにするか。クラスメソッドの方が使い勝手がいいか。そんなことを今月も考えていた。
テストの構造化の難しさにも少し悩んでいて、どうやったらスッキリするのかなとかを考えていた。
パッと答えが出るものでもないので、チームメンバーと議論しながら進めている。
プロジェクトではメンバーの増減などがあり寂しさとともに、気を引き締めないといけないと思ってた。
日常
- レビューしていたJS Primerの献本が届いて嬉しかった
- TAPLtsという勉強会に参加し始めた
- 友達の家に行って、赤ちゃんに遊んでもらった
- TOEIC初めて受けた
- TOEICの受験日間違って前日に会場入りする熱心さを見せつけた
- TokyuRuby会議にプロポーザル出した
- Kokura.rbに参加
- 毎日の散歩のノルマが6250歩になって(250歩up)健康的になった
- 月2回ほど体調が悪い日があった
記憶がなくてこれくらいしか思い出せない。
TAPLts勉強会に参加
PADAoneさんのツイートで知った勉強会。
型システム入門という書籍(訳者にRubyではお馴染みの遠藤さんがいる!?)の勉強会に参加。 これはプログラミングの知識だけでなく、数学的な知識も必要で到底一人では読み切れそうにないので参加することにした。
学習会の雰囲気がとてもよく、自分も勉強会するときに真似したいなと思う部分がたくさんあった。
一例をあげると、難しい文章があったときに 「ちょっとここじっくり味わいますか」みたいな表現がたくさん出てきて、難しいものへの向き合い方が真摯だなぁと思う。
「型システム入門 プログラミング言語と型の理論」、通称TAPLの輪読会を21日から始めます🎉
— canalun (@i_am_canalun) 2023年6月12日
型そのものや、初歩的な型推論アルゴリズムへの理解を深めることが目的です!(TSの型推論の実装も見る予定)
視聴枠でも全く構いません!ご参加待ってます👶
詳細はconnpassにて↓https://t.co/vv0zHfwFAg pic.twitter.com/Q4wAZ0MdUD
TOEIC
人生で初めて英語の試験を受けた。なぜかカレンダーに間違った日付が登録されていて、前日入りしてしまった。 会場は龍谷大学。最寄りの駅から大学まではバスが出ている。そのバスに乗った時点で3人しか乗車しなかったので怪しいと思っていたんだよな。 会場についてから気づくというボケをやらかす。
あと、単語帳を持っていったと思ってたら間違えて将棋の3手詰めハンドブックを持っていってしまったのも我ながら芸術点が高いと思う。
翌日の本番はちゃんと単語帳を持っていった。
TokyuRuby会議
RubyKaigi 2023でノベルティとして配布したRubyメソッドかるた関連でプロポーザルを出した。(そして通った!🙌) 個人的に年初に年3回LTという目標を掲げていたのでちょうどよかった。あと1回で達成する。
7/29(土)に開催される TokyuRuby会議のタイムテーブルを公開しました!https://t.co/fx5msD3sv6#tqrk14
— Tokyu.rb (@tokyurb) 2023年7月14日
町田さんがデザインした肉が良い感じ!
学習
今月はダラダラ本を読んでいた。ダラダラ読む本ほど最高なものはない。時間を気にせずゆっくりと味わう。
- 研鑽Rubyプログラミング (β final) 読了
- 初めて学ぶオートマトンと言語理論 読了
- なるほどUNIXプロセス 読了
- 型システム入門
- UNIXという考え方
- 数学ガールの秘密ノート 数を作ろう
- サバイバルTypeScirpt(Web)
- ガラムマサラさんとMaedaさんと Ruby の Enumerableにあるメソッドを再実装する遊びをしていた(もちろんrefinements使った)
6月の最初くらいに研鑽Rubyを読み終わった。本当はRubyKaigiまでに読み終わるつもりだったがそうは問屋が卸さない。 自分の経験値に応じて景色が変わりそうな本だったので定期的に読むのが面白そうだと感じた。
はじめて学ぶオートマトンと言語理論
最初にこの本を読んでよかったなぁという感想。図が豊富で難しい数式も出てこない。練習問題が豊富(あんまりやってないが)という3点で初学者にもおすすめできそう。
後半は言語理論のお話で、自由文脈文法がチューリング機械と同等の能力を持っているだとか、前半にやった抽象機械とそれぞれの文法の互換性について丁寧に解説されていてよかった。
なるほどUNIXプロセス
読むのは2,3回目。ページ数が100ページちょっとで非常に読みやすい。文体も語りかけるような文体でプロセスって何?という状態からでも非常に理解しやすかった。Rubyで動かせるのが何よりも良くて、実際に手を動かしながら理解を進めていった。
仕事でも並列処理するかどうかの検討があって、parallel gemの話が上がったときにプロセスをforkしてゴニョゴニョしてるという話についていけたのがタイムリーでよかった。
Enumerableのメソッドを再実装
フィヨルドブートキャンプ時代の友達とモブプロしながら遊んでた。
ルールは以下の通り - eachメソッドを作る(my_eachと名付けた) - 作ったmy_eachメソッドを使って実装する - できるだけ忠実に再現する(引数を与えなかったときに返すEnumeratorなどもできたら再現する)
こんな感じで遊びながら作ったのでメソッドの理解が深まった気がする。
AtCoder
引き続きコンテストに参加中。 C問題の茶diffを解き終わったので7月はD問題の茶diffを解いていく。
7月に向けて
7月はTOEICの結果が返ってくるので(返ってきたので)英語の勉強を本格的に始める。 オートマトンの書籍を複数冊読んで地盤を固める。 計算機科学の基礎を身につけたらどこに向かっていくのが自然なのか考える。
5月のふりかえり。毎日6000歩編。
学習と生活の記録。いわゆる日記。
先月はこちら。
5月は大きなイベント(RubyKaigi)などがあって、前後で結構行動が違うかも。
おしごと
RubyKaigi前後で変わらずやってるのはコードを書くこと(それはそう)。 Template Method パターンで設計したコードをリファクタリングする作業をしていてレビューを通して勉強になることがたくさんあった気がする。たとえば、メソッド呼び出しで何度も同じデータを生成しているときはインスタンス変数でメモ化するだとか、知ってはいるけど自分が実践的にできてないようなことが補強されたイメージ。
あとは、リファクタリングするときテストのありがたさを(改めて)実感した。細かくテストを回しながらクラスの構造を変えていく。ふとした時にテストが落ちる。大体はしょうもないミスなんだけど、それに気づくのって結構難しい気がしていて、テストがあるとおおよその当たりがつく。デバッグのスピードが上がって、安心してリファクタリングを進めることができる。
どれも頭では理解していたけど、身に染みた。
RubyKaigi前はスポンサー業をしていた。あと、仕事でちょっとしょうもないやらかし(事務的なこと)をしてへこんでいたりした。
RubyKaigi後はプロジェクトのメンバーの入れ替わりがあったりして、寂しかったり。
日常
- RubyKaigi 2023に参加した
- ジムに行って筋肉を育て始めた(再開)
- 毎日6000歩目標に歩いた
- サボテンが赤い花を咲かせた
- るりま初コントリビュート
- 毒展にいった
- 勢いでTOEICに申し込んだ
- 大阪Ruby会議のstaffに応募した
- Kyoto.rb, Kokura.rbなどに参加
- 晩御飯は大体サラダ食べてた
- スプラトゥーンが新シーズンになる前にS+まで上げておいた
- ハイラル城は入城していない
- 道でおじいさんを助けた
RubyKaigiについてはこの記事にいろいろ書いた。
道でおじいさんを助けた
家の前で散歩をしていたらおじいさんが「警察署に行きたいんですけど」と尋ねてきた。 僕の家から警察署までは歩いて1時間くらいかかる。てんで方向が違っているので一緒に歩いて連れて行ってあげることにした。
一緒に歩きながら話を聞いているとおじいさんは朝、警察署から落とし物があって取りに来てほしいとの連絡が入って、京都から自転車で滋賀まで来たらしい 。なんと20kmくらい。汗だくになりながらナビも持たずに来ていたので不憫に思い一緒に行くことにした。警察署の前で別れて僕は家まで帰ったのだけど、おじいさんは無事家に着いたのだろうか。
毎日6000歩
健康のため最近毎日6000歩を目標に歩いている。大体合計1時間くらい。 朝昼夕方のうち30分 ✖️ 2セットくらい
上述のように散歩に出かけると高確率で誰かに話しかけられる。
毒展とTeamLabのボタニカルガーデンに行った。
大阪の長居でやっていたのでふらっと遊びに行った。 思ってたよりもいろんなものが毒だった。
学習
今月は書籍をあまり読み進められなかった。原因としてはRubyKaigiやそのアフターイベント的なものにたくさん参加していて夜の学習時間が短かったことが挙げられる。でも、まぁそれはそれで良いと思っている。本を読み切ることがゴールではないので。
4月から引き続き読んでいる書籍は以下の通り
- 研鑽Rubyプログラミング (β final)
- プログラミングの基礎
『研鑽Rubyプログラミング』に関しては II部まで読み進めた。
パフォーマンスチューニングするときは推測するな、計測せよ(意訳)という言葉が染みた。
『プログラミングの基礎』は土日だけ読み進めているので亀の歩みで進んでいる。
出てきた再帰関数を全てRubyで書き直してみたり、しているのでこれまた時間がかかっている。まだ半分いってない。 ただ、お陰で再帰関数に親しみを持てた。
新しく読み始めた本もちらほら
はじめて学ぶオートマトンと言語理論
RubyKaigi に参加して、ReDos攻撃の話はパーサーの話に興味を持った。とっかかりとしてどちらもオートマトンの話があるように思ったので、勉強している。 まだ、前半部分だけどオートマトンの例が具体的でわかりやすいと感じた。おそらく厳密な説明用りもイメージしやすさを優先していて、物足りない人もいるのかもしれないが、初学者の自分にとってはちょうどいい粒度で書かれていて嬉しい(今のところは)。
今は「空動作をもつ非決定性有限オートマトン」を「非決定性有限オートマトン」に変換し、それを今度は「決定性有限オートマトン」に変換するというのをやっている。あとは有限性オートマトンの等価性とは何か?みたいなやつ。これが結構数学っぽくて面白い。大学の授業を思い出す。
サバイバルTypeScript(Web)
TSを最近書いてないのでリハビリがてらに読んでいる。ちょっと前まではまだ執筆されていないセクションが多いなぁと思っていたのに、いつの間にかどんどん増えていって充実している。参考文献なんかも豊富なのでリンク辿って行って学習しようと思う。
AtCoder
5月からまたコンテストに参加し始めた。 頑張って今年中に緑を目指す。今はC問題茶diffの過去問埋めを頑張っていて1日1~3問解いているのでざっくり見積もって50~60問ほどは解いたと思う。
直近5回のコンテストは4/5でCまで解けているので一定の成果が出てるのではないだろうか。
ただ過去問を解いた感じだと解説見ずに解けるのは5割りという感じなので安定して8割を目指したい。
英語学習
6月末人生初のにTOEICを受けるので簡単な文法書と単語帳で学習している。といってもあんまり時間は取れておらず、1日ちょっとずつやってる感じ。本格的に学習するのはテスト受けた後に分析してからにしようと思うが、そもそもTOEICってどんな形式のテストなのか?そんなことから知らないので調べておきたい。
6月に向けて
5月はTypeScriptかLinuxについてやっていきたい気持ち。 あとはRubyKaigi楽しむ。
と先月は言っていた。Linuxまで行けてないので6月中に手を出せるといいなぁと思う。 あとは散歩の歩数をどんどん上げていきたい!!