文字っぽいの。

文字を書いています。写真も混ざります。

吉祥寺散策

吉祥寺を散策してきたのでその記録。 井の頭公園 ブルースカイコーヒーのねこドーナツとケーニッヒのホットドッグとフランクフルト。 井の頭公園は結構人がいた。あひるさんボートも人気で大行列だった。結構暖かい日だったので、ボート乗るのも気持ちよさそ…

星のカービィ スーパーデラックス ドットライトを買った。

めちゃくちゃかわいい。 電源はUSB-Cなので、コンセント経由でもモバイルバッテリー経由でもつながれば光る。でも光ってなくても存在感があってかわいい。 近くで見ると「溝が掘ってあるだけだな」という感じだけど、ちょっとはなれるといい感じにドット感を…

SwiftUIの `.contentTransition(.numericText())` で遊ぶ

iOS 17+で使えるSwiftUI用のAPIに .contentTransition(.numericText()) というのがある。 numericText(countsDown:) | Apple Developer Documentation numericText(value:) | Apple Developer Documentation 使い方は簡単で Text("\(value)") .contentTransi…

RICOH GR IIIx を買った。

買ったもの RICOH GR IIIxを買った。 RICOH GR IIIx デジタルカメラ 【焦点距離 40mm / 24.2M APS-Cサイズ大型CMOSセンサー搭載/最強のスナップシュータ― / 約0.8秒 高速起動/高速ハイブリッドAF/高解像・高コントラスト GRレンズ / 3軸・4段 手ぶれ補正機構…

SwiftUI Introspect経由でDelegateを設定するとSwiftUIのBindingが死ぬ

結論 わからん。誰か詳しい人にどういう挙動が起きているのか教えてほしい。対応策を教えてもらえるともっと嬉しい。 書いてみたコード 画面にはTextEditorとその文字をクリアするButtonしかない非常にシンプルなもの。 import SwiftUI @_spi(Advanced) impo…

2023年の買ってよかったもの。

毎年12月になって慌てて書いているので、今のうちに書いておこう。 山崎実業 バスルーム多機能ラック 山崎実業 マグネットバスルーム多機能ラック タワー ホワイト 3548TOWERAmazon マグネットでお風呂場の壁にくっつけられるラック。 シャンプー、ボディー…

Swift OpenAPI GeneratorでISO8601拡張形式のDateが処理できないことがある

問題 Apple公式のOpenAPI Generatorを使うと、Responseをパーズできなくて下記のエラーが出ることがある。 Client error - cause description: 'Unknown', underlying error: DecodingError: dataCorrupted - at : Expected date string to be ISO8601-forma…

#iOSDC Japan 2023のレギュラートークで『君だけのGFMエディタを作ろう!』というタイトルで登壇してきました。

今年もオフライン・オンラインのハイブリッド開催! 今年のiOSDCも去年に引き続きオフライン・オンライン両方のハイブリッド開催でした。今年はブース出展の担当をしており、会場に行ける時間も少なかったので配信で見られるのはとても助かりました。 レギュ…

iOSDC Japan 2023で『君だけのGFMエディタを作ろう!』というお話をします。

今年もiOSDC Japanの季節がやってきましたね!ありがたいことに今年はレギュラートーク(20分)を採択してもらえました。 これで6年連続登壇となり、うれしみに舞い踊っております。 fortee.jp プロポーザル内容は、 NSAttributedStringとSwiftUIのMarkdown…

南粤美食でお粥の会を開催した。

元町・中華街には、それはそれは豪華なお粥を楽しめる南粤美食というお店がある。TVドラマ版の孤独のグルメにも登場したお店なので、そちらで知っている人も多いだろう。 tabelog.com さて、主題のお粥コースだが、このお粥コースは非常に難易度が高い。まず…

ケーブルレスでWebカメラとライトを運用できるようにした。

こういったセットアップをした。 一番上にはこのライトがついている。 Elgato Key Light Mini 配信用照明 配信/ビデオ会議/在宅勤務向け Mac/PC/iOS/Android対応 色温度明るさ調整可能ElgatoAmazon バッテリー内臓なので、充電ケーブルを繋ぎっぱなしにしな…

プロポーザルが不採択になった時に。

社内で話した内容を公開できる状態にしました。 そのため、文意がブレていたり、補足が足りないかもしれません。 プロポーザルが不採択になると、どうしても悲しい気持ちになります。 試験で不合格になったような、なにか大きな失敗をしてしまったような。プ…

WKWebViewで表示しているコンテンツのサイズ変更をKVOで検知する

課題 WKWebViewでなんらかのWebページを表示している時に、ページ全体の高さや幅などを取得したい場合がある。簡単に検索して実装をすると、 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { // ここで高さを取得する } このよ…

`WKUserContentController.add(_:name:)` はちゃんと解放しないとメモリリークする。

開発環境 Xcode 14.3 Swift 5.8 背景 WKWebViewを使っていると、JavaScriptとSwiftでやり取りをしたいことがあります。そんな時に調べていると、こういうサンプルコードを良く見ます。 final class SomeViewController: UIViewController { @IBOutlet weak v…

HHKB HYBRID Type-S 雪を "2枚" 買った。

キーボードを2枚使うとタイピング時の姿勢が良くなり、肩がこりにくくなる。つまり健康に良い。これは分割型のキーボードや自作キーボードが流行っていることからも分かる。 ならばHHKBを2枚使えば良いじゃないか。HHKBは最も使いやすいキーボードであり、最…

SwiftUIでTabキー単体のキーショートカットを実装する方法。

SwiftUIでのキーボードショートカット SwiftUIではButtonやToggleに対して .keyboardShortcut(_:modifiers:) でキーボードショートカットを実装することができる。 Toggle("Toggle", isOn: $flag) .keyboardShortcut("1", modifiers: [.control]) Button("Bu…

SwiftUIのライブプレビュー関係のショートカット

表示・非表示 Option + Command + Return 押す度に出たり消えたりする。 リロードしたい時 Option + Command + P

2022年の買ってよかったもの。

良くて使い続けてるものだけ書いていく。 デスク周り fromatom.hatenablog.com デスク周りをどかっとリニューアルした。コード周りもいい感じにまとまったし、デスクの色もダークブラウンになって満足している。 エスプレッソメーカー ついに買ってしまった…

時代は着る布団。

かなり前から着る毛布が流行っており、冬場の寒さ対策グッズとして人気です。しかし、日本には古来から着る布団があります。 そう、半纏(綿入れ半纏)ですね。前から欲しかったのですが、Amazonのブラックフライデーで安くなっていたので購入しました。もう…

UITextViewで `""` が `“”` に、 `--` が`—` に勝手に変換される問題の対処法

課題 UITextViewでエディタを作っていると、 "" が勝手に “”に変換される '' が勝手に ‘’ に変換される -- が勝手に — に変換される という状況に出会って困ることがあります。 これはなに? これはスマート引用符とスマートダッシュという機能です。Macでコ…

swift-markdownを利用してUITextViewのカーソル位置が特定記法であるか調べる。

やりたいこと Markdownエディタを実装していくと、カーソルのいる場所がリストなのか太字なのか見出しなのかを知りたくなります。単純に記法によって見た目を変えたいのであれば、NSAttributedString.init(markdown:options:baseURL:) を使えばよいです。 一…

素振り

最近、「エンジニアリングスキルを高めるにはどうしたらよいか」といったニュアンスの話をすることが何回かありました。エンジニアリングスキルにはコーディング能力だけではなく、チームワークだったりプロダクト志向だったりステークホルダーの調整だった…

#iOSDC Japan 2022でLT登壇してきました!

帰ってきたオフライン開催! 今年のiOSDCはオフライン・オンライン両方のハイブリッド開催で、家で配信を見るのもよし、現地でトークを聞いたりブース出展を眺めるも良しの贅沢なカンファレンスになっていました。 3年ぶりに物理ブースが並んでいる様子をみ…

SwiftでURLやファイル拡張子から画像か動画か判別する。

やりたいこと WKWebViewの func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) でタップされたリンクが画像ならAという処理、動画ならBという処理…

シミュレーターのPHPickerViewControllerでHEIC形式の画像を読み込めない問題の解決方法

環境 Xcode: Version 13.3 (13E113) Simulator: iPhone 13 mini (iOS 15.4) 起こること PHPickerViewControllerを利用して画像を取得する時、インターネットに転がってるコードを参考に実装していくとこんな感じになる。 func showPicker() { var configurat…

スネてる暇はないんだよ。

力を入れて書いたブログに反応がなかった時、これは賢いと思った設計変更が受け入れられなかった時、絶対にバズると思った企画が通らなかった時、これは通ると思ったプロポーザルが不採択になった時、便利なライブラリを作ったけどスターがつかない時、絶対…

Swiftでファイル名からMIMEタイプを生成する。

やりたいこと ファイル名からMIMEタイプを生成したい時がある。例えば、 "image.png" -> image/png "movie.mov" -> video/quicktime という感じ。 実装方法 Uniform Type Identifiers を利用する。そのため、iOS 14以降じゃないと使えない。 上述したPNG画像…

「僕の考えた最強のデスク環境」をアップデートした。

2年前にデスク環境をがっちり整えた。 fromatom.hatenablog.com そこから時は経ち、書斎の棚を処分したり新しくWindowsPCを購入したりと環境も変わってきたので、アップデートをした。 この記事では、この状態になるまでに行った作業や、使った製品を紹介し…

#iOSDC Japan 2022で『 サポートiOSバージョンを定期的にあげる仕組みづくり』というLTをします。

今年もiOSDC Japanの季節がやってきましたね!ありがたいことにLTが採択されたので、登壇します!5年連続登壇することができるので、うれしみに舞い踊っております。 fortee.jp プロポーザルは サポートOSバージョン、どんどんあげていきたいですよね? しか…

ラーメン→スーパー銭湯→ラーメン

ゴールデンウィークのほとんどが飼い猫の看病と通院で消失してしまったので、ちょっとしたお出かけをした。「ラーメンと、温泉やな。」ということになり、弟と2人で電車で行ける範囲で出かけた。 味噌っ子 ふっく 朝の10時30分に荻窪駅に集合して、味噌っ子…