タグ

ブックマーク / higayasuo.hatenablog.com (23)

  • JavaBeansに対するリフレクションとClassLoader脆弱性 - ひがやすを技術ブログ

    今回の問題は、(SA)Strutsだけの問題ではなく、いろんなフレームワークでもちゃんと調べた方が良い話しなので、もう少し詳しく書いておきます。 Javaで、JavaBeansのプロパティにアクセスする場合、 PropertyDescriptor[] descriptors = Introspector.getBeanInfo(クラス).getPropertyDescriptors();で取得できるPropertyDescriptorを使うことがほとんどです。この中に、classプロパティは含まれます。 ここまでは良くて、ネストしたリクエストパラメータ(class.classLoader.xxxなど)をJavaBeansにセットする時に、BeanInfo.getPropertyDescriptors()で取得したものをそのまま使うのが問題なのです。 Seasar2(BeanDesc)では、

    JavaBeansに対するリフレクションとClassLoader脆弱性 - ひがやすを技術ブログ
    mickn
    mickn 2014/04/25
    どんどん広がっている
  • AppEngine/Jのspin-upを劇的に改善する方法 - ひがやすを技術ブログ

    AppEngineは、アクセスがあったときにアプリケーションを起動し、しばらくアクセスが無ければアプリケーションを終了させ、また次のリクエストで再起動するという仕組みを導入しています。 そのため、アプリケーションを起動(spin-up)する時間がとても重要になってきます。このspin-upの時間はpython(webapp)で60cpu_ms以下。(cpu_msはcpuが使う仮想的な時間ですがmsと同じ感じで捉えてもらってもとりあえずは大丈夫です)JavaのServletだと600cpu_msくらいです。PythonでもDjangoような大きなフレームワークだと1000cpu_msくらい(アプリによる)かかりますが、許容範囲内。JavaだとSlim3で1300cpu_ms、Springだと早くて7000cpu_msという感じで、Slim3がギリギリ許容範囲内でしょうか。ほんとうは、1000

    AppEngine/Jのspin-upを劇的に改善する方法 - ひがやすを技術ブログ
    mickn
    mickn 2010/11/09
  • 受託開発に未来はない? - ひがやすを技術ブログ

    私は1年以上、エンタープライズの世界(企業向けSIとか)から離れ、ずっとGoogle App Engineをやっています。今は、Google App Engine + Webkitベースのブラウザで動くHTML5を使ったグローバルな新サービスを提供しようとしていて、新規事業立ち上げのために日々奮闘しているので、エンタープライズな世界に戻ってくることは、基無いでしょう。 私は、受託開発に未来はないと思っているので、自分でサービスを提供する側に回ろうとしているわけです。受託開発に未来はないといっても、文字通り未来はないという意味で、すぐになくなるわけではないし、生きてくために必要な部分も多々あると思います(うちの会社もSIerだし)が、今後は撤退すべきだろうという判断です。 受託開発になぜ未来がないかというと、世の中の動きがかなり速くなっているので、その中で素早くチャンスを捕まえたものが生き

    受託開発に未来はない? - ひがやすを技術ブログ
    mickn
    mickn 2010/08/23
  • Google App EngineでGlobal Transaction - ひがやすを技術ブログ

    Google App EngineにはTransactionは1つのEntity Group内でしかできないという制限があります。詳しくは、App EngineのEntityGroupを理解しよう - yvsu pron. yasを参照してください。 そうするとある口座から別の口座にお金を振込むような送金のパターンで、Transactionを利用することができません(すべての口座を1Entity Groupに押し込むと更新がぶつかって現実的ではないから)。送金パターンで整合性を保つためには、理論的には次のようになります。 http://songofcloud.gluegent.com/2009/11/blog-post_18.html 実装するとこんな感じ。 http://blog.notdot.net/2009/9/Distributed-Transactions-on-App-Engi

    Google App EngineでGlobal Transaction - ひがやすを技術ブログ
    mickn
    mickn 2010/02/10
  • AppEngineのDatastoreの学び方 - ひがやすを技術ブログ

    Google AppEngineではBigtableの上にDatastore Serviceが構築されていて、開発者は、このDatastore Serviceを利用してBigtableにアクセスすることになります。このDatastore ServiceはPython版もJava版も機能はほとんど同じです。もしかすると、全く同じものかもしれません。 GAE/Jの場合、JDOを通じて、Datastore Serviceを利用するのが推奨されていますが、実はこれが嵌りポイント。 JDOは汎用的なインターフェースなので、Datastore Serviceを理解するのには向いていません。Datastore ServiceがRDBMSのような高機能なら、JDOを通じて抽象化し、Datastore Serviceのことは知らなくても済すのもぜんぜんありなのですが、残念ながら、そうなってはいません。 Da

    AppEngineのDatastoreの学び方 - ひがやすを技術ブログ
    mickn
    mickn 2009/11/24
  • App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ

    Google App EngineではRDBMSのようなUnique Indexをサポートしていません。ユニーク制限を実現する場合は、トランザクション中でKeyを使ったgetとputを組み合わせる必要があります。 ここでは、email addressがユニークだったらそれを確定してtrueを返し、そうでない場合にはfalseを返すコードを考えます。 最初にトランザクションを使わないコードを見てみましょう。KeyFactory.createKeyの最初に引数は、kindといってテーブル名みたいなものです。 public boolean putUniqueEmailAddress(String value) { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Key key = KeyFactory.cr

    App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ
    mickn
    mickn 2009/11/11
  • GAEでBlobやTextを定義する方法 - ひがやすを技術ブログ

    Google App Engineでは、500バイト以上のバイトの配列や文字列を格納する型として、BlobやTextを用意しています。これらの型を使うときには、フィールドの型は、BlobやTextにし、getter, setterメソッドは、byteの配列やStringにしておくと、モデルを使う側は、500バイトの制限を気にせず、常にbyteの配列やStringでアクセスできるのでお勧めです。 @Persistent private Blob xxxBlob; public byte[] getXxx() { if (xxxBlob == null) { return null; } return xxxBlob.getBytes(); } public void setXxx(byte[] xxx) { xxxBlob = new Blob(xxx); } @Persistent pri

    GAEでBlobやTextを定義する方法 - ひがやすを技術ブログ
    mickn
    mickn 2009/07/21
  • Bigtableの使い方教えます - ひがやすを技術ブログ

    GAE/Jを使うのに一番戸惑うのが、データのストレージがRDBMSではなく、Bigtableなことでしょう。 JOINが使えなかったり、WHERE句でORが使えなかったり、これまで慣れ親しんでいた方法が軒並み使えません。 これらの制限は、Bigtableに限ったことではなく、KVS(Key Value Store)型のクラウド系のデータベースではみんないえることだと思います。 最初、私も戸惑ったんだけど、いろいろ触っているうちに気付きました。昔、AS400でやってたころと一緒ジャンと。AS400とは、IBMから出ているオフコン(?)ですね。今は、System iと呼ばれているようです(最新だとまた違うようですが)。 AS400のファイル(テーブル)は、キーもしくはインデックスでアクセスします。インデックス(論理ファイル)は、ある行の特定のカラムがソートされていて、物理ファイル(テーブル)へ

    Bigtableの使い方教えます - ひがやすを技術ブログ
    mickn
    mickn 2009/05/13
  • もうエンタープライズJavaなんて捨ててしまえ - ひがやすを技術ブログ

    これまでずっとなるべく言わないようにしていたのだが、もう平たく/明快に言うことにしました。 1)エンタープライズJavaはもう立ち直れないと思う。 だから、 2)GAEを勉強してそのままクラウドというバズワードに踊らされる道を真剣に考えてみて欲しい。 これまでは、1)は言わずに、2)だけ言ってきた。で、「クラウド」の中でも、私が知っている「GAEで開発する」ことの楽しさをなるべく具体的に紹介するようにしてきた訳なのであるが、前半も言うことにしました。 その理由は、若い人に早く気づいて欲しいから。年を取ったら駄目、というわけではないが、あるフレームワークになれて、その経験が長くなってくると、進路変更は大変になる。ところが、多くの人が「もはやそのフレームワークは、時代にあっていない」と気づく頃には、そういう「進路変更大変状態」になってしまっていることが多い訳です。 というわけで、明言することに

    もうエンタープライズJavaなんて捨ててしまえ - ひがやすを技術ブログ
    mickn
    mickn 2009/04/30
  • GAE/Jは破壊的イノベーション - ひがやすを技術ブログ

    クラウドはバズワード的で何がいいのか良くわからないという人も多いことでしょう。その感覚は正しい。クラウドという言葉だけだと、意味が広すぎて、焦点がぼける。 例えば、同じように思われているAmazonのEC2とGoogle App Engineは、まったく違うものです。 Amazonのほうは持続的イノベーション、Googleのほうは破壊的イノベーション。 EC2は、過去の技術をそのまま使える(汎用的な仮想化サービス)ので、連続的な技術なのです。 それに対してGAE/Jは、できることをかなり制限して、しかもRDBMSをすててBigTableにのりかえるっていう非連続ぶり。 どっちがいいというものではありません。 クリステンセンのイノベーションのジレンマ-技術革新が巨大企業を滅ぼすときを読むと、マーケットリーダーである優良企業が、なぜ、ずっと成長を続けることができずに、破壊的イノベーションに滅ぼ

    GAE/Jは破壊的イノベーション - ひがやすを技術ブログ
    mickn
    mickn 2009/04/19
  • DRYについてのよくある誤解 - ひがやすを技術ブログ

    WEB+DB PRESS vol.49で、「現場で役立つDRYの基礎知識」が特集されています。とても、良い記事だと思うので、ぜひみなさん、読んでください。 ただ、ちょっと補足をしておきます。 記事の中で、DRYは、「達人プログラマー」の中で、とりあげられ、Railsによって広まったとされています。確かに、Rubyの世界ではそうかもしれないけど、DRY原則というのは、ERモデリング(DOA)の世界では、ずっと「One Fact In One Place」という言葉で知られてきました。 ERモデリングにおける正規化は、「One Fact In One Place」を具体的に実現するための手段です。 DRYという言葉そのものを広めたのは、間違いなくRailsです。しかし、DRYの考え方そのものは、昔からあったし、「One Fact In One Place」という言葉も、昔から有名だったというこ

    DRYについてのよくある誤解 - ひがやすを技術ブログ
    mickn
    mickn 2009/02/23
  • メタプログラミングの光と影 - ひがやすを技術ブログ

    メタプログラミングとはソースコードを生成するプログラミングのことです。メタプログラミングによって生成したソースコードは、eval関数で実行することができます。 メタプログラミングとは、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。 メタプログラミング - Wikipedia だから、eval関数は、手段であり、メタプログラミングそのものではない。これは弾さんが指摘してますね。 evalだけがメタプログラミングの技法ではないし、またevalはその威力ゆえ最後の選択肢とすべきだ。 弾さんのパフォーマンスの指摘に対して、miyagawaさんが、「必ずしもevalが遅いとは限らない」と指摘してますね。 メタプログラミングとevalのベンチマーク - Bulknews::Subt

    メタプログラミングの光と影 - ひがやすを技術ブログ
    mickn
    mickn 2009/02/08
  • 「足元を見ろ」というのは「内向きになれ」って意味じゃないと思うよ - ひがやすを技術ブログ

    私自身は徹底的に「内向き」な言論活動を行っている。 実は、それは師匠の教えに従っているのである。 かつて多田先生に「武道家としてまず心すべきことは何でしょう」と訊いたことがある。 そのとき、長時間のインタビューを終えたあと、月窓寺道場の入り口に私たちは立っていたのだが、先生は沓脱ぎに掲げてある木札をすと指さして「脚下照顧」とおっしゃった。 「足元を見ろ、だよ。内田君」 爾来、私は師のこの言葉を座右の銘としている。 内田さんは、師匠の言葉を間違えて捉えているような気がする。 脚下照顧の意味は、gooによると 自分の足元をよくよく見よという意。もと禅家の語で、他に向かって悟りを追求せず、まず自分の性をよく見つめよという戒めの語。転じて、他に向かって理屈を言う前に、まず自分の足元を見て自分のことをよく反省すべきこと。また、足元に気をつけよの意で、身近なことに気をつけるべきことをいう。 「自分の

    「足元を見ろ」というのは「内向きになれ」って意味じゃないと思うよ - ひがやすを技術ブログ
    mickn
    mickn 2009/01/13
  • シリコンバレー至上主義はどうかと思うよ - ひがやすを技術ブログ

    私のような、外国をゴロゴロしている人間が「アメリカでわ、こうなんだよ・・・」と言うと(=日はダメだね)という意味を暗に指しているとして、「でわのかみ」(ご存知ない若い方のために・・「出羽守」です)と言って嫌われるという現象が昔からあった。 最近は、「リバース型でわのかみ」によく出くわす。わたくしなどが「アメリカでは、こうなんだよ・・・」と言うと、「いや、日でわ、そういうのはダメだね(=「アメリカみたいな後進国とは違うんだよ、日はSUGEEEから」の場合もあるし、「日でわ、旧態依然の人たちが多いからそううまくは行かない、だから今の日ではぶちぶちぶち・・・」という場合もある)。」という返事がよーく返ってくる。 でわのかみ(アメリカでわこうなんだ)もリバース型でわのかみ(日でわ、そういうのはダメだね)も、どっちもいまいちだよね。相手を研究せずに、自分の限られた知識だけで相手をわかった

    シリコンバレー至上主義はどうかと思うよ - ひがやすを技術ブログ
    mickn
    mickn 2008/12/19
  • 「RDBMSの時代の終わりが見えてきた」についてそろそろ一言言っておくか - ひがやすを技術ブログ

    2008-12-12 いくつか誤解を生みそうな表現があるので、それをまずは指摘しましょう。 プログラムモデルとしては、すでにRDBMSからの脱却の準備は始まっています。ORマッピングがそれです。 これが、意図的かはわからないけど、ミスリードを生んでいます。「RDBMSの時代の終わりが見えてきた」というタイトルで、こういう書き方をすると、「ORマッピングによって、すでにRDBMSからの脱却の準備は始まっている」という風に読めるでしょう。これが、ミスリード。 JPAが大切だと思っているのは、永続パラダイムの転換に、コーディングを変えることなく対応できるからです。もちろんJPA+RDBMSのシステムをJPA+非RDBMSに切り替えれるという話ではなく、プログラマのコードの書き方の対応の話です。 これをもう少し、噛み砕くと、JPAのJPQL(SQLもどき)を使えば、SQLとしては統一されていない複

    「RDBMSの時代の終わりが見えてきた」についてそろそろ一言言っておくか - ひがやすを技術ブログ
    mickn
    mickn 2008/12/14
  • Strutsは古代、JSFは近代、現代はRails - ひがやすを技術ブログ

    最近流行の古代、近代、現代パターンで、Webアプリケーションのアーキテクチャを振り返ってみたいと思います。 古代に生まれたStrutsですが、実は結構完成度が高く、WebにおけるMVCパターンは、Strutsでほぼ完成しています。ViewはJSP(Velocityもあり)とタグライブラリで決まり、ControllerもActionで決まり(StrutsそのものもControllerに分類する場合もあり)でしたが、モデルの実装方法は、決定的なものがありませんでした。 実は、モデルには、アプリケーションモデルとドメインモデルがありますが、この辺の考えも明確なものがありません。アプリケーションモデルという言葉は、あまり聞いたことがない方もいるかもしれませんが、SmalltalkのMVCは、既にそうなっているようです。 モデルをデータのみから成るドメインモデルと,アプリケーション固有の情報から成る

    Strutsは古代、JSFは近代、現代はRails - ひがやすを技術ブログ
    mickn
    mickn 2008/07/01
  • アルファギークと学生の討論会 - 速報 - ひがやすを技術ブログ

    以前、IT業界の重鎮に期待せず、アルファギークと学生の討論会はいかがという提案をしたのですが、技術評論社さんのおかげで実現できそうです。 ありがとう、技術評論社さん。 日にちは、9月上旬の土日(たぶん9/6以外)。200名くらい入る場所で検討中とのことです。興味のある方は、予定を空けておいてください。 司会は、弾さんということで交渉中。 で、肝心の討論会なんですが、アルファギーク4人くらいと学生10人くらいの討論会を2時間1セットとして、2セット計画しているそうです。時間をたっぷりとるのはいいんだけど、学生との討論会を2セットやるよりも、もう1セットは、SI業界の重鎮との討論会のほうが面白いと思うんですが、みなさんの意見をお聞かせください。 技術評論社さんの関係者は、ここを見てると思うので、ブクマにコメントしてもらえると技術評論社さんに伝わると思います。たくさん要望のある方は、直接コメント

    アルファギークと学生の討論会 - 速報 - ひがやすを技術ブログ
    mickn
    mickn 2008/06/23
  • 極力ユニットテストを書かずに品質を確保する方法 - ひがやすを技術ブログ

    今日のテストサミットで、できるだけユニットテストを書かずに品質を確保する方法について、ディスカッションします。 やり方を簡単に紹介すると、最初は、Programming First Developmentで、機能を実装して、ユーザに動かしてもらうってことをユーザの要件が固まるまで繰り返します。このときは、基的にユニットテストは書きません。動かすことに集中します。 ユーザの要件が固まった(実装がほとんど終わった)ら、保守のためのドキュメントの一つとして、テストシナリオ(ユースケーステスト)を作って、テストを行います。そのテスト中に、バグが発見されたらその周辺のユニットテストを書いていきます。 これは、「バグは偏在(偏って存在)する」という特徴を利用して、一通り動かした後に見つかったバグの近くをテストしておけば、主なバグはつぶれるだろうという考えです。 これまでは、「ユニットテストは、できる

    極力ユニットテストを書かずに品質を確保する方法 - ひがやすを技術ブログ
    mickn
    mickn 2008/04/23
  • Seasar2でサクサクか炎上か - ひがやすを技術ブログ

    可燃プロジェクトに飛び込むことになりました。下記のような炎上する要素満載。 関係者各社に告知済みのためカットオーバーは伸ばせない 外部仕様を策定した会社は行方不明 外部仕様はあるが、OS も AP サーバも環境もアーキテクチャーも未定 外部仕様を分かる人がいないw 開発は 3 社合同なのにソース管理方式も決まってない DB アーキテクト不在っぽい フレームワークに詳しい人がいない AJAX っぽいのたくさん お金がない、規模はわりとでかい、納期短い、残業禁止、増員不可 最初このエントリを見たとき、4/1だったこともあり、一瞬ネタかなと思ったんですが、その後に、SAStrutsとS2JDBCに対する具体的な質問がいくつもあり、私のほうもできる限り質問に答えました。 その後、どうなったのか気がかりだったんですが、今見たらこんな書き込みが 開発メンバからは、簡単で楽でいい! 1 機能が 1 時間

    Seasar2でサクサクか炎上か - ひがやすを技術ブログ
    mickn
    mickn 2008/04/20
  • メモを取ったほうが良いのか - ひがやすを技術ブログ

    なぜメモを取るのか。 * 記憶は頼りにならない * メモを取ることで、脳を「考えること」に使える * 記憶は共有できないが、メモは共有できる。メモを書くことは、他人と情報を共有することになる。 などです。メモを取ることは、一手間かかるようで、実は非常に効率的なのです。 議事録を書かなければいけないときを除いて、俺は、メモを取らない。なぜかというと、メモを取ることに気が散って、相手のいうことを考えなくなるから。 メモを取ることで、満足しちゃうんだよね。頭を使わなくなる。だから、相手の話を聞くときには、その話に集中し、メモなんか取らないほうが良い。 メモを取ることで、脳を「考えること」に使うってのは、自分にとっては違う気がする。議事録を提出するために、メモを取ったこともあるけど、メモする以外、何も考えられなかったもの。 忘れるのを避けるために、メモを取る人もいるでしょう。でもさぁ、すぐ忘れる話

    メモを取ったほうが良いのか - ひがやすを技術ブログ
    mickn
    mickn 2008/03/16