タグ

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

  • grpc-gateway と使われてるProtocolBuffer周辺技術メモ - はこべにっき ♨

    grpc-gatewayはHTTP2+ProtocolBuffer をプロトコルに用いるgRPCのサービスを、HTTP/1.1のRESTfulな JSON APIとして利用できるようにするリバースプロキシを生成してくれるツールだ。 厳密にはProtocolBuffersを処理するコマンドであるprotocのプラグインとして動作し、protocに読み込んだgRPCのサービス定義をもとにGoで記述されたコードを生成する。生成されたコードはHTTPサーバのハンドラになっていて、net/httpに登録して使えるようになっている。 ハンドラはHTTP/1.1でリクエストを受け取ると、リクエストに含まれるJSONを対応するProtocolBufferのメッセージに変換し、プロキシ先のgRPCサービスのメソッドを呼び出す。このgRPCサービスは、元にしたスキーマが同じであればGo以外の言語で実装されてい

    grpc-gateway と使われてるProtocolBuffer周辺技術メモ - はこべにっき ♨
  • gRPCを学んでいる - はこべにっき ♨

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

    gRPCを学んでいる - はこべにっき ♨
    clavier
    clavier 2018/04/05
  • 確率統計の勉強 - はこべにっき ♨

    仕事やらなんやらで、データの様子をみる場面はよくあるものの、データの調べ方や分析の方法を知らなくてなにかと困るので、なんとかしたい... という気持ちの高まりがあって、連休のちょっと前から確率統計の勉強をはじめた。 確率統計は大学の講義で一通りやったはずだけど、たいして活用できないまま数年がすぎてほぼ忘れてしまった。そういう調子なので、今となっては、適当な数の標を用意してきて、標比率を求めてみるけど、この値は母比率にどれくらい近いものなの? と言われても、まったく何も言うことはできないのであった。 ひとまず基的な内容をザクッと学べそうな、まずは、やさしく学べる統計学を読んでみた。 やさしく学べる統計学 作者: 石村園子出版社/メーカー: 共立出版発売日: 2006/06/30メディア: 単行購入: 1人 クリック: 12回この商品を含むブログ (13件) を見る 以前、微分積分の勉

    確率統計の勉強 - はこべにっき ♨
  • レガシーソフトウェア改善ガイドを読んだ - はこべにっき ♨

    めっちゃ似た名前の"レガシコード改善ガイド"とは別の。レガシーコード改善ガイドは結構前のだけど、このレガシーソフトウェア改善ガイドは去年刊行されたばかりだ。hitodeくんと会話してて気運が高まったので読んだ。 レガシーソフトウェア改善ガイド (Object Oriented Selection) 作者: クリス・バーチャル,吉川邦夫出版社/メーカー: 翔泳社発売日: 2016/11/11メディア: 単行(ソフトカバー)この商品を含むブログを見る このは、レガシーソフトウェアがメインのテーマにしているけれど、古びてどうにもならなくないソフトウェアプロジェクトへの対処のみにフォーカスしているのではなく、普段から開発しているコードをどうやって継続して進化させられるかといった内容が主で、どんなソフトウェアエンジニアにも勧められそう。 このの章の構成をみると、大きくはリファクタリングに関

    レガシーソフトウェア改善ガイドを読んだ - はこべにっき ♨
    clavier
    clavier 2017/02/13
  • PythonでWebアプリケーション作る練習をした - はこべにっき ♨

    最近流行っている雰囲気があるPythonだけど、僕も年末にふと気分が高まったので、練習をしてみた。 自分にとってはPerlRubyよりも先に勉強した、初めてのスクリプト言語がPythonだったので、ちょっとだけ思い入れがある。とはいえ、何年も前に初めてのPythonで勉強した後は、稀に使うくらいだったのでPythonならではの良い書き方とか、良いライブラリの知見とかは全然持ってなかった。 そこで、Pythonに入門しなおしてPython流を思い出した後、自分が気になっているWeb開発をやってみてどういうもんなのかを一通りやってみた。 このエントリは、GoでWebアプリケーション作る練習をしたの続編です(さらに続きはないでしょう)。 入門 Python3 を読んだ 入門 Python 3 作者: Bill Lubanovic,斎藤康毅,長尾高弘出版社/メーカー: オライリージャパン発売日:

    PythonでWebアプリケーション作る練習をした - はこべにっき ♨
    clavier
    clavier 2017/01/19
  • GoでWebアプリケーション作る練習をした - はこべにっき ♨

    GoでWebアプリケーションを書いてみる練習として RequestBin ぽいものを試しに作ってみた。gomibakoという名前であまりひねりはない。以下のURLで試せます。 https://gomibako.douzemille.net/ ソースコードもGitHubに公開してある。 github.com 何ができるか HTTPリクエストを受け付ける用のURLを作ることができて、そのURLに対するHTTPリクエストのログをWeb上で確認することができる。ちょっとしたWebHookの動きのチェックとかリバースプロキシの設定確認とかに使えて便利。 具体的には以下の様にして使える https://gomibako.douzemille.net/ にアクセスして "New Gomibako" ボタンを押す https://gomibako.douzemille.net/g/deadbeaf123/

    GoでWebアプリケーション作る練習をした - はこべにっき ♨
  • 今季見るべきアニメを機械学習で推薦する - はこべにっき ♨

    Coursera で機械学習に入門成功できたので応用に挑戦してみました。ちょうど季節の変わり目ということで、過去に見て気にいったアニメの特徴を学習して、未知のアニメを、気にいりそうなアニメと気にいらなそうなアニメに分類するツールを作って、ソフトウェアに今季見るべきアニメを推薦してもらいたいと思います。 アニメの特徴量 あるアニメを気にいるかどうかは、話のおもしろさや、絵柄の感じ、キャラクターの魅力などによって決まりそうです。ただ、話のおもしろさや、絵の美しさ、キャラクターの魅力を特徴量として数値化するのはむずかしいので、アニメの映像を制作しているスタッフや会社、声を当てているキャストにフォーカスすることにしました。 Courseraの機械学習のコースでは、特徴として妥当かどうかを判断するのに、人間が同じ特徴を与えられて分類といったタスクが可能かを考えてみよとアドバイスしていました。アニメ作

    今季見るべきアニメを機械学習で推薦する - はこべにっき ♨
  • アクターによる並行処理アーキテクチャの解説 - はこべにっき ♨

    社内勉強会でアクターによる並行処理アーキテクチャについて解説した時の資料です。しれっと公開してあった資料に思いの外ブクマがついていたのに気付いたので、せっかくなのでこちらにも掲載しておきます。 既存技術の解説なのでアクターについて知っている人にとって新しい情報はないと思います! 特に何ベントカレンダーでもないです。 今後Erlang使うの? Erlang VMの運用ノウハウなさすぎるので、すぐ使おうという機運はなさそう。ScalaのAkka Actorが十分実用的なアクターシステムらしいし、Scalaは導入済みなのでそちらのほうが有力な選択肢になるか。アクターシステムではないが、goでも近いことはできるのでさくっと並行処理システムを構築するには良いと思う。趣味ならElixirつかいたい。 参考文献 良い資料がいろいろあって、多分に参考にさせていただいています。ながめると理解が深まるかもしれ

    アクターによる並行処理アーキテクチャの解説 - はこべにっき ♨
  • Goによるプライベートネットワークへのアクセスを禁止するHTTPクライアントの実装 - はこべにっき ♨

    クローラのように、ユーザからの入力に応じて任意のURLにHTTPリクエストを発行するソフトウェアは、誤ってプライベートネットワークへのリクエストを処理しないようにする必要があります。悪意のあるユーザが故意にプライベートなネットワークに対してリクエストして、内部情報にアクセスするといった攻撃を行う可能性があるからです。 PerlではLWPx::ParanoidAgentやLWPx::ParanoidHandlerといったモジュールが便利です。これらのモジュールは、リクエスト先のURLをチェックしてプライベートネットワークへのリクエストを禁止してくれます。単にIPアドレスをチェックするだけでなく、ホスト名をDNSで解決して得られたIPアドレスをチェックしたり、リダイレクト先のURLをチェックしたりしてくれます。まさに偏執的です。 このLWPx::ParanoidAgentと同様の機能をもったG

    Goによるプライベートネットワークへのアクセスを禁止するHTTPクライアントの実装 - はこべにっき ♨
  • オブジェクト指向入門読み終わった - はこべにっき ♨

    ちまちま読んでたオブジェクト指向入門を読み終わった。だいたい入門と言っているが、原題は"Object-Oriented Software Construction"で入門感はないし、上下巻あわせて2000ページくらいあって読みきるのが大変だった。 原著は18年前に発売されただが、内容のほとんどは今でも有益で、全体を通してためになる。オブジェクト指向が解決しようとしている課題や、背景にある理論や考え方について解説してくれるだけではなく、実際にソフトウェアを設計する際にどのようにクラスを見つけ、どんな場面で継承を使い、ソフトウェア全体をどのように形作っていくのかという実践的な議論も充実している。 の序盤では、ソフトウェアの品質の様々な側面についての解説や、オブジェクト指向以前から使われていたモジュールや型の概念のがもつ諸課題について詳しく解説してくれる。それらの問題をふまえ、次に、ソフトウ

    オブジェクト指向入門読み終わった - はこべにっき ♨
  • golangで書かれたSlack bot でエンジニアに話題提供しよう - はこべにっき ♨

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

    golangで書かれたSlack bot でエンジニアに話題提供しよう - はこべにっき ♨
  • BeutifulCodeの正規表現エンジンをRubyに移植 - はこべにっき ♨

    今日,BeautifulCodeを読み始めたんだけど,1章目から正規表現エンジンを実装していたりして,かなり刺激的な内容だった.残りの章を読み進めていくのが楽しみ. ビューティフルコード (THEORY/IN/PRACTICE) 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖出版社/メーカー: オライリージャパン発売日: 2008/04/23メディア: 大型購入: 30人 クリック: 617回この商品を含むブログ (191件) を見る この1章には,C言語で書かれた正規表現エンジンのコードが記載されている.この正規表現エンジンは,正規表現のうち . ^ $ *が使えるようなやつで,もともと,プログラミング書法に載っていたやつらしい.教育のために非常に簡潔できれいに書かれていて読みやすい. そこ

    BeutifulCodeの正規表現エンジンをRubyに移植 - はこべにっき ♨
    clavier
    clavier 2014/12/17
  • 社内技術勉強会でScalaのおすすめポイント解説した - はこべにっき ♨

    はてなでは週に一回、社内技術勉強会というのをしています。今週は僕の当番だったのでScalaの入門的な話をしました。 普段使いの言語として、Scalaの便利なところをまとめたというつもりです。とはいえ、他の言語にもある特徴もわりと紹介してるので、もうちょっとScala独自の内容にフォーカスしてもよかった... むずかしい。時間の都合で全部話きれなくて、会が終わった後でimplicitまわりの話とか数人にご紹介したら一番おもしろかったと言う話になったので無念。 あの機能を紹介してないとはけしからんみたいなのがあったら教えて下さい。そうはいってもとりあえず Scalaスケーラブルプログラミング第2版を読むといいです。 ↓ 資料はgist形式でembedしてあります ↓ https://gist.github.com/hakobe/e1aa2501a64e7f801b55 こちらもおすすめ Sca

    社内技術勉強会でScalaのおすすめポイント解説した - はこべにっき ♨
  • golangで書かれたプログラムのメモリ使用状況を見る - はこべにっき ♨

    golangにはpprof用のプロファイルデータを出力できるライブラリが標準でついてくるので、それらを使うことでメモリの使用状況を調べることができる。中でも、net/http/pprofが手軽で便利だった。 net/http/pprofをプログラムに組み込むことでダイナミックなプロファイル情報をWebブラウザで表示してみることができる。使い方は、ライブラリの解説ページにあるとおりなんだけど、プロファイルを取りたいプログラムで import _ "net/http/pprof" とimportしたあと、main関数などで go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() と書いておくと良い。 この状態でプログラムをbuildして実行する。プログラムの実行中に、http://localhost:606

    golangで書かれたプログラムのメモリ使用状況を見る - はこべにっき ♨
  • Dockerでgoのテストを実行する環境をつくる - はこべにっき ♨

    1つのJenkinsの環境で複数のプロジェクトのテストが実行されることは、ままあると思う。Jenkins上で動作するすべてのプロジェクトが同時に動作するようにJenkins環境を整えるのは難しいことがある。あるプロジェクトのためにライブラリのバージョンを更新したことで、別のプロジェクトのテストが落ちるとか。 Ruby なら Bundler やrbenvを使って環境を切り替えるとだいたい解決するけど、libhogeみたいな共有ライブラリやBundlerやrbenv自体の更新とか、どうしても共有される部分はあって、だいたい普段は問題はないが、まれに困ると言う感じだと思う。 そこで、テストごとにDockerのコンテナを立ち上げてその中でテストを実行するようにすれば、環境を独立させることができるので、環境をこわさないように丁寧に設定するみたいなことに気を使わなくてよくなるので便利。 miyagaw

    Dockerでgoのテストを実行する環境をつくる - はこべにっき ♨
  • テストをどこまで書くか - はこべにっき ♨

    CROSS2014で以下の2つのセッションにお招きいただきお話をさせていただいた。ありがとうございました。 http://www.cross-party.com/programs/testcidevops/ はてなクックパッドの開発現場で、CIやテストはどう行われているのか?(前編)。CROSS 2014 - Publickey 2014/1/17 #cross2014 現場に聞く!テスト/CI/DevOps、実際のところどうなの - Togetterまとめ http://www.cross-party.com/programs/butsukari/ 2014/1/17 #cross2014 コードレビューCROSS 〜ぶつかり稽古 2014初場所〜 - Togetterまとめ セッション中はもちろん、その後の懇親会でもいろいろな方におはなしを伺えてかなり勉強になった。テストやコードレビ

    テストをどこまで書くか - はこべにっき ♨
  • 作ってみたものの飽きそうなWebアプリはherokuで動かしておく - はこべにっき ♨

    合宿で heroku 使ってたチームがあって、とても便利そうだった。昔、Node.jsで画像アップローダをつくったんだけど(node.jsでtrayという画像アップローダを作った - はこべブログ ♨) 自分のVPSで雑に動かしていて、飽きてしまうとあんまり気にしなくなって、止まっても放置したりしてた。それくらいであれば、herokuで一旦動かすようにしておけば、可用性は担保されるだろうと思い立ち、herokuで動作させることにした。 動いている様子はこちら: http://imagetray.herokuapp.com/ 左上のマスに画像をドラッグ・アンド・ドロップすると画像がアップロードされる。誰かがアップロードするとリアルタイムに更新される。コードを更新したり、しばらくだれも使ってなかったりして、herokuホストがrestartされると、アップロードされた画像は消えてしまう、刹那

    作ってみたものの飽きそうなWebアプリはherokuで動かしておく - はこべにっき ♨
  • Go言語の気に入ったところ/気に入らなかったところ - はこべにっき ♨

    二日間ほど集中してgo言語でコード書いたので、その間に感じたことをまとめてみます。普段はだいたいPerlJavaScriptでWebアプリケーションを書いています。 まとめの要約 go言語良い Webアプリケーション書くならPerlとかRubyが良い PerlとかRuby書ける人がミドルウェア書くならgo言語良い 気に入ったところ コンパイルエラーが親切 たとえば気楽な気持ちで以下のようなコードを書くと package main import ("fmt"; "net/http"; "log") func main() { resp := http.Get("http://hatenablog.com/") fmt.Println(math.Pi) } 以下のように丁寧に問題箇所を教えてくれます。 ./hoge.go:6: imported and not used: "log" ./h

    Go言語の気に入ったところ/気に入らなかったところ - はこべにっき ♨
  • go言語によるhtmlcat実装 htmlcatgo の紹介 - はこべにっき ♨

    go言語の勉強に、motemenさんが作ったhtmlcat(標準入力をブラウザで tail -f できる htmlcat というのを書いた - NaN days - subtech)をgoで実装してみました。この記事ではhtmlcatgoの紹介と実装の見どころについて解説します。 htmlcatgoの紹介 htmlcatgo は、標準入力をブラウザ上でtail -fできるソフトウェアです。元祖htmlcatの使い方とほぼ一緒です。 $ tail -f /var/log/messages | htmlcatgo のように実行すると、 2013/12/16 08:15:02 htmlcatgo: http://localhost:45273のようにURLが表示されます。これをブラウザで表示すると、画面にtail -fの結果がリアルタイムで流れてきます。元祖htmlcatにある --execオプ

    go言語によるhtmlcat実装 htmlcatgo の紹介 - はこべにっき ♨
  • Node.jsで書かれたIRC bouncer、homura を作りました - はこべにっき ♨

    いわゆる IRC proxy や IRC bouncer はIRCサーバに常時つないでおいてログをとったり、チャンネルを維持したりするのに、大変便利なソフトウェアです。ZNCやtiarraなんかが有名ですね。 その IRC bouncer をNode.jsでのネットワークプログラミングの手習いに書いてみました。homuraというソフトウェアです。はじめてつかったIRC bouncerがmadokaという名前だったのを思い出して名づけました。 homuraにはIRC bouncerとして最低限の機能がそろっています。同時に複数のサーバへの接続、複数のクライアントから接続の受付が可能で、サーバークライアントの両方でTLS接続に対応しています。チャンネルごとにログを記録したり、クライアントからの接続がなくなった時に自動でawayになるといった、機能を備えます。(READMEのmodulesの項を

    Node.jsで書かれたIRC bouncer、homura を作りました - はこべにっき ♨