Handling a tremendous amount of images with Fastly / Yamagoya Traverse 2020
![実例で学ぶGoプログラム開発](https://cdn-ak-scissors.b.st-hatena.com/image/square/a76547eaba11248b161aca4f896d1cf1cd75c15a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F441d7a0635a44b489f4e6fed21862ba3%2Fslide_0.jpg%3F4517681)
Graidという画像プロキシサーバをつくりました。 外のサーバから画像を取得してリサイズしたりして返す、ということをするサーバです。 Golangでなんかミドルウェア的なものが作ってみたかったのでやってみました。 Graidについてのスライド エンジニアが集まってお昼ご飯を食べながら技術的なネタを話すテックランチという会が社内で定期的に開催されているので、Graidについて話してきました。 Graid // Speaker Deck 機能 http://localhost:8080/path/to/image.jpg:w400:h300:q80 例えば8080ポートで起動させてURLにアクセスすると、 オリジンの画像サーバ(設定ファイルに設定する)の/path/to/image.jpgを取ってきて 横400px、縦300pxにリサイズして画質80%に加工して レスポンスを返す という処理を
grpc/grpc · GitHub gRPC - An RPC library and framework https://github.com/grpc/grpc gRPC は Google が開発しているRPC(リモートプロシージャコール)のライブラリとフレームワークで、通信層は HTTP/2 を介して行われます。 データ層については、固定されている訳ではなくあくまでデフォルトで Protocol Buffers が使われる様になっています。使用出来るプログラミング言語は現在、C++, Node.js, Python, Ruby, Objective-C, PHP, C# となっています。 実はこれら以外にも grpc-go という、なぜかこのリストに加えられていないオフィシャルリポジトリがあります。 grpc/grpc-go - GitHub gRPC-Go The Go impl
{"B", "(c|g|t)"}, {"D", "(a|g|t)"}, {"H", "(a|c|t)"}, {"K", "(g|t)"}, {"M", "(a|c)"}, {"N", "(a|c|g|t)"}, {"R", "(a|g)"}, {"S", "(c|g)"}, {"V", "(a|c|g)"}, {"W", "(a|t)"}, {"Y", "(c|t)"}, このベンチマークは正規表現の速度を測るマイクロベンチになっていて、2~4は同じ正規表現を使わないといけないというルールになっています。 特に単純置換である2と4は普通文字列処理で書くと思うのですが、正規表現を使うことが要求されています。 まず、並列化ができてなくて遅いのか、それとも単純に1コア当たりの性能が悪いのかですが、これは CPU Time (全コアの計算時間を合計した時間) と Elapsed Time (開始か
タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気をお察し下さい。 (スクリーンキャストは cho45/KeyCast を使って撮影しました) 特徴 gore の特徴は以下の通りです。 ラインエディタと履歴 複数行入力 パッケージのインポート、補完つき 式および文を実行可能 コード補完(nsf/gocode を利用) プリティプリント(k0kubun/pp か davecgh/go-spew がおすすめ) ドキュメントも引ける(godoc が必要) 以上のように、非常に便利なものになっております。むしろこの程度 REPL には当然あってほしい機能だとも言える。 イン
GoはPythonのようなLLと比べると実行速度は速いのですが、GCは特別速いわけではないので、相対的にGCがパフォーマンスに与える影響は大きくなります。 また、Java に比べると、一時オブジェクトなどのために頻繁にヒープアロケーションを行うとGCの停止時間が長くなりがちですが、一方でヒープアロケーションを避けたプログラミングがしやすい言語でもあります。 MySQL ドライバのような低レイヤーのライブラリを作る場合、アプリケーション側の性能要件を勝手に決めることができないので、現実的な範囲でアロケーションを減らす努力をするべきです。 ということで、前回の記事 で紹介したプレースホルダ置換を実装するにあたって経験した、アロケーションに気を使ったプログラミングについて、チューニングする手順やコード上のテクニックを紹介したいと思います。 1. まずは正しく動くものを作る go-sql-driv
このブログは2年ほどOctopressを使って生成してきたが,不満が限界に達したので,Go言語で作られたHugoに移行した. Octopressへの不満は,とにかく生成が遅いこと.100記事を超えた辺から耐えられない遅さになり,最終的には約150記事の生成に40秒もかかっていた.ブログは頻繁に書くのでかなりストレスになっていた. Hugoのうりは生成速度.試しに使ったところ,明らかに速く,すぐに移行を決めた.最終的な生成時間は以下.爆速. 他に良いところを挙げると,まずとてもシンプル.Octopressと比べても圧倒的に必要なファイルは少ない.また,後発だけあって嬉しい機能もいくつかある.例えば,draftタグを記事のヘッダに書いておけば,ローカルでは生成されても,本番用の生成からは外されるなどなど. インストール Go言語で書かれているのでgo getして,デザインテーマをCloneする
よく訓練されたアップル信者、都元です。最近社内のメンバーがみんなGo言語の世界で楽しそうなので、私も混ざってみることにしました。最初のセットアップや基礎文法等は、私も平行して急いで学ぶGo langシリーズで勉強中です。 コマンドラインツールが作りたい と思っています。ちょっとしたものを作るとしたらPythonなのかな、と思って友達のPythonistaにインタビューをしたところ、「ちょっとしたツール作るとかって用途の人は Golangに移行した(えっ」という衝撃的なコメントを貰い、もうこの際だからGo勉強すっかという空気になった次第。 具体的な環境構築 基本的には急いで学ぶGo langシリーズを読めばいいのですが、一点迷ったのがディレクトリ構成です。 Go言語で幸せになれる10のテクニックでは「GOPATHは一つだけ (Use a single GOPATH)」という指針が紹介されてい
1/31に開催された Hachioji.pm #46に行ってきました。 Goを書いてたら、いつのまにかアセンブリを書いてた話 Goで最適化のためにアセンブリ書いた話をしました。 スライド https://github.com/hideo55/go-popcount 参考:http://golang-jp.org/doc/asm.html 追記:GoでPopCountやってるパッケージはすでに他にもあるけど、POPCNT使えて、かつPopCount単機能で使えるのが無かったので書きました。 LT 他の人の LTの雑なメモです。 @xtetsujiさん 透過的に例外をキャッチ ENDだとだめ @tsucchiさん DBの自動再接続 @ichigotakeさん C言語はじめました @akira1908jpさん 最近Raspberry Piを購入 @mackee_wさん FF14 ラノベ朗読w @
CyberAgent エンジニア Advent Calendar 2014の23日目の記事です。 秋葉原ラボの、鈴木(@brfrn169 )、Shtykh Roman、柿島大貴です。 普段は、分散DB(主にHBase)やストリーミング処理基盤の開発・運用などをやっています。 今回は、NewSQLの1つであるCockroachDBについて紹介します。 NewSQLとは CockroachDBについて紹介する前に、NewSQLについて簡単に説明します。 NewSQLとは、一言で言うとNoSQL+SQL機能(トランザクション)です。 RDBMSとNoSQLの良いとこどりをしているともいえるでしょう。 従来、RDBはスケールアウトのしづらいモノリシックな作りになっていました。 しかし、RDBでは、昨今のビックデータの潮流に対応できず、NoSQLの技術が登場します。 NoSQLは、スケールアウトが容
全国一千万Zabbixユーザの皆様こんにちは。 複数のZabbix Agentから取得した値を集約する zabbix-aggregate-agent や zabbix_get コマンドの Go 実装版 go-zabbix-get を書いて遊んでいるうちに、Go で Zabbix と通信するライブラリが育ってきてしまったので一通りまとめておきます。 "github.com/fujiwara/go-zabbix-get/zabbix" を import して使います。 import "github.com/fujiwara/go-zabbix-get/zabbix" Zabbix Agentから値を取得する アイテムでいうところの「Zabbixエージェント」型、ServerやProxyからAgentに対してTCP接続をして値を取得するタイプです。 value, err := zabbix.Ge
【追記】2023年3月21日 YAPC::Kyoto 2023で、ジョブキューシステムFireworqの設計と運用実績も含めて発表されました。id:tarao ++ 【加筆修正】 2020年2月16日 執筆時から6年も経過していますが、たまたまこの記事を振り返る機会があったので、日本語がおかしいところを一部修正したり、一緒に取り組んだ方々の名前が書かれていなかったところを修正しました。 【追記】2017年12年24日 このエントリのジョブキュー実装がFireworqという名でOSSとして公開されました。id:tarao ++ github.com この記事ははてなエンジニアアドベントカレンダー2014の4日目です。 前回は Mackerelで採用している技術一覧とその紹介 - Hatena Developer Blog でした。 社内の開発合宿で、 id:taraoさん、id:hakobe
5日目担当の@cubicdaiyaです。先月末のGoConではGoのカンファレンスなのにほぼnginxをビルドする話しかしてなかったので今日はちゃんとGoの話をします。 Goで書くサーバプログラム Goではサーバプログラムを書くためのユーティリティが豊富に揃ってる上に、ゴルーチンやチャネルを利用することで高いパフォーマンスが要求される環境でも十分な性能を発揮することができます。いつだったか「あれはHTTPサーバ書くための言語ですよ」なんて話をとあるエンジニアから聞いたことがあるくらいです。 例えば「Hello, World!」を返すだけのHTTPサーバであれば標準ライブラリのnet/httpを利用することで以下のように書くことが出来ます。 package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter,
こんにちは。ちょびえです。4日めですがいかがお過ごしでしょうか? 今日はGoで異常検知を試してみましたのでレポートしてみたいと思います。 異常検知の世界 ふつうのWebプログラマーの私がデータマイニングによる異常検知読んで、機械学習ってなんて便利なんだろう!?と驚いたと共に機械学習の魅力に引き込まれていきました。 https://github.com/muddydixon/fluent-plugin-anomalydetect のSDAR部分を再実装したものです。私は高校をドロップアウトしてるので線形代数周りの理解・実装でだいぶ難儀しましたが、良き実装があればなんとかなるもんだなぁ、、、とw anomalydetectorはChangeFinder部分のスムージングなどの実装は含んでいないのでこんな感じで作ってみてください。 package main import ( "fmt" "buf
はじめに こんにちは、1日目担当の@p_chinから褒められてるのか嫌味なのか分からない紹介をうけ、更には 頼りGayのある先輩とtypoされ下からの突き上げが厳しいなぁ…と感じる今日この頃。 @Konboi です。 今年の teck kayac AdventCalendar2014 のテーマは 「自分のなかのアツいあれな話」 Go言語推しでいこう!ということもあり、最近はGoが自分の中でアツいです!激アツです!! 鉄は熱いうちになんとかというのでアツいうちに色々つくってみたので、今日は最近Goで作ったものを紹介しようと思います。 ghooks ghooks こちらはGithubのWeb hookのレシーバーで Github::Hooks::Receiver, octoks のGolang製だと思っていただければと思います。 これは現在携わっているプロジェクトの開発環境にも導入しており p
概要 k0kubun/ppという、pretty printライブラリを作った。 任意の型のオブジェクトをpp.Print()に渡すと色つきでpretty printしてくれるという非常にシンプルなもの。 作った背景 fmt.Printf("%#v", ...)等ではわかりづらい複雑なmapやstructをdebug printするときは、pretty printを使うと便利。既存のpretty printライブラリには、GitHubで人気なものだとdavecgh/go-spewやkr/prettyなどがある。 いままではGoでデバッグのために複雑な構造をダンプするときこれらを使っていたのだが、必要以上に型の情報が書かれていたり、大きなものだと白黒なのでパッと見てわかりづらいなどの問題があった。 そこで、型やフィールドごとに別の色をつけることで視認性を高め、ビルトインの型情報は色にまかせて省
Goに入ってはGoに従え Go Conference 2014 autumn 30 November 2014 鵜飼文敏 Fumitoshi Ukai Google Software Engineer - Chrome Infra team Go Readability Approver Go言語のReadabilityをレビューするチーム コードレビューを通じてGo言語のよいコードの書きかたを教える メインのプロジェクトとは別のコードをレビュー 一年前くらい前に参加して 20% timeで 200くらいのCLをレビューしました 今は一日3CLくらい、週に12CLほどのペースでやっています Gopher by Renée French 2 Readabilityスキルとは? プログラミング言語のリテラシー 作法にかなったやりかた で、読んだり書いたりできる能力 言語ごとに作法が違う C++
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く