ブックマーク / wazanova.jp (21)

  • [その2] RubyとPythonの違いからガベージコレクタを理解する - ワザノバ | wazanova.jp

    http://patshaughnessy.net/2013/10/30/generational-gc-in-python-and-ruby 前回のエントリーはこちら。 ブタペストで開催されたRUPY2013でのPat Shaughnessyのプレゼンの後半です。RubyPythonのガベージコレクタの違いを、今回は、Pythonの循環データ構造への対応とRuby 2.1の世代別ガベージコレクタの話題に触れながら、紹介しています。 1) Pythonの循環データ構造と参照カウント Pythonは、いくつのポインタがそのオブジェクトを参照しているかを、参照カウントと呼ばれる整数で管理している。変数もしくはオブジェクトが、そのオブジェクトを参照しはじめれば数字が増えて、プログラムがそのオブジェクトを使うのをやめれば数字が減る仕組み。 1960年代以来、コンピュータ科学者が気づいているアルゴ

  • Prometheus: Go言語で書かれたモニタリングシステム - ワザノバ | wazanova

    https://developers.soundcloud.com/blog/prometheus-monitoring-at-soundcloud 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 Prometheusは、SoundCloudが中心となって開発を進めているオープンソースのプロジェクトDockerの社内でもメインのモニタリングシステムとして利用されているようです。 各社のブログのエントリーから、その特徴をまとめると。 多元データモデルとそれを活かす柔軟なクエリ言語 全てのデータにタイムスタンプのある、OpenTSDBに準じたデータモデル。 http_response_500_totalやhttp_response_403_totalなどHTTPレスポンスのステータスごとに用意しなくても

  • 分散システム設計のチェックリスト - ワザノバ | wazanova

    http://monkey.org/~marius/checklist.pdf 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 TwitterのMarius Eriksenは分散システムのエキスパートであり、モジュール化され、安全でかつ効率よく機能するサーバソフトの構築のノウハウは、「Your Server as a Function」という論文にまとめられています。 また、分散システム設計における留意点も、下記の内容のチェックリストというかたちで紹介してくれています。 1. 障害耐性 もし依存先が障害を起こしたらどうなるか?その障害がゆっくりと起きたらどうか? システムをどのようにスムーズにデグレードさせることができるか? システムは想定以上の負荷にどう対処するようになっているか? 大きな障害が起き

  • Javaのせいではなく使い方の問題だという意見 - ワザノバ | wazanova

    http://www.jamesward.com/2014/12/03/java-doesnt-suck-youre-just-using-it-wrong 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約3時間前 Salesforce.comのJames Wardが、エンタープライズ向けのJava webアプリに長く携わってきた経験からまとめた、「Javaが悪いんじゃなくて、使い方が間違ってる。」というブログのエントリー。 開発環境のセットアップのWikiが10ページもある JDKインストール、SCMレポをクローン/チェックアウト、ビルドを実行/アプリ起動の3ステップであるべき。 一貫してないデプロイ環境 ビルドを、開発 -> ステージング -> 番と進めるにあたりリスクを最小化するために、各環境で変わるの

  • Java: 本番環境でのデバッグスキルを磨く - ワザノバ | wazanova

    https://www.youtube.com/watch?v=7KS4L-mA_-c 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 Takipi のFounderであるTalWeissのSan Francisco Java User Groupミートアップでの講演。番環境で役に立つデバッグテクニックの紹介です。 1. スレッド名の活用 スレッド名はmutable(EJB除く)である。コードのコンテキストにあわせて、Thread.currentThread().setName(Context, TID, Params, Time,...);のようにすれば、トランザクションID、Serveletパラメータ、キューメッセージID、起動時間など、スタックトレースに役に立つ情報を表示できるようになる。 J

  • 生まれ変わるAngularJS - ワザノバ | wazanova

    シングルページアプリ向けの各フレームワークをGoogle Trendで比較したグラフがLars Eidnesのブログに掲載されてますが、AngularJSの伸びが他を圧倒しています。一方で、アーキテクチャ上の課題は、コミュニティの声もあり、かつ当事者である開発チームも認識していたところ。そして、それに対する答えとしては、バージョン2.0で大幅に書き直すという流れになっています。 AngularJS 2.0については、「野心的だが険しい道のり」というタイトルの記事がGuardianに掲載されてますが、 ES6の採用 Web Componentsとの親和性のアップ (双方向バインディングをどうするかまだ決まってないが)Reactの考え方に近づいてきている (1.3のサポートはしばらく平行して続くと発表されたが)当にスムーズな移行を提供できるのか? がポイントだとSeb Ceveyはまとめてい

  • Rustを学びシステムレベル言語を理解すること - ワザノバ | wazanova

    https://www.youtube.com/watch?v=ySW6Yk_DerY Rustについては「Rustのあれこれ」で少し触れましたが、Yehuda Katzが、Skylightの一連のブログとGoGaRuCo2014の講演で、「ハイレベル言語のプログラマーがシステムレベルの言語を学ぶチャンス」という観点で紹介しています。 主なポイントとしては、 プログラミング言語の特性は変わることがないとか、プログラミング言語のパフォーマンスと生産性は常にトレードオフであるという考え方は、JavaScriptにおいて、生産性が少し改善されつつ同時にパフォーマンスが大きく向上してきたという事実から、必ずしも正しくはない。 Rustは、セグメンテーション違反が起きないという意味での安全性と、どこにメモリを置くか直接コントロールできる仕様を両方兼ね備える。 Rustを学ぶということは、ハイレベル言

  • 努力とセンスの関係と優秀なプログラマー - ワザノバ | wazanova

    http://www.quora.com/What-are-the-best-kept-secrets-of-great-programmers/answer/Jeff-Darcy? 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約5時間前 スポーツにしろ、勉強にしろ、仕事にしろ、何をやるにもその特定の分野でトップ1%人は尊敬するほどすごいのですが、人が長く続けつつ努力をしてきたことが垣間見えるので、なぜ優秀なのかというのが理解できる範囲。ただし、そのさらにトップ10%、いわゆる世の中でその分野のトップ0.1%の人というのは、すごすぎて、どうしてそうなれるのかが分からないと実感することがあります。議論している時に、数歩先の真理を理路整然と突然読み取って指摘されるような、驚くようなセンスを見せつけられる経験を数

  • Twitterのキャッシュを支えるRedis - ワザノバ | wazanova

    https://www.youtube.com/watch?v=rP9EKvWt0zo 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 TwitterのYao Yuが、大規模サービスのキャッシュにおいてRedisを活用する取組みについて紹介しています。 1) Redisを採用している理由 キャッシュだけで、ストレージとしては利用していない。 主なところでは、Twitterのタイムラインで利用している。ホーム画面であれ、ユーザ画面であれ、タイムラインはTweetのインデックスなので、key/valueストア型のRedisを利用するケースとして最適。 以前はmemcachedを使っていたが、問題になったのは、タイムラインでおきるread/writeは、(ユーザが閲覧している範囲に追加反映するということなの

  • Dockerイメージの最適化 - ワザノバ | wazanova

    http://www.centurylinklabs.com/optimizing-docker-images/ 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約1時間前 米国キャリアのリサーチ部門であるCenturyLink Labsが、 Dockerイメージは1Gを超えることがよくあって、ローカルで実験しているうちはよいが、ネットワークを介して頻繁にやり取りしはじめると、サイズが問題になる。 ということで、dockerイメージのサイズを減らす取り組みについて、ブログで紹介しています。 Layers レイヤの構成の詳細については、Dockerのドキュメントを参照されたし。議論のポイントとして理解しておかなくてはいけないのは、Dockerfileでの各操作の結果、新しいイメージのレイヤが順次生成されるというこ

  • Shopify: Kafka + Dockerの導入 - ワザノバ | wazanova

    http://company.myshopify.com/blogs/technology/14909841-kafka-producer-pipeline-for-ruby-on-rails 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約4時間前 オンラインストア & リアルショップ向けのアプリを提供しているShopifyがブログでKafkaの導入について紹介しています。 Kafkaに限らず、Google / Facebook / Twitter / LinkedInなど大手がオープンソースで取組んできたApache系の大規模分散システム向けのソリューションを、他のネット企業もサービスが成長してきたら導入するという話しが続いていますが、このShopifyのように、「魅力的なソリューションに見えるけど、Lin

  • PinterestのHadoopインフラ - ワザノバ | wazanova

    http://engineering.pinterest.com/post/92742371919/powering-big-data-at-pinterest 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約3時間前 Pinterestもものすごい規模になってきましたね。 1日当たり20TBの新しいデータ。Amazon S3には約10PBが保存されている。 同社ではこのデータの処理にHadoopを利用していますが、 毎日100人以上が、Quoboleが提供するダッシュボードを使って、2,000件以上のジョブを実行。 3,000個のノードで構成される6つのHadoopクラスタを利用。エンジニアは数分で専用のクラスタが立上げ可能。 毎日のログデータは、200億件。約1TBに達する。 このグラフによると、Pinte

  • Dropwizardでオペレーション駆動型のサービスを開発する - ワザノバ | wazanova

    http://www.youtube.com/watch?v=cDBdzxwQh6k1 comment | 0 pointsRent the RunwayのHead of EngineeringのCamille Fournierが、Dropwizardを利用して、オペレーション駆動型のサービスづくりをしている取組みを紹介しています。 ドレス服レンタルサービスのRent the Runwayは、Founder二人がnon-technicalだったこともあり、最初のサイトはDrupalでつくられたシンプルなもので、複雑なサービスを扱うにはメンテもままならず、サービスが成長するとパフォーマンス的にも対応できなくなった。そこで全てを一度に書き直すのではなく、機能を順次切り出し、Javaでつくるアプローチをとった。Javaにした理由は、自分がよく理解していて、信頼して使えるものだったから。そもそも他

  • Twilio: DropwizardサービスをJEEサーバにアップできるオープンソースライブラリ - ワザノバ | wazanova.jp

    https://www.twilio.com/engineering/2013/11/13/wiztowar/ Yammerが開発したJava製のRESTfulウェブサービスフレームワーク Dropwizard をTwilioは、「JEE 6/7を推してる人は強く反対するだろうけど」との前置き付きで、「Dropwizardのシンプルさと使い勝手に慣れたら、もうJEEサーバに戻れない。」と支持してます。 ちなみに、Dropwizardは、HTTPサーブレット (Jetty) / JAX-RS (Jersey) / Java Bean Validation (Hibernate Validator) などのJEE仕様のオープンソース部分をうまく取り込んだ仕組みで、スタンドアロンのJavaアプリが、別サーバなしで、数字計測 / 監視 / ヘルスチェックのライフサイクル管理ができます。Twilio

  • Yammer: ワンクリックでデプロイできるDeploymacy - ワザノバ | wazanova

    http://eng.yammer.com/deployments-at-yammer/1 comment | 0 points Yammerでは、エンジニアが、どの環境にどのサービスをデプロイするときもワンクリックでできるとのこと。このハブとなっているシステムDeploymacyについて、同社のエンジニアブログで紹介しています。 Goal 何でも、いつでも、誰でも問題なくデプロイができる。 誰が、何を、いつデプロイしたか追跡できる。 同じターゲット環境へのデプロイはシリアライズできること。 直感的かつ人が理解できるかたちでフィードバックがくること。 デプロイにおける問題箇所を洗い出して表示できること。 新しいサービスが簡単に追加できること。 Packaging & Deployment Deploymacyは、全ての環境に対応する設定ができるソフトウェア(サービス、アプリケーションetc

  • Twilio: DropwizardサービスをJEEサーバにアップできるオープンソースライブラリ - ワザノバ | wazanova

    Yammerが開発したJava製のRESTfulウェブサービスフレームワーク Dropwizard をTwilioは、「JEE 6/7を推してる人は強く反対するだろうけど」との前置き付きで、「Dropwizardのシンプルさと使い勝手に慣れたら、もうJEEサーバに戻れない。」と支持してます。 ちなみに、Dropwizardは、HTTPサーブレット (Jetty) / JAX-RS (Jersey) / Java Bean Validation (Hibernate Validator) などのJEE仕様のオープンソース部分をうまく取り込んだ仕組みで、スタンドアロンのJavaアプリが、別サーバなしで、数字計測 / 監視 / ヘルスチェックのライフサイクル管理ができます。Twilio曰く「Dropwizardは15歳若いJEEの従兄弟だけど、街で会ったらJEEのことを知らないふりをする。」とい

  • Githubの組織が成長する過程で変えたことと変えなかったこと - ワザノバ | wazanova

    GithubのZach Holmanが語るGithubの組織戦略です。まず最初に、 Step #1: ロックスターエンジニアを雇う Step #2: ものすごく透明性のある経営をする Step #3: ブログ/ソーシャルメディアなどでテクノノロジーについて発信する Step #4: カンファレンスで会社について話す Step #5: カネに余裕ができる Step #6: 社員を大勢雇う Step #7: 会社のことを話さなくなる Step #8: コミュニティを無視する Step #9: 創業者が株を売って儲ける Step #10: 別の会社をはじめる という事例を挙げて、Githubは組織が成長する中で、このようなパターンに陥らないように、コミュニケーション及び仕事の進め方をどのように進化させてきたかについて紹介してます。 Dunbar's numberとしてよく知られるとおり、人間が良

    matsumanahate
    matsumanahate 2013/11/20
    “人に聞かなくてはいけないという意味のない権威主義がはびこるので組織が硬直する。」的な説明がされてます。)”
  • Twitter: 大きなトラフィックに耐えうるアーキテクチャーへの変更 - ワザノバ | wazanova.jp

    https://blog.twitter.com/2013/new-tweets-per-second-record-and-how 少し前、8月のTwitterエンジニアブログのエントリーですが、アーキテクチャー変更について触れているポストなので、取り上げてみます。 1) 背景 2010年のワールドカップ時点でのトラフィックがさばききれなかった時点での状況は、 200人のエンジニアが、単一のRailsのコードベースで大量のユーザとトラフィックに対応する構造であった。 MySQLのストレージシステムは、一つのマスタと一時的にシャーディングされるスレーブの構成で、読込み/書込みともにスループットの限界にきている箇所がでていた。 フロントエンドRubyマシンは期待通りのトラフィックをさばけていなかったが、技術的な解決ではなく、サーバの追加でしのいでいた。 コードベースは、可読性とパフォーマン

  • Groupon: 単一のRailsアプリから複数のNode.jsアプリへの移行 - ワザノバ | wazanova.jp

    https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/ Grouponのビジネス自体はかつての盛り上がりはないですが、シンプルなRailsアプリが、事業の成長 & グローバル化に従って、アーキテクチャを変えていった過程をエンジニアブログで紹介してるので、参考になればと。 1) まとめ Grouponは、Railsのシングルコードベースを独立した20個のNode.jsアプリにアーキテクチャを変更した。 ページの読み込み時間が概ね50%改善。これはテクノロジーの効果とコードの書き直しでwebページが軽くなったのとの相乗効果。 同じトラッフィクに対してハードウェアが削減できた。 チーム間の依存関係が少なくなったので、新機能リリースのペースが早くなった 同じ機能を複数の国にそれぞれ導入するような冗長さが

  • RubyとPythonの違いからガベージコレクタを理解する - ワザノバ | wazanova.jp

    http://patshaughnessy.net/2013/10/24/visualizing-garbage-collection-in-ruby-and-python Pat Shaughnessyが、ブタペストで開催されたRUPY2013でのプレゼンの前半を自らのブログで紹介しています。 ガベージコレクタは、「ゴミを集める」という行為だけでなく、「新しいオブジェクトのためにメモリをあてがう。」「不要なオブジェクトを見つける」「不要なオブジェクトからメモリを取り戻す。」という、人間の心臓が血液を浄化するような働きをしている。 この簡単なコードサンプルを見ると、RubyPythonの記述はよく似ているが、それぞれの言語の内部でのインプリの仕組みは違う。 1) Rubyのメモリ Rubyは、コードが実行される前に、数千のオブジェクトを先につくり、それをリンクされたfree listに置