サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
zenn.dev/voluntas
Erlang R12B からお金を稼ぐ道具として Erlang/OTP を使ってきた 感謝はすれど愚痴は特にない 好きな環境で開発しろ Erlang VM は偉大だから安心しろ。 依存ライブラリは可能な限り最小にしろ Erlang/OTP のようなマイナー言語のライブラリはよほどのことがない限り、メンテナンスされない。 継続してメンテナンスされるライブラリほぼない。利用するのは企業が開発している OSS のみに絞れ。 ライブラリは自作できないなら Erlang/OTP は使うな 自分たちで作れなければ Erlang/OTP を使うのは止めろ spawn 使うな gen_server 使え。 何でもかんでも Erlang/OTP でやるな 色々遅いから頑張るな、ネットワークサーバーを作るのにだけ使え。 遅いのは覚悟しろ C++/Rust と比べて 2 倍以上は遅い。 NIF は使うな C/C
なぜブラウザコードエディタなのか DuckDB-Wasm をブラウザで触る場合、コードエディタが欲しい PGLite が出てきたいま、ブラウザで SQL を書く機会がある Wasm との相性が良い LSP がブラウザで利用できると世界が変わる LSP を Rust で開発して Wasm でというのはスタンダードになると思っている Rust で書かれた Postgres LSP も出てきている supabase-community/postgres_lsp: A Language Server for Postgres Playground があるとないでは世界が違う ブラウザで YAML / JSON を書く際、コードエディタがあるないでは全然違う 利益が出ない部分でもあるので、投資されにくいので差別化がしやすい ユースケース home/admin のダッシュボードでの DuckDB-Wa
モチベーション Postgres は OLTP として利用したい DuckDB は OLAP として利用したい 集計を Postgres でやらず、独立した DuckDB でやりたい データ保存は S3 を利用したい 保存先として一番安い 一定期間経ったら削除が簡単にできる 細かいデータ処理は DuckDB-Wasm を利用してクライアント側のリソースを利用したい 一度前処理したデータは S3 に Parquet 形式で置いておきたい 転送量ボトルネックに寄せる Cloudflare R2 などを利用すれば転送量はかからなくなる 概要 DuckDB は Postgres に直接アクセスできる仕組みを持っている PostgreSQL Extension – DuckDB Postgres のテーブルを DuckDB に持ってこれる COPY でテーブルを Parquet ファイルにすることが
前提 自社製品では JSONL 形式のログが色々出力される 自社製品は分散システムなためログも分散する 自社サービスのログファイルは大きくても無圧縮で 1 日 100 GB いかない程度 Fluent Bit で gzip で圧縮した JSONL 形式のログを S3 互換オブジェクトストレージ (以下 S3) に保存する モチベーション 自社パッケージ製品のクラウドサービスで、顧客にログ解析情報を提供したい その仕組みを OSS 化して、自社パッケージ製品を利用している顧客が利用できるようにしたい S3 から gzip で圧縮された JSONL ログ(複数) を取得して、横断的に解析したい 自動でスキーマは作成してほしい 解析結果を DuckDB ファイルとして出力し S3 へ保存したい 出力した DuckDB ファイルを DuckDB-Wasm で読み込ませたい コストを低くしたい 転送
概要 Cloudflare の利用を徐々に減らし、Akamai Connected Cloud へ移行しているのでそれを記録していくことにする。 移行理由 ただのアンマッチで、自分のサービス選定ミス。 自社の商用サービスが期待するレベルのサポートを得るには、Cloudflare エンタープライズプランが必須な事をわかっておらず、費用面でアンマッチになった。 サポートが必要になった状況 WebSockets · Cloudflare Network settings docs 商用環境で WebSocket を利用する場合はサポート契約が必要 サポートに問い合わせ、年 2400 ドルのビジネスプランを契約を推奨されたので契約 Cloudflare LB で WebSocket が突然切断される問題 問題の報告から 6 ヶ月以上経過しても、連絡も無く問題も継続して発生 8 ヶ月目にやっと返信が
AWS については利用していないのでよくわからない。あくまで Erlang/OTP で書かれたミドルウェアのリプレイス事例として感想を雑に書く。ちなみに、現地で発表を聞いている。 一般的な感想 自分のような AWS 素人が見てもわかりやすいシンプルなシステムになっていた HTTP/2 を利用した独自プロトコルでの双方向通信が気になる TCP/IP を利用した大量の常時接続は本当に大変だとおもう カーネルパラメーターチューニング! 少ないリソースで、たくさんの接続を担う ゴールが素晴らしい デプロイの自動化を GitHub Actions でやってるのやっぱりいい 負荷試験にて1億台の接続を維持した状態で挙動が問題ないことを確認 最高 Graviton ベースの Fargate の活用 Go であれば arm64 向けバイナリがサクッと生成されるのは良い Erlang/OTP から Go へ
Radxa X4 Radxa X4 公式サイト Radxa X4 with Intel N100, Dual 4K Output, 2.5Gbps Ethernet, PCIe 3.0 M.2 M Key, WiFi 5/6, High-Performance SBC 公式販売サイト 最安60ドル。 Radxa「X4」はクレカサイズでIntel N100+RP2040に2.5GbE搭載のSBC | がじぇっとりっぷ このサイトが詳しいのでお勧め Intel N100 を搭載した Raspberry Pi サイズの SBC 価格が安い メモリ 4GB + WiFi 5 で $59.90 メモリ 8GB + WiFi 6 で $79.90 メモリ 8GB + WiFi 6 + eMMC 64 GB で $89.00 https://arace.tech/products/radxa-x4?va
まとめ 検索エンジンは DuckDuckGo を使っている DNS は NextDNS を使っている macOS / iOS / iPadOS で利用している 自社でも NextDNS を採用した ログはオフで運用 なぜ DuckDuckGo ? DuckDuckGo — Privacy, simplified. Google の検索結果があまりにも酷いと感じており、 uBlacklist を利用してブロックしていたがきりが無くなってきたので、切り替えた。 DuckDuckGo ブラウザは利用しておらず Chrome を継続して利用している Chrome Extension として DuckDuckGo Privacy Essentials を追加して利用している 特に困ることはない。今後も DuckDuckGo を使っていこうと思う。 DuckDuckGo Privacy Pro が日本
切り替えを辞めた Cloudflare から別サービスへの移行をしており Cloudflare Workers を利用しないことに決めた HTTP リクエスト経由での DuckDB 処理をしたいので Node.js だと厳しい sqlc-gen-typescript のメンテナンスが怪しい 今のまま Go を継続することにした。
JSR Meetup JSR が気になっていたことや、Deno の中の人が主催というのも良いなと思って、ささっと参加してきました。自分用に雑にまとめておきます。 https://jsr.io/ https://github.com/jsr-io/jsr ハッシュタグ 自分のメモ Deno Land Inc. が開発、運用しているパッケージレジストリ プライベートは今のところ予定されていない TypeScript をそのまま登録できる ESM 対応 OSS で開発されている 自前の JSR を立てることもできる 積極的に改善されていきそう ドキュメントが生成される Web UI がモダン Deno が流行らないと苦しそう @std を Deno が持ってるのは他からはちょっとな ... って思われそう キレイな npm 雑感 印象としては使ってみても良さそうという感じです。ただ無理に npm
主力製品の Python SDK 主力製品向けの Python SDK を開発しています。Python といっても C++ SDK を nanobind を利用して作っているため、Python は全くといっていいほど利用していません。 ただ、サンプルや E2E テストはがっつり Python です。 dependencies は 0 です。 pyproject の一部 requires-python = ">= 3.10" [tool.uv] python-preference = "only-managed" dev-dependencies = [ "nanobind~=2.1.0", "setuptools>=75.0", "build~=1.2.2", "wheel~=0.44.0", "auditwheel~=6.1.0", "ruff>=0.6", "typing-extens
モチベーション ドキュメントに載せるサンプルコードを 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 を変更するとそこに影
色々古くなったので 1 から書き直した DuckDB メモ v2 モチベーション JSONL を読み込んで解析するツールが欲しかった ログを読み込ませたいので圧縮機能は必須 自社のパッケージ製品が出力する JSONL を読み込んで解析できる仕組み 顧客が問題解析を気軽にできるようにしたい 顧客向けツールとして提供したい つまり顧客環境で動かしたい 1 バイナリ OSS として提供したい Apache-2.0 として公開したい ログファイルは大きくても 100 GB は行かない もともと Go + SQLite + JSONB で検討していた SQL で書きたい SQLite ファイルとして書き出したい SQLite ファイルフォーマットは信頼できる S3 などにファイルを置いておくだけにしたい クラウド版に組み込みたい 顧客毎に duckdb ファイル作ればいいのでは? duckdb ファ
前提 開発と運用は担当していない 技術選定のみ担当している 細かい技術の話はしない 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
2024 年 6 月 1 日 元々問題が発生していた Cloudflare LB で突然 Cloudflare LB のサブスクリプションが解約されるという大障害が発生し、サービス提供困難な状況に追い込まれました。有償契約をしていたサポート対応が残念ながら期待したレベルではなかったので、 Cloudflare LB の利用を取りやめました。また Cloudflare の利用を徐々に減らしていっています。 Cloudflare Status - Billing Subscription Update and Invoice Issues Cloudflare の利用を徐々に減らして行くメモ この資料は Cloudflare LB で発生している WebSocket が突然切断される問題をまとめたものです。 前提 問題が発生していたのは Pro プラン 今回の検証前に Business プラン
$ 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 の登録方法 認証されていな
iCloud に切り替えました たまにコミットができなくなる問題がある 大量の Gist があると読み込みが遅い iCloud のデスクトップに Memo というディレクトリを置いてそれを VS Code で読み込んで利用しています iCloud の同期が早いので便利
モチベーション 自社サービスで 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 時雨堂編」という無料のオンライン書籍をいつか書くための雑多なメモ。 著者 時雨堂の中の人 Erlang/OTP は R11 から Erlang/OTP を利用した商用パッケージ製品の開発者 WebRTC SFU Sora これから Erlang/OTP を学ぼうと思う人へ プログラミングErlang すごいErlangゆかいに学ぼう! すごいErlangゆかいに学ぼう!【委託】 - 達人出版会 もう電子書籍しかない まずこの2冊を購入してしっかり読み込んでほしい。自分もプログラミング Erlang をひたすら読み込んだ。 また、この 2 冊以外は日本語の書籍は読む必要はない。これに書いてい
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 LB で WebSocket が突然切断される問題 現時点で Cloudflare LB で WebSocket を利用する場合は問題が起きる場合がある。充分検証為てから採用する事をオススメします。 Cloudflare Status - Billing issues relating to subscription adjustments サブスクリプションのアップグレードおよびダウングレード時に機能が失われる問題が発生しております このサブスクリプションのダウングレードをすると機能が停止し、復旧できなくなる問題の影響を受けて、商用環境で Cloudflare LB が完全に復旧できなくなる状況が発生しました。 ビジネスプラン (年 2400 ドル) 程度のサポート契約では、残念ながらビジネスで利用できるレベルではなかったです。もしビジネスで利用される場合は、必ずエ
課金体系 無料枠 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 をアクセスするだけで作成してくれるサービスがあります。このサイトが本当に便利なので、紹介していきます。
次のページ
このページを最初にブックマークしてみませんか?
『voluntasさんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く