タグ

ブックマーク / d.hatena.ne.jp/t_yano (12)

  • 分散コンピューティングの八つの誤信 - 矢野勉のはてな日記

    プログラミングいまや、インターネットはあまねく広がり、いままで何度も喧伝されて来てはバズワードとして去っていた「分散コンピューティング」が、現実のものとして普通に取りざたされる世の中です。でも今よりももっと前、10年以上も前に、「分散コンピューティングの八つの誤信」と呼ばれる、簡潔かつ重要な提言がされていました。一部の人はこの話を今でも覚えていると思いますが、忘れ去られるのも惜しいので、ここに記録しておきます。この提言が生まれた企業はもう既にありません。その会社のマントラは「ネットワークこそがコンピュータだ」でした。 分散コンピューティングの八つの誤信ネットワークは安定している 帯域は無制限だネットワークはセキュア(安全)だトポロジーは変化しない 管理者は一人である 転送コストはゼロだネットワークは均質だ レイテンシはゼロだこれらのひとつであっても、前提にしている分散システムは、欠陥を抱え

  • AnnotationProcessorを利用して楽してintrefaceを徹底活用したプログラミングをしようぜ - 矢野勉のはてな日記

    Java, Advent Calendarこの記事は Java Advent Calendar 2011 の一環で書いてます。詳細はこちらを参照してください。昨日の id:ttmmrr さんの記事はこちら (2012年の公休日とか)JTableのフィルタリング - ttmmrr(@o_tmr)の日記たまたま、いま作ってるプログラムで、Javaプログラマに役立ちそうな部分があったので、その部分を抜き出して公開することにしました。今回はその紹介をしようと思います。 「インタフェースこそが型である」世界Java: The Good Parts というがありまして、その3章において、(私の理解としては)Javaにおいて、型とはインタフェースのことあり、クラスは型に実装を提供するものであり、すべてのクラスはインタフェースを備えるべきだ、とかいう意味の論が展開されてます。インタフェースはクラスから型

  • シェルスクリプトからsshでリモートコマンドを実行する際の注意点 - 矢野勉のはてな日記

    メモ, プログラミングシェルスクリプトからsshで複数のリモートホストにコマンドを投げつける処理を書いてて、いろいろ気がついたことを、あとで自分で調べられるようにメモしておく。 ループからsshでコマンドを投げつけるシェルスクリプトのwhileループ内から、複数のホストへ順番にコマンドを投げつける処理をかいていると、最初のホストにしかコマンドが飛ばない(ループしない)これは、シェルスクリプトのwhileループ自体が、標準入力の読み取りに依存しているのに、sshも標準入力を読み取るのが原因。たとえばこんなループの場合に起きる。 somecommand | while read LINE do ssh user@hostname 'sh yourcommand /dev/null 2>&1 &' done nオプションを付けることで、sshの標準入力が/dev/nullに変わりバックグラウンド

  • Flashをアンインストールすべし - 矢野勉のはてな日記

    要点FlashをアンインストールするとLionのSafariが安定する説明前回の記事 Mac OS X Lionに変えたら不安定になった&対策 - 矢野勉のはてな日記 では、一時的に問題は回復するのだけど、その後また同じ状態になることがあって、困ってました。でも、問題が起きるのは、Lionの「ディスク丸ごと暗号化」機能であるFileVault2をオンにしているMacbook Airだけで、オンにしていないProでは起きてない。落ちるのはSafariが一番多いので、FileVault2とSafariの相性が悪いのかなーと思っていたのだけど、よくよく考えれば、AirにFlashが標準インストールされてない理由でのAppleの(ジョブズの?)言い分が「Safariのクラッシュレポートを解析したら、理由の多くはFlashに起因するものだった。あんな不安定なものをインストールなどしない」という話だっ

  • WicketTesterによるテストでのOutOfMemory対策 - 矢野勉のはてな日記

    WicketWicketではWicketTesterという、自動テスト用にライブラリが標準で搭載されていて、ウェブページやコンポーネント、パネル、という単位で、サーバを起動することなく、UIのテストを行なうことができます。なぜかWicket使いでWicketTesterを使わない人が多い印象があるんですが、とても便利ですよ。画面インタフェースに対してテストを行なうので、内部実装を変えても画面に影響がないことを簡単に確認できます。最近、AjaxがらみのテストもWicketTesterで書くようになり、executeAjaxEvent()を使えばもうたいていはなんでもできるな、ということがよく分かった。この辺のノウハウはそのうちブログに書きたい。もしくはWicket勉強会で。慣れてきたので調子に乗って、画面上にある全選択コンポーネントのすべての組み合わせで、画面上にある全コンポーネントのモデル

  • Wicket 1.5の新イベントシステムを拡張する - 矢野勉のはてな日記

    Java, WicketWicket 1.5 がRC5とか「RCの意味わかってるんすか?」みたいな状態になってますが、1.5で導入されるイベントシステムについて。以前、Wicket勉強会にてイベントシステムの解説を行ったのですが(その時の資料参照)、そのときのサンプルコードでは、次のように、にっくき「instanceof」を使ってイベントペイロードを識別して、処理を分岐していました。 if (event.getPayload() instanceof ImageRefresh) { if (selected) { source = null; selected = false; ImageRefresh imageRefreshPayload = (ImageRefresh) event.getPayload(); imageRefreshPayload.addComponent(this

  • Javaの型パラメータ境界指定を使って型を合成する話 - 矢野勉のはてな日記

    Javaはい。開発者のあいだでAdvent CalendarがはやってるみたいなのでJavaでもやろうという話があり、早速はじめることにしました。Java Advent Calendar -ja 2010 : ATNDほんとは1日からはじめるものらしいんですが、いいじゃないですかそんなこと。5分で考えて5分でかけるものでOK、ということで、最近遊んでた、Javaで型を合成する話を書いてみようと思います。ネタがぱっと思いつかなかった…あらかじめ書いておくと「できるかなと思ったけどやっぱりできなかったね」という話に過ぎませんのでよろしく。戯れ言です。真剣に読むと損します。あと5分で書けませんでした。型合成Javaでインターフェイスをきるとき、メソッドの引数はおおむねすべてインターフェイスになるように設計するのがよいとされているようです。そうしてると「このメソッドの引数はMapだけど、このMap

  • Glassfish v3.1が予想よりもすごかった - 矢野勉のはてな日記

    Java, glassfishこないだ、「Java FX & GlassFish合同勉強会」に参加してきました。個人用にVPSを契約していて、まあ普通にApache HTTP Serverとか入ってたんですが、結局私の使う機能ってほとんどJavaアプリケーションなので、ほとんどのリクエストはAJPでTomcatに転送してたんですよ。httpdはTomcatに転送するためだけにいるような状態。でいろいろ要件があってJMSとか使ったら楽なのに、というケースがあったりで、VPS移設に伴い、httpdを停止して、Glassfish v3に80番ポートを監視させることにしました。Glassfish v3はNIOフレームワークであるGrizzly Kernelベースってことで、スレッド爆発はしなさそうなのと、これはまだ計ってないけど、以前TomcatのNIO Connectorでテストしたときと同じく

  • Wicketのページ用HTMLファイルの場所をアノテーションで指定できるライブラリを作った - 矢野勉のはてな日記

    java, wicketタイトル通り。WicketではHTMLファイルの場所はclassファイルの場所と同じ、ということになっています。クラスパスから読みたくない場合は、Applicationクラス内で ((WebApplicationPath)getResourceSettings().getResourceFinder()).add("任意のパス"); とかすることで、所定のフォルダから読むようにもできるのですが、それでも、ファイルの完全パスがクラスの完全名と同じになる、という点は変わらないので、当に任意の場所から読めるわけでもありません。 しかしデザイナに依頼してHTMLファイルを作ってもらって、それをそのまま使いたい場合に、仮に各ページにHTMLファイルの場所を書かなければいけなくなったとしても、任意の場所にあるHTMLファイルを使いたい!ページごとに細かく指定したい!ということ

  • jMockを使ったテストの実行,あるいは実クラスのモックを作成してテストする方法 - 矢野勉のはてな日記

    Java, Cayenne, jMockjMockの使い方を,いまさらながら調べたのでメモ的に記録しておきます。 ORマッピング・フレームワークであるApache Cayenneでは,多くのORマッパと異なり,データオブジェクト(エンティティ)がインタフェースを使っていません。Cayenneはバイトコード・エンハンスとかを使用しない作りなので,継承関係を用いてデータオブジェクトの機能が提供されてます。で,このデータオブジェクトのテストを実行する際にモックを使いたいのだけど,インタフェースがないからどうしよう,という話がありました。 答えは簡単な話で,ほとんどのモック・ライブラリは実クラスのモック化をサポートしています。今回はjMockを使いました。easyMockでも同じようなことは可能でしょう。pom.xmlへのライブラリの追加次のライブラリをMavenのpom.xmlに追加します。 o

  • mavenセントラルリポジトリから欲しいjarを依存リソースごとまとめて取得するコマンド - 矢野勉のはてな日記

    Java前にmvnbeansってプログラムを作ったのですが,その主要な目的である「mavenリポジトリから依存リソースごとまとめてjarを取得する」ことなら,maven-dependency-pluginでできるじゃん!あほか私は!!と半年くらい前に気がついた。 mvnbeansはあれはあれでライブラリとしての用途もあるのですが,ことjarを取得することに関しては,要はjarがとれればそれでいいので,dependency-pluginを使ったほうが安全確実。かといって毎回欲しいライブラリのpom.xmlを書くのも面倒。なので,シェルスクリプトでコマンド化しました。 #!/bin/bash if [ $# -lt 3 ] then echo "USAGE: groupId artifactId version are required." >&2 exit 1 fi groupId=$1 a

  • FileUploadFieldを使ったアップロード処理が失敗した場合のメッセージキー - 矢野勉のはてな日記

    WicketTwitterでそういう話題がでました。この質問は何回か受けた覚えがあるので書いとくとGoogle検索に引っかかるようになるかな、と思って書いておくことにしました。 WicketでFileUploadFieldを使う場合、サイズの制限をすることができます。デフォルトの設定はIApplicationSettings#setDefaultMaximumUploadSize()で設定可能です。さらに、FormにmaxSizeというプロパティがあって、各FormごとにsetMaxSize()を使って上限サイズを設定することができます。 サイズ上限を超えるファイルをアップロードすると「Upload must be less than xxxx」というメッセージがFeedbackPanelに表示されてエラーになりますが、このメッセージを変更したい、という要望が当然のように上がります。通常、

  • 1