タグ

ブックマーク / hakobe932.hatenablog.com (24)

  • gRPCのロードバランシング - はこべにっき ♨

    先日の記事から引き続きgRPCについて勉強してる。 gRPCのサーバをプロダクトで利用する場合に気になるのが、ロードバランシングをどういう風にやったら良いのかということで、その部分について調べてみた。 TL;DR: gRPC Load Balancing を読めばだいたいわかる gRPCのロードバランシングのポイントとしては、gRPCが基的にはHTTP2上に構築された仕組みである*1ことに注意して考えると良さそうだった。 プロキシ によるロードバランシング まず考えられるのは、gRPCのサーバとクライアントの間にプロキシを設置してロードバランシングを行う方法だ。 よくあるHTTP/1.1の世界で考えると、複数のWebアプリケーションサーバの前段にnginxのようなリバースプロキシを設置してロードバランシングする方法になる。 gRPCはHTTP/2を利用するので、この方法の場合リバースプロ

    gRPCのロードバランシング - はこべにっき ♨
  • gRPCを学んでいる - はこべにっき ♨

    マイクロサービスや自作ミドルウェアのAPIをメンテナブルにしたいよねっていう文脈で、OpenAPIGraphQLgRPCといった技術が採用されるのを最近よく目にする。 バックエンドを実装しているWebエンジニアとしては、こういう仕組みが整備されつつあるのはありがたい。APIをシステムの外に公開しようとすると、ドキュメンテーション/バリデーション/クライアントの実装など、意外と副次的な作業が必要なので、、汎用化されたツールに頼れるのは助かる。マイクロサービスを用いたアーキテクチャを考えるにあたっても、システム間のアダプタをイメージしやすくなる。 そういう背景で、最近家ではgRPCを調べている。このあとはgRPCについて調べたことのメモや感想のコーナーになっているので、興味があったらどうぞ。 主な情報源 だいたいこのへんを眺めておくと、gRPCの基については抑えることができる。 grpc

    gRPCを学んでいる - はこべにっき ♨
  • golangで書かれたSlack bot でエンジニアに話題提供しよう - はこべにっき ♨

    こんにちは、id:hakobe932 です。はてなエンジニアアドベントカレンダーの18日目として、はてな社内で導入をためしている話題提供Slack botの機能と実装について紹介します。昨日はid:astj による Herokuとwerckerによる継続的インテグレーション・自動デプロイでperlのwebアプリケーションを開発するでした。 #enginnerで技術交換 はてなではメインのチャットツールとしてSlackを活用しています。チームや職種などの単位のたくさんのチャンネルがあり、それぞれのチャンネルでコミュニケーションが行われているのですが、もっぱら技術的な議論を行っているのが #enginner というチャンネルです。#engineer では、チームをまたいだ技術的な相談のほか、新技術や勉強会の紹介など、技術に関わるさまざまな話題で情報交換しています。 もっと技術の話題でわいわいし

    golangで書かれたSlack bot でエンジニアに話題提供しよう - はこべにっき ♨
  • ピープルウェアを読んだ - はこべにっき ♨

    この前id:hitode909くんからピープルウェアを貰ったので読んだ。非常に面白くて、興味深い話が多かった。 ピープルウエア 第3版 作者: トム・デマルコ,ティモシー・リスター,松原友夫,山浦恒央出版社/メーカー: 日経BP社発売日: 2013/12/18メディア: 単行(ソフトカバー)この商品を含むブログ (6件) を見る このは、作者のトム・デマルコさんとティモシー・リスターさんが10年に及んだ調査と、自身のソフトウェア開発の経験をもとに、ソフトウェア開発における人に関する問題をたくさんのコラムを通じて教えてくれる。冒頭には以下のようにある。 実際のところ、ソフトウェア開発上の問題の多くは、技術的というより社会学的なものである。 いろんなレイヤにおける人の問題についてそれぞれ章がわかれていて、個人からオフィスやチーム、さらには会社組織のはなしへと続く。結構マネージャー視点ぽいコ

    ピープルウェアを読んだ - はこべにっき ♨
  • はてなに入社しました - はこべにっき ♨

    日から株式会社はてなエンジニアとして働くことになりました.勤務地は京都です. はてなは僕がWeb開発に興味を持つきっかけになったサービスです.はてなを通じて,Web開発のおもしろさを知り,それに関わるたくさんの人と出会うことができました. これからは、はてなを作る側にまわることになります.ユーザとしての自分が満足できるような、より良いはてなを目指して技術力を磨いていきたいと思います。 拠地はこれまでと変わらず京都付近になりますので,勉強会やら何やらでちょくちょくお目にかかると思います.これからもどうぞよろしくお願いします.

    はてなに入社しました - はこべにっき ♨
  • IRCクライアントでMyはてなやRSS FeedをウォッチするためのIRCdを書いた - はこべにっき ♨

    はてなのお気に入りアンテナをTwitter Clientで見れるゲートウェイ「Hatetter」作りました と同じようなことを,Twitterクライアントではなく,IRCクライアントでやりたかったのです. というわけで,Pigというのを書いてgithubにあげてあります. http://github.com/hakobe/pig MyはてなRSS Feedの新着項目を発言してくれるIRCdです.そのうち,Perlでごにょごにょした結果をIRCdになげるライトな感じのフレームワークになる予定です. 追記: Mooseの依存がひどいらしいのでとりあえずAny::Moose化したので,すこしは入れやすくなってる? Myはてなをウォッチ とりあえず以下のようにすると,IRCクライアントでMyはてながウォッチできます. $ git clone git://github.com/hakobe/pig

    IRCクライアントでMyはてなやRSS FeedをウォッチするためのIRCdを書いた - はこべにっき ♨
  • Kansai.pmでコルーチンについて発表してきた - はこべにっき ♨

    Kansai.pm#11にて「Perlで学ぶコルーチン」という発表をしてきました. だいぶ前のRuby勉強会でRuby 1.9のFiberをみてPerlでもいろいろやってみていたので,その時しらべたことを中心にぐだぐだとしゃべりました. Perlで学ぶコルーチンView more presentations from hakobe. コルーンは継続や並行処理などいろいろな概念がからんでいて調査がたいへんでした.PerlでのCoroの実装がどうなっているのかもう少し詳細に調査/発表できたらよかったです. スライドにも書いてますが,Ruby 1.9のFiberとまったく同じインターフェースをもったFiber.pmをつくってみました.githubで 公開しています. http://github.com/hakobe/perl-fiber/tree 以下のように簡単にFiber(=コルーチン)をつ

    Kansai.pmでコルーチンについて発表してきた - はこべにっき ♨
  • CoroはCoroutineのCoro - PerlでFiber - はこべにっき#

    Ruby勉強会@関西でFiberについて勉強してきた - はこべブログ ♨でPerlでもGeneratorをうまく書けるモジュールがないかなーとこぼしていたところ. perlではCoroでほぼ同じ事ができるが、どちらにしろCoroを使う利点は1個1個をresumeすることじゃなくて 非同期に実装することだと思うのでgenerator云々はちょっと用途が違う気もするです http://b.hatena.ne.jp/lestrrat/20090202#bookmark-11922880 というブコメをいただきました.id:lestrratさんありがとうございます. Coroについて調べてみたところ,Coro::Introによると The natural application for these is to include a scheduler, resulting in cooperati

    CoroはCoroutineのCoro - PerlでFiber - はこべにっき#
  • gitのステータスをプロンプトに表示したよ - はこべにっき ♨

    みんなやってて今さらな感じですね. これまでおれおれスクリプトを使ってやっていたんですが,zsh-gitというプロジェクトで公開されているPROMPTテーマを使うとすごい楽に高機能なプロンプトにできました.インストール方法とかはREADMEと付属のzshrcを参照してね! 現在のブランチ名以外にも,untrackedなファイルがあると '!' を表示したり,modifiedなファイルがあると '?' を表示してくれたりするので,なかなか高機能です. ただ,ちょっと表示がうるさい感じだったのでちょっとカスタマイズして使っています. 不覚にもゆのっちに表情がついて良い感じです. このプロンプト設定ファイルはこちら

  • githubでforkしたリポジトリから本家にpush - はこべにっき#

    昨日いっていた問題が解決したので,あらためてgithubでforkしたリポジトリから家にpushする方法. 家にコミット権があるのが前提なので,ふつうは家をcloneして作業すれば問題ないです.ただ,途中までforkで開発してたんだけど,ある日,コミット権をもらったりして家に反映したいような時には便利です. 以下folkしたリポジトリのcloneのmaster branchにて, # remote リポジトリを設定する $ git remote add jugyo git@github.com:jugyo/termtter.git $ git fetch jugyo # git pullして家の変更を取り込む $ git pull --rebase jugyo # 変更をgit pushする $ git push jugyo いろいろまわり道したけど,すごいやったことある,コレ.

    githubでforkしたリポジトリから本家にpush - はこべにっき#
  • termtterは拡張しやすくて楽しい - はこべにっき ♨

    ターミナル上で動くtwitterクライアントであるところのtermtterを使ってみてます.(参考: Jugyo.org) プラグインを作るのがすごく簡単で,かゆいところに手が届かなくても,すぐに自分で機能を拡張できます.とりあえず何個かプラグインを書いてみました. group.rb http://gist.github.com/44250.js .termtter で plugin 'group' configatron.plugins.group.groups = { :rits => %w(hakobe isano hitode909) } とか設定しといて. > group ritsとかやると,現在のログをフィルタして指定したグループ(ここではrits)に属している人の発言だけを表示します. quicklook.rb http://gist.github.com/44251 > q

    termtterは拡張しやすくて楽しい - はこべにっき ♨
  • perldoc perlxstutを読んだときのメモ - はこべにっき ♨

    正月番組をみながら[http://perldoc.perl.org/perlxstut.html#EXAMPLE-3:title=perldoc perlxstut]を読んだ.メモをとったのでせっかくだからはっつけておくよ. ちょっとメモがはしょり気味なのと,うちの理解があやしいところがあってこころもとないですが,perlxstut読むときの参考にでもなればばば. Example1 $ h2xs -A -n Mytest で雛形がつくれる.生成されたMytest.xsにXSのコードを書く 値を返さないHello, WorldだとCODE:以下にprintfを書くだけでOK void hello() CODE: printf("Hello, world!\n"); CODE: みたいな部分はXS特有の書き方.あとで展開されてCのコードになる. $ perl Makefile.PL $ mak

    perldoc perlxstutを読んだときのメモ - はこべにっき ♨
  • 正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨

    Perlの正規表現のoオプションてご存じでしょうか? うちはあまり使ったことがなかったのですが,効率のよい正規表現処理を行うときには便利なオプションです. oオプションを使うと,その正規表現のコンパイルが1回しか行われなくなります.たとえば,正規表現の評価が繰り返しのなかで現れると,コンパイルが何度も行われて効率が悪くなります.そういったときにoオプションを付与しておけば,正規表現コンパイルのオーバーヘッドを最小限にとどめることができます. chomp(my $pattern = <>); for my $n (0..100000000000) { # すごく回数の多いループ # oをつければ正規表現がコンパイルされるのははじめの1回だけなので安心 if ($n =~ m/^$pattern$/o) { say "match!"; } } 正規表現が静的な場合は,Perlはこのような最適化

    正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨
  • Kanasan.JS #6 で prototype.js を読んだよ! - はこべにっき ♨

    あ…ありのまま 今日 起こった事を話すぜ! 『前回参加したときに読み始めたprototype.jsが,次に参加したときには読み終わっていた』 というわけで,#1にいったっきり参加できていなかった,Kanasan.JS prototype.js CodeReading#6に参加してきました.全部で,4221行あるprototype.jsも6回目で,ついに,最後にたどりつきました. といっても,うちはなかなか参加できて無くて,今回が2回目の参加であるばかりか,10:00開始だったのに起きたら11:00とかというぐだぐだっぷりで,あまり読めてないのですが><.しかし,せっかくなので,今日読んだ部分の後半部分で気になったところのメモを残しておきます.以下,行数はprototype.js 1.6.0.2に対応します. 3843行目あたり function getEventID(element) {

    Kanasan.JS #6 で prototype.js を読んだよ! - はこべにっき ♨
  • より自然にRubyっぽくリストを書けるモジュールを書いた - はこべにっき ♨

    PerlのARRAYをRubyのArrayっぽく扱うためのモジュールがすでに三個くらいあって大人気ですね. List::RubyLike List::Rubyish List::Enumerator こういったモジュールを使うと, my @elems = map { $_ ** 2 } grep { $_ % 2 == 0 } (0..100); my $sum = 0; for my $n (@elems) { $sum += $n; } とか書いていたコードが, # List::Rubyishの場合 my $sum = List::Rubyish->new([0..100]) ->grep(sub{ $_ % 2 == 0}) ->map (sub{ $_ ** 2 }) ->reduce(sub { $_[0] + $_[1] }); みたいな感じのメソッドチェーンで書けるようになっ

    より自然にRubyっぽくリストを書けるモジュールを書いた - はこべにっき ♨
  • CPANパッケージをつくった時のメモ - はこべにっき ♨

    WebService::Hatena::Diary 0.01リリース/わーい,CPAN Authorになったよー - はこべブログ ♨ でCPANパッケージをつくった時のメモをおもむろに公開.なんか変なとこあったらおしえてくださいな みたいな. 書いてから気づいたのですが,Makefile.PLを書こう - soffritto::journalに書かれている,まず,Makefile.PLから書くやりかたの方が,より良さそうすね.Makefile.PLが開発プロセスをコントロールしていて,迷わずに開発がすすめられそうです. ともあれ,以下メモ. 基的に上から下の順番に実行していく. pmsetup でひな形をつくる パッケージのひな形を作成するためのpmsetupというプログラムを実行する.もともとは,miyagawaさんの作ったスクリプトで,自分用にカスタマイズして使う.(CodeRep

    CPANパッケージをつくった時のメモ - はこべにっき ♨
  • 詳説 Perl in ゆの - はこべにっき#

    http://subtech.g.hatena.ne.jp/miyagawa/20080708/1215473551 絶望した!rubyと比較したときのperlの難解さに絶望した! #!/usr/bin/perl use strict; # ここはpackage main; BEGIN { # プログラムのはじめにサブルーチンを定義.なくても動いたりする # ()は プロトタイプ. 引数をとらないことを言明してる # Xクラスのコンストラクタ, 実体は$sのリファレンス sub X () { bless \(my $s = "ひだまり"), "X" } # _ == 1 にする sub _ () { 1 } } package X; # ここからXクラスの定義 my $i; # クロージャ変数だけど,スコープはファイルだよ use overload # X オブジェクトの / と < 演算

    詳説 Perl in ゆの - はこべにっき#
  • いまあるMooseモジュール一覧 - はこべにっき ♨

    そろそろちゃんとMooseを勉強しようとおもうので,Moose系モジュールの一覧を眺めてみるなどした.って思ってたより多いよ! とりあえずこのあたりを一通りつかってMooseっぽさを感じ取るなどしたい.まだ,全部みきれてないけど,Moose::Compileとかがすごいことしてそうな感じがする. File::Stat::Moose IO::Moose Moose Moose::Autobox Moose::Policy Moose::Tiny MooseX::App::Cmd MooseX::Async MooseX::AttributeHelpers MooseX::AttributeHelpers MooseX::ClassAttribute MooseX::Clone MooseX::Compile MooseX::Compile::CLI MooseX::ConfigFromFil

    いまあるMooseモジュール一覧 - はこべにっき ♨
  • autoboxがかっこいい件 - はこべにっき ♨

    ActiveSupport equivalent to Perlで知ったautoboxがかっこいい。上のmiyagawaさんのコードを引用させてもらうと、DateTimeオブジェクトの生成が use autobox; use autobox::DateTime::Duration; print 1->day->ago, "\n"; # 2008-01-14T23:25:53 print 2->minutes->from_now, "\n"; # 2008-01-15T23:28:20 というようにActiveSupportっぽく書けたりする。autoboxを使ったモジュールは結構簡単にかけるので、以下のように使える、autobox::URI::Fetchを書いてみた。 my $res = 'http://d.hatena.ne.jp'->fetch; # URI::Fetch::Respo

    autoboxがかっこいい件 - はこべにっき ♨
  • use Mooseでもuse strict扱いになるようにPerl::Criticをごにょごにょ - はこべにっき ♨

    Perl::CriticとMooseを同時に使うとおこられるで書いたように,use Mooseがuse strictしてる扱いにならないので,Perl::CriticのPolicyを追加してみた. use strict;がコードの頭で宣言されているかをチェックするPolicyはPerl::Critic::Policy::TestingAndDebugging::RequireUseStrictなので,これをちょっといじる.具体的には,_is_use_strictというサブルーチンがuse strict;を見つけるためのwantedサブルーチンになっているので,これがuse Mooseも見つけれるように以下のように変更した. sub _is_use_strict { my (undef, $elem) = @_; return 0 if !$elem->isa('PPI::Statement

    use Mooseでもuse strict扱いになるようにPerl::Criticをごにょごにょ - はこべにっき ♨