サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
zenn.dev/voluntas
時雨堂では Python や Python で書かれたツールをどのように利用しているかを書き出しておきます。 何に使っているか 主力製品の Python SDK 主力製品の E2E テストに pytest 標準ライブラリのみを利用したビルドツール 主力製品のクラウド版のツール IT 自動化システム Ansible ドキュメントツール Sphinx なぜ Pyhton 使い慣れてるから pytest が本当に良くできてるから 必要なライブラリが揃ってるから SpaceX がツールやテストに Python を採用していたから We are the SpaceX software team, ask us anything! Python for tools, testing and automation Rye / Ruff / uv Rust で書かれたツールを採用しています。 astral
モチベーション ドキュメントに載せるサンプルコードを E2E テストできるようにしたい Vite でマルチページ使いたい index.html と main.ts の組み合わせ Playwright で E2E テストを実行したい 戦略 src/index.html でそれぞれのサンプルに飛べるようにしたい env.local で必要な設定を指定できるようにしたい VITE_ を使う src/spam や src/egg とサンプル毎に細かく index.html と main.ts を用意したい vite 時はいいが、vite build 時に困るので対応する必要がある vite.config.js で rollupOptions の input を設定をする必要がある エントリーポイントを src/ 以下にしたい root で設定する .env のパスは root を変更するとそこに影
モチベーション JSONL を読み込んで解析するツールが欲しかった ログを読み込ませたいので圧縮機能は必須 自社のパッケージ製品が出力する JSONL を読み込んで解析できる仕組み 顧客が問題解析を気軽にできるようにしたい 顧客向けツールとして提供したい つまり顧客環境で動かしたい 1 バイナリ OSS として提供したい Apache-2.0 として公開したい ログファイルは大きくても 100 GB は行かない もともと Go + SQLite + JSONB で検討していた SQL で書きたい SQLite ファイルとして書き出したい SQLite ファイルフォーマットは信頼できる S3 などにファイルを置いておくだけにしたい クラウド版に組み込みたい 顧客毎に duckdb ファイル作ればいいのでは? duckdb ファイルダウンロードできると便利そう DuckDB https://d
前提 開発と運用は担当していない 技術選定のみ担当している 細かい技術の話はしない 2022 年 12 月にリリースしたサービスに Remix を採用した 開発は 2022 年 2 月からスタートして、2022 年 10 月から 1 から作り直した 顧客向けと社内向けのダッシュボードで採用した 利用技術の詳細 時雨堂クラウドサービスを支える技術 選定時のお気持ち プラットフォーマーが提供する Next.js は避けたい Cloudflare Workers をフレームワークが公式でサポートしていてほしい 最終的に Remix は Cloudflare Pages/Workers しか公式でサポートしなくなった Cloudflare Workers 有料プラン (最小 $5/月) を利用しコストを下げたい Cloudflare LB でバックエンドと通信する前提 BFF (Backends
モチベーション そもそも TypeScript や JSX に詳しくないのでどう書くのがいいのか悩みたくない ESLint や Prettier の設定を なんとなく 設定して使ってしまっている Formatter / Linter 関連のライブラリの内容を理解せずにアップデートしてしまっている 依存関係は減らしていきたい Rust で書かれた言語向けの高速なツールが好き Rye とか Ruff とか efmt とか Biome Biome は Rust で書かれた Formatter / Linter を含むツール。本当におかしいくらい早い。 全然大きくないが、以下のソースコードに適用したときの速度。 $ pnpm run fmt > biome format --write ./src Formatted 114 file(s) in 11ms $ pnpm run lint > bi
まとめ 問題の報告から 6 ヶ月以上経過していますが、連絡も無く問題も継続して発生しています。 Cloudflare LB の WebSocket の突然切断されるのにプランは関係ない サポートから回答 Cloudflare LB の WebSocket のタイムアウトは 100 秒 サポートから回答 Cloudflare 側は問題は把握しているが、すぐ解決できる感じではなさそう サポートからの返信で、まずはログの調査からという感じだった ログは提出済み Cloudflare 側のデプロイで切断されるのは思った以上短い間隔で発生する 実際、数日の検証中に発生している これはドキュメントに掲載されていることで知っていたが数ヶ月とかのスパンだと思っていた 商用環境での Cloudflare LB 経由の WebSocket 利用を取りやめた。Cloudflare LB を利用しなければ数日間接
$ rye install optuna Collecting optuna Downloading optuna-3.1.1-py3-none-any.whl (365 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 365.7/365.7 kB 1.7 MB/s eta 0:00:00 Collecting alembic>=1.5.0 (from optuna) Downloading alembic-1.11.1-py3-none-any.whl (224 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.5/224.5 kB 2.3 MB/s eta 0:00:00 Collecting cmaes>=0.9.1 (from optuna) Downloading cmaes-0.9.1-py3
ChatGPT Plugin メモ 実現したいこと 自社製品のドキュメントを ChatGPT Plugin から利用できるようにしたい 運用は楽をしたい ドキュメントは頻繁に更新するので、更新したら自動で反映されるようにしたい 現時点での理解 OpenAI の Embeddings API を使ってドキュメントをベクトル化する ベクトル化したドキュメントをベクトルデータベースに保存する ChatGPT Plugin からベクトルデータベースにアクセスして、ベクトル化したドキュメントを取得する これを実現すれば良さそう。 TODO rst を効率よくベクトル化する方法 API で利用可能な トークンサイズ (8000 程度?) を超えている文章のときどう分割するか ChatGPT Plugin からベクトルデータベースへのアクセス方法 ChatGPT Plugin の登録方法 認証されていな
前提 ローカルとオンラインで同期してくれるメモツールが欲しかった 色々触ってみたがぐっとくるものがなく、VIM モードが最初からある HackMD を使っていた ふと Gist を VS Code で編集できたりしないのだろうかと思い拡張を検索してみたところ、GistPad を見つけた。アクティブに更新している Gist が大量にあり管理できるツールを探していただけ。 GistPad - Visual Studio Marketplace 結論 恐ろしく便利 VS Code 拡張が好きなだけ利用できる VS Code 拡張 クローズドなメモ帳としては文句ない 連携は向いていないので連携したい場合は別のツールを使うべき ネガティブはモバイルから利用できないことくらい 自分にとって何が GistPad は良かったか VS Code ベースなので VS Code の拡張が全て利用可能 VS Co
モチベーション 自社サービスで WebAuthn を提供したい Cloudflare Workers で完結して WebAuthn 機能を提供したい メール認証をベースとして WebAuthn を追加で設定できるようにしたい Passkeys を利用できるようにしたい Cloudflare Workers の Service Binding を利用して env.webauthn.fetch("/register-challenge") とか呼べるようにしたい https://developers.cloudflare.com/workers/platform/bindings/about-service-bindings/ Cloudflare Workers だけで動く依存ライブラリがない WebAuthn サービスを利用する 状況 自社サービスに導入するために 1 から調査しながら実装
これは「プログラミングErlang」と「すごいErlangゆかいに学ぼう!」を読み終わった人向けの 「プロフェッショナル Erlang/OTP」というオンラインブックをいつか書くためのメモ。 著者 時雨堂の中の人 Erlang/OTP は R11 から Erlang/OTP を利用した商用パッケージ製品開発者 WebRTC SFU Sora これから Erlang/OTP を学ぼうと思う人へ プログラミングErlang すごいErlangゆかいに学ぼう! まずこの2冊を購入してしっかり読み込んでほしい。自分もプログラミング Erlang をひたすら読み込んだ。 また、この 2 冊以外は日本語の書籍は読む必要はない。これに書いていない事は Erlang のドキュメントやソースコードを読む。資料では、この 2 冊に足りていない部分を書いていく。 ドキュメント https://www.erlan
Cloudflare から Cloudflare Workers で利用できる Queue がオープンベータとして発表された。軽く触ってみた感じ、かなり欲しかった機能。自分用にメモしていく。 ざっくり wrangler で queue を作成して、wrangler.toml に設定する worker から MY_QUEUE.sent(Object) のように書き込む Queue に書き込まれたメッセージは async queue(batch, env) で受け取れる つまり worker 間でのやりとりを queue 経由でできるようになる。 公式資料 ドキュメントとオープンベータのブログがあるので、それを読めば良い。 Cloudflare Queues · Cloudflare Queues Build applications of any size on Cloudflare wit
モチベーション ドキュメントツール Sphinx から出力した HTML オンラインドキュメントに日本語対応の全文検索機能を追加したい。 結果 オンラインドキュメントと日本語全文検索 前提 日本語全文検索に対応する OSS を利用する ドキュメントツールは Sphinx を利用する Sphinx の検索バーを置き換える サーバレスの検索は諦める サーバ運用を検討する 企業利用前提なので費用がかかっても良い 検索は難しいので検索部分は頑張らない 完璧は求めない reStructuredText を解析するのではなく HTML を解析して処理する Meilisearch を採用 いろいろ調べたりしていたが Meilisearch が良さそうと判断した。 Meilisearch 日本語検索に対応している Rust で書かれており性能がでそう Rust であれば問題が起きた際、会社でなんとかできる
Zig に関する自分なりのメモを残しています。 学ぶモチベーション C++ や Rust を学ぶには難しそう Erlang VM の NIF 経由で Zig で書かれたライブラリを呼び出したい Zig で HWA を利用したエンコーダーとか作ってみたい macOS もしくは Linux で動けば良い Wasm に出力してブラウザで利用したい Zig の良いところ zig build は C のビルドツールとしても有用そう allocator の概念がわかりやすい std.crypto が充実している zig test がよくできている switch が好み 利用目的 WebTransport HTTP/3 QUIC HTTP/2 MLS (C++ / Wasm) Signal Protocol (C++ / Wasm) AV1 / VPX / Opus / Lyra 翻訳 自分向けに Zi
Cloudflare Load Balancing 普通の LB と何が違うのかというと、WAF やら Cloudflare Workers の後ろに置けるというのが大きい。さらに今話題の Cloudflare Zero Trust も利用できる。 以下のトラフィックシーケンスをみてぐっと来た人は黙って使うべき。 参考 Cloudflare Load Balancing | DNS Based Load Balancing Solution | Cloudflare Cloudflare Load Balancing · Cloudflare Load Balancing docs なぜ採用したのか マルチクラウドを採用したいが、自前で LB を立てるのはめんどくさい、そこで最初は Cloduflare Workers を使おうと考えていたが、 Cloudflare Load Balanc
課金体系 無料枠 ingress / egress 転送量 無料 10 GB / month 無料容量 10 G Class A Operations 1,000,000 requests / month ListBuckets, PutBucket, ListObjects, PutObject, CopyObject, CompleteMultipartUpload, CreateMultipartUpload, UploadPart, and UploadPartCopy Class B Operations 10,000,000 requests / month HeadBucket, HeadObject, and GetObject Free operations DeleteObject, DeleteBucket and DeleteMultipartUpload. 有料
注意 とっても雑な検証なので参考などにはしないでください。ちょっとした興味で自分用に調べてるだけです。 結論 Echo を利用した秒 1 万リクエストを超えないウェブサービスで、かつ SQLite の機能で要件がみたせるのであれば、SQLite + Litestream 十分と判断出来る結果だった。 利用技術 Load testing for engineering teams | Grafana k6 Grafana に買収された Go で書かれた負荷試験ツール JS でシナリオが書ける Litestream - Streaming SQLite Replication SQLite リアルタイムバックアップツール mattn/go-sqlite3: sqlite3 driver for go using database/sql Litestream も使ってる 安心と信頼の matt
Litestream Litestream - Streaming SQLite Replication benbjohnson/litestream: Streaming replication for SQLite. SQLite を S3 のようなオンラインオブジェクトストレージにリアルタイムでレプリケーションをとる仕組み。 事例 A database for 2022 · Tailscale Tailscale が Litestream へ移行している
Webhook.site https://webhook.site/ というウェブフックを即座に受信できる URL をアクセスするだけで作成してくれるサービスがあります。このサイトが本当に便利なので、紹介していきます。
概要 S3 互換オブジェクトストレージの サービス を自分のためにまとめている。サービスとして提供されているのが前提で、 自前運用は範囲外 。 目的 以下の内容に絞って調べている。 日本リージョンの有無 egress の費用 容量の費用 追加調査予定 PutObject 対応 PresignedGetObject 対応 S3 互換 S3 互換の条件は s3cmd や aws sdk s3 がそのまま利用できる事。細かい互換性は気にしない。 比較用の AWS S3 https://aws.amazon.com/jp/s3/pricing/ 最小プラン Tokyo / Osaka リージョンあり 1 GiB 追加の egress 転送量は 0.114 ドル 1 GiB の追加容量は 0.025 ドル TODO SLA 書いてるのと書いてないのがあって拾いにくい 対象外 Azure は S3 互
自社パッケージ製品のクラウド版 を開発していて、色々やりたい放題やってるのでメモ。 方針 遠回り駆動開発 やりたい放題やる 王道は無視して「じぶんのかんがえたさいきょうの」をでいく 可能な限り OSS 開発元が提供しているクラウドサービスを利用する ベアメタルサーバーを使う 三大クラウドサービス (AWS, GCP, Azure) を使わない なぜ利用している技術を公開するのか 自社で使って良かった OSS やサービスはより多くの人に知って欲しいと考えています。 また、特に隠す理由がないというのもあります、むしろ大きな声で Tailscale や TimescaleDB 、 VictoriaMetrics 、Cloudflare 、DataPacket など、ほんとうに素晴らしい使わせて頂いていると言っていきたい。 我々が利用させて頂いている製品の企業や開発者の方へ とても素晴らしい製品を
前提 Cloudflare Workers は知っていたが最近触って、本番環境へ導入済み。 普段は Erlang/OTP を書いてるので JavaScript は専門外 自社サービスの本番環境には Cloudflare Workers を導入済み OpenResty はエンタープライズ大規模環境向けで設計/開発経験あり 雑感 Cloudflare Workers® ざーっと見た感じ Nginx + Lua (OpenResty) のマネージド、さらに Edge で動かしてくれて、スケールも勝手にしてくれるバージョンという認識。実際 shared.dict / redis の代わりが Workers KV が利用できる。 さらにローカル開発環境が充実している、デプロイ後のログ確認も管理画面から簡単に利用できる。 Lua Introducing Cloudflare Workers これを読む
前提 RDB や SQL 初心者 DynamoDB や Redis といった KVS は経験あり TimescaleDB を利用する Time-series data simplified | Timescale sqlc を利用 kyleconroy/sqlc: Generate type-safe code from SQL migrate を利用 golang-migrate/migrate: Database migrations. CLI and Golang library. TablePlus を利用 TablePlus | Modern, Native Tool for Database Management モチベーション 自社サービスのバックエンドで利用したい TSDB 機能も利用したい sqlc から利用したい 読んだドキュメント PostgreSQL 13.1文書
前提 ここで言っているドキュメントは仕様書ではなく、顧客向け製品ドキュメント。 ミドルウェア製品を開発 小さなチーム パッケージ製品とパッケージ製品のクラウド版 そのため顧客に提供するドキュメントが必ず必要 GitHub を利用 自分で開発する場合のフロー 作りたい機能をぼんやりでいいので GitHub Issue に追加する feature ブランチを切る デザインドキュメントをリポジトリの doc/ 以下に書く デザインドキュメントに合わせてコーディングを進めてなんとなく動くところまで作る 動かなくてもいいのでイメージを膨らませるためにコードを書いてみる デザインドキュメントは書き捨て前提で、とにかくメモを書く 製品ドキュメントを書き始めて、一旦書き終える ブランチマージに向けてコーディングを進める 書ける範囲でテストを書く ドキュメントを平行して修正する プルリクエストをだしてレビュ
このメモについて 自分向けの資料や記事やコードをまとめてあります 自分が調べて理解したこととかも雑に書いていきます。 モチベーション 一カ所にまとめておきたい 日本語訳重視 WebTransport のフォールバックについて WebTransport over HTTP/3 や WebTransport using HTTP/2 ではフォールバックについては一切触れられていない FallbackTransport はまだドラフトが出てきていない Fallback support への方針 Archive TCP へフォールバックすべき HTTP/2 へフォールバックすべき draft がでている WebTransport using HTTP/2 で行く Fallback support についての議論 Fallback support · Issue #107 · w3c/webtran
ブラウザは省略 オープンソースソフトウェア macvim-dev/macvim: Vim - the text editor - for macOS Visual Studio Code - Code Editing. Redefined iTerm2 - macOS Terminal Replacement VideoLAN CotEditor -Text Editor for macOS Wireshark · Go Deep. macOS(またはLinux)用パッケージマネージャー — Homebrew フリーソフトウェア The Unarchiver | Top Free Unarchiving Software for macOS 商用ソフトウェア iStat Menus Dash for macOS - API Documentation Browser, Snippet Ma
E2EE で守れないもの 悪意ある参加者 認証を握っているであろうサービスの管理者が悪意がある場合は拒否できない 悪意ある参加者を拒否するには本人確認がサービスとは別の仕組みでできる必要があり、それは E2EE とは関係ない ローカルへの保存 受信したデータをローカルで復号する以上は防げない、これはもうどうしようもない E2EE で求められるもの パケットへの署名 公開鍵ペアを生成し秘密鍵を利用してパケットに署名を行う事で途中でパケットが改ざんされていないことを確認する 公開鍵がサービス外の第三者によって共有されていることも重要となる これで悪意ある管理者がパケットを改ざんしていないことを確認できる 例えば接続完了時に公開鍵のフィンガープリントを口頭などで共有することで確認することができる Zoom や Cisco はフィンガープリントを数値のみにしたりして、共有しやすくしている メンバー
Cloubhouse はすでに OSS である Janus Gateway に切り替えており Agora は使用していないようです ライセンス Creative Commons — 表示 - 非営利 - 改変禁止 4.0 国際 — CC BY-NC-ND 4.0 前提 ざっくりと雑に解説。 どんな技術を使っていてこんな感じだろうという妄想は以下をどうぞ。 Clubhouse リアルタイム配信の仕組みについて (妄想編) 著者 商用 WebRTC SFU 開発者 WebRTC プロトコルスタック実装者 End to End Encryption プロトコルスタック実装者 Clubhouse の仕組みはとてもシンプルで配信者が N 人で、それを数千人が聞くという co-streaming と呼ばれる仕組みの一つ。この方式は今までは主に映像ありでパネルディスカッション的な使い方が主だっだ。それを
ライセンス Creative Commons — 表示 - 非営利 - 改変禁止 4.0 国際 — CC BY-NC-ND 4.0 前提 TURN サーバを間違って理解している人が多いので雑にまとめておく。 TURN プロトコル自体を知りたい場合 WebRTC で利用されいる TURN プロトコルの解説 著者 商用 WebRTC SFU 開発者 商用 TURN サーバ実装者 (WebRTC SFU に組み込み) WebRTC プロトコルスタック実装者 よくある間違い TURN サーバはリレーするパケットの中身を見ることができる TURN サーバを通るもともとのパケットを復号化したりしない ただ通信が暗号化されていなければ見ることはできる TURN サーバはスケールが難しい 1 接続事に独立しているので TURN サーバ同士で状態を共有する必要はないので難しくない Username / Cr
次のページ
このページを最初にブックマークしてみませんか?
『voluntasさんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く