サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
dev.worksap.co.jp
Apache Proxy Balancer をロードバランサー(LB)として使っていて、 困ったことは、Web/AP サーバが LB を経由してアクセスしてきたクライアントの IP を知る方法がわからなかったことです。 Web/AP サーバ上でも Apache が動いていますが、その access_log を見ても、下記のように、LB 側の IP が表示されてしまいます。 [sourcecode language="plain"] 10.xx.xx.xx – - [18/Nov/2010:03:03:48 -0500] "GET / HTTP/1.1" 200 44 [/sourcecode] その方法を見つけて試しましたので、ブログに載せます。 http://httpd.apache.org/docs/current/mod/mod_proxy.html Apache のサイトによると、
WEB+DB PRESS Vol.74の第一特集の「Web開発1年目に身につけたい 良い設計の基礎知識」の記事を書きました。 最初に小さな訂正です。記事中のサンプルコードでCollections.synchronizedMapを使っていますが、ConcurrentHashMapを使うべきでした。訂正が間に合いませんでした。すいません。 記事を書く上で気をつけたのが、「なんとかだから良いコードです」の「なんとか」の部分に技術用語を使わないことです。「なんとか」の部分には、たとえばオブジェクト指向や関数型プログラミングが来ます。こういう技術用語で説明した気になるのは良くないと思いますし、分かった気になるのも良いとは思えません。これらを盲目的に良いと思い込むのは単なる思考停止です。良いという実証はなく、せいぜい特定の基準の下でのベストプラクティスに過ぎないからです。コードはこう書くべき、というべ
アリエルで一番女性にもてると自称する岩永さんが書いた「JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技」を読みました。 献本してもらったのは去年ですが、ようやく読みました。献本、ありがとうございました。 本書は副題にもあるように全部で150の項目があります。本の値段が2980円なのでひとつ当たり約20円です。お得な本だと思います。 150の項目は全11章で分類されています。以下、章ごとに軽く感想を書きます。 Chapter01 開発を取り巻く環境を改善する Emacsやその他のエディタ(Vimとか)でJavaScript開発をする場合の便利設定など書かれています。他にもいくつか便利ツールの紹介があります。 自分は使っていませんが、IEの各種バージョンの動作チェックができるIETesterは便利そうです。 Chapter02 デバッグ手法を改善する Firebugなど
3ヶ月程ブログを書いていませんでした。雑誌記事の執筆で忙しかったためです。雑誌記事で、前編、中編と続いた「プログラミングのなぜに答える会」の後編で書こうと思っていたネタを書いてしまいました。このため、ブログでの後編掲載はなくなりました。続きは雑誌で読んでください。雑誌が出たらアナウンスします。 先月のささやかな小ネタは、IBMのWatsonがどんなプログラミング言語で書かれているか関係者に教えてもらったことです。Watsonはアメリカのクイズ番組での勝利で有名になった人工知能のようなプログラムです。言語は、名前がCで始まる言語、Pで始まる言語、Jで始まる言語の3つです。ちなみに、COBOL、PL/I、Javaをあげたら、ひとつだけ正解です。 何の脈絡もない前置きは終わりにして本題です。 アリエルの川野さん、大谷さん、稲垣さん、土江さんたちが執筆した「HTML5モバイルアプリケーションフレー
あけましておめでとうございます。本年も本ブログをよろしくお願いいたします。 昨年はいくつかのブログ記事を書かせていただきましたが、中でも以下の2つがよくアクセスされているようです。今年もこのような基礎知識や試行錯誤ネタを中心に書いていこうと思っていますので、よろしくお願いいたします。お気づきの点があれば、はてブやコメント等でお知らせいただけますと幸いです。 ぼくがかんがえたさいきょうのgitとMavenとJenkinsを使った開発 新人に話したJUnitのための知識とTips さて、本日は現在私が取り組んでいるプロジェクトで採用され、それなりに成果を上げていると思われる「Mavenサブモジュールによるレイヤ間依存管理」についてお話します。 Mavenの「モジュール」とは モジュールはMavenが持つ機能の1つで、複数のモジュールによってひとつのプロジェクトを構築することができます。ここで言
JavaOne 2012 San Francisco 報告会でLTをしました。LTのプレゼン資料を公開します。 オリジナルのプレゼン資料はHTML形式です。そのまま見たい人のためにtar.gz形式のファイルを置いておきます。下記リンクから取得してください。tar.gzを展開して内部のjavaone.htmlファイルをWebブラウザで開いてください。 JavaOne 2012 San Francisco 報告会LT 資料を少し補足します。 プレゼン資料の結論は、大規模開発にSpring FrameworkやPlay Frameworkが向かない、という意図ではありません。長期メンテや大人数開発の意味は、開発途中でフレームワークの変更が困難、という意味で書いています。つまり、より保守的な選択が求められる場合です。その場合、Java EEが良いだろう、という意味です。 言うまでもありませんが、個
この記事は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のほうがアーキテクチャとしては美しいと思っています。 えっ、と思われそうですが、発表で嘘を言っ
昨日、ワークス社内の品質エンジニアが自分たちの行った工夫を発表するイベントがありました。基調講演を頼まれたので話をしました。その時に使ったプレゼン資料を公開します。下記のzipファイルまたはtar.gzファイルを展開して、中にあるironman.htmlファイルをWebブラウザで開いてください。 ironman.zip ironman.tar.gz いくつか補足します。 伝統的にワークスでは、ソフトウェアテストのことを評価、品質エンジニア(QE)を評価者と呼んでいます。プレゼン資料でもこの用語に従っています。個人的には違和感がありますが、用語は聴衆に合わせたほうが良いだろうという判断です。 ゼロから始めるには少々敷居が高いと思わせたかもしれません。最初は自分がテストしている製品のログを見る、これだけでも充分だと思います。読む気になれなかったら少しずつ読む気になるログにするように開発者と話し
前編を書いたのが9月です。月日がたつのは早いものです。今日は中編です。途中まで後編のつもりで書いていましたが、すべて書ききらないので中編になりました。後編はいつになるのやら、という感じですが。 プログラミングのなぜに答える会で、Tさんから「Javaでstaticを使う場合はどう判断しますか?」という質問がありました。以下、Javaのstaticの働き自体は分かっている前提とします。 表面的な回答は簡単です。あるクラスのstaticフィールドやstaticメソッドは、そのクラスのオブジェクト群(インスタンス)で共有したい状態や操作に対して使います。別の説明として、staticフィールドやstaticメソッドはオブジェクトを生成せずに使いたい状態や操作に使います、などが回答になりえます。嘘ではありませんが、この説明だけでは、staticをいつ使うべきかの判断にはなりません。 staticフィー
先日、「プログラミングのなぜに答える会」に即興で参加しました。教科書に書いてあることでも疑ってみる姿勢は大事です。答えが自明に思える疑問でも掘り下げると何か新たな発見があるかもしれないからです。 その場で挙がった疑問に自分なりの答え(とそこから脱線した与太話)をまとめておきます。 ある例題コードにループ処理がふたつありました。片方のループは、コレクションから条件に合致する要素を抜き出す処理で、もうひとつのループは最初のループの結果(条件に合致した要素のみのコレクション)を表示する処理でした。挙がった疑問は、「ループを1回に(しようと思えば)できるが、してもいいのか?」でした。したい理由はループを1回にしたほうが効率が上がると思うから、でした。 教科書的な回答は自明です。「してはいけない」が答えです。ふたつのループは処理の意味が異なり、かつ独立して存在可能です。分けておくほうが意図が明確で、
プログラミングのなぜに答える会(前編)の後編執筆がまだですが、事情により割り込みでJavaOne2012レポートを書きます。 JavaOne2012に参加しました。今回、日本オラクル社の寺田さんの尽力でブロガー枠で参加できました。報告ブログを書く義務の代わりに参加費を免除してもらっています。ありがとうございます。来年もよろしくお願いします。 JavaOne参加は2年ぶり2度目です。参考のために2年前のレポートのリンクを張っておきます。 JavaOne/Oracle OpenWorldレポート – ラリーエリソン編 - JavaOne/Oracle OpenWorldレポート – JavaOne全般編 - JavaOne/Oracle OpenWorldレポート – Javaコア言語編 - JavaOne/Oracle OpenWorldレポート – 戦利品と展示会編 - JJUGのJava
若いプロジェクトを任せていただく機会があり、これ幸いと普段から蓄積していた「こうしたらいいんじゃないか」を実践しています。今の開発手法も試行錯誤のもとに作られた良い物なのですが、まだまだ上は目指せますよね、ということで。 理屈先行に見えたプロセスもいざ導入すると意外と実践的だったり、逆に簡単なことなのに時間がかかって使い物にならなかったりと、やはりやってみないとわからないことは多いものですね。この記事では開始1ヶ月で試した内容とその顛末をご紹介いたします。 動機:なぜこんな複雑なことをするのか 自動化やCIを導入する動機として、よく貴重な開発者の時間を大切にするためと言われます。私も強く共感しますが、節約した時間を何に使いたいかという点には諸説ありそうな気がします。 もちろんいい仕事をするという最終目標はずれないでしょうが、アクションとして勉強するのかコードを書くのか品質について考えるの
ジョエル・テストを継ぐアリエル・テスト(前編)の続きです。 テストチームは常に最新バージョンでテストしているか これは、ジョエル・テストのデイリービルドが暗黙に含む指標かもしれません。直交する部分もあると思い、項目としてアリエル・テストに足しました。 テストチームが古いビルドでテストするのは意味がないので、最新バージョンでテストするのは自明に思えるかもしれません。しかし、意外にテストチームのメンバーが自分たちのテストしているビルド番号を知らない場合があります。ソースコードのコミット履歴(テストチームの視点から見ると、修正がいつ入ったかの記録)とビルド番号(テストチームの視点から見ると、自分たちがテストしている対象)の対応づけは確認可能になっているべきです。かつ、すべてのテストメンバーはビルド番号に意識的であるのが理想です。 開発期間中のバグ報告件数が可視化されているか(開発チーム全員に見る
SonarのJavaScriptプラグインが6月に正式公開されたことを受け、既存のMavenプロジェクトに含まれるJavaScriptを解析しようと思い立ちました。そこでJavaScriptをMavenプロジェクトで管理する方法、カバレッジ算出方法、潜在的なバグの調査方法、MavenリポジトリにJavaScriptをデプロイする方法などを調べましたのでまとめます。 なおSonar利用を前提としたJavaScriptプロジェクトのサンプルとして、Sonar社が提供されているプロジェクトがご利用いただけますのでご覧ください。 javascript-maven-JsTestDriver on GitHub なぜMavenか 今のプロジェクトがビルドツールとしてMavenを既に採用していたためです。 もちろんcakeやgruntなどを使ってもいいのですが、各開発者の環境セットアップやCI環境の構
Emacs のバッファの内部実装について 井上誠一郎 自己紹介 (1) 井上誠一郎 アリエル・ネットワーク株式会社 CTO ワークスアプリケーションズ ゲストフェロー ありえるえりあ – (http://dev.ariel-networks.com) CRITICAL WORKS – (http://dev.worksap.co.jp/) 自己紹介 (2) 書籍執筆歴 「 P2P 教科書」 「パーフェクト Java 」 「実践 JS サーバサイド JavaScript 入門」 「パーフェクト JavaScript 」 Emacs の執筆 雑誌「 Software Design 」 「 Emacs のトラノマキ」連載 今日のお題 Emacs のバッファの内部実装について話します 日々の生活の役には立ちません Emacs 使いの教養と思って聞い
アリエル・テストの後編をまだ書いていませんが、昨日、Agile渋谷のEmacs勉強会で話をしてきたので、プレゼン資料を公開します(pdfフォーマットで置いておきます)。 タイトルは「Emacsのバッファの内部実装について」です。 プレゼン資料 最初、Emacs24の話でもしようかと思っていましたが、大竹さんやあるいは他の人のLTでEmacs24ネタが被ると嫌だったので、内部実装というマニアックな方向に走りました。Emacsをどう使いこなすかも重要ですが、教養も必要です。 しかし、思ったより大竹さんがEmacs24について話しませんでしたし、LTでEmacs24に触れた人はゼロでした。これなら、elispのレキシカルスコープ化の話でも良かったかもしれません。まあいいですが。 改めて資料を見返すと、文字挿入の話だけして、文字削除の話が欠けていました。文字削除時は、削除位置(ポイント)にギャップ
ジョエル・テストはソフトウェア開発チームを評価する指標として有名です。今でも充分に有効な指標ですが何せ書かれたのが2000年です。そろそろ新しい指標があってもいいと思います。なので考えてみました。ジョエル・テストの名前規約に従うならイノウエ・テストとすべきですが、気恥ずかしいのアリエル・テストとなづけます。 実践できないことを指標にしても机上の空論になるので、アリエルの開発で実践できていることに限定しています。このため、こんなことをすべきと言う理想論ではなく、費用対効果まで考えた実践的な項目です。 ジョエル・テストと同じ項目はアリエル・テストに含めていません。当然やっているという前提です。もっとも、アリエルでもいくつかの項目は完全実践とは言い難いものもありますが。 ソフトウェア開発チームを評価するアリエル・テスト 自動ビルド、自動デプロイができるか 自動テスト(単体テスト、統合テスト)があ
最近新人のコードレビューをする機会が増えまして、自分の中の経験則を言語化する機会に恵まれています。なんとなーくわかっていた事柄を人に伝えようとするのは、いつの時代にも最良の学びの機会ですね。 さて新人各位に個別に伝えた「JUnit4利用に関する注意」を整理してみました。JUnitは自由度の高いフレームワークであり使い方は十人十色かと思いますので、もっと良い使い道をご存知のかたは是非はてブコメントなどで教えていただければと思います。ちなみにここで言う「テスト」とは実装の前に書く単体テストだけではなく、実装後に書かれるものや自動化された統合テストも含めています。 1.JUnitを使うために押さえるべき前提知識 テストメソッドの実行される順番は不定 EclipseのJUnit実行機能に親しんでいると意外と気付けないのですが、JUnitはテストクラス内のテストメソッド実行順を保証していません。それ
弊社検証環境で半年ほど10数台規模のCassandraクラスタを運用してきたのですが、運用に使っているスクリプトがある程度固まってきたのでまとめてみます。更なる簡素化・便利化を進めるための棚卸しという感じです。古いものも混ざっていて若干申し訳なくはあるのですが……どなたかの役に立てば幸いです。では見て行きましょう。 スクリプトの運用体制について すべてのスクリプトはSubversionで管理され、主にJenkinsによって自動的に実行されます。多数のノードに対する同時処理を行なうためにGNU Parallelを使うことがあります。 またCassandraサーバはAWS EC2上で運用されているため、AWS SDK for RubyによってIPアドレスの取得などを行なっています。 各ノードでのnodetool ring実行結果を集約 クラスタが不安定なとき、実際は動いているのに一部のノードか
パッケージ製品の開発は大規模かつ長期間になり、コードの寿命も必然的に長くなります。また関わる開発者が多いことから、コードの可読性を高く保つことも難しくなります。この難問を解決する方法には個人の技術力向上やプロセス改善といったものも考えられますが、ここでは“悪いコード”を弾きだす機械的な方法を開発サイクルに組み込むことに着目してみましょう。 このためのツールとしてJava開発者の間で最も有名なのは、おそらくfindbugsです。findbugsはclassファイルを解析し、潜在的なバグを探してくれます。Eclipseプラグインの日本語解説記事もあるので、多くの人が一度は試したのではないでしょうか。 他にはcheckstyleやPMDなど、ソースコードを解析してくれるツールもあります。checkstyleはコーディング規約に従っていないコードを検出してくれるので、複数人数での開発では重宝するで
以前PMDの独自ルール実装方法をまとめましたが、今回は実装したルールをSonarで動かす方法についてまとめます。公式のドキュメントはこちらです。 Sonarはコードの品質管理に寄与するOSSです。Jenkinsプラグインが用意されているなど使い勝手も良く、コード解析を行う予定があるならまず導入を検討したいプログラムとも言えます。プラグインやAjax用で使えるAPIが用意されているのも小回りがきくので嬉しいですね。弊社ではポータルサイトにプロジェクトの状態をざっくり表示するのにも使っています。 SonarでPMDの独自ルールを動かすには、Mavenを使ってSonarのプラグインを作る必要があります。プラグインといっても独自ルールが用意できているならば、単にpomとxmlを用意して簡単なコードを書くだけでOKです。 pom.xml まずpomを用意しましょう。これはGitHubに用意されてい
前回はハードウェアやOSから情報を収集して調査方針を洗い出す方法についてざっくりと紹介しました。今回はJavaプログラムに速度劣化の原因が疑われる場合に実施すべきボトルネック調査について見ていきます。 ツールは何を使うべきか? 一般に、調査用ツールにはCUI/GUIという種類とリアルタイム/統計取得という種類があると考えています。例えばjconsoleはGUIでリアルタイムにJVMの状況を見るもので、 hprofはCUIで統計情報を得るものです。他に考えられる区分としては「JDK標準付属か否か」もありますが、準備に時間をかけられる状況ならあまり重要ではないでしょう。 ボトルネック調査で必要なのは、多様な情報を適切に取捨選択しつつリアルタイムに観察できることです。仮説が定まらない段階とメソッド単位で問題を追っている段階では必要な情報の幅が大きく異なりますし、特定フェーズでのみ遅くなるなどの「
弊社の一部検証環境では、AWSのスケジュールや負荷に応じてインスタンスを自動的に増減してくれる機能であるAuto Scalingを使用しています。これにより、必要なときに必要なだけ使えるというパブリッククラウドの特徴を簡単に活かすことができます。 ただし今回の検証で使用するには、ひとつ不都合がありました。スケールダウンするときにインスタンスを「電源ケーブルを引っこ抜くように」落としてしまうため、終了時にログをまとめて転送することができないのです。保存しておきたいログは常時ほかのサーバーや記憶領域に転送する必要があります。 このためのツールとして最近fluentを検証・導入しましたのでご紹介いたします。 fluentとは ログの転送・集約をするためのツールです。プラグインで機能を拡張できる点とログを構造化できる点がとても頼もしく見えます。こちらのブログおよびスライドに細かな紹介が載っていま
こんにちは。のぐちです。 今週はMavenさんと仲良くしようと努力したのですが、今ひとつ仲良くなりきれず、思ったようなことができませんでした。僕にはMavenさんは難しかったみたいです。 そんなクサクサした気持ちを晴らすべくブログを書きました。よろしければお付き合いください。 さて、前回、後からバインドする関数を、やや強引な感じで最初にバインドされたようにして、実行順序を変えられるか試みました。 その結果、jQuery1.4.3だとFirefoxでもChromeでも意図通りに実行順序を変えられたのですが、jQuery1.3.2ではChromeの方だけ実行順序が変わりません。 ということで、jQueryがバインドされた関数をどのように実行しているかを追ってみます。 バインドされた関数の実行は jQuery.event.handle という関数で行なわれています。 下記がその実行をしている部
今月はリファクタリング王・桜木と呼ばれてもいいんじゃないかというくらいのリファクタリングをやり遂げた男、のぐちです。 同時にバグ王とも呼ばれたとか呼ばれないとか。 さて、今回も実装派ブログです。 変なことをしてるかもしれないので、ご指摘などございましたらtwitter、@nogunogu_wap にお願いします。 問。 ボタンAとボタンBがあって、そこには既にクリックイベントが設定されているとします。 $("#btn_a").click(function() { alert("こんにちは"); }); $("#btn_b").click(function() { alert("こんばんは"); }); ボタンA、ボタンBの両方に、後から同じ関数を追加したいのですが、追加する関数は上記のものよりも先に実行して欲しいのです。 // そして、場合によっては上記の関数の実行をしないようにした
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
以前、Windows Phone 7 で EC2を操作してみる という記事を書きました。 Windows Phone 7もMangoで日本語対応もされるというので、 いよいよ本格的に触ってみたいと思っています。 そこで、AWS APIをWP7から呼び出してみようと試みました。 まずは、前回も試したEC2からです。 そもそもAWS SDKにはfor .NETということで.NET用のライブラリがあります。 しかし、これはデスクトップ/サーバーOS上で動く 通常の.NET Framework用のもので、 Windows PhoneなどのSilverlight上では動きません。 具体的にどこが動かないかというと、 ソースを取得してWP7用のプロジェクトに読み込ませてコンパイルするとわかります。 細かく見ると多数コンパイルエラーが出るのですが、 EC2のAPIを叩くために大きな
前回の書き込みから随分時間が経過してしまいました。 引き続き、ロードバランサ&セッションネタを続けます。 下記のようなパターンを考えます。 アプリケーション(AP)サーバが3台立っているとします。(サーバ1,2,3) そのフロントにロードバランサが立っていて、アクセスを割り振っています。 そこで、サーバ1をダウンさせる場合、サーバ1 が持っているセッションはどうなるか? APサーバ間で、セッションレプリケーションを頻繁に行っていれば、サーバ1がダウンしても、他のサーバ2,3で同じセッションに接続できます。セッションレプリケーションを、サーバをダウンさせるタイミングで実行するように、AP 側で設定することも可能です。セッションレプリケーションにより、シリアライズされたセッション情報を DB に格納する手段もあります。 セッションのデータサイズが大きく、全 AP サーバ間で共有してしまうと、リ
もう1月も終わってしまいますね。MBOが発表されたワークスアプリケーションズののぐちです。 今開発しているプロジェクトでは、Mavenでビルドする際に、jsファイルやcssファイルを圧縮・結合しています。 YUI Compressorを使ったMavenプラグインが使いやすかったので利用しました。 yuicompressor-maven-plugin 日本語での説明サイトが見当たらなかったので備忘を兼ねてメモしてみます。 利用するには、上記サイトに従って、pom.xmlにpluginRepositoryとpluginを追記します。 <pluginRepositories> <pluginRepository> <name>oss.sonatype.org</name> <id>oss.sonatype.org</id> <url>http://oss.sonatype.org/conte
次のページ
このページを最初にブックマークしてみませんか?
『Critical Works』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く