ブログ
RSS技術やプロダクト開発に関する知見を発信しています
100件超の用語を正規表現でマッチングしていたら遅くなったのでAho-Corasickに変えた
Astroのremarkプラグインで実装した用語自動リンク機能を、正規表現ベースからAho-Corasickアルゴリズムに変更した経緯を解説します。なぜ形態素解析を使わなかったのか、日本語と英語の混在テキストでの単語境界の扱いについても紹介します。
ビルドのたびにOGPを取りに行くリンクカード、CIからDoSになりかけた話
Astroのremarkプラグインでリンクカードを自作しました。ビルド時にOGPメタデータを毎回fetchする設計にしたところ、GitHub ActionsからのビルドがDoS的な負荷になりかけたため、キャッシュをリポジトリにコミットする方式に切り替えた経緯を紹介します。
labee.devは48時間で段階移行し、labee.jpは一括でAstroへ移した
ラビー合同会社のコーポレートサイト(labee.jp)と開発者ツールサイト(labee.dev)をNext.jsからAstroへ移行しました。labee.devは48時間で3段階の段階移行、labee.jpはその経験を踏まえた一括移行です。Tailwind CSSの廃止とCSSカスタムプロパティへの移行についても紹介します。
テストがアプリ本体の設定を書き換えていたので、UserDefaultsとDateを外から渡すようにした
iOS や macOS のアプリで単体テストを書くなら、UserDefaults.standard と Date() を直接呼んでいる箇所を先に外しておきます。そのままだとテストがアプリ本体の設定を書き換えますし、アサーションが1度も実行されないまま通るテストもできてしまいます。
パスワードに大文字と記号、まだ必要?
パスワードに大文字・小文字・数字・記号を混ぜろという要件について、公的なガイドラインの原文を読みました。文字種を混ぜさせるかどうかは、その文書が誰に向けて書かれているかで分かれます。最低文字数は、資料によって8から15まで開きがあります。定期変更を求めるなという点だけは、読んだ資料が一致していました。
String.countをNSRangeに渡していた箇所を直しても、文字は消えたままだった
自前のテキストエディターで文字が消える問題を追ったところ、行に属性を付けるNSRangeをString.countで作っている箇所が見つかりました。ただしそこを直しても文字は消えたままで、実際に消していたのはNSTextStorageがNSLayoutManagerへ渡すchangeInLengthでした。最小の再現コードを書いて2つを切り分けた記録です。
Chimrのメニューバーでカレンダーを開かずに予定を把握する
Chimrのメニューバー表示機能を詳しく解説。3つの表示モード、動的表示の4パターン、更新間隔、右クリックメニューなど、限られたスペースで情報を表示する仕組みを紹介します。
Chimrのフルスクリーン通知を極める - 絶対に会議を見逃さない設定術
Chimrのフルスクリーン通知機能を詳しく解説。通知タイミング、スヌーズ、出席状態フィルタリング、ビデオ会議モードなど、自分好みにカスタマイズする設定方法を紹介します。
ログイン失敗、何回でロックアウト?
ログイン失敗が続いたらアカウントをロックする定番の対策について、何回でロックするのかを公的なガイドラインに探しました。回数を書いている資料と書いていない資料に分かれ、書いてある数字も3回から100回までばらついています。
ハッシュの使い分けは、値のエントロピーで決まる
Argon2はソルトが呼び出しごとに変わり、メモリーと時間を意図的に食うハッシュです。SHA3-256は決定的で、速く終わります。どちらを選ぶかは、ハッシュ化する値が乱数で作られているかどうかで決まります。
「埋まっているか」だけ知りたいこともあるので、ChimrのMCPが返す情報を4段階にした
MCPで予定を返すとき、呼び出し元がどこまで詳しい情報を必要とするかは、用途で違います。Chimrでは最初に3段階を用意し、2日後に時刻と出席ステータスだけを返す「厳格」を足して4段階にしました。各段階が何を返して何を落とすか、そして段階に分けた判断を書きます。
会議に遅れないためにChimrへ全画面通知とMCPを載せた
macOS向け会議通知アプリ「Chimr」の紹介。全画面通知、ワンクリックでのビデオ会議参加、MCP対応など、Chimrの主要機能と既存アプリとの違いを解説します。
Labee Dev Toolbox 公開しました
ラビー合同会社が公開したWebツール集「Labee Dev Toolbox」の紹介。Color Picker、Cron Expression Tester、DNS Records Checker、Sitemap Viewerなど主要機能と今後の展望について。
Apple法人アカウント開設の流れ
Apple法人アカウントの開設手順を解説します。DUNS Numberの申請から法人アカウントの承認まで、大まかな流れと注意点について紹介します。
Tailwind CSSでカラーテーマの切り替えを簡単に実装する
CSSカスタムプロパティとTailwind CSSを組み合わせて、data-theme属性の切り替えだけでカラーテーマを変更できる実装方法を紹介します。
会社ロゴを商標登録する
会社ロゴの商標登録をToreruで行った流れを紹介します。商標の基礎知識、区分の選び方、出願手順について解説します。
iOSアプリを譲渡する
iOSアプリの所有権をApp Store Connect上で譲渡する手順を解説します。譲渡条件の確認からリクエスト、承認までの流れについて紹介します。
ラビーのロゴができるまで
起業準備の一環として行ったロゴ制作の依頼について。事前準備、依頼先の選定、デザイナーとのコミュニケーションのポイントを紹介します。
DartでUDP通信の結果を同期的に待つ方法
DartでUDP通信の結果を同期的に待つために、FutureとCompleterを組み合わせる方法を紹介します。
GitHub Organizationのプロフィールページを設定する
GitHub Organizationの公開・非公開プロフィールページの設定方法を紹介します。.githubリポジトリと.github-privateリポジトリの使い分けについて解説します。
