cockscomblog?

cockscomb on hatena blog

Rust 1.75.0のasync fn in traits

Rustでツールを書こうとして、コンポーネントを差し替えられるようにtraitとして定義した。GUIプログラミングの習い性で、IOが発生するメソッドは非同期にしたいから、asyncキーワードをつける。ここでは、何か文字列を読み込む予定のLoader traitを定義する…

2023年の「散財 of the Year」

買ってよかった2023ということで2023年の「散財 of the Year」を発表します。 Best おもちゃ 今年のBestおもちゃはガンプラ。ガンプラは小学生か中学生くらいの頃にいくつか作ったが、それ以来、20年以上ぶりにプラモデルを作った。 小学生になった息子と作…

SwiftにおけるTyped throwsの現在

現在Swift Evolutionで議論されているSE-0413 Typed throwsについて、Swiftの歴史を辿りながら紹介します。 この記事ははてなエンジニア Advent Calendar 2023の9日目の記事です。昨日は id:kouki_dan のiPadだけでアプリを作ってみるでした。ファスティング…

3DプリンタでMagSafe充電器スタンドをつくる

この秋にリリースされるiOS 17では、充電中のiPhoneに情報を一目でわかるように表示する「スタンバイ」機能が搭載されるそうだ。iPhone 14 Proの常時表示ディスプレイと組み合わせると便利そうだ。 これを活用するには充電中のiPhoneを一定の角度に保つ充電…

3Dプリンタを買った

Bambu LabのP1Sという3Dプリンタを買った。少し前に出たばかりの機種で、同じメーカーのP1Pという機種にエンクロージャ(覆い)がついたようなモデルだ。 家庭用の3Dプリンタは安いものなら数万円で買えるが、これは12万円弱で、価格帯としてはミドルレンジ…

Apple Vision Pro所感

Apple Vision Proの発表を見ての感想です。 空間コンピュータ 予想通り、ハードウェア面でもソフトウェア面でも圧倒的な完成度の製品を出してきた、という印象だ。ディスプレイからオーディオ、センサーに至るまで、可能な限りが詰め込まれている。新たなカ…

WWDC23与太話

WWDC23で発表されそうなことを考える遊びを行う。 Swift 5.9 Swift 5.9は大規模なアップデートになる。特にMacroとVariadic Genericsは、ライブラリの提供するAPIに影響しそうだ。 Macro Macroは今後のSwiftプログラミング体験を大きく変えていく。自分でMac…

huggingface/transformersでストリーミング

AIにテキストを生成させるサービスでは、テキスト生成の速度が遅いとユーザー体験がよくない。ChatGPTは、生成されたテキストが一度に表示されるのではなく、少しずつ表示されるUIになっている。このことで、テキスト生成の完了まで待たずに結果を確かめられ…

XCFrameworkをSwift PackageとしてGitHubでリリースする

以前、XCFrameworkをバイナリターゲットとしてSwift Packageに埋め込んだライブラリを作った。 これを容易に利用するためには、ビルド済みのXCFrameworkをどこかにアップロードして、それを参照するSwift Packageを公開するとよい。XCFrameworkはGitHubリリ…

React Server ComponentsとGraphQLは競合するか

Next.jsのapp directoryについて話していて、GraphQLを使う場面ではServer Componentsの魅力がいくらか落ちるよな、と思った。裏を返せば、Server Componentsが活用されるような時代ではGraphQLの重要度が下がるかもしれない。 現にServer ComponentsのRFCの…

1Password CLIで.env.localを作る

1PasswordにはVS Code拡張があって、.env ファイルなどにハードコードされたシークレットを1Passwordに保存して、secret reference というURL形式に置き換えてくれる。 ちなみにコミュニティ製のJetBrains IDE用の拡張もある。 これを使って .env.local.temp…

ショートカット.appでjq

jq jqはJSONをいい感じにクエリできるやつで、広く使われている。 $ echo '{"foo": "bar"}' | jq '.foo' "bar" 例えばGitHub Actionsのランナーにもデフォルトで入っている。 あるいはGitHubのCLIツール gh にも --jq オプションがあって、統合されている。 …

macOSのコンテナ開発環境におけるVirtualization frameworkの採用

Docker Desktop for Mac Docker Desktop for Macでは、仮想マシン上のLinuxでDockerを動かしている。仮想マシンにはhyperkitやQEMUが使われていた。が4.14.0からVirtualization frameworkがデフォルトで使われる。 Set Virtualization framework as the defa…

ソフトウェアエンジニアとしての最初の10年

働き始めてから丸10年経った。 2012年、僕は北海道に住む大学院生で、趣味としてプログラミングを楽しんでいた。Appleのファンだから、macOSやiOSのアプリケーションを開発して、ちょっとでもAppleに近づいたような気持ちになっていた。その夏1ヶ月のインタ…

ステージマネージャの使い方

macOS VenturaおよびiPadOS 16で導入されたステージマネージャだけど、どうやって使うのか段々わかってきた。 ステージマネージャのコンセプト ステージマネージャは、ウインドウのセットを作る機能だ。タスクに合わせてウインドウのセットを作れば、複数の…

SwiftUIでSFSafariViewControllerを使う手法の探求

SwiftUIからSFSafariViewControllerを使いたい場面は多い。 SafariView SFSafariViewControllerはビューコントローラーだから、UIViewControllerRepresentableを使ってSwiftUIのビューにしてしまうのが簡単か。 import SwiftUI import SafariServices struct…

東京に引っ越しました

はてなのインターンシップに参加した2012年の夏から、10年弱、京都で暮らした。その間に結婚もしたし、二人の子供にも恵まれた。京都では2Kの賃貸住宅に住んでいて、ひどく手狭だった。上の子は来年度から小学生になる。その前に引っ越しておきたい。 勤務先…

WWDC22への期待が高まってきたのでSwift Evolutionをナナメ読みする

WWDC22で何が発表されるのか、期待で眠りが浅い日々を過ごしている。何かヒントはないかとSwiftの次期バージョンについて調べていた。 普段から、定期的に同僚のid:ikesyo、id:yutailang0119、id:nakiwo、id:kouki_danらとSwift Evolutionの様子をチェックし…

AWS LambdaでSlackアプリを動かす

プライベートな用事でサーバサイドで何かやりたい場合、サーバレスな構成が第一選択になる。規模が十分に小さい場合、サーバレスにした方が安い。常にインスタンスが立ち上がっているような構成は(たとえ冗長構成を取らなくても)プライベートな用事程度で…

ScrapboxでMermaidを使う

筆者の勤務先ではScrapboxというWiki的なツールが導入されていて、何でもそこに書いている。 そして筆者は以前からPlantUMLなどで作図するのが気に入っているが、最近は同様の目的を持ったMermaidがよく使われている様子がある。2021年12月にはNotionが、そ…

GitHub ActionsでDocker Buildするときのキャッシュテクニック

GitHub Actionsでdocker buildすることが多い。このときのキャッシュをどうするかという話題。 基本 GitHub Actionsでdocker buildしてAmazon ECRにdocker pushする、典型的な.github/workflow/docker-push-to-ecr.ymlはこういう感じ。 name: Push to Amazon…

いいマイクアームを買った

春にShure MV7というマイクを買って、快適に過ごしていた。 快適に過ごしていたけど、このとき適当なマイクアームを買っていたことで、気になるところがあった。 口から近い位置に設置できた方がいいので、適当な安いアームも買った。 マイクアームとしての…

macOSのメモからMarkdownを作るショートカット

macOS Montereyから、「メモ」アプリに「クイックメモ」という機能がついた。 インターネットブラウジングをしていて気になったことを書きつけていくのにちょうどよさそうなので、使ってみることにする。ある事柄に関連するリンクをひとつのメモに連ねていっ…

AndroidのウィジェットをComposeのAPIで開発できるGlanceはアルファ版が開発中

AndroidのウィジェットをComposeのAPIで作る方法がAndroid Dev Summitで紹介された。RemoteViewにうまく対応する。 Glanceと呼ばれていて、コードは公開されている。 しかしまだアルファ版も出ていない。 アルファリリースに向かって開発中らしい。 Okey, so…

Xcode 13.2とSwift Concurrencyのバックデプロイメント、iPadOS向けのSwiftUIでのアプリ開発をサポートしたSwift Playgrounds、macOSでのSharePlayとUniversal Controlはこの秋にリリースされる

この秋のうちにSharePlayとUniversal ControlをサポートするmacOS Montereyがリリースされる。バージョン番号はおそらく12.1になるだろう。 Available later this fall macOS Monterey - Apple 同じタイミングでmacOS Monterey 12.1のSDKを含んだXcode 13.2…

WEB+DB PRESS Vol.125の特集「GraphQL完全ガイド」を執筆しました

今週、10月23日(土)に発売されるWEB+DB PRESS Vol.125に掲載される、特集記事「GraphQL完全ガイド」を執筆しました。よろしくおねがいします。 桃栗三年、GraphQL 6年 原稿を書く過程で、知っているはずのことでも改めて調べなおしたりする。特に歴史みた…

GitHubの新しいプロジェクトを使ってみている

新しいものが好きなので、GitHubの新しいプロジェクトで仕事をしている。まだベータ版だが、少し前に会社のアカウントで有効になったので、所属するチームで大喜びで使い始めた。 もともとしばらくAsanaを使っていて、Asanaはタスクに依存関係がつけられたり…

Swift ConcurrencyのwithTaskCancellationHandlerとSendable

Swift 5.5がリリースされた。おめでとうございます。 Swift 5.5の目玉はもちろんSwift Concurrencyだ。言語機能として並行処理がサポートされた。async/awaitの構文だけでなく、Structured Concurrencyとしての整理や、actorの導入など、野心的な取り組みと…

WWDC21大夢想

毎年この時期になると、毎日のようにWWDCのことを夢想している。 去年はSwiftUIのアップデートとApple Silicon搭載のMac、ホーム画面のウィジェットに期待していた。 去年の期待は、いろいろなことをうまく言い当てているようにも見えるし、少し過剰なところ…

SwiftUIのDynamicPropertyを試す

SwiftUIにはDynamicPropertyというprotocolがある。 これを使ってみようという趣旨の記事を見かけた。 ので、私も試してみました。 @Now import Combine import SwiftUI class Clock: ObservableObject { @Published private(set) var date: Date = Date() i…