オライリー・ジャパンの電子書籍には目次がないようで・・・
Pages
オライリー・ジャパンの電子書籍に目次をいれたい
ラベル: bookmark_maker, ebook, Java 0 コメントScalaを触ってみたよ
ラベル: Java, Scala 0 コメントなんで触り始めたかは覚えてないんですが、
下記サイトを参考にScalaを触ってみました。
今からでも遅くない これから始めるScala(前編)
インストールでちょこっとつまずいたのでメモなど。
zipをダウンロードして、SCALA_HOMEを設定したのだけど、
なぜかコマンドプロンプトで起動しようとすると
「\Java\jdk1.6.0_20\bin\java.exe の使い方が誤っています」
とメッセージが出てきて、起動できない。
ググってみたら、scalaの起動バッチを修正することで、
起動出来るってことが書いてあった。
scala.batがだめっぽい
上記リンクはscala.batにしか言及してないけど、
scalac.batも同じようにバッチを修正してやらないと、
コンパイルできません。というか出来ませんでした。
ちなみにscalac.batも32行目をコメントアウトしてやればおk。
scaladocとかはまだ試してないけど、多分同じ症状が起きる予感。
上記リンクに書いてあるように、
この現象は64bit版のWindowsで起きる現象の模様。
最初はノート(Windows7 Home 64bit)で試してたのだけど、
後に母艦(Windows7 Pro 64bit)で試してみたら、なぜか上手く行った。
何が違うのかと思って調べてみたところ、
ノートに入ってるJDKは32bit版用で
母艦に入ってるJDKが64bit版だったことが判明。
バッチがこけてる訳だから、JDKが32bit版だろうが64bit版だろうが
JDKの中身は関係ないと思うんだけど、64bitOSに32bit版のJDKを
インストールしようとすると、デフォルトのインストール先が
「C:\Program Files (x86)」になる。
(64bit版だと「C:\Program Files」)
こいつのせいでJAVA_HOMEのパスが上手く動かないのかなーとか妄想しました。
結論
64bitOS上でscalaを動かす場合は
・scalaのバッチを修正する
・JDKは64bit版を入れる
・32bit版のJDKを入れる場合はインストール先を Program Files に変更する
(これは試してないんで、これで問題が解消するかどうかはわかりません)
の3つの方法があります!
ということでした。
それではみなさん良いScala Lifeを!
JCMT 2010に参加してきたよ! Cacoo裏側編
ラベル: Cacoo, Java, Seasar 0 コメントはい。先週のブログに書いた通り、
個人的に一番面白いと感じた
「Seasarで動いているWebサービスCacooの裏側」
のセッションについてのメモ等をさらそうかと。
とりあえず、資料はこちらにさらされてます。
一応このブログにも埋め込んでみる。
資料内のアジェンダにも書かれてるけど、
今回お話してた内容は、
・Cacooとはなんぞや?
・Cacooが動いてるアーキテクチャの構成
・Cubbyで拡張して何をどう実現してるか
・デザイナーさんとの協業方法
・レスポンスの改善
・質疑応答
って感じでした。
以下、セッションを聞きながらのメモを時系列で。
Cacooはヌーラボが運営・開発している
ヌーラボの仕事
→カクー、Backlog、受託開発を行っている
受託で作ったものをOSSに還元して、
その作ったものをさらに自分たちのサービスで使用している
Cacooとは?
VisioのWeb版
いろいろかけるよ!
・フローチャート
・UML
・ネットーワーク図
・座席配置図
図を描くだけでもなかなかイケてるけど、
リアルタイムコラボレーションもできるよ!
同じオブジェクトを触っている場合先勝ちになる。
別オブジェクトの場合マージされるよ
何のために作ったか?
本社が福岡のため、東京のお客さんとBacklogで文字だけでやり取りするのは結構きつかった
図も使ってたけど、pptで書いてpngにして、と面倒くさかった
ほかの人が編集できなかった
というわけで、図を直接みんなで編集できたりしたらいいなぁということで作った。
図が描けるツールが当時はあまりなかった
最初はUMLをWeb上で書くことができるようなプロトタイプを作った
JSONで情報やりとり
その後FlexやFlashを使えばクロスブラウザ問題を解決できそうだったので
ので社内で利用する為のプロトタイプを作成
社内プロジェクトで運用してみて、いけそうだったので、
Webサービスとして提供した
7ヶ月でユーザー数が現在4万4千超
国数は120カ国以上
ユーザーは英語版が57%以上
英語じゃない問い合わせが来てたりして、ユーザー対応が結構大変・・・
Cubbyで拡張
・脱Strutsを目指した
・T2も同じ感じ?
Plugin
AOPを使わずに拡張していく
それぞれフックできるポイントが提供されている。
Mayaa
・テンプレートの切り替えができる
Cacooはリリース以前から多言語対応を念頭においていた
多言語対応用に日本語・英語のリソースをすぐに切り替えられるようにした
1.最初に開発者のみでプロトタイプHTML・機能を作成
→使いやすさを追求
2.次にイメージを作成
→イメージをデザイナに伝えて、デザイナにサイトデザインを作ってもらう
3.出来上がったイメージはイラレやPNGだったりするので、デザイナさんに
それぞれパーツとして切り出してもらい、HTMLコーダーにパーツを渡し、コーディングしてもらう
id/classのルールが重要
Cacooではs_で始まるid/classは開発者側で使うというルールを規定し、
それ以外はHTMLコーダーに自由にやってもらった
4.出来上がったHTML/CSSからMayaaで仕上げる
→動的なコンポーネントを含める
→JavaScriptでDOMで表示するようなものを含めてもらう
5.日本語の表示が終わったら多言語対応
→翻訳したい単語・文章をリストアップして、翻訳者に渡す
失敗したと思ったこと。
翻訳者のCacooへの理解が足りず、翻訳してもらったものが
ちょっとオカシなものになっていた。
→実際にユーザーに指摘してもらって修正した
Mayaaとは
・最初がはまりやすい
→公式ドキュメントを参照しましょう
すでにメーリングリストで質問されている事がたくさんある
→JSPと同じ考え方で表示しようとするとハマりやすい。
Cubbyのカスタムタグの連携を用意にする拡張もあったりする。
レスポンスの改善
通信速度・距離の問題
アメリカからCacooやBacklogにアクセスしてみたところ
画像が表示されないという問題が発生。
サーバーキャッシュ→Ehcacheで解決(主に画像)
RMIで複数台で分散してキャッシュをするようにしている。
基本はネットワーク通信を減らす・DBアクセスを減らす
ブラウザのキャッシュ
タイムスタンプが重要
Mayaaの応用
InjectionResolverを拡張して、pom.xmlのバージョンを設定、
JSのバージョン等を動的に変更させるようにした
Hudsonでリリースモジュールを作成することによって、
リリース漏れをなくすようにした。
回線速度やレイテンシの問題
→今EC2に乗っけるかどうかを検討している。
現状海外からのアクセスが国内からのアクセスに比べて30倍位遅くなっている。
InjectionResolverを用意しておくことによってEC2に乗り換えたときも
リソースのパスなどの修正もあまり入らないと考えている
まとめ
CacooはSeasarプロダクトを基盤として動作しています。
Seasarを使うことによってサービス開発に集中できました
Seasarを使って魅力的なサービスをじゃんじゃんつくっちゃいましょう!
Javaだって今風なWebアプリ作れるぜ!
質疑応答
・HTML5導入は?
当時検討もしたが、当時はIE優勢だったので、見送った。
HTML5に切り替えればロードが早くなるのは
わかっているので是非やりたいと考えている。
Canvasは早いことはわかっている
英語じゃない質問はどうしてるの?
質問をGoogle翻訳で邦訳し、英語で返答している。
開発チームの人数は?
リリース直前は4名
3,4ヶ月で開発
インフラ構成は?
アプリケーション4台、DB2台?でかなり余裕
現状はたぶん2,3台でまわせる
以上。
最近話題になっているであろうCacooの裏側の事情が聞けて、
非常に興奮しました。
Java Cloud Meeting Tokyo 2010に参加してきたよ!
ラベル: AWS, Java, Seasar 0 コメントお久しぶりの更新です。
というわけでJCMT2010に行ってきたので、その所感など。
参加したセッション
1時間目 : Seasar3がやってくる
2時間目 : SeasarFoundation社員総会
3時間目 : デベロッパーのためのAWS講座
4時間目 : Seasarで動いているWebサービスCacooの裏側
5時間目 : AWSハンズオンセミナー
6時間目 : AWSハンズオンセミナー
以上のセッションに参加してきました。
以下、各セッションについての所感
■Seasar3がやってくる
ひがさんが来るべきエンタープライズクラウド時代に向けて、
今後のSeasarをどういう方向で開発していくかをお話してた。
結論から言うと、今のところ考えてるのは、
Springをベースにして、既存のSeasarで行えていたことを
実装していくという方針だとか。
今のところはHotReloadingを
クラスキャストエクセプションが起きないように
実装する、なんてのを考えているらしい。
ただし、これは現段階の考えであって、
今後他の人たちともっと話しをして、
最終的に決めていきたいとのこと。
■SeasarFoundation社員総会
SeasarFoundationとして、
コミュニティの枠を広げていきたいとかどうとか
■デベロッパーのためのAWS講座
一応今日のメイン目的のセッション。
講師がAmazon本社のAWSエヴァンジェリストで、
セッションは翻訳者付で行われた。
基本的にはAWSのサービスの概要説明だとか、
どんなサービスがあるかとかを話していた。
AWSで最近RDSという、クラウドでRDBMSを利用できる
サービスを展開しているが、これはMySQLを
利用しているため、既存のDBがMySQLの場合
簡単に移行できるらしい。
ちょっと驚いたのは、RDSは自動的にログを取っているのだけど、
そのログからDBのバックアップが可能だということ。
そんなのって普通のRDBMSでもできるの?
■Seasarで動いているWebサービスCacooの裏側
タイトルの通り、使ってるアーキテクチャやら、
開発時の苦労話等。
個人的にここが一番濃かったので、
ここについては別で記事をあげようと思う
2010/06/20追記
記事アップしました。
JCMT 2010に参加してきたよ! Cacoo裏側編
■AWSハンズオンセミナー
wktkして行ったけど、ちょっぴりガッカリなセミナーだった。
自分が情報収集しきれてなかったのが悪いのだけど、
アカウント取得前提というのを聞いてなかったので、
実際にハンズオンには参加できなかった。
あと、ガッカリな理由としては、2時間使った割には、
内容がホントの入り口の部分しか触れられなかったところ。
ちょっと前口上というか、AWSについての説明が多かった。
AWSの説明は説明で勉強になったのだけど、
ハンズオンていう位なんだからもうちょっと、
インスタンス作って、あれやこれやイジくって
というセッションにしてほしかったなーなんて思ったり。
以上。そんなとこっす。
Java内でStrutsのメッセージリソースを取得する方法
ラベル: Java, Struts 0 コメント今の現場で必要に迫られたので調査しました。
コードをそのまま載せてる所が見受けられなかったので、
記事にしてみる。
PropertyMessageResourceFactory pmrf = new PropertyMessageResourceFactory();
MessageResources mr = pmrf.createResources("メッセージのパス※1");
mr.getMessage(キー,引数,引数※2);
※1
メッセージが格納されているファイルへのパッケージのフルパス
例)
jp.test.resources.MessageResource
※2
キー → メッセージファイル内に記述されてるメッセージのキー
引数 → 対象のメッセージで引数を指定している場合
ってな感じです。
この方法だとJUnitの時も簡単らしい。
ちなみにStruts1.3.10のお話です。
Mapに格納されてる中身を全部みたい!
ラベル: Java 0 コメントというわけでググってみたら素敵な情報がありました。
中身まんま転載ですがご紹介。
for (Map.Entry entry : userInfoMap.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:"
+ entry.getValue());
}
元記事はこちらです。
Mapの中身を一気に出力 - メモ
Struts2 de Ajax
ラベル: Ajax, Java, Struts2 0 コメント今Struts2とAjaxについて勉強してます。
備忘録兼復習の意味も込めて投稿。
今回はStruts2のアクションからJSON形式で記述された文字列を返却する方法について。
ちなみにStruts2.1.8を使ってるので、Zero Configrationで話を進めます。
Struts2でAjaxを実装する場合、XMLHttpRequestで指定するURLは基本的に呼びたいActionのURLを呼べばいい(当たり前ですけど)
ここで困るのが、Struts2のアクションクラスは基本的に"success"等の実行結果の判定の文字列しか返却しない。
じゃあどうするか。
ここで活躍するのが、@Resultアノテーションさん
以下サンプルコード
@Action(value = "/hogeAction", results = { @Result(name = "success", type="json", params="{"root","options") })
public String hogeAction() throws Exception {
return "success";
}
public List getOptions(){
List
options.add("犬");
options.add("猫");
options.add("鳥");
return options;
}
@Resultの中でtype="json"を指定してやり、params={"root","options"}を宣言することで、paramsの第二引数の名前を持ったゲッター(この場合getOptions())を呼んで、その結果をjson形式に記述して返却してくれる。
この場合ではList形式で返却しているがMap形式による返却も可能。
そんな感じで色々悩んだけれども、ソース上だと結構簡単なお話でした。
諸々の前設定については参考URL見てね。
■参考URL
Convention Plugin(公式ドキュメント)
[ 2310 ] [Struts2] AJAXタグ : autocompleter と JSONプラグイン
JSON Plugin (ノウハウ共有サイト!)
/*雑記*/
サンプルコード見づらくてサーセン・・・その内勉強します・・・
@alpha_pzさんいつも助言ありがとうございます!サイト共々お世話になってます!
今週末のTOEICに向けて勉強せねば・・・
Design and Icons by N.Design Studio | Blogger Templates by Blog and Web