タグ

ブックマーク / int128.hatenablog.com (13)

  • 開発チームがプロダクトコードを書き始めるまでに準備すること - GeekFactory

    頭の中を整理するため、いわゆるZero Feature Releaseに必要なことをまとめてみました。開発チームがプロダクトコードを書き始めるまでに作っておくとよいものです。 ソースコードリポジトリ(例:GitHub) エディタ設定(例:editorconfig) ビルドツール(例:Gradle Wrapper) ビルドスクリプト(例:build.gradle) フレームワーク(例:Spring Boot) テスティングフレームワーク(例:Spock) 静的解析ツール(例:Sonar) ドキュメンテーションツール(例:AsciidoctorDBマイグレーションツール(例:Flyway) CIスクリプト(例:Jenkinsfile) CIとソースコードリポジトリの連携(例:Jenkins Webhook) CIとチャットの連携(例:Slack) 成果物の公開場所(例:GitHub Rel

    開発チームがプロダクトコードを書き始めるまでに準備すること - GeekFactory
    piro_suke
    piro_suke 2016/11/16
  • 文章比較ツール - GeekFactory

    新旧のテキストを比較したいときは、文章比較ツールが便利です。追加・削除された文字数も数えてくれます。 Google検索したらキーワードが「文書比較ツール」に訂正されてしまいました。

    文章比較ツール - GeekFactory
  • パフォーマンステスト自動化の取り組み - GeekFactory

    このところ、Webアプリやバッチのパフォーマンステストを自動化するために四苦八苦してるので書いてみます。 パフォーマンステストは泥臭い作業です。毎回似たような感じで待ち時間の長い単調作業と、ボトルネックを解析して実装やミドルウェア設定を見直すような神経を使う作業が入り混じって疲れます。このうち前者を自動化してしまえば、質的な部分に力を注げるだけでなく、夜間や休日を活用して多くのバリエーションを試すことができます。 パフォーマンステストの流れはWebアプリとバッチで以下のように整理できると思います。 Webアプリ デプロイメント クライアントサイド(負荷生成側)で必要なデータセットの準備 サーバサイドで必要なデータセットの準備 アプリケーションの設定 負荷生成 クライアントサイドのログ収集 サーバサイドのログ収集 分析 バッチ デプロイメント サーバサイドで必要なデータセットの準備 アプリ

    パフォーマンステスト自動化の取り組み - GeekFactory
  • JenkinsとApache Ivyで開発からデプロイまでを管理する - GeekFactory

    Eclipse, Jenkins, Apache Ivyを使ったプロジェクトにおける開発からデプロイまでの流れを図に描いてみました。 図では書き表せないことがありますね。テスト実行時のクラスパスは実行時ライブラリを含むとか、図で描くとカオスになります。GUIツールでビルド設計するのは意外と難しいのかもしれません。 ビルド設計する上で考えたことを書き出しておきます。何かアドバイスがあったら教えていただけると嬉しいです。 開発環境 WindowsでEclipseを使う。 Eclipseのプロジェクト構成で適切なビルドパスを設定する。 依存ライブラリはApache IvyDEプラグインで管理する。 依存ライブラリはMavenリポジトリから取得する。リポジトリ候補にはビルドサーバ上のキャッシュを含める*1。 他プロジェクトへの参照はEclipseのProject Referenceを設定する。 ク

    JenkinsとApache Ivyで開発からデプロイまでを管理する - GeekFactory
  • Rhinoを使って簡単に本番環境の挙動を確認する - GeekFactory

    開発環境ではうまく動くのになぜか番環境で動かないとか、番環境での挙動が分からんといったとき、いちいち番環境にテストコードをデプロイして確認するのは面倒ではありませんか?Rhinoを利用して動的にコードを実行するツールを使うと、番環境での挙動を簡単に確認できます。 基的な仕組みは、WebページからPOSTされたJavaScriptをRhinoで実行するだけです。 import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; // リクエストを処理する部分 String js = param("js"); Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); String

    Rhinoを使って簡単に本番環境の挙動を確認する - GeekFactory
  • SIerにおける多層アーキテクチャパターンの一考察 - GeekFactory

    ソフトウェアアーキテクチャやシステムアーキテクチャにパターンがあるように、SIerの多重下請構造多層アーキテクチャにもパターンがあると考えられます。稿では、プログラマ35歳定年説等を考察するにあたって基礎となるパターンを提案します。 筆者が提案するパターンの一つを下図に示します。 お客様サイド スポンサーです。お客様サイドは業態によりアーキテクチャが大きく異なり、しばしば仲間割れがあったり、下位レイヤをバラバラに統制することもあります。 営業 ユースケースの起点となるレイヤです*1。トランザクションの開始や終了に重要な役割を果たしますが、意外と社内政治力を持ち合わせていないこともあります。ただの見積屋にならないよう注意が必要です。 アプリ屋 アーキテクチャを構成する最大勢力です。といってもレイヤにロジックはほとんど含まれていないため、下位レイヤへの丸投げ委譲によりトランザクションを実

    SIerにおける多層アーキテクチャパターンの一考察 - GeekFactory
  • appengine ja night #14に参加しました - GeekFactory

    appengine ja night#14にて、AppEngine MapReduceと大量データ処理についてお話しさせて頂きました。 speakerdeck.com Task ChainやQuery Chainの基礎的な話、AppEngine Mapperの仕組みについて解説しました。事例紹介などの派手なお話はできませんでしたが、何かお役に立ちましたら幸いです。間違いなどありましたらご指摘頂ければと思います。 スライドの下部に関連するURLもしくはFQCNを貼り付けてありますので、参考にどうぞ。 Scatterプロパティについて http://code.google.com/p/appengine-mapreduce/wiki/ScatterPropertyImplementation 補足:Scatterプロパティは0.8%の割合で付加されると記述されていますが、いくつかのカインドで実

    appengine ja night #14に参加しました - GeekFactory
  • App Engineで動く並列処理フレームワーク ElShard - GeekFactory

    App Engineで大量のデータを並列処理するフレームワーク ElShard を作っています。batch addとdeleteのサンプルができたので、とりあえずまとめてみます。 ElShardは、入力リストを分割して処理して集約する考え方に基づいています。並列処理はApp EngineのTaskQueueで実現しています。タスク間では10kBのペイロードしかやり取りできないため、データをやり取りする用途には適していません。そのため、実際のデータはDatastoreに格納しておき、キーをタスク間でやり取りすることになります。 現段階では集約をどうやって実現するか未定ですが、キーでソートされるというDatastoreの性質をうまく利用できる気がします。Matcher APIが使えるといいなぁ。 リストを処理する ElShardでは、InputとTaskの2種類のタスクを組み合わせてジョブネッ

    App Engineで動く並列処理フレームワーク ElShard - GeekFactory
  • タスクチェーンのフレームワーク - GeekFactory

    App Engineでは実行時間に制限があるため、長時間にわたる処理を行う場合は複数のタスクに分割する必要があります。この手法は一般にタスクチェーンと呼ばれています(たぶん)。 タスクチェーンを抽象化してフレームワークにできるか考えてみました。 タスクチェーンを実現するには、タスク間のデータの受け渡し、タスクの一意性保証を実装する必要があります。 Driver タスクチェーンを開始するためのサーブレットです。Driverを経由せず、Webブラウザやcronからタスクチェーンを開始することも可能です。 Task タスクチェーンにおけるタスクを抽象化したものです。 Taskは入力として Map を受け取り、出力として次のTaskに Map を渡します。 public interface Task { /** * Process of the task. * @param input data

    タスクチェーンのフレームワーク - GeekFactory
  • 47,000件のbatch putを16秒で処理 - GeekFactory

    以前に 大量のエンティティを処理するデザインパターン - GeekFactory を紹介しましたが、シングルスレッドのバッチ処理なのでスループットが頭打ちになる問題がありました。コンカレントに処理する方法を思いついたので実装してみました。 シングルスレッドではこんな流れでした。 S3QueryResultListでn件のエンティティを取得する。 エンティティをバッチ処理する。 t秒以内であれば上記を繰り返す。 次のタスクにカーソルを渡す。 ここで、エンティティを取得するタスク(Splitter)とエンティティをバッチ処理するタスク(Mapper)を分けてみます。 Splitterタスク S3QueryResultListでn件のエンティティを取得する。 エンティティをmemcacheに入れて*1、Mapperタスクに渡す。 t秒以内であれば上記を繰り返す。 Mapperタスク memcac

    47,000件のbatch putを16秒で処理 - GeekFactory
  • AppEngineで大量のエンティティを処理するパターン - GeekFactory

    App Engine上で大量のエンティティを処理するパターンをまとめてみました。 Concurrent Pattern 対象のエンティティをシャードに分割し、それぞれを並列に処理するパターンです。シャーディングを行うSplitterとエンティティを処理するMapperが並行して動きます。SplitterとMapperは独立したタスクであるため、memcacheを介してエンティティを受け渡します。 このパターンの利点は、エンティティの処理内容に関係なく一定のスループットを確保できることにあります。Mapperでどんなに長い処理を行ってもSplitterは淡々とシャーディングを続けるため、スループットに影響はありません。 Mapperの処理結果をmemcacheに突っ込み、別のタスクで集約することで、MapReduceのような処理も可能かなと思います。 Serialized Pattern 対

    AppEngineで大量のエンティティを処理するパターン - GeekFactory
  • AjaxによるFederated Loginの待ち時間の短縮 - GeekFactory

    App Engine上のアプリでは利用者の体感待ち時間を短くするため、JSPを使わずにAjaxで実装することがあります。この方法はOpenID認証(Federated Login)でも有効です。 web.xmlのsecurity-constraintで認証をチェックする方法を以前紹介しましたが、この方法ではサーブレットを経由してログイン画面に遷移するまでに待ち時間が発生してしまいます。 代わりにクライアント側で認証をチェックすることで、ログイン画面に遷移するまでの待ち時間を省けます。クライアント側で認証をチェックするには、JavaScriptで ACSID というクッキー*1の有無を確認します。 (図の1) JavaScriptは認証Cookieの有無を確認します。初期状態では認証Cookieを持っていないので、ログインフォームを表示します。 $.extend({ /** * ログイン済み

    AjaxによるFederated Loginの待ち時間の短縮 - GeekFactory
  • OpenID認証によるシングルサインオン - GeekFactory

    App Engine 1.3.4でOpenID認証に対応しました。調べてみると意外と普通にシングルサインオンできたので、使い方と仕組みを説明します。 まず、OpenID認証を要求するURLパターンをweb.xmlに書きます。 <security-constraint> <web-resource-collection> <web-resource-name>Authentication required url</web-resource-name> <url-pattern>/user/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint> 例えば http://xxx.appspot.co

    OpenID認証によるシングルサインオン - GeekFactory
  • 1