No one is an island. Learnings from fostering a developers community.
![Design Docs を活用して効果的にプロダクト改善](https://cdn-ak-scissors.b.st-hatena.com/image/square/16595fd2268cfd1a3375249a59ccf02db7c3f683/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fa8544789017441908bbbb41323e57ca4%2Fslide_0.jpg%3F29886622)
No one is an island. Learnings from fostering a developers community.
Twitterの内部構造を読解してみる 前口上 Twitterのようなマイクロブログサービスでは短時間で書き込みも多く、特にタイムライン周りは単にRDBのデータを出し入れるするだけではスケールしなくなります。 インターネット上に断片ながらTwitterの中の人がアーキテクチャについて解説した記事や動画がいくつか落ちていたので、Twitterがタイムラインをどうやってキャッシュしているかについてまとめてみたいと思います(推測を含みます)。 Twitterのテーブル構造 単純なTwitterのテーブル定義をRDBで定義すると以下のようになると思います。 tweets ツイート id user_id contents tweet_at followers フォロワー source_user_id destination_user_id users ユーザー id user_name timeli
これは、とある「エーペックス」のプロプレイヤーのネットワーク経路(レイテンシーを表示しています)です。彼のインターネットモデムから、私たちのサーバーへと到達しています。インターネット接続の本当の状態を判断するため、私たちは何度も調査を行います。最善の状態であれば、彼は31msのレイテンシーでゲームを楽しめていることが見て取れますね。ですが最悪の場合だと、522ms付近です。つまりこの場合だと、接続に500msもの振れ幅があるため、ゲームの遊び心地はかなり悪いということです。彼のローカルISPネットワークの接続は不安定ですが、平均を見てみると非常に稀なケースであることがわかります(平均が31mで、最低値が264ms。たまたま起きたのでしょう)。しかしその後、ローカルのISPとISP1の間でレイテンシーが急増しています。これはプレイヤーとゲームサーバーの間のノードの一つです。この二つの間でパケ
2019/09/09加筆: 注意事項 多くの人に見ていただいていますが,この記事は2017年12月当時(Railsの最新バージョンが4.2ぐらい)に書かれたものであり,現在は内容がかなり古くなっています 2019年9月現在,筆者はRailsどころかwebアプリケーション開発からも離れているため,今の所アップデートする予定はありません(というかできません). そのため,本記事を参考にする場合は使用しているRailsのバージョンに合わせて適宜脳内補完しながら読んでいただければ幸いです. 本記事に書かれているようなベストプラクティスを検討する上で最善の方法は,Railsの公式リファレンスとRailsのコードそのものを読んで最善策を模索することです.Rails5以上を使っている場合は,こんな古い記事を読まずに,自分で最善の方法について検討することをおすすめします. 筆者は,2014年半ばから201
この記事の目的 自分は、とある会社様の元でソシャゲの API 開発をさせていただいています。 ソシャゲは、リリース時やイベント時などに集中アクセスされやすく、負荷軽減の知識がない状態で開発を行ってしまうと、運用時に緊急メンテ祭りになりやすいジャンルかなと思っています。 これまで培ってきた MySQL の知識ですが、脳内メモリ量の関係上、暗記できないのでメモしておこうというのが主目的です。 ここ数年ほどソシャゲ開発しかしていないため、偏っている感がある内容ですのでご注意ください。 概要 ストレージエンジンは InnoDB。メインで扱っている MySQL バージョンは 5.6。 記事の内容ですが、これらのキーワードを見て、おおよそ分かる方は読む必要はないかと思います。 インデックス系 クラスタインデックス カバリングインデックス EXPLAIN で注意するべき値 トランザクション系 MVCC
id:daido1976 です。入社してからあっという間に1年が経っていました。 直近3ヶ月ほどプライベートでフロントエンド開発の勉強をしていたのですが、ここ数年で CSS の Grid や React の Hooks が新しく導入されたことなどもあり、少し古いコンテンツだと教材として役立たない1 と感じることが多かったので、本記事では私が実際にやってみた中で 2019年時点で オススメできると判断した教材や学び方を皆さんにご紹介したいと思います。 はじめに やったこと JavaScript MDN の JavaScript の部分を読む & 手を動かす JavaScript Primer を読む YouTube 動画で Promise を学ぶ デバッグ方法を学ぶ React React 公式のチュートリアルを2周する egghead.io の動画で Redux を学ぶ ヘルシンキ大学の
GitHub: haya14busa/reviewdog: A code review dog who keeps your codebase healthy 英語記事: reviewdog — A code review dog who keeps your codebase healthy – Medium reviewdog というlinter などのチェックツールの結果を自動で GitHub の Pull Request にコメントしたり, ローカルでも diff の結果から新たに導入されたエラーだけを表示するようにフィルタリングできるツールを作りました. 英語記事 を Medium に書いたし,README も書いたので 日本語記事はまぁいらないかなぁと思ったけど,柄にもなく Vim 関連以外で普通に便利ツールを書いてしまって,これは日本語でも簡単に共有しようかなぁと思いこの記事
鳥のさえずり声を聞いて、私は悪態を吐いた。今日の早朝に予定されていたミーティングのことをすっかり忘れていたのだ。 まったく、最悪の朝だ。着替えている間に、電話も鳴った。「高い金を払ってコンサルタントを雇った極めて重要なミーティングだ」と念を押されていたというのに。 それもこれも昨日のバグのせいだ。睡眠時間も、開発スキルも、人員も、私の現場には何もかもが足りていない。 それにも関らず、理解の足りない上司は「テスト工程を削ってでも早く納品しろ」とプレッシャーを与えてくる。 あの馬鹿どもめ。一体何を考えているんだ? スーツに着替え終わった私は、冷蔵庫の缶コーヒーで空腹を誤魔化すと、バイクに跨った。通勤時間が5分なのが、せめてもの救いだ。 「遅れてすまない」 そう言って会議室に入ると、奇妙なことに気がついた。教室のように整然と並んでいたはずの机が、即席の半円形に並べ替えられていた。 何より、ホワイ
pecoというインタラクティブに入力をフィルタして出力するコマンドがあって、使い始めてからシェルの操作方法が大幅にかわり、だいぶライフチェンジングだった。 最近このへんが流行ってるのでやたら記事あるけど、せっかくなので僕も使い道を紹介しようと思う。 pecoをzshで使う 1. peco ghq ghqを使ったローカルリポジトリの統一的・効率的な管理についてのこと。 僕も$GOPATHは$HOMEにしていて、今のところ別に困ることはない。 go getしたりghq getしたりして美しくディレクトリ切った上で、pecoに割り当てておいたC-sですぐ目的のディレクトリ開けるようにしてあるので、めちゃくちゃソース管理が楽になった。 function peco-src() { local selected_dir=$(ghq list | peco --query "$LBUFFER") if
概要 最近いろいろな方(社内、社外含め)に、エンジニアチームどうですか?良くなってますか?という質問を頂きます naoya さんってどうなんですか?やっぱりすごいですか?とも その度に「良くなってますよー」と返事をするのですが、肌感としてはあるもののしっかり言語化できていない そこで、naoya さんがCTOとして今年の春に一休に来てからをちょっと振り返ってみた 振り返ってみるとたった4ヶ月ということに驚いています :eyes: 良くなったと感じていること サービス開発の体制 技術基盤への投資 採用活動 情シスの整備 エンジニアの働く環境 それぞれについて サービス開発の体制 抱えていた課題 マーケティングとエンジニアとの間のコミュニケーションが上手くいかず、開発速度やサービスの意思決定のボトルネックになっていることがあった みんなで話して決める等、それぞれの役割が曖昧なままで開発を進める
はじめに こんにちは!おおはしりきたけです。今回は、突撃!隣の開発環境ではなく、突撃!隣のDevOpsというタイトルで、イケてる開発会社さんのDevOpsについてインタビューさせてもらいました。パート1として突撃!隣の開発環境のパート1でも紹介させて頂いた、WantedlyさんにDevOpsをどのようにやっているのかを伺ってきました! 突撃!隣のDevOpsとは 突撃!隣の開発環境では各会社さんの開発の方法や、どのような体制で開発をしているのかという形で、「開発」に焦点を当てたインタビューをさせていただいていました。実際、ソフトウェアサービスと言うのはリリースしてからがスタートであり、日々の改善活動や安定運用を行うため、開発(Development)と運用(Operations)が協力し合いながらビジネス要求に対し、早くかつ柔軟に対応していくかが求められます。そこで、突撃!隣のDevOps
弊社の開発における考え方として「方向>開発フロー>スキル」という順番があります。 方向がずれているとすぐに数ヶ月吹っ飛ぶので向かう先をどこにするかは最も大事。 次に開発フローで、変なコミュニケーションロスがあるといかにスキルの高いエンジニアがそろっていてもスピードがあがりません。 そして最後にスキル。 そんな話を藤村くんたちに熱弁していたら、 「ゆうじ、それはプロダクティビティエンジニアって言って、職種として今後大事になってくる考え方だよ」 と教えてもらいました。 このプロダクティビティエンジニアについては、 まだ日本語での良いドキュメントが見つからず自分の言葉で説明するしかないのですが、 要はスループットを上げる事にフォーカスするエンジニアの事です。 上記に書いたようなコミュニケーションロスなどを無くしたり、 最適なツールを決定したり、issueの切り方を整理したり、 テストフロー、デプ
開発フローの変遷と背景にあった考え方を紹介することで、 開発フローを変化させる方法についてヒントを提供できればと思います。 なお、本資料はYAP(achimon)C::Asia Hachioji 2016 mid in Shinagawaで行われたトークの発表資料となります。
アベンジャーズがヴィラン(多分)と戦う、2Dドットライクなベルトスクロールアクションのメイキングムービーが公開されていました。 作成するゲーム内容は下のような内容です。キャプテンアメリカによって、特に理由のない暴力がヴィランを襲います。 www.youtube.com このチャレンジは「37時間の開発でどこまで作れるかを試す」との事で、上記のムービーは驚くべきことに、37時間の作業を15分にまで圧縮しています。つまり、だいたい148倍速で作業が進みます。 実際にどうやって作るってるのか見る ムービーはこちら。 www.youtube.com キャプテンアメリカのサウンドトラック(欲しい)から始まり、本当に空の状態からゲーム作りが始まります。 Assetのインポート画面。他にも2D Tool Kit等をインポートします。 2D素材はその場で作成ではなく、用意された物を使用します。 動画にはソ
思いついた勢いのままに Chrome extension『Kotoha』を作って公開しました。 chrome.google.com コードもGitHubに公開してます。 勢いのままに作ったと言いましたが、Javascript触るの久しぶりな上に初めてのChrome extension開発ということで、 実質15〜6時間くらいかかりました。 完全に俺得Extensionなんですが、せっかく作ったので何を考えてたのかまとめておこうと思います。 知らぬ間にGIGAZINEにも紹介されていました。圧倒的感謝。 gigazine.net どんなExtensionか イケてるアニメの名言を簡単に引用できるようになるExtensionです。 名言をキーワードで探せます。 作品タイトルやキャラクター名でも探せます。 名言はアドレスバーの隣のアイコンから登録できます。 詳細はREADMEに全部書いてあるので
hello world printf "hello world!" # 末尾改行なし => hello world! print "hello world!" # 末尾改行なし => hello world! puts "hello world!" # 末尾改行あり => hello world!¥n p "hello world!" # 形式がわかる => "hello world!"¥n 変数 lang = "Ruby" # 変数 lang = "Java" # 書き換えOK LANG = "Ruby" # 定数(先頭大文字) LANG = "Java" # 書き換え不可。エラーとなる 数値 http://ruby-doc.org/core-2.1.3/Numeric.html(v2.1.3) http://ruby-doc.org/core-2.1.3/Float.html(v2.1
単一責任の原則(SRP:the Single Responsibility Principle) クラスを変更する理由は1つ以上存在してはならない。どういうこと?変更理由が2つあるということは、責任(役割)も2つあるということ。そんなジェネラリストなクラスを許さない、という原則。 ところで、「単一責任」って、クラスを作る上で一見当たり前に見える。責任(役割)をそのまま責任ではなく、変更理由としているところがポイント。 この見る角度を変えるところがこの原則の運用の大切な所。なんで?役割を複数もつクラスはもろいクラスだから。 複数の役割を担っているクラスがあって、それをある1つの理由で変更すると、関係のないその他の役割部分にまで影響を及ぼす事になり、その結果予想もしない形でクラスが壊れてしまう。 保守で違う人が修正したら簡単に壊れてしまう。 保守で変更していくと、実装的だけでなく、設計的にもよ
4 ヶ月あまり続いた新規開発案件がようやく落ち着きを見せたので、ここらで振り返りをしてみたいとします1)リリースまでに巻き取れなかった不具合や未実装箇所が幾つか残っているので、まだ気持ち的には終われていないのですが…。 サービスのおおまかなアウトライン コンシューマ ( 一般ユーザー ) 向けサービス ブラウザで動く Web アプリケーション ワンソースによるレスポンシブレイアウト サポートするブラウザは IE9 以降や Android4.x 以降のモダンブラウザのみ Ruby on Rails 多言語対応あり SEO 対策はそれなりに必要 わりとフワッとしか要件が決まっていないままスタートしたので、TRY & ERROR を繰り返しながらの開発 すごく大雑把ですが、だいたいこんな感じの Web アプリケーションです。これを踏まえてフロントエンドをどのように開発していくかを設計していきまし
(編注:2020/08/18、いただいたフィードバックをもとに記事を修正いたしました。) これはある仕事熱心な若手開発者のほぼ実話です。2004年の後半、この若手開発者は小さな会社で働き始めました。条件は全て彼の望みどおりでした。給料はいいし、扱うのは彼の得意とするプログラミング言語、アプローチの複雑性、モデリングのアーキテキチャでした。 彼にとって今回の会社が初めての職場ではありませんでした。しかし、ここでの最初のプロジェクトは結果的に 問題だらけ に終わりました。当時、この若手開発者は、機能は絶対に変わらないものだと思っていました。しかし、それは間違いでした。機能が変更されるたびに完全なリファクタリングを行わなければなりませんし、バグを引き起こして膨大な時間を無駄にしてしまいます。彼は、テストを書くといった実直な方法も試してみましたが、書いたテストはメンテナンスが必要な上、書くのに時間
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く