タグ

golangに関するsh19910711のブックマーク (500)

  • GraphDBの「Dgraph」の話 - Goで叩く

    こんにちは。 もう、Webの開発を何年もやってきたのになと思うのに、まだまだ理解できてなかったことがあるんだなぁと日々痛感させられてるmasamikiです。 GraphDB こないだ GoORM「ent」の話 を書かせてもらったのですが、GraphQLを使う仕事も結構でてきたなと。 さてさて、同じGraphの名を冠するGraphDBとはなんでしょうか。 Graph自体はentでMySQLに対して表現していたように、DBによらず、そのデータ構造のモデルを作ることは難しくありません。 この記事の言葉をかりると Graph DBとは、index-freeな隣接する頂点を取得できるストレージシステムなら、それをGraphDBと呼べるそうです。 もうちょっと細かい定義としては、(といっても翻訳してるだけですが) すべての要素(つまり、頂点またはエッジ)には、隣接する要素への直接のポインタがある。

    GraphDBの「Dgraph」の話 - Goで叩く
    sh19910711
    sh19910711 2024/04/18
    "Dgraph: GraphQL(っぽいクエリ)を使えるむっちゃ速いGraphDB / Neo4jでGraphQLを使うためには、Extensionが必要だったり / SlashGraphQL: Dgraphを搭載したフルマネージドGraphQLバックエンドサービス" 2020
  • BigQuery Emulator をアップデートしました - Route54

    BigQuery Emulator の v0.6.0 をリリースしました。 今回のリリースでは、Recidiviz社 の @ohaibbq さんが多大な貢献をしてくださいました。Recidiviz社ではかなり前から BigQuery Emulator を使ってくれているようで、以前から Issue や DM などでそのことを伝えてくれていましたが、@ohaibbq さんが今Qエミュレータの改善にコミットできるということで、 Recidiviz社側で fork して使っていたものに加えていた patch をたくさん送ってくれました。 かなり多くの改善が入っているので、以前エミュレータを試して動かなかったクエリを再度試す良い機会かなと思っています。 @ohaibbq さんからは、嬉しいことに今後も貢献してくださると言っていただけているので、今後の改善も速いペースで進んでいくと思います。素晴らし

    BigQuery Emulator をアップデートしました - Route54
    sh19910711
    sh19910711 2024/03/12
    "BigQuery: Google はエミュレータの開発に4年前くらいにやる気は見せていますが、その後何もアクションをとっていません / go-zetasql の cgo 依存をやめて、WebAssembly ベースのバインディングに移行しようとしています"
  • O'REILLY の『Go言語でつくるインタプリタ』が良かったので、続きの洋書『WRITING A COMPILER IN GO』 もやってみた - Qiita

    O'REILLY の『Go言語でつくるインタプリタ』が良かったので、続きの洋書『WRITING A COMPILER IN GO』 もやってみたGoコンパイラ この記事は Go Advent Calendar 2022 カレンダー 2 の 21 日目の記事です。 『WRITING A COMPILER IN GO』という書籍を読んでコンパイラを作ってみたので、その書籍について紹介します。 『Go言語でつくるインタプリタ』と『WRITING A COMPILER IN GO』について まず、『Go言語でつくるインタプリタ』については、 O'REILLY から 2018 年に日語訳版が発売されたものとなります。 書籍で想定したオリジナルの言語 Monkey のインタプリタを実装していくという内容になっています。 ステップバイステップで少しずつ作っていく流れがわかりやすく、私も楽しくインタプリ

    O'REILLY の『Go言語でつくるインタプリタ』が良かったので、続きの洋書『WRITING A COMPILER IN GO』 もやってみた - Qiita
    sh19910711
    sh19910711 2023/02/15
    2022 / "インタプリタ本と同じ、Thorsten Ball さんが執筆 / 同じ Monkey のコンパイラを作成するという内容 / 「読者と一緒になって考えていく」スタイルの構成のおかげで、インタプリタ版に引き続きわかりやすくてよい書籍"
  • メモリアロケーションに対する罪悪感 - kawasin73のブログ

    いつも心に省メモリ。どうも、かわしんです。今日はメモリアロケーションについてのポエムを綴ります。さらっと流してください。 ちなみに、ここでいう省メモリとはメモリサイズだけの話ではありません。 メモリをアロケート(確保)するとき、あなたはどんな感情を抱くだろうか?おそらく何も感じない人がほとんどだろう。というかメモリをアロケートしたことにすら気づいていないのかもしれない。 僕はメモリをアロケートするたびに心が痛む。当はアロケートしなくてもいいのではないか、別のところでまとめてアロケートした方がいいのではないか?色々悩んだ結果、苦渋の選択としてメモリをアロケートするのだ。 メモリアロケーションのコストとは何か 僕がなんとなくメモリアロケーションに罪悪感を覚え始めた時、僕はメモリアロケーションのことを何も知らなかった。大きなメモリを確保するほどコスト(確保に必要な計算時間)が大きくなると思って

    メモリアロケーションに対する罪悪感 - kawasin73のブログ
    sh19910711
    sh19910711 2023/01/15
    2019 / "メモリをアロケートするたびに心が痛む。本当はアロケートしなくてもいいのではないか、別のところでまとめてアロケートした方がいいのではないか?色々悩んだ結果、苦渋の選択としてメモリをアロケートする"
  • 最近、クエリビルダーを使うのがだるい

    クエリビルダーやORMを使うのは基的に良いこと。 特に開発初期とかはレビューの時間も足りず、クソみたいなクエリを書いてしまったりするので、それを防止するためにも、ライブラリでリスクを担保してあげるのは大事なこと。てか大体は慢心によってそういうの使わないって選択すると失敗すると思う。僕は失敗する自信がある。 自分もGoで開発する時、MySQLに対してのクエリを書く場合は、以下のクエリビルダーを使っている。一部ビルダーでJOINが使えなかったり、サブクエリの書き方が特殊だったりするが、それ以外はだいぶライトな実装で満足している。 ただ、最近サービスもすくすく育ち、レビュー体制が堅実になっていく動きの中で、クエリビルダーを使うのがダルくなってきた。 なんでかというと、多分以下の2つの理由でだるい。 サービス規模に応じて諸事情を孕んだ複雑な実装が生まれるが、その複雑さをクエリが吸収してしまい、メ

    最近、クエリビルダーを使うのがだるい
    sh19910711
    sh19910711 2022/08/07
    2018 / "レビュー時の視認性: 規模に応じて諸事情を孕んだ複雑な実装が生まれるが、その複雑さをクエリが吸収してしまい、メソッドがどちゃどちゃチェインしてコードを追ってもあんまクエリが頭に入ってこない"
  • 【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい

    golangsqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい by nao · 2022年6月25日 前書き:sqlcとは 記事は、kyleconroy/sqlcの基的な情報を紹介します。 sqlcは、DBスキーマ(DBテーブル定義)、SQLクエリ定義、設定ファイルの3点をインプットとして、型安全なCRUDコード + DBテーブルに対応したモデル(構造体)を自動生成します。ここでのモデルの自動生成には、複数テーブルをJOINしたクエリ用の構造体も含まれます。 個人的な視点では、sqlcは「SQLクエリを検証してから、そのクエリを実行するGolangコードを書いて、クエリ結果を受け取るための構造体を書くのが大変」という課題を解決するツールです。独自のDSL(Domain Specific Language)は殆ど登場しないので、SQLをゴリゴリ書ける

    【golang】sqlcコマンドで「SQLクエリから型安全なGoコードを生成」し、生産性を上げたい
    sh19910711
    sh19910711 2022/07/02
    sqlc / "「SQLクエリを検証してから、そのクエリを実行するGolangコードを書いて、クエリ結果を受け取るための構造体を書くのが大変」という課題を解決するツール / 自動生成して欲しいCRUDコード用のSQLクエリを実装"
  • 社内の問題を解決するためにワークフローエンジンを開発した話

    要約 既存の ETL パイプラインの管理を効率化するため、YAMLでワークフローを定義し、実行できるツールを開発しました。 なぜ Airflow や Prefect を使わないのか? Airflow や Prefect は素晴らしいツールですが、これらのツールでワークフロー(DAG)を定義するには、Python でコードを書く必要があります。 私が関わっている環境では、すでに数十万行のシェルスクリプトや Perl スクリプトのコードがあります。この上に Python のレイヤーを重ねれば、さらに保守が難しくなってしまいます。また、既存のコードを Python に書き換えることも現実的ではありません。 そのため、プログラムを書かずに、ノーコードYAML ファイル)でワークフローを定義でき、既存のプログラムをそのまま利用できる軽量なツールを開発することにしました。 Dagu の仕組み Dag

    社内の問題を解決するためにワークフローエンジンを開発した話
    sh19910711
    sh19910711 2022/05/03
    "cron と Airflow の間の溝を埋める中間的なワークフローエンジンとして dagu を開発することにしました / 開発目的: DBMS や、デーモンプロセス、高い学習コスト無しで、DAG を管理できるようにすること"
  • Goで始める分散データ処理。Bigsliceパッケージ入門 - Qiita

    はじめに Go言語で開発された有名な製品はDockerKubernetesを筆頭に数多く存在します。アプリケーション開発としてもWebAPIのバックエンドやCLIツール開発で利用されることも増えていると感じます。IoTの文脈ではTinyGoなど組み込みプログラム領域でも進化を続けていて、WebAssemblyWASM)向けビルドと相まって今後さらなる拡張に期待を持っている人も多いかと思います。 一方で、大規模(1台のサーバに収まらない)データの分散処理分野では、Apache Spark(もちろんHadoop, YARN, etc.)とそのエコシステムが圧倒的に強いと感じます。AWS上であればSparkのマネージドサービスたるAWS Glueがありますし(EMRもありますが)、GCPだとDataprocでSpark(DataflowをApache Beamで扱うことが多そうですが)が広く

    Goで始める分散データ処理。Bigsliceパッケージ入門 - Qiita
    sh19910711
    sh19910711 2022/04/10
    "SparkはGoバインドのSDKはありますがα / BeamもPySparkのようなGo SDK がありますがexperimental / Bigslice: クラウド上にアドホックなクラスタを作成 + 既存のGoコードと同じ用にコンパイルができる"
  • SQLite3 を PostgreSQL にできるコマンド postlite

    はじめに SQLite3 くらい楽に扱えて、PostgreSQL みたいにネットワーク経由で使える物ないかなーなんて思ったりする事ないですか?ありますよね、あるんです。 postlite このニーズに答えてくれるのが postlite です。postlite を使うと SQLite3 で作られたデータベースファイルを、PostgreSQL の様に扱えます。 仕組みは至って簡単で、僕が開発している go-sqlite3 に PostgreSQL の通信プロトコルのガワと、仮想テーブルを使って PostgreSQL のスキーマを疑似しています。 インストール postlite は go-sqlite3 の vtable を使います。ですので、go install ではなく postlite の README.md に書かれた手順を使わなければなりません。

    SQLite3 を PostgreSQL にできるコマンド postlite
    sh19910711
    sh19910711 2022/04/04
    "postlite: SQLite3 で作られたデータベースファイルを、PostgreSQL の様に扱えます / go-sqlite3 に PostgreSQL の通信プロトコルのガワと、仮想テーブルを使って PostgreSQL のスキーマを疑似"
  • (小ネタ) terraform graph で該当するリソースだけ絞り込むスクリプト | DevelopersIO

    お疲れ様です。小島です。 terraform のリソースは増えていくにつれ、関係性について把握が難しくなるのではないでしょうか。 その時、依存関係を dot 言語で出力してくれる terraform graph があります。 しかし、多くのリソースが含まれる図には多くの関係を示す線が含まれており、把握するには一苦労です。 terraform graph には module-depth という深さを指定し、出力を絞り込むことができるオプションがあります。 ですが、スモールスタートでの開発で徐々にリソースが増えていくような場合だと、 module のリファクタリングは state も考慮する必要があるので後回しになりがちです。 なので、正規表現に該当するリソースだけ吐き出すようなスクリプトを go で書きました。 スクリプト スクリプトの使い方 # Glue に関するリソースを絞り込む ter

    (小ネタ) terraform graph で該当するリソースだけ絞り込むスクリプト | DevelopersIO
    sh19910711
    sh19910711 2022/01/28
    terraform graphでdot言語出力できるの知らなかった / "dot 言語の解析と出力には https://gonum\.org のライブラリを使用 / 数値計算用ライブラリ、とのことですが、グラフ言語に関するコードも入っていました"
  • GoからZetaSQLを使う

    Photo by David Thielen on UnsplashIntroductionGoを使ってBigQueryやSpannerSQLをフォーマットしたりパースしたりしたいなと思い調べたらGoogleが公開しているZetaSQLというライブラリにたどり着きました。 ただZetaSQLC++Javaで書かれていたのですが、他にGo製のOSSなどもなく自前でSQLパーサーをちゃんと書くのも大変なのでこれを使ってどうにかできないか模索した話になります。 最終的にはGoからZetaSQLを呼び出すserverを作りました。↓ naoto0822/zetasql-server GitHub - naoto0822/zetasql-server: This is server parsing/analyzing ZetaSQL (ongoing).

    GoからZetaSQLを使う
    sh19910711
    sh19910711 2021/12/10
    わかる👀 / "Goを使ってSpannerやBigQueryのSQLで遊びたかっただけなのですが、まさかこんなに大変なことになるとは思っていませんでした"
  • cuelangを使ったgrpcのテストツールを作った話 - Qiita

    記事はGo3 Advent Calendar 2019 17日目の記事です。 背景 少し前(9月頃?)にGoogleからcueというschemaベースでコンフィグファイルなどに使えるデータ形式が発表されました。相変わらずググラビリティの低い名前ですが、jsonやymlのスーパーセットでありながら、型定義が書けたりvalidationができたりする面白いやつです。 面白いやつなので何か使えないかなーと考えていると、型定義が使えるならgRPCとかと相性が良さそうだなと思いつきました。これはGoogleでも考えられていたのか、cueの実装にはprotobufからcueファイルを生成する実装が含まれています。 ちょうど仕事で毎回 grpcurl への入力をコピペするのにも飽きていたので、この辺りを自動化するテストツールを作り始めました。 ツールの紹介と使い方 まだ出来立てで実戦に投入していません

    cuelangを使ったgrpcのテストツールを作った話 - Qiita
    sh19910711
    sh19910711 2021/12/05
    "schemaベースでコンフィグファイルなどに使えるデータ形式 / jsonやymlのスーパーセットでありながら、型定義が書けたりvalidationができたりする / cueの実装にはprotobufからcueファイルを生成する実装が含まれています"
  • Serverless連載5: CloudEventsのGo版SDKをいじってみる | フューチャー技術ブログ

    今回は『CloudEvents仕様のメッセージをローカル端末からCloud Pub/Sub経由でCloud Functionsに渡し、個々の値を取り出しプログラムで扱える形にすること』を目的とします。 以下のような形を目指します。 SDKバージョンについての補足現在v2は work in progress とのことで、今回は雰囲気を掴むためにLatest Releaseの v1.1.2 のソースコードをいじってみます。 ※v1のREADMEには 2020.03.27 を目処にv2リリースを目指すとの記載がありますが、いまも絶賛開発中と思われます。 We will target ~2 months of development to release v2 of this SDK with an end date of March 27, 2020. https://github.com/cl

    Serverless連載5: CloudEventsのGo版SDKをいじってみる | フューチャー技術ブログ
    sh19910711
    sh19910711 2021/11/19
    "CloudEventsは様々存在するイベントを統一的に扱いたいとの思いから登場した統一仕様 / SDKは絶賛開発中 / 世に蔓延る様々なイベント形式に悩まされる実装者が幸せになれる未来が待っていると思うと非常に楽しみ"
  • Go言語向けFailure Injectionツール: gofail - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、Necoチームの池添(@zoetro)です。 gofailは、etcdの開発チームがつくったFailure Injectionのためのツールです。 Go言語で書かれたプログラム中に故意にエラーを発生させるポイント(failpoint)を埋め込み、任意のタイミングでプログラムの挙動を変えることができます。 公式ドキュメントに記載されていない項目が多々あるので、詳しい使い方を紹介したいと思います。 なお、記事は2018年8月時点のソースコードを対象に解説しています。 gofailのインストール gofail をインストールします。 $ go get -u github.com/etcd-io/gofail/... failpointの埋め込み プログラム中にfailpointを埋め込むためには、Go言語のプログラム中に gofail というキーワードから始まるコメントを記述します

    Go言語向けFailure Injectionツール: gofail - Cybozu Inside Out | サイボウズエンジニアのブログ
    sh19910711
    sh19910711 2021/09/07
    gofail / "etcdの開発チームがつくったFailure Injectionのためのツール / プログラム中に故意にエラーを発生させるポイント(failpoint)を埋め込み"
  • WireGuardとOpenID Connectの連携をGoで実装してみた

    社内勉強会で発表した資料です https://github.com/kurochan/oidc-wireguard-vpn/

    WireGuardとOpenID Connectの連携をGoで実装してみた
    sh19910711
    sh19910711 2021/08/20
    便利そう👀 / WireGuard + OpenID Connect + google/nftables / "WireGuard: 次世代耐乱用性カーネルネットワークトンネル by Json Donenfeld"
  • SQLBoiler(とoapi-codegen)でつくるREST APIサーバ | フューチャー技術ブログ

    ライブリッツの筒井です。 GoのORマッパー連載、折り返して5日目です。 SQLBoilerを使用したDBスキーマ駆動なREST APIサーバの開発ワークフローを紹介します。 なぜSQLBoilerを選ぶのか?自分たちのチームでは、REST APIサーバを開発する際にはまずデータベースのテーブル設計から始めることが多いです。その次にAPI定義の設計へ入るのですが、既にテーブル定義は出来上がっているため、なんとなくSQL文が頭に思い浮かんだ状態でAPIのRequest / Responseを考えることになります。 ゆえにORMに一番に求めるのは、「いかにストレスなく思い描いていたSQL文を実行し、Goの文脈に持ち込めるか」ということです。 この基準を元に、次のような観点からSQLBoilerを選定しています。 複雑なSELECT文でDSLに苦悩したくない前述の通り、我々の頭の中にはなんとなく

    SQLBoiler(とoapi-codegen)でつくるREST APIサーバ | フューチャー技術ブログ
    sh19910711
    sh19910711 2021/08/01
    "ORMに一番に求めるのは、「いかにストレスなく思い描いていたSQL文を実行し、Goの文脈に持ち込めるか」 / SQLBoilerにはSchema Migration機能は含まれておらず、既存のデータベースからコードを生成するアプローチ"
  • GraphQL SubscriptionsとRedis PubSubを使ってリアルタイムチャットサーバーを作る - Qiita

    はじめに 今まで触ってみたいと思っていたGraphQLとRedisを使って、リアルタイムチャットサーバーを作ってみました。 この記事では、主にGraphQLに重点を置いて実装を紹介していきます。 ソースコードはGitHubに上がっているので、そちらも合わせてご覧ください。 README.mdを見ればすぐにサーバーを建てることができるので、先に試してみるのも良いかもしれません。 アーキテクチャ 今回は以下のような構成になっています。 フロントエンドとサーバー間はGraphQLを用いた通信を行っています。 メッセージの送信やユーザーの作成は通常のGraphQLのMutationを、メッセージの受信は Websocket上で動作するGraphQL Subscriptionsを使用しています。 また、メッセージの配信にはRedisのPubSub機能を使っています。 これは、GraphQLサーバーが

    GraphQL SubscriptionsとRedis PubSubを使ってリアルタイムチャットサーバーを作る - Qiita
    sh19910711
    sh19910711 2021/07/28
    GraphQL Subscriptions / "GraphQLのスキーマに従ったデータのやり取りを行う仕組み / 型安全な通信ができる他、gRPC等の他のプロトコルよりもブラウザで扱いやすい"
  • 並行処理で役立つデバッグ&分析手法|Goでの並行処理を徹底解剖!

    並行処理で役立つデバッグ&分析手法|Goでの並行処理を徹底解剖!
  • 165行で実装するProtocol Buffersデコーダ(ミニマム版) - 逆さまにした

    この記事は Go2 Advent Calendar 2018の11日目の記事です。 今年の後半くらいに Protocol Buffers の仕様を読み始めたら、とてもシンプルかつコンパクトな仕様なのにcompatibilityへの考慮が凄まじくて、2018年後半に書いた記事の大半がProtocol Buffersに関するものでした。 仕様とバイナリを睨めっこしていたら、自分でもバイナリをデコードしたくなったので、実装してみました。 内容は、あくまでProtocol Buffersの勉強を目的としたもので、仕様には完璧に添っていません。 というか、わかりやすさ(と実装のしやすさ)を優先して、コンパクトな仕様のさらにミニマム版な内容となっています。 当然ですが、実運用する際にはofficialの実装を利用してください。 どこまで実装するか 上述の通り、ミニマム版として、以下を実装範囲とします

    165行で実装するProtocol Buffersデコーダ(ミニマム版) - 逆さまにした
  • 依存関係逆転の原則の重要性について

    こんにちは!eurekaのAPIチームでエンジニアをやっているrikiiです。 最近ついにAPIチームでモブプロを始めました。前は設計や実装について一人で悩んでたりした部分が、すぐ議論できたりホワイトボードに図で書いて理解を深めたりして、問題が素早く解決できてすごくいい感じで進んでいます。 さて、今回も前回の続きでSOLID原則の1つのDIP(依存関係逆転の原則)について書こうと思います。 eurekaではgo言語を使っているので、goを使ったコード例とともに説明していきたいと思います。 ちなみに依存関係逆転の原則とはSOLID原則と呼ばれるオブジェクト指向設計原則のうちのひとつです。 SOLID原則とは?下記5つの原則の頭文字を取ってまとめた、オブジェクト指向設計原則のことです。 ・S : The Single Responsibility Principle(単一責任の原則) ・O :

    依存関係逆転の原則の重要性について