タグ

ブックマーク / dev.worksap.co.jp (24)

  • Advanced Tech Night No.2に参加させていただきました : toda_k

    先日新横浜で開催されたAdvanced Tech Night No.2に参加させていただきました。持参したMacBook Airをプロジェクタに繋げられなかったりLTが時間オーバーしたりとご迷惑をおかけする一方でしたが、主催者ならびに参加者の皆さんに暖かく受け入れていただき感謝しています。ありがとうございました。 さて、LTで使用したJVMシミュレータをこちらでも簡単に紹介させていただきます。 このシミュレータはJVMによるバイトコードの実行方法を直感的に理解するために作られました。これがわかるとjavapでバイトコードを読むことに抵抗がなくなり、バイトコード注入をはじめオートボクシングや総称型、アノテーションについても理解を深めることができるようになるでしょう。 シミュレータの技術的な特徴としては、スタックの表現にCSS3のflexible box modelを使用していることが挙げら

  • PMDの独自ルールで、潜在的なバグを機械的に探す : toda_k

    パッケージ製品の開発は大規模かつ長期間になり、コードの寿命も必然的に長くなります。また関わる開発者が多いことから、コードの可読性を高く保つことも難しくなります。この難問を解決する方法には個人の技術力向上やプロセス改善といったものも考えられますが、ここでは“悪いコード”を弾きだす機械的な方法を開発サイクルに組み込むことに着目してみましょう。 このためのツールとしてJava開発者の間で最も有名なのは、おそらくfindbugsです。findbugsはclassファイルを解析し、潜在的なバグを探してくれます。Eclipseプラグインの日語解説記事もあるので、多くの人が一度は試したのではないでしょうか。 他にはcheckstyleやPMDなど、ソースコードを解析してくれるツールもあります。checkstyleはコーディング規約に従っていないコードを検出してくれるので、複数人数での開発では重宝するで

  • PARTAKEの障害と再発防止策について : toda_k

    PARTAKEサーバー管理担当の戸田です。11月1日夜から2日朝にかけてサービスに障害を発生させてしまい、申し訳ありませんでした。 今回の障害の原因は、毎日取得しているバックアップを削除せず放置していたことによる記憶容量欠乏です。こんな簡単な事象の想定が漏れていたとはお恥ずかしい限りです。この障害によりイベントの新規作成や登録などの操作、ならびに@partake_botによる新着イベントのツイートが停止していました。なお現在はすべて復旧しております。 さてこの記事では開発コミュニティのMLで議論された再発防止策、ならびにその実装方法について簡単にご説明させていただきたいと思います。 今回MLで議論された再発防止策は3つありました。 残りHDDが少なくなったら管理者にアラートを出す 古いバックアップを定期的に削除する仕組みを構築する postgresqlのダンプを圧縮することでバックアップの

  • fluentでAuto ScalingインスタンスのログをS3に保存する : toda_k

    弊社の一部検証環境では、AWSのスケジュールや負荷に応じてインスタンスを自動的に増減してくれる機能であるAuto Scalingを使用しています。これにより、必要なときに必要なだけ使えるというパブリッククラウドの特徴を簡単に活かすことができます。 ただし今回の検証で使用するには、ひとつ不都合がありました。スケールダウンするときにインスタンスを「電源ケーブルを引っこ抜くように」落としてしまうため、終了時にログをまとめて転送することができないのです。保存しておきたいログは常時ほかのサーバーや記憶領域に転送する必要があります。 このためのツールとして最近fluentを検証・導入しましたのでご紹介いたします。 fluentとは ログの転送・集約をするためのツールです。プラグインで機能を拡張できる点とログを構造化できる点がとても頼もしく見えます。こちらのブログおよびスライドに細かな紹介が載っていま

  • PMDの独自ルールをSonarで動かす : toda_k

    以前PMDの独自ルール実装方法をまとめましたが、今回は実装したルールをSonarで動かす方法についてまとめます。公式のドキュメントはこちらです。 Sonarはコードの品質管理に寄与するOSSです。Jenkinsプラグインが用意されているなど使い勝手も良く、コード解析を行う予定があるならまず導入を検討したいプログラムとも言えます。プラグインやAjax用で使えるAPIが用意されているのも小回りがきくので嬉しいですね。弊社ではポータルサイトにプロジェクトの状態をざっくり表示するのにも使っています。 SonarでPMDの独自ルールを動かすには、Mavenを使ってSonarのプラグインを作る必要があります。プラグインといっても独自ルールが用意できているならば、単にpomとxmlを用意して簡単なコードを書くだけでOKです。 pom.xml まずpomを用意しましょう。これはGitHubに用意されてい

  • PMDでJSP用の独自ルールを作成する : toda_k

    Java用の独自ルール作成に引き続き、JSP用の独自ルール作成方法についてもご紹介いたします。といってもAbstractJspRuleを拡張してクラスを実装するだけというシンプルなものですので、Java用ルールを実装した方ならすぐに使えるでしょう。 Mavenプロジェクトの作成などは前回の記事を参照願います。ここではテストの作成とルールの実装についてまとめます。 テストパターンを作成する 前回同様、テストを書いてから実装を行なっていきましょう。今回はアンカータグのhref要素が//あるいはhttps://で始まっていることを確認するルールを例として実装していきます。 まずはテストに使用するJSPを用意します。今回はhref要素にhttps://、http://、mailto://、//を持つJSPをそれぞれ1つずつ用意し、src/test/resourcesに保存しました。例えばhttp

  • maven-surefire-pluginでJUnitのCategoryを使う : toda_k

  • MavenでJavaScriptプロジェクトを管理する : toda_k

    SonarのJavaScriptプラグインが6月に正式公開されたことを受け、既存のMavenプロジェクトに含まれるJavaScriptを解析しようと思い立ちました。そこでJavaScriptをMavenプロジェクトで管理する方法、カバレッジ算出方法、潜在的なバグの調査方法、MavenリポジトリにJavaScriptをデプロイする方法などを調べましたのでまとめます。 なおSonar利用を前提としたJavaScriptプロジェクトのサンプルとして、Sonar社が提供されているプロジェクトがご利用いただけますのでご覧ください。 javascript-maven-JsTestDriver on GitHub なぜMavenか 今のプロジェクトがビルドツールとしてMavenを既に採用していたためです。 もちろんcakeやgruntなどを使ってもいいのですが、各開発者の環境セットアップやCI環境の構

  • Mavenのモジュールによるレイヤ間依存管理 : toda_k

    あけましておめでとうございます。年もブログをよろしくお願いいたします。 昨年はいくつかのブログ記事を書かせていただきましたが、中でも以下の2つがよくアクセスされているようです。今年もこのような基礎知識や試行錯誤ネタを中心に書いていこうと思っていますので、よろしくお願いいたします。お気づきの点があれば、はてブやコメント等でお知らせいただけますと幸いです。 ぼくがかんがえたさいきょうのgitとMavenとJenkinsを使った開発 新人に話したJUnitのための知識とTips さて、日は現在私が取り組んでいるプロジェクトで採用され、それなりに成果を上げていると思われる「Mavenサブモジュールによるレイヤ間依存管理」についてお話します。 Mavenの「モジュール」とは モジュールはMavenが持つ機能の1つで、複数のモジュールによってひとつのプロジェクトを構築することができます。ここで言

  • Cassandra運用に活躍したスクリプトたち : toda_k

    弊社検証環境で半年ほど10数台規模のCassandraクラスタを運用してきたのですが、運用に使っているスクリプトがある程度固まってきたのでまとめてみます。更なる簡素化・便利化を進めるための棚卸しという感じです。古いものも混ざっていて若干申し訳なくはあるのですが……どなたかの役に立てば幸いです。では見て行きましょう。 スクリプトの運用体制について すべてのスクリプトはSubversionで管理され、主にJenkinsによって自動的に実行されます。多数のノードに対する同時処理を行なうためにGNU Parallelを使うことがあります。 またCassandraサーバはAWS EC2上で運用されているため、AWS SDK for RubyによってIPアドレスの取得などを行なっています。 各ノードでのnodetool ring実行結果を集約 クラスタが不安定なとき、実際は動いているのに一部のノードか

  • JAX-RSでファイルダウンロードさせる方法 : t_tanaka

    JavaでRESTfulなシステムを作るJAX-RSでファイルをダウンロードさせる場合の書き方です。 こんな感じです。 import java.io.ByteArrayInputStream; import java.io.InputStream; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("/File") public class FileDownloadService { @GET @Path("/download") @Produces(MediaType.APPLICATION_OCTET_STREAM) public

  • 「JavaScriptテクニックバイブル」を読みました « inoue_se

    アリエルで一番女性にもてると自称する岩永さんが書いた「JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技」を読みました。 献してもらったのは去年ですが、ようやく読みました。献、ありがとうございました。 書は副題にもあるように全部で150の項目があります。の値段が2980円なのでひとつ当たり約20円です。お得なだと思います。 150の項目は全11章で分類されています。以下、章ごとに軽く感想を書きます。 Chapter01 開発を取り巻く環境を改善する Emacsやその他のエディタ(Vimとか)でJavaScript開発をする場合の便利設定など書かれています。他にもいくつか便利ツールの紹介があります。 自分は使っていませんが、IEの各種バージョンの動作チェックができるIETesterは便利そうです。 Chapter02 デバッグ手法を改善する Firebugなど

  • 「Sencha Touchパーフェクトガイド」を読みました « inoue_se

    3ヶ月程ブログを書いていませんでした。雑誌記事の執筆で忙しかったためです。雑誌記事で、前編、中編と続いた「プログラミングのなぜに答える会」の後編で書こうと思っていたネタを書いてしまいました。このため、ブログでの後編掲載はなくなりました。続きは雑誌で読んでください。雑誌が出たらアナウンスします。 先月のささやかな小ネタは、IBMのWatsonがどんなプログラミング言語で書かれているか関係者に教えてもらったことです。Watsonアメリカのクイズ番組での勝利で有名になった人工知能のようなプログラムです。言語は、名前がCで始まる言語、Pで始まる言語、Jで始まる言語の3つです。ちなみに、COBOL、PL/I、Javaをあげたら、ひとつだけ正解です。 何の脈絡もない前置きは終わりにして題です。 アリエルの川野さん、大谷さん、稲垣さん、土江さんたちが執筆した「HTML5モバイルアプリケーションフレー

  • 品質エンジニアのログ分析のすすめ « inoue_se

    昨日、ワークス社内の品質エンジニアが自分たちの行った工夫を発表するイベントがありました。基調講演を頼まれたので話をしました。その時に使ったプレゼン資料を公開します。下記のzipファイルまたはtar.gzファイルを展開して、中にあるironman.htmlファイルをWebブラウザで開いてください。 ironman.zip ironman.tar.gz いくつか補足します。 伝統的にワークスでは、ソフトウェアテストのことを評価、品質エンジニア(QE)を評価者と呼んでいます。プレゼン資料でもこの用語に従っています。個人的には違和感がありますが、用語は聴衆に合わせたほうが良いだろうという判断です。 ゼロから始めるには少々敷居が高いと思わせたかもしれません。最初は自分がテストしている製品のログを見る、これだけでも充分だと思います。読む気になれなかったら少しずつ読む気になるログにするように開発者と話し

  • プログラミングのなぜに答える会(中編) « inoue_se

    前編を書いたのが9月です。月日がたつのは早いものです。今日は中編です。途中まで後編のつもりで書いていましたが、すべて書ききらないので中編になりました。後編はいつになるのやら、という感じですが。 プログラミングのなぜに答える会で、Tさんから「Javaでstaticを使う場合はどう判断しますか?」という質問がありました。以下、Javaのstaticの働き自体は分かっている前提とします。 表面的な回答は簡単です。あるクラスのstaticフィールドやstaticメソッドは、そのクラスのオブジェクト群(インスタンス)で共有したい状態や操作に対して使います。別の説明として、staticフィールドやstaticメソッドはオブジェクトを生成せずに使いたい状態や操作に使います、などが回答になりえます。嘘ではありませんが、この説明だけでは、staticをいつ使うべきかの判断にはなりません。 staticフィー

  • プログラミングのなぜに答える会(前編) « inoue_se

    先日、「プログラミングのなぜに答える会」に即興で参加しました。教科書に書いてあることでも疑ってみる姿勢は大事です。答えが自明に思える疑問でも掘り下げると何か新たな発見があるかもしれないからです。 その場で挙がった疑問に自分なりの答え(とそこから脱線した与太話)をまとめておきます。 ある例題コードにループ処理がふたつありました。片方のループは、コレクションから条件に合致する要素を抜き出す処理で、もうひとつのループは最初のループの結果(条件に合致した要素のみのコレクション)を表示する処理でした。挙がった疑問は、「ループを1回に(しようと思えば)できるが、してもいいのか?」でした。したい理由はループを1回にしたほうが効率が上がると思うから、でした。 教科書的な回答は自明です。「してはいけない」が答えです。ふたつのループは処理の意味が異なり、かつ独立して存在可能です。分けておくほうが意図が明確で、

  • ジョエル・テストを継ぐアリエル・テスト(後編) « inoue_se

    ジョエル・テストを継ぐアリエル・テスト(前編)の続きです。 テストチームは常に最新バージョンでテストしているか これは、ジョエル・テストのデイリービルドが暗黙に含む指標かもしれません。直交する部分もあると思い、項目としてアリエル・テストに足しました。 テストチームが古いビルドでテストするのは意味がないので、最新バージョンでテストするのは自明に思えるかもしれません。しかし、意外にテストチームのメンバーが自分たちのテストしているビルド番号を知らない場合があります。ソースコードのコミット履歴(テストチームの視点から見ると、修正がいつ入ったかの記録)とビルド番号(テストチームの視点から見ると、自分たちがテストしている対象)の対応づけは確認可能になっているべきです。かつ、すべてのテストメンバーはビルド番号に意識的であるのが理想です。 開発期間中のバグ報告件数が可視化されているか(開発チーム全員に見る

  • ジョエル・テストを継ぐアリエル・テスト(前編) : inoue_se

    ジョエル・テストはソフトウェア開発チームを評価する指標として有名です。今でも充分に有効な指標ですが何せ書かれたのが2000年です。そろそろ新しい指標があってもいいと思います。なので考えてみました。ジョエル・テストの名前規約に従うならイノウエ・テストとすべきですが、気恥ずかしいのアリエル・テストとなづけます。 実践できないことを指標にしても机上の空論になるので、アリエルの開発で実践できていることに限定しています。このため、こんなことをすべきと言う理想論ではなく、費用対効果まで考えた実践的な項目です。 ジョエル・テストと同じ項目はアリエル・テストに含めていません。当然やっているという前提です。もっとも、アリエルでもいくつかの項目は完全実践とは言い難いものもありますが。 ソフトウェア開発チームを評価するアリエル・テスト 自動ビルド、自動デプロイができるか 自動テスト(単体テスト、統合テスト)があ

  • Java EE6はSpringの代替になると思いますが、ただしJSFは除く、という話(JavaEE Advent Calendar 2012) « inoue_se

    この記事はJavaEE Advent Calendar 2012の24日目の記事です。 先日、JavaOne報告会の場で、Java EE6 vs. Spring Framework(以下Spring)の話をしてJava EE6に軍配をあげる発表をしました。 自分は昔からロッド・ジョンソン氏の「実践J2EEシステムデザイン」を素晴らしいだとまわりの人に勧めてきました。今までJavaのWebアプリフレームワーク(以下WAF)に何を選べばいいかと聞かれたら、Springが良いと答えてきました。今回、意見を180度変えたと思う人もいそうですが、そこまでの大きな変節ではありません。Java EE6のアーキテクチャがSpring化したからです。 そもそも今でも客観的に見れば、Java EE6よりSpringのほうがアーキテクチャとしては美しいと思っています。 えっ、と思われそうですが、発表で嘘を言っ

  • JavaOne2012@サンフランシスコ レポート(大雑把編) « inoue_se

    プログラミングのなぜに答える会(前編)の後編執筆がまだですが、事情により割り込みでJavaOne2012レポートを書きます。 JavaOne2012に参加しました。今回、日オラクル社の寺田さんの尽力でブロガー枠で参加できました。報告ブログを書く義務の代わりに参加費を免除してもらっています。ありがとうございます。来年もよろしくお願いします。 JavaOne参加は2年ぶり2度目です。参考のために2年前のレポートのリンクを張っておきます。 JavaOne/Oracle OpenWorldレポート – ラリーエリソン編 - JavaOne/Oracle OpenWorldレポート – JavaOne全般編 - JavaOne/Oracle OpenWorldレポート – Javaコア言語編 - JavaOne/Oracle OpenWorldレポート – 戦利品と展示会編 - JJUGのJava