Magnolia Tech

いつもコードのことばかり考えている人のために。

Durock Ice King Tactileを買った

先日、Gateron Green Appleというタクタイルスイッチを買った

blog.magnolia.tech

しかし、日常的に二つのキーボードを使っている関係で、もう一つのキーボードも新しいタクタイルスイッチにしたい、という気持ちが沸き上がり、Durock Ice King Tactileを買った

感触は、Gateron Green Appleの方が好みだけど、Durock Ice King Tactileの方が音がおとなしめで響きが少ない...使う場所によってキースイッチを使い分けたい、という趣旨には合っているので、周りの環境に合わせて二つのスイッチを使い分けることにした

「TechTrain Mentor Kaigi 2025」へ参加してきた

techtrain.connpass.com

メンターをやっているわけではないけど、メンターや運営から招待されたゲスト枠、というのが有り、誘って頂いたので参加した


イベントとしては交流会がメインということもあり、とにかく色んな人と話しまくっていた

初めましての人もたくさん交流できたし、おなじみの人たちとも交流できた

一回しか会ってないと、なかなか顔と名前がぱっと一致しないところが有るのだけど、こうやって何度も会える場が有ると記憶が定着していくのでありがたい

吉祥寺.pmの新作ステッカーも配りまくっていた

終わった後は、4人集まり、近くの居酒屋で生成AIコーディングトークを聞く...学びが多すぎた..

というわけで、TechTrain Mentor Kaigiは最高だったので、来年も開催されるならまたぜひ参加したいな!

「LTのためのLT会 - LTが上手くなりたい人が集うLT会」で登壇してきた

benkyokai.connpass.com

主催のKaitouさんに誘われるがままに登壇してみました

当日のスライドはこちらです

speakerdeck.com


さて、このブログエントリは、この内容にした理由を解説します

現在、「大吉祥寺.pm 2025」の企画を進めています

今回は登壇枠を30分、15分、5分(LT)の3種類にしました

去年の登壇枠は30分、20分、5分(LT)の3種類でした

この変更はスタッフミーティングで「プロポーザルを出す側は30分と、20分って選びづらくない?だったら、30分と15分の方が、選びやすくないですか」とコメントを頂き、「確かに!」と思って変更しました

さて、カンファレンスの登壇時間は、運営スタッフの考え方によってさまざまな時間が設定されます...5分、10分、15分、20分、30分、50分と、いろいろなバリエーションが有ります

ただ、この時間で、何を喋るかは完全に登壇者にゆだねられます(当然プロポーザルの内容は確認されますが)

では、この時間でそもそも何が喋れるか?そこには運営側の期待値が有るはずなのですが、そこが言語化されることはなかなか無いな、と思って今回のスライドを作ってみました

作ってみて、30分と、15分にした方が良かった、ということが改めて自分でも納得できました

ちなみにスライドを作った後に、Geminiにも聴いてみたところ、自分の考えとしっかり合っていたので、自信を持って発表することができました


とはいえ、ちょっと5分にしては忙しい発表になってしまったので(自分が全然できてないじゃん!)、改めて20分とか30分とかの拡大版で喋ってみたいと思いました

「関数型まつり」に行ってきた

昨年までScala単独のイベントとして開催されていたScalaMatsuriが昨今の関数型プログラミングの盛り上がりに合わせてリブート、「関数型まつり」として開催されました

2025.fp-matsuri.org

今回はスタッフとして、企画段階から参加し、当日もスタッフで参加しました(2日目のみの参加でしたが)

タイムテーブルを見て頂けると、多彩なトピックが満載なことが一目で分かると思います

2025.fp-matsuri.org

ホールAのスタッフだったこともあり、主に2日目のホールAでの発表を聞いていました。

トークの感想

fortee.jp

SML#も、大堀先生も存じ上げず、ただただその活動に「凄い!」と感動してしまった

アカデミアでの活動の話を聞くと気持ちがシャキっとする、というか、長い時間をかけて一つのテーマに取り組む姿勢、というのに、感動してしまうんだよなぁ

fortee.jp

Naoya Itoさんの発表

昔から、ご自身で経験を徹底的に積み上げて、それを抽象化し、言語化するスキルが高い人だなぁと思っていたけど、今回のトークは関数型らしい、その抽象化のスキルがめちゃめちゃ発揮されてて、聴いていて満足しかなかった

同じ経験をしても、あそこまで上手い説明は自分にはできないなーと振り返りながら聴いていた

50分があっという間

fortee.jp

ScalaMatsuriの時もそうだったのだけど、悔しいくらいに理解が追いつかないトークが満載で、その場ではあくまで「知らないことを知る」に留まってしまうことが多かったけど、これもそのうちの一つ

正直、全然追いつけなかった

でも、脳が焼き切れるくらい理解が追いつかないことが有るんだな、ということが知れて良かった

これから勉強していくぞ!

全体的な感想

参加者の傾向として、普段参加しているイベントとは随分違ったところが良かった

質疑応答でも、質問者から「こんな論文が有り、その中ではこう語られている」みたいな、知識と知識がぶつかる様子も見られた...学会みたい

とにかく自分が分からないことが有り、しかもそれがちょっとやそっとでは絶対に腹落ちしないレベルの高度なトピックであることが分かったことが最大の収穫だった、学んでいくぞ!!

スタッフ打ち上げ

懇親会は1日目だったので参加できなかったのですが、2日目の終わりにスタッフ打ち上げが開催されたので、そちらに参加

ハイライトシーン

さいごに

おなじことを繰り返し書いているけど、ScalaMatsuriも、関数型まつりも、「集中して聴いているのに、全然頭に入ってこない、このトークを聞くためのメンタルモデルが形成されていない...いや、単に自分の頭が悪いのか...ぐぬぬぬ...」みたいな場面にばかり遭遇するので、「自分はまだまだ何もできないやつだな」ということを理解するために参加している、みたいな側面がある

来年開催されるのかはまだ分からないけど、次回も絶対に参加するぞ!!

久しぶりのfib関数

先日、関数型まつりに参加した影響で、久しぶりにフィボナッチ数を求める関数でも書くか!と思って書き始めたら、再帰+末尾最適化バージョンが一発でそらで書けず、過去に書いたコードを見て、「あー」となったので、その記録。

なんでも忘れるものですね...

単純なループバージョン

定義の通りに書いただけ

でも再帰を使ってないので、関数型っぽくない

def fib1(n: Int): BigInt =
  if n <= 1 then BigInt(n)
  else
    var a: BigInt = 0
    var b: BigInt = 1

    for (_ <- 2 to n)
      val n = a + b
      a = b
      b = n

    b

素直に再帰を使って書いたバージョン

これも定義通りに素直に書いただけ

def fib2(n: Int): BigInt =
  def loop(n: Int): BigInt =
    if n <= 1 then BigInt(n)
    else
      loop(n - 2) + loop(n - 1)

  loop(n)

でも、末尾最適化が効かないため、処理時間は爆増する

fib2(50)くらいで全然帰ってこなくなる

末尾最適化に対応したバージョン

過去のコードを見て書き写した...

ここでのloop関数の中でのcountは、単純な再帰バージョンでのインデックスではなく、カウントダウンするためのカウンター

accの中に、累積した値を持ち回り、計算完了時点(countがゼロになった時点)で、accを取得する

def fib3(n: Int): BigInt =
  @annotation.tailrec
  def loop(count: Int, acc: (BigInt, BigInt)): BigInt =
    if count <= 0 then acc._1
    else loop(count - 1, (acc._2, acc._1 + acc._2))

  loop(n, (0, 1))

これなら、fib3(50)は当然余裕で帰ってくる

カウンターが下がっていくのと逆に、引数で持ち回っているaccがどんどん累積されて増えていく、という感覚が掴めるか?というところがポイントですね

システム開発は「決めること」の連続

ほんとプログラムを書いたり、アーキテクチャ設計とかしていると、「変数の命名」みたいなレベルからコストを踏まえたミドルウェアの選定まで、影響の大きさの大小に関わらずたくさんの「決めること」が出てくる

個人開発では全部決められるかもしれないけど、受託だったり、自社サービスだったりすると、案は出せるけど、決める権限が無い、みたいな場面も多い。

でもそんな中でもプロとして、「こうあるべき」を提案できる人は、「決める立場」になった時に適切に決められるようになるし、「決める人の気持ち」への理解が深まり、より意思決定への関与が深めることができる...「君が言うなら、そうしよう」と言ってもらえるなら、それはもう「決めたも同然」なので。

「指示されたことをやりました」というスタンスを採ることは生存戦略の一つとして決して間違っているわけではないのだけど、「決める訓練」をしていない人が、「決める立場」になった時に適切に決められるか?という問題がある。

上手く組織を作る人は、権限の委譲が上手く、適切な範囲を「決めさせる」ことで成長を促していく。

そのチャンスを上手く使って、「適切に決められる人」になっていかないと、「雑に決める」とか「決めない(遅い)」とかが発生してしまう。

システム開発という、ひたすら「決めること」の連続である営みを通じて、「決める訓練」を積む、というのは有効なのではないか、と、そんなことを思った。

遠い昔に読んだ『園芸家12カ月』はソフトウェアエンジアリングへのヒントがあるかもしれないと思って読み直した

約100年近く前に書かれたカレル・チャペックのエッセイ本

翻訳も昭和34年と古い...5年前に新版が出て、文庫本としては非常に読みやすい体裁になっている

なんかずっと昔に読んだ記憶だと、ひたすら園芸家が庭の手入れを続ける様子が、現代のソフトウェアエンジニアリング...CI/CD環境を整えたり、新しいプログラミング言語や、ライブラリを調べたり、リファクタリングをしたり...といった活動に通じるものがあるのでは?と思って読み直してみた


うん、ただただひたすら園芸に関するオタク早口ムーブが延々続くので、そういう話ではないな、でもユーモアが有って、素晴らしい!と思ったし、「気質」という意味ではここに出てくる園芸家のような思考回路は、ソフトウェアエンジニアリングに通じるなーとは思った

フル回転で常にどこにどんな植物を植えるのか、どんな土を作るのか...そんなことばかり考えてる様子が愛おしい...

あと、ひたすらhow(土を作るとか、苗を注文するとか、どこに植えるのか)と、what(280種類にも及ぶ膨大な植物の名前の数々!)が続いて、why(園芸や、植物のどこにそんな魅力を見出しているのか、なぜそんなに熱心に庭を作るのか)という話がないのがいい

いいんだよ、やりたいんだよ!


とはいえ、1年12ヶ月、そのタイミングに合わせた「やるべきこと」を考え、膨大なやりきれないことに優先順位をつけ、時には失敗し、色々な人に相談したり、気ばかりが焦ってしまう様子なんかは胸に刺さるものが多かった


というわけで、特に役にたつ、みたいな話も無いけど、単純に面白い本なので、おすすめです、という結論でした