ブックマーク / cockscomb.hatenablog.com (29)

  • Rust 1.75.0のasync fn in traits - cockscomblog?

    Rustでツールを書こうとして、コンポーネントを差し替えられるようにtraitとして定義した。GUIプログラミングの習い性で、IOが発生するメソッドは非同期にしたいから、asyncキーワードをつける。ここでは、何か文字列を読み込む予定のLoader traitを定義する。 use std::error::Error; trait Loader { async fn load(&self) -> Result<String, Box<dyn Error>>; } このコードを書き始めた時点で、このコードは有効ではなかった。Rustではtraitにasyncメソッドを持たせられなかったのだ。そこで、async-trait crateの出番となる。 use std::error::Error; use async_trait::async_trait; #[async_trait] trait

    Rust 1.75.0のasync fn in traits - cockscomblog?
    questbeat
    questbeat 2024/01/03
  • 2023年の「散財 of the Year」 - cockscomblog?

    買ってよかった2023ということで2023年の「散財 of the Year」を発表します。 Best おもちゃ 今年のBestおもちゃはガンプラ。ガンプラは小学生か中学生くらいの頃にいくつか作ったが、それ以来、20年以上ぶりにプラモデルを作った。 小学生になった息子と作ったら楽しかろうと思って、子供でも簡単そうなものと、大人でも楽しめそうなものを少しずつ買った。息子だけでなく4歳の娘もすっかり虜になり、3人でHGのガンプラを作ったりもしている。 自分でも、工具をいくらか買い揃えて、RGを2つとHGを2つ作った。ニッパーでパーツを切り離し、ヤスリでゲート跡を目立たなくして、スミ入れでディテールを足していく。この地味な工程を延々繰り返しながら、最近の出来事を思い返したりする。そういうことをしていると、何やらセラピーのように感じられる。 BANDAI SPIRITS(バンダイ スピリッツ) R

    2023年の「散財 of the Year」 - cockscomblog?
    questbeat
    questbeat 2023/12/31
  • SwiftにおけるTyped throwsの現在 - cockscomblog?

    現在Swift Evolutionで議論されているSE-0413 Typed throwsについて、Swift歴史を辿りながら紹介します。 この記事ははてなエンジニア Advent Calendar 2023の9日目の記事です。昨日は id:kouki_dan のiPadだけでアプリを作ってみるでした。ファスティング中の id:kouki_dan を関モバに誘ったのは私です。お誕生日おめでとうございました。 Swiftのエラーハンドリング Swiftのエラーハンドリングでは、2015年6月のSwift 2.0のリリース以来、エラーに型がつかない。Errorプロトコルに準拠したなんらかの型が投げられるということだけ決まっていて、それが実際にどうであるかを確認するのは(あるいは確認しないのは)、呼び出し側に任されている。do文のcatch句にはパターンが書けるので、必要に応じてハンドリングで

    SwiftにおけるTyped throwsの現在 - cockscomblog?
    questbeat
    questbeat 2023/12/10
  • 3DプリンタでMagSafe充電器スタンドをつくる - cockscomblog?

    この秋にリリースされるiOS 17では、充電中のiPhoneに情報を一目でわかるように表示する「スタンバイ」機能が搭載されるそうだ。iPhone 14 Proの常時表示ディスプレイと組み合わせると便利そうだ。 これを活用するには充電中のiPhoneを一定の角度に保つ充電スタンドが必要になる。MagSafe充電器 ワイヤレスなら、充電器ごとに設定を記憶してくれるようだから、MagSafe充電器タイプが望ましい。市場には、MagSafe充電器が一体になったスタンドや、単体のMagSafe充電器と組み合わせて使う製品がある。今回は3Dプリンタを買ったことだから、メイカー精神を発揮してみる。 試作1号 MagSafe充電器の大きさをノギスで測ると、直径は55.9 mm、厚みは5.5 mmある。そこから例によって、Fusion 360でモデリングする。MagSafe充電器が少し高い位置に一定の角度で

    3DプリンタでMagSafe充電器スタンドをつくる - cockscomblog?
    questbeat
    questbeat 2023/08/24
  • huggingface/transformersでストリーミング - cockscomblog?

    AIにテキストを生成させるサービスでは、テキスト生成の速度が遅いとユーザー体験がよくない。ChatGPTは、生成されたテキストが一度に表示されるのではなく、少しずつ表示されるUIになっている。このことで、テキスト生成の完了まで待たずに結果を確かめられる。 テキスト生成の結果を少しずつ表示するためには、生成途中のテキストがストリーミングで返される必要がある。OpenAIAPIにはstreamオプションがあり、有効にするとserver-sent eventsで結果を返してくれる。 huggingface/transformersのStreamer OpenAI APIではなく、自分たちでhuggingface/transformersを動かしている場合、ストリーミングは困難だった。transformersにはストリーミングをサポートするAPIがなかったためである。 ところが、最近になってこれ

    huggingface/transformersでストリーミング - cockscomblog?
    questbeat
    questbeat 2023/04/11
  • 1Password CLIで.env.localを作る - cockscomblog?

    1PasswordにはVS Code拡張があって、.env ファイルなどにハードコードされたシークレットを1Passwordに保存して、secret reference というURL形式に置き換えてくれる。 ちなみにコミュニティ製のJetBrains IDE用の拡張もある。 これを使って .env.local.template を作る。 TWITTER_CONSUMER_KEY='op://Private/Twitter/API Key/consumer_key' TWITTER_CONSUMER_SECRET='op://Private/Twitter/API Key/consumer_secret' op:// のところがsecret reference。 .gitignore ファイルでは .env.local は無視しているけど、.env.local.template はリポジトリ

    1Password CLIで.env.localを作る - cockscomblog?
    questbeat
    questbeat 2022/12/28
  • ショートカット.appでjq - cockscomblog?

    jq jqはJSONをいい感じにクエリできるやつで、広く使われている。 $ echo '{"foo": "bar"}' | jq '.foo' "bar" 例えばGitHub Actionsのランナーにもデフォルトで入っている。 あるいはGitHubのCLIツール gh にも --jq オプションがあって、統合されている。 つまりソフトウェアエンジニアにとっては、jqはJSONを触るときのデファクトスタンダードツールと言える。 ショートカット.app iOS/iPadOS/macOSには、ショートカット.appがある。特に説明は不要と思う。 ショートカットでなんらかのJSON APIを利用したい場合、「URLの内容を取得」アクションでデータを取得して、「辞書の値を取得」(あるいは「リストから項目を取得」)アクションで情報を取り出す。 これでいいといえばいい。が、やはりjqを使いたい。 Sw

    ショートカット.appでjq - cockscomblog?
    questbeat
    questbeat 2022/12/24
  • SwiftUIでSFSafariViewControllerを使う手法の探求 - cockscomblog?

    SwiftUIからSFSafariViewControllerを使いたい場面は多い。 SafariView SFSafariViewControllerはビューコントローラーだから、UIViewControllerRepresentableを使ってSwiftUIのビューにしてしまうのが簡単か。 import SwiftUI import SafariServices struct SafariView: UIViewControllerRepresentable { typealias UIViewControllerType = SFSafariViewController typealias Configuration = SFSafariViewController.Configuration private let url: URL private let configuratio

    SwiftUIでSFSafariViewControllerを使う手法の探求 - cockscomblog?
    questbeat
    questbeat 2022/12/06
  • macOSのコンテナ開発環境におけるVirtualization frameworkの採用 - cockscomblog?

    Docker Desktop for Mac Docker Desktop for Macでは、仮想マシン上のLinuxDockerを動かしている。仮想マシンにはhyperkitやQEMUが使われていた。が4.14.0からVirtualization frameworkがデフォルトで使われる。 Set Virtualization framework as the default hypervisor for macOS >= 12.5. Virtualization frameworkはmacOS内蔵の仕組みで、macOS 11で導入されてから、徐々に機能が拡張されている。Virtualization frameworkは高レベルなAPIで、より低レベルなAPIとしてmacOS 10.10から搭載されているHypervisor frameworkがあり、おそらくVirtualizati

    macOSのコンテナ開発環境におけるVirtualization frameworkの採用 - cockscomblog?
    questbeat
    questbeat 2022/11/28
  • ステージマネージャの使い方 - cockscomblog?

    macOS VenturaおよびiPadOS 16で導入されたステージマネージャだけど、どうやって使うのか段々わかってきた。 ステージマネージャのコンセプト ステージマネージャは、ウインドウのセットを作る機能だ。タスクに合わせてウインドウのセットを作れば、複数のタスクを行ったり来たりする場合に、ステージマネージャの切り替えをするだけでよくなる。 例えば、Webサービスを作っているとき、筆者の場合、Visual Studio CodeとTerminalGoogle Chromeを使う。これをひとつのセットにまとめておく。iOSアプリを作っているときは、XcodeとSimulatorをセットにする。同僚とのコミュニケーションや通知を受け取るのに、Slackとメールもセットにしておく。作業内容に応じてこれらを切り替えながら仕事を進めていくイメージだ。 ステージマネージャの使い方 Appleのド

    ステージマネージャの使い方 - cockscomblog?
    questbeat
    questbeat 2022/10/29
  • AWS LambdaでSlackアプリを動かす - cockscomblog?

    プライベートな用事でサーバサイドで何かやりたい場合、サーバレスな構成が第一選択になる。規模が十分に小さい場合、サーバレスにした方が安い。常にインスタンスが立ち上がっているような構成は(たとえ冗長構成を取らなくても)プライベートな用事程度では大げさになる。またサーバレスな構成は放置しやすいのも魅力である。 Lambdaで動くcockscombot 最近、サーバサイドで何かしたあとの通知先としてSlackを使っている。Slackはちょっとしたユーザーインターフェースの代わりになる。その延長線上でSlackアプリを作ってみようと考えた。Slackが提供しているBoltというのを使うと、Slackアプリが簡単に作れる。 Slack | Bolt for JavaScript | Bolt 入門ガイド BoltはAWS Lambdaにデプロイできるようになっている。ドキュメントではServerles

    AWS LambdaでSlackアプリを動かす - cockscomblog?
    questbeat
    questbeat 2022/03/07
  • Relayに学ぶGraphQLのスキーマ設計 - cockscomblog?

    2018年の初めくらいから、仕事GraphQL APIを何度も作っている。サーバーサイドもクライアントサイドも実装している。 最近クライアント側にRelayを使ってみている。 GraphQLのクライアントとしてはApolloを使う場合が多いと思うが、Facebook製のRelayもかなりよくできている。以前はTypeScriptに対応していなかったが、今はTypeScriptも使える。最近のバージョンではhooksのAPIがexperimentalではなくなり、ReactのSuspense API(Suspense for Data Fetchingは使わずに)と合わせて使える。 RelayはGraphQLのスキーマに制約を設けることで、クライアント側のAPIがデータの再取得やページネーションなどを抽象化している。換言すると、Relayからデータの再取得やページネーションに必要なスキーマ

    Relayに学ぶGraphQLのスキーマ設計 - cockscomblog?
    questbeat
    questbeat 2022/01/13
  • macOSのメモからMarkdownを作るショートカット - cockscomblog?

    macOS Montereyから、「メモ」アプリに「クイックメモ」という機能がついた。 インターネットブラウジングをしていて気になったことを書きつけていくのにちょうどよさそうなので、使ってみることにする。ある事柄に関連するリンクをひとつのメモに連ねていって、ちょっとテキストで補足を書いておく。 これをブログで手軽に共有できたら、なおいい。Markdown形式に変換したい。 メモの文を取得する メモの内容を取得するには、Apple Script的なやつを使う。ここではJXA (JavaScript for Automation)というので、JavaScriptっぽく書く。選択中のノートの文を得るには、次のようにする。 const app = Application("Notes"); console.log(app.selection()[0].body()); これでノート文がHTM

    macOSのメモからMarkdownを作るショートカット - cockscomblog?
    questbeat
    questbeat 2021/12/09
  • Swift ConcurrencyのwithTaskCancellationHandlerとSendable - cockscomblog?

    Swift 5.5がリリースされた。おめでとうございます。 Swift 5.5の目玉はもちろんSwift Concurrencyだ。言語機能として並行処理がサポートされた。async/awaitの構文だけでなく、Structured Concurrencyとしての整理や、actorの導入など、野心的な取り組みと言える。 Swift Concurrency Swift Concurrencyに直接関係するSwift Evolutionの提案はこれだけある。 SE-0296 Async/await SE-0297 Concurrency Interoperability with Objective-C SE-0298 Async/Await: Sequences SE-0300 Continuations for interfacing async tasks with synchronou

    Swift ConcurrencyのwithTaskCancellationHandlerとSendable - cockscomblog?
    questbeat
    questbeat 2021/09/26
  • ちょっとスクリプトを書くくらいの気持ちで作るSwiftUIアプリ - cockscomblog?

    12年前くらいからiOS向けのアプリを作ってきた。最初は学生の個人開発、途中から仕事、そして最近は(仕事ではあまりやらなくなったので)趣味的にやっている。UIKitで、はじめの頃はUITableViewが難関だった。毎年のアップデートUIKitはどんどん拡充されて、Objective-CはMRCからARCへ、そしてSwiftも出た。 毎年の変化を差分で学んできて、振り返ってみると、当初のそれからは大きく変わっていて、便利なんだけど、とにかく膨大だ。 SwiftUIの登場 というところで、2019年にSwiftUIが出た。SwiftUIを使うと、宣言的にユーザーインターフェースを構築できる。UIKitでできること全てをSwiftUIで実現できるわけではないが、それでも2020年のアップデートでかなりカバー範囲が拡がった。 それで、SwiftUIでちょっと何か作ったりしている。例えばメニュー

    ちょっとスクリプトを書くくらいの気持ちで作るSwiftUIアプリ - cockscomblog?
    questbeat
    questbeat 2021/02/19
  • SwiftUIにおけるActionパターン - cockscomblog?

    SwiftUIはWWDC20で大きく更新された。アプリ全体をSwiftUIで作る方法が確立されたほか、新しい抽象がいくつも導入されている。どれも非常に興味深いが、記事ではその中からActionパターンを見出し、紹介する。 Actionの導入 WWDC20ではSwiftUIに、以下の4つの「Action」が導入された。 OpenURLAction ImportFilesAction ExportFilesAction ResetFocusAction また対応するプロパティがEnvironmentValuesに追加されている。 ドキュメントに使い方が載っている。 struct SupportView : View { @Environment(\.openURL) var openURL var body: some View { Button(action: contactSupport

    SwiftUIにおけるActionパターン - cockscomblog?
    questbeat
    questbeat 2020/07/16
  • WWDC20で何が発表される?予想をまとめてみました! - cockscomblog?

    2020年のWWDCは、新型コロナウイルスによる感染症拡大のため、ほかの様々なイベントと同様に開催形式が変わる。現地時間の22日(日時間では23日)、KeynoteとPlatforms States of the Unionが行われ、その後に様々なセッションビデオが公開される予定だ。 WWDC20 期待 Appleプラットフォームの開発者としては、WWDCは一年で最大の楽しみである。昨年はCatalystやSwiftUIが発表され、たいへん盛り上がった。今年は何が発表されるのか、否が応でも期待が高まる。 SwiftUI 2 今年はとうぜん、SwiftUIの大幅なアップデートが出てくるだろう。画面いっぱいに「SwiftUI 2」の文字が大写しになるのが待ち遠しい。SwiftUIでアプリを作ろうとするとすぐに気づくのだが、SwiftUIはまだ機能不足である。 WKWebViewをラップしたW

    WWDC20で何が発表される?予想をまとめてみました! - cockscomblog?
    questbeat
    questbeat 2020/06/21
  • Swift AWS Lambda Runtimeを試す - cockscomblog?

    2020年5月末に、 SwiftAWS Lambdaで動作させるプロジェクトが発表された。swift-server/swift-aws-lambda-runtimeがそれである。ということで、AWS CDKでAPI GatewaySwiftLambda Handlerを作ってみた。 Lambda Runtime AWS Lambdaは、AWSのFaaS。提供されているランタイムを使えば、ソースコードをアップロードするだけで、関数が実行できる。提供されているランタイムはNode.jsやPythonRubyJavaGo、.NET Coreである(徐々に拡充されていった)。そして2018年のre:Inventで、Lambda LayerとLambda Runtime APIが発表され、swift-aws-lambda-runtimeでは、このRuntime APIを利用している。 L

    Swift AWS Lambda Runtimeを試す - cockscomblog?
    questbeat
    questbeat 2020/06/17
  • SwiftUIではSingletonの代わりにEnvironmentを使うことができる - cockscomblog?

    ここで言うSingletonというのは、ある種のグローバル変数を指している。そもそもクライアントアプリケーションの開発においては、実質的なグローバル変数が出現しやすい。環境にたった一つしか存在しない、存在すべきでない、というものが見出せる。例えばタイムゾーンがそれである。アプリケーション内のタイムゾーンはシステムに合わせるのが自然であり、アプリケーション中で複数存在することはほとんど起こり得ない。 iOSやmacOSでは、タイムゾーンを表すのはFoundation frameworkのTimeZoneである。システムのタイムゾーンはTimeZone.currentで取得できる。これはSingletonパターンのインターフェースに近い(当にインスタンスが一つであるかどうかをここでは問題にしない)。 このように環境中で存在する個数が限定されるような値を表すのに、Singletonパターンが用

    SwiftUIではSingletonの代わりにEnvironmentを使うことができる - cockscomblog?
    questbeat
    questbeat 2020/01/27
  • 紛らわしい文字列をもっと紛らわしくする - cockscomblog?

    同僚にid:yashigani_w(ヤシガニ)とid:yigarashi(ワイイガラシ)がいる。いかにも似ているが、あるとき一緒に仕事をすることになって、紛らわしさが限界を超えた。 yashigani yigarashi そうとわかって見たら、なるほど「y」で始まって「i」で終わるのが似ているね、くらいに思うかもしれない。しかし不意にSlackGitHubで見かけると、一瞬どちらかわからない。 この紛らわしさをより俯瞰してみるため、画像にしてみました。 Photoshopで作った どうだ紛らわしいだろう。全体的な形がなんだか似ている。 ところでこの画像はPhotoshopで作った。テキストにガウシアンぼかしをかけて、その後から二値化した。なかなかかっこいいから、もっといろいろ試してみたい。 前置きが長くなったが、テキストにガウシアンぼかしをかけて、その後から二値化 するのを、macOS

    紛らわしい文字列をもっと紛らわしくする - cockscomblog?
    questbeat
    questbeat 2020/01/06