サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
bokko.hatenablog.com
ISUCON8予選に@catatsuy、@cubicdaiya、@syu_creamの3人でチーム「ここで一句」として参加してきました。 前回と前々回は予選落ちで悔しい思いをしましたが、今回は一日目で2位、全体で6位ということで予選突破できました。ISUCON5以来の本選出場です。 スコアは以下の通り。 すでに@catatsuyが書いてるエントリがありますが、ここではターニングポイントとなった変更を中心にもう少し詳しく解説していこうと思います。 medium.com なお、言語はメンバーが使い慣れているGoを選択し、@cubicdaiyaがインフラ担当、残りの二人がアプリケーションのチューニングを担当という形で役割分担しました。 h2o -> OpenResty リバースプロキシ自体はh2oのままでもスコアにはほぼ影響はなかったのですが、あまり慣れてないこともあって複数台構成にする際やロギ
みんなのGo言語【現場で使える実践テクニック】 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太,稲葉貴洋出版社/メーカー: 技術評論社発売日: 2016/09/09メディア: 大型本この商品を含むブログ (4件) を見る 執筆陣の一人である@songmuさんから献本いただきました。ありがとうございます。 手元に届いたのが9月の海外出張当日で、最初は飛行機の中でゆっくり読もうと思ってたのですが、 行きも帰りも深夜だったせいかずっと眠ったままで海の向こうでもあまり読む時間が取れず、気が付いたら10月なっていました。 まぁ、言い訳はそれくらいにして感想を。 本書は開発環境の構築からGoのお作法に始まり、ビルド、ポータビリティ、テスト、シグナル、I/O、そして並行処理などなど、Goを触ったことがないプログラマにはもちろん、既に実戦で本格的にGoを使ってるプログラマにとっても有
shibuyago.connpass.com Shibuya.go#2でSlackboardの話をしてきました。以下発表資料。 speakerdeck.com 資料にもあるようにSlackboardはSlackのプロキシサーバとそのためのクライアントプログラムで構成されるツールです。 github.com 具体的には以下の3つになります。 slackboard - Slackのプロキシサーバ slackboard-cli - slackboardとの通信用クライアント slackboard-log - cronlogライクなslackboard-cli 今回はSlackboardの一通りの使い方とそもそも何故Slackのプロキシサーバが必要なのかという話をしました。後者は簡単に言うと、 Slackに通知されるメッセージとログの集約 Slackへの通知方法の統一 ということになります。サーバ
eventdots.jp 『nginx実践入門』の出版を記念してnginx Tech Talksを開催しました。司会や進行をやるのは初めてだったので正直不安でしたが、とりあえず大きな問題はなくできたのではないかと思います。以下自分の発表スライド。 speakerdeck.com Togetterまとめもあります。 togetter.com TLSセッションのサーバ間共有やOpenRestyの実践的な利用事例(e.g. JSON-RPCプロキシ)等々、興味深い話をいろいろと聞くことができて主催者としても一参加者としてもとても楽しめました。また、hsbtさんの「実践ngx_mruby入門」では「書籍で紹介しているngx_luaのサンプルをngx_mrubyに移植してみました」という内容で、内心とてもニヤニヤしながら聴いていました。 nginxやHTTPサーバの勉強会みたいなのはまた機会があれば
先週書いたエントリの続きです。既に募集が始まっていますが、来月の2月8日(月) 19:00から渋谷のイベントスペースdots.をお借りしてnginx実践入門の出版を記念したイベントを開催します。 eventdots.jp 執筆陣二人(@cubicdaiya, @harukasan)による書籍内容や執筆にまつわるエピソードの紹介のほか、ゲストによるTech TalkとLTをお届けする予定です。本書を予約していただいた方もそうでない方も是非ご参加ください。 LTも募集中です! まだ4枠ほど空きがございますので「LTしたい!」という方は@cubicdaiyaまでmentionください。 (LTの募集は締め切りました)
@harukasanと共同で「nginx実践入門」を執筆しました。2016年1月16日発売です。 nginx実践入門 (WEB+DB PRESS plus) 作者: 久保達彦,道井俊介出版社/メーカー: 技術評論社発売日: 2016/01/16メディア: 単行本(ソフトカバー)この商品を含むブログを見る 電子書籍版もあります。 gihyo.jp 本書について 本書はnginxの実践的な入門書です。nginxをはじめて利用する方や既にnginxを利用しているけれどもっと使いこなしたいという方に向けて実践的なノウハウを数多く解説しています。以下が本書の章構成になります。 第1章 nginxの概要とアーキテクチャ 第2章 インストールと起動 第3章 基本設定 第4章 静的なWebサイトの構築 第5章 安全かつ高速なHTTPSサーバの構築 第6章 Webアプリケーションサーバの構築 第7章 大規模
実家に帰る途中の新幹線で降りる駅を間違えるというアホなミスをやらかしたせいで無駄に疲れが溜まってるんだけど、コタツに入りながらのんびりと今年を振り返ってみる。 3ヶ月前に書いたメルカリに入社して1年経ったと被っている部分もあるけどあっちは会社の話ということで。 OSS活動系 CやGoで色々なツールやミドルウェアを開発・メンテしていた1年でした。メルカリのプロダクションに導入されているものも多いです。 github.com github.com github.com github.com github.com github.com github.com ngx_small_lightやgaurunをはじめ、他社のプロダクション環境でも利用される事例が出てきているのが開発者として感慨深いです。いつかmeetupとかできたらいいなぁ。smalllight-meetupとか。ネタの幅が限定されそう
ISUCON5本選に@kazeburo、@shmorimo、@cubicdaiyaの3人でチーム「GoBold」として参加して3位になりました。また、合わせて運営が定めたスコア(100,000点)に最も早く到達したチームにもらえる特別賞ももらいました。 10万点最初に到達したチームは GoBold でした。おめでとうございます!NHNテコラスさんから(超お高い)ユンケルとマカをセットでプレゼント。 #isucon pic.twitter.com/d5CBDBk1pQ— ISUCON公式 (@isucon_official) October 31, 2015 開始3時間ちょいで10,0000点に到達し、とても順調なスタートを切ることができましたが、ここから思うようにスコアを伸ばすことが出来ず最終スコアは89,254点でした。 チームの方針とやったこと 既に@kazeburoさんが書いてるエン
先日dots.で開催されたGoオールスターズというイベントで発表してきました。 Goオールスターズ - dots. Goオールスターズ - Togetterまとめ スライドはこちら。 speakerdeck.com 内容はこれまでのイベントで話した内容と被ってるところありますが、インフラにおけるソフトウェアエンジニアとしてGoをどのように捉えて利用しているかという観点からお話をしました。これは普段僕がスライド中の自己紹介欄で自分の立ち位置を「Software Engineer in Infrastructure Engineering」という風に表現していることについてもう少し踏み込んで解説しているということでもあります。 この間 @cubicdaiya とご飯食べた時に彼が「僕はインフラエンジニアじゃなくてインフラ寄りのソフトエンジニアなんですよ」って言ってたの思い出して、プログラマーな
2015年10月3日に開催されたPHPカンファレンス2015で「フリマアプリ「メルカリ」の急成長を支えるエンジニアリング」というタイトルで発表してきました。 フリマアプリ「メルカリ」の急成長を支えるエンジニアリング speakerdeck.com 内容的には昨年の9月に自分が入社してからの1年の間に行ってきたメルカリの様々なシステムの基盤作りに関する取り組みを中心にまとめたものになっています。 bokko.hatenablog.com これらの取り組みはもちろんすべて自分一人でやったわけではなく、同僚のエンジニア達と共同で取り組んで達成してきた成果でもあります。例えば、発表資料の中で言及しているデプロイの仕組みの構築にはインフラチームのメンバー全員(4人)の手が入っています。 デプロイの自動化およびゼロダウンタイム化への道 メルカリで本番にアプリーケーションをデプロイするにはリリース時刻に
ISUCON5予選に@kazeburo、@shmorimo、@cubicdaiya(敬称略)の3人でチーム「GoBold」として参加してきました。 isucon.net 15時過ぎるくらいまではスコアが伸び悩んでいましたが、結果的に2位でフェニッシュすることができました。 以下はスコアの遷移をグラフ化したものです。 GoBoldスコア遷移のグラフ #isucon pic.twitter.com/JKkfjiVJnS— Shigeki Morimoto (@shmorimo) September 28, 2015 準備と方針 今回は予選に臨むにあたって事前に以下の準備を行いました。 Wikiで各種ミドルウェアの定石設定テンプレートを共有 Slackでプライベートグループを作成 各人個別にGCE上でISUCON4予選問題(Ubuntu)の復習 次に事前に軽く打ち合わせして使用言語などの方針を固
昨年の秋にメルカリに入社してから1年経った。今となってはこういう時ぐらいしかブログ書かないだろうし、 せっかくなので入社後1年間でやってきたことをざっくばらんにまとめてみる。 Ansibleのplaybookを書き続ける日々 メルカリで一番書いた量が多いのはYAML・・・もといAnsibleのplaybookだ。二番目がnginx.conf、三番目がtd-agent.confだ・・・多分。以下はplaybookのコミットグラフ。 nginx メルカリではnginxを多用している。以下その例。 ZabbixやRedmine、APIのためのリバースプロキシ APIエンドポイントのためのTLSターミネーションおよびSPDYゲートウェイ L7ロードバランサー(API、検索、プッシュ) コンテンツキャッシュ(CSS、JS、検索レスポンス) ログ分析基盤用フロントエンド(OpenResty) ngx_
speakerdeck.com Shibuya Perl Mongersテクニカルトーク#17にお呼ばれしたのでnginxの話をしました。(なんとShibuya.pmは初参加です) 発表直後にちょっと私事でバタバタした関係であまり集中して他の方の発表を聞くことができなかったのが少し残念ですが、 あらためてh2oすごいなーって思った一日でした。 HTTP/2やSPDYのprioritizationについては僕は元々少々懐疑的で「これ、自分でチューニングしたくないなぁ」と思っていたのですが、なるほど、サーバ側で全部やってしまうのもアリかと思った次第です。 あと、発表の最後でも軽く触れましたがYAPC::Asia Tokyo 2015に実践nginxモジュール開発〜CとLua〜というトークで応募しています。採択されたらngx_small_lightやngx_dynamic_upstreamの開発
#18 Nginx | mozaic.fm mozaic.fm#18で1時間半たっぷり(収録は2時間越)nginxの話をしてきました。 おおまかな内容は、 nginxを使い始めたきっかけ nginxとスクリプティング with Lua or mruby nginxとApache nginxとh2o nginxとhttp/2 Tengine NGINX Plus nginx-1.8, 1.9 etc... といった感じです。収録した次の日にnginx-1.9.0がリリースされたり、公開間際にnginx-1.9.1がリリースされてSO_REUSEPORTが入ったりして編集大変だったと思いますが、@Jxck_ さんお疲れ様でした。 以下反省点 「そうですね」言い過ぎ(話の切り出し難しい...) 収録後半にバテて若干息切れ(体力不足ェ) 所々滑舌が悪くて噛んだ さて、今日はAWS Summit T
画像変換Night - connpass @harukasanと@yoyaの三人で画像変換Nightを主催しました。(と言いつつイベントの下準備などの重要なことは大体この二人がやってくれた感じで僕はイベントの運営に関してはあまりコントリビュートできてなくてちょっと申し訳ないなぁと思ったり。次があったらもうちょっと頑張ります) 以下、自分の発表資料です。 割と作者本人がびっくりしたのですが、ngx_small_light結構使われているなぁ、と。 これまでも何度か外部の勉強会で地道に宣伝活動みたいなことはしていたのですが、今回のように自分のプロダクトの利用事例を自分以外の人に発表してもらえるというのは非常に開発者冥利に尽きます。職場が変わったこともあって以前ほどがっつりと画像変換に関わってたりはしないのですが、ngx_small_lightは今後も地道にメンテを続けていこうかと思います。なん
先日、元同僚のエンジニアと話した際にnginxのstable版とmainline版との違いについて話題にのぼったんだけど、nginxの中の人的には基本的にmainline版を使え、ということらしい。ソースは以下。 http://nginx.com/blog/nginx-1-6-1-7-released/ 上記の一部を抜粋してみる。 Which version should I use? In general, you should deploy the NGINX mainline branch at all times. You may wish to use stable if you are concerned about possible impacts of new features, such as incompatibility with third-party module
外に出ていて手持ち無沙汰な時、かといってゆっくり本を読めるというわけでもない微妙な空き時間にTwitterとかはてブばっかり見てるのもアレなので、ソースコードでも読もうと思っていつくかそのためのアプリを入れてみた。 Gh4a Android用Githubクライアント。認証機能がついているのでgithubにログインしないと見れない情報も見れる。ただ、常に上部に表示されているメニューのせいで肝心のソースコードの表示範囲が狭くなってしまうのが難点。ソースコードビューワというよりはGithubビューワと言う方がしっくりくる。 GitHubViewer Gh4aの簡易版といった感じ。認証機能はないが、Gh4aみたいに常時メニューが表示されることはないので、単にソースコード読むだけならこっちの方がいいかも。 Code Library Lite Gh4aとGitHubViewerはどちらもgithubを
今回の三連休でしばらく手を加えていなかった.emacsを大幅に改造してみた。新たに加えたelispは以下の通り。 auto-install.el auto-async-byte-compile.el anything.el popwin.el direx.el とまぁ、数だけ見るとそんなに入れてないんだけど、主にanything関連の設定やら連携のために過去に自分で書いたelispを相当書き直す羽目になり、全部終わった頃には月曜日になっていた。 そして、以前はバイトコンパイル前/後のelispをそれぞれ別のディレクトリに配置してデバッグしやすいようにフラグ一つで切り替えるような設定にしてあったんだけど、auto-installとauto-async-byte-compileが入ってそれらの設定が不要になり、これまたローダ部分を全部書き直すことになって気が付くと連休が終わっていたorz。 a
最近, コードを書いてない。だから, というわけではないが, ちょっとわけがあってEAN/JANで検索するプログラムを書きたくなったので 今日はAmazon Web Service(以下, AWS)で少しだけ遊んでいた。 AWSでは書籍はEAN/JAN(ISBN13)*1で検索できないので, ASIN(ISBN10)に変換する必要がある。2007年以降に出版される書籍はISBN13に移行するので そのままEAN/JANを使えばいいらしいけど。 function ean_to_asin($strEAN){ if(!is_string($strEAN) || ($len = strlen($strEAN)) != 13){ die "番号が正しくない"; } $str = substr($strEAN, 3, 9); $sum = 0; for($i=0;$i<$len;$i++){ $sum
先週Amazonから届いたスターオーシャン4をやってるのだが、字が小さい。何でだろう?テレビが小さいからか?バトル画面で表示されているHPとかの数字がちゃんと読み取れないくらい小さいので、正直ちょっと困っている。 それはそうと今日は、久々にシェルスクリプト書いてて嵌った話。 add.sh 実際に書いていたのはもうちょっと長いんだけど、話を単純にするため、受け取った二つの引数の和を求めるシェルスクリプトを書いてみる。(エラー処理は省略) #!/bin/sh ret=`expr $1 + $2` echo $retとりあえず、実行してみる。 $ sh add.sh 1 2 3 $ sh add.sh 100 1000 1100 $上記のスクリプトを書いた後、二つの数の和を求める処理がいろんな箇所で必要になりそうだったので、add関数を定義することにした。 #!/bin/sh add () {
dtlは去年からずっとMercurialでバージョン管理してるんだけど、Githubに一応ミラーリングしておこうと思って変換ツールであるHgGitを使ってみた。 http://hg-git.github.com/ まず、HgGitを動作させるのに必要なdulwichをインストールする。 $ sudo apt-get install python-setuptools # easy_installが含まれているパッケージ(Ubuntuの場合) $ sudo easy_install 'dulwich>=0.4.0' 次にHgGitをgithubから持ってくる。 $ git clone git://github.com/schacon/hg-git.git そしてMercurialの設定ファイル(.hgrc)の[extentions]に以下を追記する。(パスは環境に合わせて書き換えてください)
まだC, C++がないようなので書いてみた。主にLinux(DebianとかUbuntu)での環境構築について。 コンパイラ まずはapt-getでコンパイラをインストールする。UbuntuやDebianなら以下のコマンドでgccやg++および標準ライブラリ等がインストールされる。 $ sudo apt-get install build-essential デバッグツール デバッガおよびデバッグツールは少なくとも以下の三つは入れる。(あとltraceも欲しいかな?) GDB 言わずと知れたGNUのデバッガ Valgrind メモリリークや不正メモリアクセスの検出 strace システムコールのトレース $ sudo apt-get install gdb valgrind strace ビルドツール C, C++のビルドツールといえばまずmakeが浮かぶけど、最近ではSConsやCMak
dtlのサンプルプログラムやテストプログラムのビルドをSConsでやってみた。 dtlの複数あるサンプルプログラムのMakefileはこんな風になっている。 Makefile CPP = g++ CPPFLAGS = -c -O2 -Wall OBJS_FLAGS = -O2 -o STRDIFF_OBJS = strdiff.o common.o STRDIFF3_OBJS = strdiff3.o common.o UNIDIFF_OBJS = unidiff.o common.o UNISTRDIFF_OBJS = unistrdiff.o common.o INTDIFF_OBJS = intdiff.o INTDIFF3_OBJS = intdiff3.o PATCH_OBJS = patch.o common.o FPATCH_OBJS = fpatch.o common.o
Mercurialをemacsやzsh、global, その他の設定ファイルの管理だけでなく、ソースコードの管理にも本格的に使うようになったこともあり、ブランチやマージの機能も頻繁に使うようになってきた。 このへんの機能を使ってて思うのはやはりCVSやSubversionに比べてブランチの作成や切り替え、マージ等の操作が簡単に行えるということ。これはGitについても同じことが言えるが、Gitのコマンドラインインタフェースは個人的にはかなり微妙。 ブランチの一覧を表示 narazuya@bokkko% hg branches diff3 30:1946a2e61b7e default 23:fd1771eddd50 (inactive) 0.04 22:3549817de2ba (inactive) 0.03 12:9a49ae230cf6 (inactive) narazuya@bokkk
http://d.hatena.ne.jp/tt_clown/20091228/1261996214 http://d.hatena.ne.jp/Isoparametric/20091230/1262134418 なんか昨年末の話で、反応するには少々遅い気がするけど、個人的に車輪の再発明をするに至る場合や理由について考えてみる。 勉強のために既にあるものを自分で書くのよくある話というか、そうしなきゃ勉強にならないから当たり前として、*1それ以外の理由について考えてみる。 コーディングスタイル ライセンス 巨大すぎるライブラリ ほかにもあるけど、関連エントリで内容がかぶってしまっているものもあるので、とりあえず上記の項目についてだけ書いてみる。 コーディングスタイル 他人のソースコードを自分のソースコードに取り込む際、そのソースコードのスタイルが自分がいいと考えるものと懸け離れていて採用した
DiffView more presentations from cubicdaiya. 情報科学苦手の会でDiffのアルゴリズムについて話してきました。↑はその時の資料です。 苦手かどうかはともかく非常に内容の濃い勉強会でとても楽しめました。
プログラマーのジレンマ 夢と現実の狭間 作者: スコット・ローゼンバーグ,伊豆原弓出版社/メーカー: 日経BP社発売日: 2009/05/21メディア: 単行本購入: 19人 クリック: 210回この商品を含むブログ (52件) を見る 本書はChandlerという野心的なオープンソースの情報管理アプリケーションを開発しようと試みて深みにはまり、もがき苦しみ、それでも前に進もうとしたプログラマ達を描いたノンフィクションです。いわゆるデスマーチ*1というやつですね。読んでみると分かりますが、本書で描かれている2001年に始まったChandlerの開発はかなり悲惨なもので、登場する開発者の絶望感やら焦燥感は「闘うプログラマ」で描かれているようなデスマーチを思い起こさせます。しかし、「闘うプログラマ」の題材となったWindows NTは最終的には完成し、一応ハッピーエンドを迎えましたが、Chan
Tokyo Cabinetの仕様書を見ると、 B+木のデータベースでは、キーが重複する複数のレコードを格納することができます。このデータベースに対しては、ハッシュ表のデータベースと同様に、キーを指定してレコードを格納したり取り出したり削除したりすることができます。レコードはユーザが指示した比較関数に基づいて整列されて格納されます。カーソルを用いて各レコードを昇順または降順で参照することができます。この機構によって、文字列の前方一致検索や数値の範囲検索が可能になります。 とあるのだが、↓みたいにB+木のデータベースにキーが重複したレコードを格納しても格納されるのは「database -> oracle」のみとなる。 /* レコードを格納する */ if(!tcbdbput2(bdb, "database", "mysql") || !tcbdbput2(bdb, "database", "p
エラーコード12が何なのか調べようとして気軽に「less /usr/include/errno.h」としたところ、実はこのファイルにはエラー番号の定義はないことを発見した。おそらく、ここからincludeされているにあるらしい。(errno.hを追跡していたらひどい目にあった) CやC++だと上記のようにヘッダファイルを見たら別のヘッダファイルをインクルードしてるだけで、さらにそのファイルを探さないといけないようなことが結構あります。自分も常日頃面倒だなあと思いつつ、何もしてなかったのですが、上記のエントリをきっかけに、ちょっと重い腰を上げて、以下のようなelispを書いてみました。 ;; Author:Tatsuhiko Kubo ;; This elisp can open header file on current line. ;; This program is free sof
次のページ
このページを最初にブックマークしてみませんか?
『考える人、コードを書く人』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く