タグ

ブックマーク / deeeet.com (19)

  • Move Fast: How Facebook Builds Softwareを読んだ

    Software Engineering DailyのJeff Meyersonが書いた Move Fast: How Facebook Builds Software を読んだ.というかJeff Meyerson人によって録音されたAudiobookが公開されているのでそちらで聴いた.Podcastホストをやっていることもあり音声はとても聴きやすく長さも3時間くらい (紙のだと123ページ) でさっと聴くことができた. 内容としてはFacebookのエンジニア組織について「Product」と「Culture」「Technology」という観点からCase study的に様々な話がまとめられている.「Product」ではWebからMobileへのシフトの話やGoogle+が出てきた時の話が,「Culture」ではマネージメントやBootcampと呼ばれるオンボーディングプログラムつい

    t-wada
    t-wada 2021/07/28
    最近興味を持って読み始めた本は大体 @deeeet さんが先に書評エントリを書いていて毎回すごいなと思う。『Move Fast』良いです。『Software Engineering at Google』やユニコーン本との読み比べも面白い。
  • なぜMicroservicesか?

    現職においてMonolithアーキテクチャからMicroservicesアーキテクチャへの移行とその基盤の構築に関わって2年近くが経った.未だ道半ばであるがこれまでの経験や日々のインプットをもとにいろいろ書いておこうという気持ちになった.記事ではそもそもMicroservicesアーキテクチャとは何かを整理し,なぜやるべきか?・なぜ避けるべきかを整理する. Microservices? Microservicesアーキテクチャとは「Single purpose,High cohesion,そしてLoosly Couploedなサービスを組み合わせてシステムを構築する」アーキテクチャ手法である.それぞれの原則をまとめると以下のようになる. Single purpose: 一つのことに集中しておりそれをうまくやること Loose coupling: サービスは依存するサービスについて最小限の

    t-wada
    t-wada 2019/05/22
    "運用まで含めて各サービスに十分な人員を当てられない・将来的に当てられる予定がない,専用の基盤を構築する余裕がないならMicroservicesはやるべきではないと思う.むしろ負担・オーバーヘッドになってしまう”
  • Golangにおけるinterfaceをつかったテスト技法 | SOTA

    最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単に書いておく.まずはinterfaceを使ったテストの基について説明し次に自分が実践している簡単なテクニックをいくつか紹介する. なおGolangのテストの基については @suzuken さんによる「みんなのGo言語」 の6章が最高なので今すぐ買ってくれ! 前提 自分はテストフレームワークや外部ツールは全く使わない.標準のtestingパッケージのみを使う.https://golang.org/doc/faq#Packages_Testing にも書かれているようにテストのためのフレームワークを使うことは新たなMini language(DSL)を導入することと変わらない.最初にそれを書く人は楽になるかもしれないが新しくプロジェクトに参入してきたひ

    t-wada
    t-wada 2016/10/25
    "外界とやりとりを行う境界をinterfaceにする" はたいへん良い。環境変数による分岐をプロダクションコードに入れるのは不吉な臭いなので、節度を持って行いたい。(分岐はテストコード側とのこと。誤読すみません…)
  • GolangのGCを追う

    Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する. GoのGCの今 最初にGoのGCの最近の流れ(2016年5月まで)をまとめる. Go1.4までは単純なStop The World(STW)GCが実装されていたがGo1.5からは新たなGCアルゴリズムが導入された.導入の際に設定された数値目標は大きなヒープサイズにおいてもレイテンシを10ms以下に抑えることであった.Go1.5で新たなアルゴリムが実装されGo1.6で最適化が行われた. 以下は公開されているベンチマーク.まずはGo1.5を見る. Gophe

    t-wada
    t-wada 2016/05/09
    Go 言語の GC アルゴリズムの改善について
  • Hashicorp Ottoを読む

    Hashicorpから2015年秋の新作が2つ登場した. Otto - HashiCorp Nomad - HashiCorp Ottoがなかなか面白そうなのでコードを追いつつ,Ottoとは何か? なぜ必要になったのか? どのように動作するのか? を簡単にまとめてみる. バージョンは 0.1.0 を対象にしている(イニシャルインプレッションである) Ottoとは何か? 公式はVagrantの後継と表現されている.が,それはローカル開発環境の構築も担っているという意味で後継であり,自分なりの言葉で表現してみると「OttoはHashicorpの各ツールを抽象化し開発環境の構築からインフラの整備,デプロイまでを一手に担うツール」である.ちなみにOttoという名前の由来はAutomationと語感が似ているからかつ元々そういう名前のbotがいたからとのこと. なぜOttoか? なぜVagrantで

    t-wada
    t-wada 2015/10/05
    Otto とは何で、どういう背景で出てきたのが分かりやすく説明されている
  • Apache Kafkaに入門した

    Apache kafka 最近仕事でApache Kafkaの導入を進めている.Kafkaとは何か? どこで使われているのか? どのような理由で作られたのか? どのように動作するのか(特にメッセージの読み出しについて)? を簡単にまとめておく(メッセージングはまだまだ勉強中なのでおかしなところがあればツッコミをいただければ幸いです). バージョンは 0.8.2 を対象に書いている. Apache Kafkaとは? 2011年にLinkedInから公開されたオープンソースの分散メッセージングシステムである.Kafkaはウェブサービスなどから発せられる大容量のデータ(e.g., ログやイベント)を高スループット/低レイテンシに収集/配信することを目的に開発されている.公式のトップページに掲載されているセールスポイントは以下の4つ. Fast とにかく大量のメッセージを扱うことができる Scal

    t-wada
    t-wada 2015/09/04
    Apache Kafka のアーキテクチャについて。問題の背景と設計判断。これは面白い。
  • Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5

    Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの

    t-wada
    t-wada 2015/08/26
    Go 1.5 における依存解決機能および Vendoring 機能に関する改善についての解説
  • Herokuの'docker:release'の動き

    Herokuの'docker:release'の動き Introducing ‘heroku docker:release’: Build & Deploy Heroku Apps with Docker HerokuDockerを使ったツールを提供し始めた.一通り触ってコードもちょっと読んでみたので現時点でできること,内部の動きについてまとめる. TL;DR Herokuのデプロイ環境とおなじものをDockerでつくれる Buildpackを使わないでDockerfileからSlugを作れる 自分の好きなDockerイメージをHeroku上で動かせるようになるわけではない. 何ができるのか まず何ができるようになったのかについて簡単に書く.プラグインをインストールするとDockerコマンドが使えるようになる. $ heroku plugins:install heroku-docker

    t-wada
    t-wada 2015/05/07
    先日 Heroku からアナウンスされた heroku docker:release の詳しい解説
  • 複数プロジェクトを抱えるチームでのデプロイ自動化

    複数プロジェクトを抱えるチームでのデプロイ自動化 1つのチームで,10以上のプロジェクト,コードベースを抱える場合にどのようにデプロイの自動化を進めたか,工夫したこと,考慮したことなどをまとめておく. デプロイツールには,Python製のfabricを採用しているが,他のツールでも同様のことはできそう.なお,fabricの基的な使い方などは既にインターネット上に良い記事がたくさんあるので書かない(最後の参考の項を見てください). fabricの選択 シェルスクリプトとCapistranoを考慮した. まず,シェルスクリプトは人によって書き方が違うため,統一が難しくメンテナンスコストも高い.また共通化も難しい. 次に,Capistranoは,裏でやってくれることが多く,学習コストも高い.プロジェクトによってはかなり特殊な環境へのデプロイも抱えているため,Capistranoの前提から外れる

    t-wada
    t-wada 2014/10/31
    “俺が通り過ぎた後には自動化されたシステムしか残らない” かっこいい///
  • "Microservices"を読んだ

    James Lewis氏とMartin Fowler氏による“Microservices”を読んだ.以前ざっと目を通したが,最近よく耳にするようになったのでちゃんと読んだ.以下はそのメモ. 概要 “Microservices” とはソフトウェアシステムの開発スタイルである 近年このスタイルでの開発を見てきて良い結果が出ている 初出は2012年の3月の“Micro services - Java, the Unix Way” Microserviceは一連の小さなサービスで1つのアプリケーションを開発する手法 それぞれのサービスは自身のプロセスで動いており,軽量な機構(e.g., HTTP API)を通じて情報をやりとりする これらのサービスは独立して自動デプロイされる 一枚岩として構築されるMonolithicスタイルのアプリケーションと比較すると分かりやすい 一般的なエンタープライズのア

    t-wada
    t-wada 2014/09/16
    現時点の Microservices についてとても良くまとまっているエントリ
  • 好きなPodcast

    twitterでちょっとつぶやいてたけど,最近自分がよく聴いてるPodcastをまとめてみる.Tech系以外もすこし混じってる.他にオススメあれば教えてください. 日語 Rebuild - Podcast by Tatsuhiko Miyagawa - Podcastを聴くという習慣はここから始まった.大学院生のころからずっと聴いてる.Liveもできる限り聴いてる.大ファン.取り上げる技術もすごい尖っていて面白い.全エピソード好きだけど,敢えてあげるなら,“3: MessagePack”,“14: DevOps with Docker, chef and serverspec”,“27: Dragon Quest, Docker and AngularJS”,“35: You Don’t Need API Version 2”, “37: N Factor Auth”,“42: When

    t-wada
    t-wada 2014/08/06
    ここに挙がってないものでは Joel Spolsky と Jeff Atwood の Stack Exchange Podcast が好きでよく聴いていました(最近更新少なめ)。 rebuild.fm と mozaic.fm は毎回聴いてます。 Overcast まだ入れてないので試さないとなぁ
  • わかりやすいREADME.mdを書く

    GitHubなどに自分のツールやライブラリを公開するとき,README.mdは重要な役割を担っている.レポジトリを訪れたユーザが自分のツールを使ってくれるか否かの第一歩はREADME.mdにかかっている,と言っても過言ではない.実際自分が使う側になったときも,まずREADME.mdを読んで判断していると思う. 成功しているプロジェクトを参考にしつつ,自分が実践していることをまとめておく.ここに書いていることはあくまで(自分の中で)最低限的なものである.プロジェクトが成長していくにつれてREADMEはあるべき姿に成長していくべきだと思う. READMEの役割 README.mdには大きく2つの役割がある. プロジェクト,ツールの使い方,インストール方法 プロジェクト,ツールの宣伝 元々READMEは前者の役割しかなかったが,GitHubの仕組み上,後者の役割も徐々に重要になっている. さらに

    t-wada
    t-wada 2014/08/01
    README ファーストとても良い(substack もそうしているらしい)。最近 README はさらに重要になってきているな
  • シェルスクリプトでGo言語のツールをクロスコンパイルしてGithubにリリースする

    シェルスクリプトでGo言語のツールをクロスコンパイルしてGithubにリリースする [@motemen]()さんの“Wercker で Goプロジェクトをクロスコンパイルし,GitHub にリリースする - 詩と創作・思索のひろば (Poetry, Writing and Contemplation)”を手元からやる. Werckerからリリース良いと思うけど,自分はリリースは手元で管理したい.その辺は毎回同じスクリプトでやってるのでまとめておく.なお,コードは全てtcnksm/go-distribution-scriptsにある. クロスコンパイル 基はHashicorpのやり方を真似してる. まず,クロスコンパイルはmitchellh/goxを使う.goxは複数プラットフォームの並列コンパイルと出力先の設定の自由度が気に入ってずっと使ってる.何よりシンプルで良い.以下のようなスク

    t-wada
    t-wada 2014/07/24
    Go 言語のクロスコンパイル結果を Github Releases にアップロードするために、手元から Github API と curl を使う方法。
  • 高速にGo言語のCLIツールをつくるcli-initというツールをつくった

    高速にGo言語のCLIツールをつくるcli-initというツールをつくった tcnkms/cli-initGitHub cli-initを使えば,Go言語コマンドラインツール作成時のお決まりパターンをテンプレートとして自動生成し,コア機能の記述に集中することができる. デモ 以下は簡単な動作例. 上のデモでは,addとlist,deleteというサブコマンドをもつtodoアプリケーションを生成している.生成結果は,tcnksm/sample-cli-initにある. 背景 Go言語で作られたコマンドラインツールを見ていると,codegangsta/cliというパッケージがよく使われている. これは,コマンドラインツールのインターフェースを定義するためのライブラリで,これを使えば,サブコマンドをもつコマンドラインツールを簡単につくることができる(Usageを自動で生成してくれたり,bash

    t-wada
    t-wada 2014/06/23
    これはいいな!
  • Dockerとtmuxを連携するdmuxというツールをつくった | SOTA

    Docker + tmux = dmux ! dmuxを使うと現在起動中のtmuxのwindowにおいて,新しくpaneをつくりそこでDockerコンテナを起動することができる.使い捨て,かつ高速に起動するクリーンな環境でコマンドを試したり,ツールを入れて使ってみたりなどといったことができる.また,プロセスと途中で止めて,後にそれを再開することもできる. デモ 以下は簡単な動作例. 上のデモでは,以下のことが可能であることを示している. dmux initにより新しいpaneでコンテナを起動し,そこにアタッチする dmux stopでプロセスを停止してpaneを削除する dmux startで停止したプロセスを再開して再びコンテナにアタッチする(for文が途中から再開している) dmux deleteでコンテナとpaneを削除する なぜつくったか Dockerのv0.12.0で追加されたp

    Dockerとtmuxを連携するdmuxというツールをつくった | SOTA
    t-wada
    t-wada 2014/06/16
    "現在起動中のtmuxのwindowにおいて,新しくpaneをつくりそこでDockerコンテナを起動することができる.使い捨て,かつ高速に起動するクリーンな環境でコマンドを試したり,ツールを入れて使ってみたり" これはいいな
  • HerokuのAPIデザイン

    Herokuが自ら実践しているAPIデザインガイドをGithubに公開した. “HTTP API Design Guide” このガイドは些細なデザイン上の議論を避けて,ビジネスロジックに集中すること目的としている.Heroku特有なものではなく,一般にも十分適用できる知見となっている. 最近は,モバイル向けにAPIをつくることも多いため,勉強もかねて抄訳した.なお内容は,HTTP+JSONのAPIについて基的な知識があることが前提となっている. 適切なステータスコードを返す それぞれのレスポンスは適切なHTTPステータスコード返すこと.例えば,“成功"を示すステータスコードは以下に従う. 200: GETやDELETE,PATCHリクエストが成功し,同時に処理が完了した場合 201: POSTリクエストが成功し,同時に処理が完了した場合 202: POSTやDELETE,PATCHリク

    t-wada
    t-wada 2014/06/05
    Heroku が出した Web API 設計ガイド “HTTP API Design Guide” の抄訳
  • Go言語のコードレビュー

    SoundCloudが2年半ほどGo言語を利用したプロダクトを番で運用した知見をGopherConで発表していた(“Go: Best Practices for Production Environments”).その中で“CodeReviewCommentsというGoogleでのGo言語のコードレビューにおいてよくあるコメントをまとめたサイトが紹介されていた. 最近Go言語を書くようになり,使えそうなのでざっと抄訳してみた.“リーダブルコード”的な視点も含まれており,Go以外の言語でも使えそう. gofmtでコードの整形をすること コメントは文章で書くこと.godocがいい感じに抜き出してくれる.対象となる関数(変数)名で初めて,ピリオドで終わること // A Request represents a request to run a command. type Request str

    t-wada
    t-wada 2014/05/27
    Google (と SoundCloud) における Go 言語のコードレビューに関する記事の翻訳。とても参考になる。
  • Dockerとは何か?どこで使うべきか?

    この記事はDockerに関する実験的な記事や,Buildpackを使ってHeroku AppをDocker Containerとして使えるようにする“building”の開発などで知られるCenturyLink Labsの “What is Docker and When To Use It”の翻訳です. Dockerとは何か?Dockerをどこで使うべきか?についてよく見かける記事とは違った視点から説明されています. 翻訳は許可をとった上で行っています. Dockerとは何でないか Dockerとは何かを説明する前に,Dockerは何でないかについて述べる.Dockerの否定形は何か?Dockerの制限は何か?Dockerが得意でないことは何か? DockerLXCのようなLinux Containerではない DockerLXCだけのラッパーではない(理論的には仮想マシンも管理でき

    t-wada
    t-wada 2014/05/01
    “What is Docker and When To Use It” の翻訳。わかりやすい。
  • serverspecとdocker-apiでDockerfileをTDD

    serverspecとdocker-apiDockerfileをTDD いくつかDockerfileを書いてきた.今書いているDockerfileは短くてシンプルなものばかりだが,もっと長く複雑化した時に不安になりそうだ.不安を解消するにはテストしかない.さらにテスト駆動的にDockerイメージを開発できたら素敵だ.つまり, テストを書く Dockerイメージを作成して,テストの実行 -> RED Dockerfileの編集 Dockerイメージを作成して,テストの実行 -> GREEN テストを… の流れができるとよい. ということで,RSpecを使ってTDDでDockerfileを開発するというのをやってみた,tcnksm/docker-rspec.今回実現したのは以下. Docker Remote APIDockerfile特有のコマンド(e.g, CMDやEXPOSE)のRSp

    t-wada
    t-wada 2014/01/08
    serverspec と Docker Remote API でテスト駆動的に Docker イメージを開発
  • 1