カルボナーラ街道

計測と観察

はてなのモバイル開発大紹介!にて、『iOS 曜日ランキングが出来上がるまで』で登壇した

イベントURL

hatena.connpass.com

会社の記事

developer.hatenastaff.com

スライド

speakerdeck.com

ひとこと

普段担当しているプロダクトのお話をさせていただきました。初めてUIに焦点を当てた発表で、リアルな実装話ができました。

simultaneousGesture(_:including:) の simultaneous は声に出したことが無かったので事前に発音記号を調べました。sὰɪm(ə)ltéɪniəs 。SwiftUIのジェスチャー周りは実装当時あまり参考にできるコードや記事が無かったので苦労した記憶があります。今見たら潤っていました。

developer.apple.com

発表内容の操作感はぜひお手元で確認いただけると嬉しいです!

iOSDC Japan 2024にて、『メインスレッドをブロックさせないためのSwift Concurrencyクイズ』で登壇した

物理カンファレンス参加・物理登壇が初めてでした。発表はオンラインと比べてレスポンスをいただけたのでさほど緊張しませんでした。質疑応答は緊張しました。

イベントURL

iosdc.jp

会社の記事

developer.hatenastaff.com

iOSDCチャレンジのためのトークンクイズを作りました。#h4a-c9y-q4z が正解でした。

// Swift version 5.10.1 (swift-5.10.1-RELEASE)
// Target: x86_64-unknown-linux-gnu

let token = "#" + [
    "q2z": TaskPriority.background,
    "h4a": TaskPriority.userInitiated,
    "c9y": TaskPriority.utility
]
.sorted { $0.value > $1.value }
.map(\.key)
.joined(separator: "-")

print(token, terminator: "")

プロポーザル

fortee.jp

去年は落ちてしまったので今年は通したい、と思って案を練っていたので通って良かったです。ありがとうございました。

スライド

speakerdeck.com

Day0

自分は関東に住んでいますが、Day0は会社の京都オフィスに出張する用事がありました。朝4時に起きて、一日中京都で仕事をしていました。同僚の id:kouki_danトークをチームメンバーと見ました。その日は京都のホテルで一泊。

fortee.jp

Day1

朝5時に起きて京都から東京に移動。京都駅を外から見たのが初めてで、めちゃくちゃ大きくてびっくりしました。自分の登壇が朝イチで、新幹線が止まったらアウトだなと思っていましたが何事もなく間に合いました。

登壇は練習よりもだいぶ早く喋ってしまって時間が余りましたが、クイズ形式ということもあって楽しい時間を提供できたと思います。質疑応答で発言してくださった内容は自分の理解が甘いところがあったのでこれから詰めようと思います。登壇も無事終わり、Ask the Speakerやその後に話しかけてくださった方がいて交流ができました。プロポーザルを読むのに加えて、Swift Forumsを追って背景ガッツリ知っていきたいね、みたいな話をしました。

登壇が終わってからはスポンサーブースを回ったり、セッションを聞いていました。

fortee.jp

座談会形式面白かったです。計算量が小さい処理はMainActorでやらなくても良い処理はMainActorでやっても良いというのは同意。Swift Concurrencyの学び方の項は実践的な内容で取り入れようと思いました。

fortee.jp

Mergeable Libraryをサンプルプロジェクトに導入して導入前後の起動時間の比較が行われていました。全体的に分かりやすくスッと頭に入ってきました。質疑応答でリンカの話が出てきて、そういえばリンカは軽くでも作ったことないなと思ったので作りたい欲が出てきた。リンカは入門書みたいなのが無さそうで困っている。

あと、当日はかっこいいスピーカーTシャツしか着られる衣服を持っておらず*1、自宅まで帰る勇気はありませんでした。幸いにもトークンを集めることで貰えるTシャツがあったので、狙ったのですが、当たらず途方にくれていました。

頂いたTシャツ

しかし!たまたま当日にご縁があって数回お話した方がTシャツを当てていて、ご親切に譲ってくださりました。わざわざその為に話しかけてくださったようで親切が身に染みました。XでもFFになったのでいつかお礼をします。

Day2

現地不参加でした。タイムシフトでセッションを見ました。ニコニコ動画に生かされている。

fortee.jp

AsyncSequenceをガッツリ使ったことがなかったので勉強になりました。コンパイル後がどうなるか、みたいな説明があって良かった。CLLocationManagerのAsyncSequence対応良さそう。位置情報を取得するために昔使ったことがあったなあ。命名の例なども挙げていて実践的な内容だった。

おわりに

全体通して、スタッフの方が優しく教えてくれたり、事前に開催されたスピーカーディナーでお会いした方々ともまた話すことが出来て交流ができました。前職の同僚や退職した同僚の今の同僚の方とも話すことができて本当に世界が狭い。一方で、技術的な内容に関しては知らないことが多く、世界は広いなと感じました。感じるだけでなく、キャッチアップしていく。

PR

chatwork.connpass.com

*1:会場までに来てきた服は汗で水没した

Google Domains時代のドメイン転送機能がうまく移管できていなかったので、Honoでリダイレクタを書いた

ちょうど一年前に以下のような記事を書いたが、今日までの間にGoogle Domains終了*1があり、Cloudflare Registrarに移管していた。

tokizuoh.hatenablog.com

移管はしていたものの、Google Domains時代のドメイン転送機能がうまく移管できていなかった。https://tokizuoh.dev/* から https://good-bye.tokizuoh.dev に乱暴に転送させていたが機能していなかった。前のブログはXだけでも最低10件程度は言及がある。無視しても良い数だがインターネットにゴミを作らないためになんとかしたい。

https://x.com/search?q=tokizuoh.dev%20-from%3Atokizuoh&src=typed_query&f=live

良い機会なので最低限、過去の記事にアクセスできるようにHono*2を使ってリダイレクタを書いた。フレームワーク使わなくても簡単にできそうだけどHono+Cloudflare Workersの素振りをしたくて使った。

import { Hono } from 'hono';

const app = new Hono();

app.get('/posts/:id/', (c) => {
    const id = c.req.param('id')
    return c.redirect(`https://github.com/tokizuoh/tokizuoh.dev/blob/1.0.0/posts/${id}/index.md`, 301);
});

export default app;

Wrangler*3を使って既にデプロイしている。https://tokizuoh.dev/posts/td152tqrb7iflicp/ にアクセスすると、https://github.com/tokizuoh/tokizuoh.dev/blob/1.0.0/posts/td152tqrb7iflicp/index.md に飛ぶようになっている。生マークダウン。やや乱暴だが、以前のように記事の内容が見られないよりはマシでしょう。

こういった転送系はCloudflareのページルールで何とかできそうな気配があるが、Honoを使いたかったので良し。