ふわっとテック日記

テック系のことをメインに書いていきます。go言語/typescript/javascriptが好きです。たまに趣味(筋トレ)の話や日常系の記事も書きたいな〜と思っています。

ふわっとアドテク〜Amazon Publisher Cloud (Beta)〜

Amazon Publisher Cloudは、Amazon DSPとパブリッシャー間でのファーストパーティーデータを利用した広告配信を可能にするアドテクサービスです。 aps.amazon.com 現在プロダクトはベータ版ですが、従来のプログラマティックキャンペーンによる広告配信に比…

Go言語ソース覗き見〜slicesパッケージ〜

Go言語のバージョン1.21で標準ライブラリに新たに追加された、slicesパッケージのソースコードをざっと読んでみました。 slicesパッケージではスライスを操作するのに便利な様々な関数が用意されています。 この記事ではソースコードに触れつつ主要どころの…

ふわっとアドテク ~Header Bidding~

広告テクノロジー業界で有名な配信手法の一つである、Header Biddingについてのふわっと解説です。 Header Biddingとは? Header Bidding(ヘッダービディング)とは、プログラマティック広告の配信機能の仕組みの一つです。 Header Bidding登場前は、web広…

Go言語 - ジェネリクスで型引数を分解するというテクニック

Go言語の1.21ではslices、mapsパッケージが追加され、スライスやマップに対する操作が格段にシンプルにできるようになりました。 本記事ではそんなslicesパッケージのClone関数を手本に その実装の詳細説明と、そこから導けるジェネリクスの型制約実装におけ…

Go言語のプロジェクト構成 - 公式のススメ

有名なGoのプロジェクト構成のパターンとしては、以下のgolang-standardsが有名です。 github.com このパターンは賛否両論ありつつも長い間多くのプロジェクトで採用されてきたのですが、Go公式のものではありません。 そして Goの公式はこれまで、プロジェ…

全てにおいてYAMLはXMLに劣っている...らしい

色々と議論を呼びそうなタイトルですが、とあるポッドキャストの会話の一部を文字起こしした記事の内容です。 原文はこちら changelog.com スピーカーの体験を元にした話によると、 XMLは場合によって使いづらいこともあるし、適していることもある。 一方、…

Gopls v0.12

Go言語のLanguage ServerであるGoplsが今夏アップグレードされ、v0.12がリリースされました。 go.dev 前バージョンに比較してメモリ効率がレベルアップされています。 またファイルベースでのキャッシュで各パッケージの情報を保持するのですが、プロセスを…

Go1.21でのコンパイル最適化

Go言語では、コンパイルをより最適化するための仕組みでPGO(Profile-Guided Optimization)というものがあります。 Go1.20ではユーザにテストしてもらうためのプレビュー機能としてリリースされましたが、Go1.21では一般利用が可能となっています。 詳しいP…

【Go1.21】ループ処理の新機能

8月にリリースされたGo1.21のループ処理の新仕様についての記事です。 Go1.21のリリースノートはこちら tip.golang.org Go言語のループでは for i := range ~~~ や for i := 0; i < MAX; i++ { といったような形をよく使うと思います。 ここで使ってる変数i…

User-Agent Client Hints - ユーザーエージェント削減の代替策

本記事は、こちらのドキュメントを一部翻訳して執筆しています。 wicg.github.io 従来のユーザーエージェントはアクセス元のデバイスやOSバージョンなどの情報を持ちます。 多くのシステムではユーザーエージェント文字列を元に、特定デバイスやOSからのリク…

gRPC触ってみた(4)

↓前回記事たち↓ gRPC触ってみた gRPC触ってみた(2) gRPC触ってみた(3) 本記事では、双方向ストリーミングを扱います。 双方向ストリーミングとは、複数リクエストに対して複数レスポンスを返す通信形式のことを言います。 クライアントから複数文字列を1…

gRPC触ってみた(3)

前回記事: gRPC触ってみた(2) 前前回記事: gRPC触ってみた grpcのストリーム通信について 今回の記事では、grpcのストリーム通信を扱います。 grpcでは1リクエスト1レスポンス方式のUnary通信に加え、ストリーム通信を実装することができます。 ストリーム…

gRPC触ってみた(2)

前回記事: gRPC触ってみた 今回は、grpcのサーバ実装で様々なオプションを付与することができるServerOptionについて触れていきます。 ServerOption grpcのサーバ側で使用するgrpc.Server構造体は、以下の関数を利用して初期化されます。 func NewServer(opt…

gRPC触ってみた

gRPCを使用したサーバ/クライアント間の通信の構築をざっくりと書きます。 RPCとは ネットワーク経由で、別ホスト上に存在するソフトウェアのプログラムを関数やメソッドを指定して呼び出す方法のことです。 関数やメソッド名をそのまま使って呼び出すため、…

go言語での文字列変換

go言語での文字列の他データ型への変換についてさらっと書きます。 こちらの公式ドキュメントに言及、一部和訳しています。 go.dev go言語の文字列(string型)は、rune型のスライス(rune)とbyte型のスライス(byte)にそれぞれ変換可能です。 rune型の実…

パッケージ管理ツールrpm/yumことはじめ

今まで仕事でyum installでlinuxに色々なパッケージをインストールして使ってきたものの、正直仕組みの理解についてはかなりあやふやなままだったのである程度勉強してみました。 あくまでさわりの部分ですが、本記事はその備忘録ですd( ̄  ̄) rpm/yumとは r…

Go言語のコンパイル/アセンブリ周りについて

Go言語はコンパイル言語なのでソースコードをコンパイルしてバイナリを実行するという形になるのですが、 コンパイル → 実行ファイルまでの流れをよく理解できていなかったのでサラッと学んでみました。 こちらの記事を要所要所で翻訳しつつ、噛み砕いたもの…

Go言語でのジェネリクス(1.18から)

Go言語ではバージョン1.18から待望のジェネリクスが実装されたのですが、 普段の業務でジェネリクスを使うことがあまりなく仕様をよく分かっていなかったので 備忘録的に残しておこうと思います。 ジェネリクスとは 関数の引数となるデータ型が複数考えられ…