2011年11月23日水曜日

[JavaScript]リンクのURLクエリをPOSTで送信する



先日、検索 → 一覧 → 詳細 という画面に対して、


  1. 一覧から詳細画面へはリンクをつかって遷移すること
  2. 詳細画面から一覧画面へは「パンくず」リンクを利用して戻れるようにすること
  3. 一覧画面は検索したときの条件で絞り込まれた一覧が表示されること
  4. 詳細画面へのURLに検索条件のURLクエリをつけず、詳細データへのIDのみをクエリにつけること
  5. Cookie(セッション)利用不可

という依頼を受けました。
SEO対策のためにURLに余計なクエリをつけたくないけど、パンくずのフローは辿ってきたフローをちゃんと戻れるようにしたいというのが趣旨でした。
そこでHTMLを生成するときには、ID、検索条件ともにリンクのURLにクエリとして追加しておき、Javascriptを利用して、URLからクエリの一部を抜き取り、リンクをクリックしたときに、それらがPOSTされるようにしました。
書いておけば、後々役に立つかなと思ったので書いてみることにしました。
下がそのサンプルになります。
どちらも同じURLを指定していますが、開く画面は別になるようになっています。

この処理の手順はこんな感じになります。
  1. リンク要素を取得する
  2. リンクのURLをアドレスとクエリにわける
  3. 動的にフォームを生成し、生成したフォームにクエリをhiddenとして追加していく
  4. リンクのhref属性の書き替え
  5. リンククリック時に生成したフォームがsubmitされるようにする

2011年11月3日木曜日

ScalaでSwingレイアウト(GridBagPanel編)

scala.swingでは、レイアウトのクラスとPanelが一つのクラスになっています。
GridBagPanelはGridBagLayoutとJPanelクラスが合わさったクラスです。
GridBagPanelはレイアウトの自由度がかなり高いクラスとなっており、これを利用すれば、おおよその画面レイアウトは実装できてしまうのではないでしょうか?

主な使い方は以下の通りです。
  1. GridBagPanelの基本的な仕組み
  2. GridBagPanelクラスの基本的な利用方法
  3. GridBagPanelの色々なレイアウトオプション

ScalaでSwingレイアウト(BoxPanel編)

ScalaでSwingアプリを作っていたんですが(これまた今更ですが・・・)、Scalaに限らずSwingをやっていて、個人的にいつも困るのがフォームのレイアウトだったりします。
普段はWebプログラマ~な自分からすると、Swingのレイアウトマネージャーって、非常に使いづらい。「そんなんだから Adobe Airに・・・」なんてことが出掛ってしまうぐらい使いづらい。そんなSwingですが、Scalaを利用して実装すると少しはマシになるな~というのを実感する今日この頃なので、少しずつScalaでのSwingの利用方法を紹介できたらなんて思っています。そんでもって、まずはBoxPanelクラスを紹介しようと思います。
Scalaではパネルを設定するのにPanelクラスとレイアウトマネージャがセットになっている以下のクラスを利用するようになっています。

  1. BorderPanel
  2. BoxPanel
  3. FlowPanel
  4. GridBagPanel
  5. GridPanel
その中からBoxPanelを何故最初に紹介するかというと、フォームの右寄せ、上寄せができる数少ない(唯一?)レイアウトマネージャだからです。

  1. BoxPanelを定義し、コンポーネントを配置する方向を指定する
  2. コンポーネントの表示位置を設定する
  3. Swingクラスを利用して、隙間を挿入する

2011年9月25日日曜日

→Pia-no-Jac←のライブに行ったら、買うことをお薦めするグッズ

最近、→Pia-no-JaC← にすっかりはまっており、先日ついにライブに行ってきました。

ライブといえばグッズなわけでして、当然→Pia-no-JaC←のライブでも色々なグッズが売っているわけです。
そんな中から、ライブへ足を運んだ人なら、是非買っておきたいグッズを勝手に紹介しちゃいます。

  1. シャカシャカ大作戦袋(300 円)
    見ての通り、何の変哲もないビニール袋です。
    しかし、→Pia-no-JaC←のライブに参加する皆様は必ず購入することを強くお薦めします。
    この「シャカシャカ大作戦袋」は→Pia-no-JaC←のライブでは恒例となっている(なっていたらしい)セッションコーナーで活躍するアイテムなのです。
    実際、参加者のほとんどが購入しているため、万が一ステージの近くのポジションが取れたのに買ってないってことがあると、ステージの2人に「あれっ」という表情で見られてちょっと恥ずかしい思いをしてしまう可能性大です。
    あと、これはわたしの経験談になるのですが、コンビニのレジ袋は強度が足りません。
    途中で穴開いてしまいます。
  2. タオル(1,000 円)
    こちらは、ライブでは定番の商品かと思います。ネタバレになる(さっきのもそうですが)のですが、→Pia-no-JaC←のライブでは、またまた恒例となっている「タオル回し」コーナーがありまして、タオルもシャカシャカ大作戦袋同様、ライブの必須アイテムの一つとなっております。
  3. ライブDVD
    現在(2011/09/25)行われている最中のツアー限定なんですが、左のDVDがライブ会場で販売されています。
    自分自身これを買ってみて、思ったのですが相当いいです。
    実は、→Pia-no-JaC←のライブDVDをもう1枚もっているのですが、それら2つに限って言わせていただくと実は、CDより音がいいのでは?と密かに思ってます。というわけで、音源としてもかなりいいものなので、今回のものに限らずライブDVDは購入しておくことを強くお薦めします!!
    ちなみに持っているもうひとつのDVDはこちらです。
    PIANO project.
    PIANO project.
    posted with amazlet at 11.09.25
    DAISHI DANCE × →Pia-no-jaC← 樫原伸彦
    urban sound project. (2010-08-04)
    売り上げランキング: 39811

2011年9月24日土曜日

[JavaScript]ブラウザ上でペーストを禁止する

会員登録フォームなどで、メールアドレスを入力させる場合、確認のために同じメールアドレスを2度入力させるのをよく見かけます。

そのような場合、「確認用はコピー&ペーストではなく直接入力でお願いいたします。」などと注意書きが入れてあったりするのですが、こういうった注意書きがある場合でも、実際にはコピー&ペーストできてしまうフォームがあったりします。

そこで、こういったフォームでJavaScriptを利用してコピー&ペースト(Ctrl-c & Ctrl-s)を防止する方法を紹介します。

コピー禁止フォーム:

ペースト禁止フォーム:

2011年9月22日木曜日

→ Pia-no-JaC← のライブに行こう!!

最近すっかりはまっているピアノ&カホンの熱い2人組み「→Pia-no-Jac←」(ピアノジャック)。7月の音霊ライブに続き、横浜での彼らのライブに行ってきました。
→Pia-no-Jac←の単独ライブには初参加ということで、客層や雰囲気はどんななんだろう??なんて不安に思いながら、参加したわけですが・・・・。自分が予想していた雰囲気とは弱冠違いがあったせいかもっと色々な人にライブに参加してほしいな~と思いまして、まあ色々書くことにした次第です。
というわけで、→Pia-no-Jac←(以下ピアノジャック)のライブについて、Q&A形式にしてまとめてみました。

  1. そもそもピアノジャックってどんな感じなの?
  2. 客層はどんな感じですか?
  3. 一人で見に行っても大丈夫?
  4. CD一枚も持っていないけど、大丈夫なの?
  5. 会場の雰囲気はどんな感じなの

2011年9月20日火曜日

[JavaScript]テキストエリアにtitleタグを使って入力例を表示する

JavaScriptを利用して登録フォームのテキストボックスにtitleタグに指定した文字列を入力例として表示する方法を記します。

この処理は

  1. フォーカスが外れたとき
    入力した文字列がないまたは、入力した文字列がtitleタグの入力内容と同じ場合、入力例を表示する
  2. フォーカスされている場合
    入力した文字列がtitleタグの入力内容と異なる場合、入力した文字列を通常のフォント色で表示する
という方法で実現します。

実際の動作は下のようになります。

2011年9月4日日曜日

【読書メモ】日経新聞で鍛えるビジュアル思考力

「記事トレ!」日経新聞で鍛えるビジュアル思考力
板橋 悟
日本経済新聞出版社
売り上げランキング: 5768

~ 新聞なんて読んでどうするの?と言うあなたに ~

本書は、著者が考案した日経新聞の読み方と「ピクト図解」という図解術の解説本です。
この本で特徴的なのは、日経新聞と「ピクト図解」を利用して、ビジネスの勉強をしようという点にあります。

通常の「日経新聞の読み方」系の本は、日経新聞を経済の動向を捉えるための媒体であると定義し、日経新聞に書かれている主要なデータや、記事を通じて経済を把握していきましょうという主旨であることがほとんどです。まあ、"日本経済"新聞なので当然といえばそれまでですが。

しかし、本書では日経新聞のそういった読み方をある意味否定し、変わりに著者が仕事で出会った会社社長たちから聞いた読み方を紹介しています。そして、その読み方を更に深く追求するために「ピクト図解」を用いたビジネス分析の方法を紹介しています。

自分自身が「新聞なんて見てもな~」ニュースとかってテレビやネットでわかるし~という人間だったので、この本を読んで人並みに新聞を読む動機が持てたことが読んでて一番大きかったかな~という気がします。

2011年8月21日日曜日

ScalaのgroupByメソッドを使ってみた

最近Scalaのコレクションクラスに「groupBy」というメソッドがあることを知り、ちょっと使ってみました。
使ってみて改めて画期的なメソッドだな~と感じたのでちょっと紹介いたします。

groupbyメソッドは引数に渡した関数の戻り値をキーにしたマップを作成するメソッドです。同じキーを返した値がマップの値になります。

例として売上げを商品毎にまとめてみます。

2011年8月7日日曜日

AntでScalaをコンパイルする

最近ScalaファイルのコンパイルをAntを利用して行うようにしたので、その方法をメモしておきます。

  1. Scalaコンパイル用タスクの設定
  2. ターゲットの作成

2011年7月22日金曜日

iPod + iTunes が嫌いな5つの理由

最近ブログ更新してなかったから、電気屋に行っていつも思うことを書いてみました。
  1. (iPod nanoの)インタフェースがダサい。
    なんでジョグダイヤル回らないの?カチカチいいながら回らないと楽しくないじゃん
  2. iTunesがiPodと同期することを前提にしたインタフェースである
    iPod + iTunes は基本的に全曲同期をベースに作られているせいなのか、「フォルダへコピペ」ができるiPod以前のWin系MP3プレーヤーに比べると「気分に合わせて入れる曲を選ぶ」をどうやるのか非常にわかりづらいインタフェースになっている。
  3. CD(アルバム)取込み時の分類アルゴリズムがバカ
    洋楽でフィーチャリングしてる曲があると別アーティストとして勝手に分類してしまうので、取り込んだアルバムをアルバム通りの曲順で聞こうと思うと意外な苦労を強いられることがある。
  4. iTunes Store が重すぎて使いづらい
    iTunes Store のトップページに動画広告多すぎて、トップ表示から次の操作が実行されるまでに10秒ぐらいのタイムラグがある。iTunes の問題なのかわからないけど全体的に他の音楽配信サイトに比べて重い
  5. こんだけ使いづらいのに何故かメジャーな地位を獲得している
    電気屋に並んでいるiPod nanoたちを見ていつも心の中でこれを叫んでます。

2011年6月12日日曜日

dabbrevのポップアップにXTAGSの関数リストを追加する

普段XYZZYで開発をしています。
文字補完にdabbrevを利用しているわけですが、dabbrevは表示バッファしか候補リストに表示してくれないので、補完リストに表示させるためだけに編集しないファイルを開いたりしなければいけなくって結構に面倒に感じていました。
関数が補完候補にあがってきてくれればいいので、関数のタグジャンプ機能を利用する際に生成されるファイル(XTAGS)をdabbrev実行時に読み込んで、関数を補完リストに表示させるようにしました。
仕事でつかっているのがPHP4(というか関数しかつかってないPHP)なので、そういった環境での利用を想定しています。

2011年6月11日土曜日

[XYZZYTIPS]PHPDoc風関数コメントとコメントを生成するマクロ

仕事でPHPを利用しているのですが、PHPは型の指定を一切しないのに、PHPDoc用の関数コメントには型を明記しないといけないんですよね。それとインデントをそろえるのが面倒くさくて関数とコメントを生成するマクロを作成してみました。


具体的には、

これはテスト用の関数です。
@test_function param:array:配列 return:string

という入力を
/**
* これはテスト用の関数です。
*
* @param  array  param 配列
* @return string       
*/
function test_function($param) {



}

に変更します。



これは次のような手順で実現しています。

2011年5月10日火曜日

【読書メモ】ザ・ゴール

ザ・ゴール ― 企業の究極の目的とは何か
エリヤフ・ゴールドラット
ダイヤモンド社
売り上げランキング: 459

随分昔に読んで、その時はいい本だけどプロジェクト型である自分の仕事(IT系SIer)では、このノウハウはあまり通用しないかなと思い、そのままにしてありました。
しかし先日「クリティカルチェーン」を読んで、TOC理論がプロジェクト型の仕事に当てはめられていく過程を読みすすめていくうちに、一度シリーズを一から読み直したいという衝動に駆られ、久しぶりに本書を読んでみることにしました。
本書を読んでいて
1.従業員というのは、実は企業の目的というのをあまり理解していないものである。
2.目的への達成度を測定するのに間違った指標、複雑すぎる指標を利用しがちである。
3.物事の本質を抜き出してモデル化すると、その姿は意外なほどシンプルである。
という教訓を得ることができました。

また、「クリティカルチェーン」を読んだあとだったせいか、前回読んだときより本書でのポイントが自分の中にすんなり入ってきてとても読みやすく感じました。

本書で紹介されている具体的な方法論(バッチサイズの変更、ボトルネックのリソースを最大化する方法)などは、工場での製造現場でしか利用できないことなのかもしれませんが、本書で提示されている概念や主人公たちの奮闘する姿勢などはとても参考になりました。ただ概念や姿勢の話などになると、実は次作の「ザ・ゴール2」の中でより詳しく説明されているのでそちらの方がより参考になると思います。
しかし、いきなり2の方を読むよりは本書を導入編と位置づけて一度読んでおいたほうが、理解もより深まるでしょう。

個人的には、小説形式のビジネス本というのはポイントがわかりづらいし、そのポイントにいたるまでの過程にまどろっこしさを感じてしまうのであまり好きではありませが、この本は小説としても楽しく読めました。昨年話題となった「もしドラ」といい、売れるビジネス本というのは、エンターテイメントの要素も必要なんだなと改めて思いました。

2011年5月5日木曜日

【XYZZYTips】タブキー押下時に囲み文字を抜ける

Eclipseだと文字列を書いたりしている場合に、タブキーを押すと文字列(「"」で囲まれた範囲)から抜けることができるのですが、それと似たようなことをXYZZYでもできないだろうかということで、タブキーを押したときに隣にある文字列が囲み文字列(「"」、「'」、「>」)などのときは、カーソルを一つさきにすすめるというマクロを作ってみました。

その数学が戦略を決める

その数学が戦略を決める
イアン・エアーズ
文藝春秋
売り上げランキング: 20404

本書は大量のデータをコンピュータで分析し、それらを利用して物事の判断を行う手法を紹介しています。
本書で紹介している分析方法を大きく二つあり、ひとつは回帰分析、ニューラルネットワークを利用する方法、もうひとつは無作為抽出テストを利用する方法です。特に回帰分析、ニューラルネットワークを利用する方法を「絶対計算」と呼び、本書を通じて語られるキーワードになっています。

本書では、この「絶対計算」が利用されている事例がワインの品質にはじまり、マーケティング、出会い系サイト、医療、映画産業などたくさん登場します。

Amazon、GoogleなどのWebサイトや最近何かと話題のFacebookなどのソーシャル系サイトがこのような技術を利用していることは、知っていましたけど、アメリカではこんなに広い範囲でこのような技術が利用されていると知って驚きました。それにこの本自体が出版されてから時間がたっているので、今ではもっと広い分野で利用されているのでしょう。

しかし、個人的に本書で重要だと思われる部分は、本書で「直感を定量化する手法」として紹介されている平均値と標準偏差を利用して、信頼区間を求めつつ直感を補正するという方法を紹介している部分だと思います。また、ベイズ統計を利用して複合的な確率を正しく扱う方法も大変重要だと思いました。
本書では、個人(消費者)がこのような「統計的手法」を身につけることが重要であり、上記2つの手法は身につけなければならないたくさんの手法のほんの導入にすぎず、多くの勉強が必要だと述べています。
そして、コンピュータがデータを元に判断をする時代になると多くの専門家が不要になる時代が来る。たとえそういう時代になったとしても、人は一切不要になるというわけではなく、求められる役割が違ってくるということも述べられており、これもまた本書の重要な提言の一つだと感じました。

最後に本書を読みながら思ったのですが、「個人情報保護法」は実はあまりいい法律ではないのではないでしょうか?今までは「個人情報は保護されている」という安心感がちまたの詐欺事件の原因になっていると考えていたのですが、本書で紹介されているような手法が社会に浸透することへの妨げになっているのではないかと考えるからです。
まあこのような主張も、本書の著者に言わせると「データによる根拠」が必要なのでしょうが・・・。

2011年4月24日日曜日

振替休日を算出するJavaScriptカレンダー

YUIのJavaScriptカレンダーを日本語化&ポップアップ対応&祝日も表示 - Yahho Calendar [ゼロと無限の間に]というサイトでGoogleカレンダーの祝日情報を取得して、カレンダーポップアップを表示するサンプルが公開されていたのですが、何故かGoogleカレンダーの祝日情報は元旦の振替休日(2012年)しか登録されていないので、振替休日をJavaScript内で算出するように修正してみました。

ここをクリックするとカレンダーが表示されます。
月の祝日を (何も入力しないと今年の祝日を表示します。)

振替休日と国民の休日の算出方法でお悩みの方がいましたら、続きをご覧ください。

2011年4月17日日曜日

ScalaでClassオブジェクトを利用したリフレクション

Scalaでリフレクションというか動的なオブジェクト生成ってどうすればいいのだろうと思っていたら、

Scala: How do I dynamically instantiate an object and invoke a method using reflection?

にサンプルがあったのでメモ。

class Foo {
  def hello(name: String): String = "Hello there, %s".format(name)
}

object FooMain {

  def main(args: Array[String]) {
    val foo  = Class.forName("Foo").newInstance.asInstanceOf[{ def hello(name: String): String }]
    println(foo.hello("Walter")) // prints "Hello there, Walter"
  }
}
この方法を利用すると以前書いたAbstractFactoryのサンプルをこれで書きかえることができるので書きかえてみた。

2011年4月9日土曜日

FPDFのCellを利用した均等割付の方法

FPDFで均等割付をしたかったのですが、色々調べてもFPDFでの均等割付の指定方法が見つからなかったので、仕方なく自分で作ってみました。
最初空白を文字と文字の間に挟むことで、均等割付をしているように見せかけようしたのですが、それだとどうしても文字と文字の間隔がいびつになってしまいました。
そこで、文字をそれぞれ1つのCellに入れて、Cellの幅を調整するようにしたところ、わりとキレイに割付をすることができました。
以下でその方法を簡単に説明します。
※基本的に等幅フォントの利用を前提にしています。

2011年3月23日水曜日

テーブルの一部の列だけソートする

先日、仕事でちょっと変わったJavaScriptのインタフェースを作成したので紹介します。
応募者を面接の枠に割る振ることで、面接時間の設定をするというものだったのですが、
  1. 応募者を面接枠の中にドラッグ&ドロップすることで、割振りをできるようにしたい。
  2. 割り振った応募者を面接表内をドラッグすることで、順番を入れかえられるようにしたい。
  3. キャンセル(応募者を面接枠から外す)ができるようにしたい。
という要望がありました。

下にあるのがこの2つの要望を考慮して作成したプロトタイプになります。
一度ドラッグした応募者は、名前をダブルクリックすることで元に戻すことができます。

このプログラムは以下の2つの部分に分けることができます。
それぞれの詳しい説明を下記に記します。

  1. 一覧(table)から特定の行の情報をドラッグ&ドロップで移動させる。
  2. 一覧(table)内の特定の列のみドラッグによるソートができるようにする。

2011年3月21日月曜日

Ben Folds Five (ベン・フォールズ・ファイブ)の洗礼を受けたあなたに「→Pia-no-jaC←」

まだ自分が高校生だった頃、「Ben Folds Five(ベン・フォールズ・ファイブ)」というバンドがデビューしました。 ピアノ・ベース・ドラムの3ピース(なのに名前はファイブ)で構成された彼らの音楽は、その編成からは想像ができないほど、激しくエモーショナルであり、自分の中のピアノという楽器の概念を根本から変えてしまうほどのインパクトを持っていました。

しかし、そんな彼らの音楽もアルバムを出すたびに丸く(?)なって行き、バンドも解散し、ベンはソロで活動する凡庸なピアノマンの一人になってしまいました。
(※注:あくまで個人の意見です。メロディーの秀逸さなどいいアーティストであることは理解しています。)

あれから10数年がたち、テレビやラジオからも数多の曲が流れましたが、彼らほどの強烈なインパクトを自分に与えてくれるアーティストにはめぐり合う事ができませんでした。「あんな個性的でぶっ飛んだ音楽にはもう出会いないんだろうな・・・」と当時を懐かしむことも一度や二度ではありませんでした。

しかしついに、本当についに、そんな自分を魂ごと揺さぶってくれるようなすごいやつらに巡り合うことができました!!

そいつらの名前は「→Pia-no-jaC←」(※ピアノジャックと読みます)

まあ、何はともあれこの2曲をどうぞ。 組曲『 』:アルバム「First Contact」より

台風:アルバム「風神雷神」より

どうですか?ヤバイでしょ!!スゴイでしょ!! こんなやつらと同じ国に生まれられたことを誇りに思います。

基本的にこのブログでは、こういう趣味的な内容は載せるつもりなかったのですが、あまりの衝撃に紹介せずにはいられませんでした。

ちなみにゲーム好きの方には、この曲もお薦めです。

FINAL FANTASY 「バトル・メドレー」:オムニバスアルバム「Love SQ」より

みなさん、是非、一家に一枚どうぞ!!
(※下のリンクから購入いただけると非常に助かります。)
First Contact
First Contact
posted with amazlet at 11.03.21
→Pia-no-jaC← 樫原伸彦
バウンディ (2008-09-10)
売り上げランキング: 2122
風神雷神
風神雷神
posted with amazlet at 11.03.21
→Pia-no-jaC← 樫原伸彦
バウンディ (2009-07-08)
売り上げランキング: 1709
Love SQ
Love SQ
posted with amazlet at 11.03.21
オムニバス
SMD (2009-11-25)
売り上げランキング: 3773

2011年2月1日火曜日

全米NO1「こころの主治医」が教える なりたいカラダになれる7つのプログラム

~リバウンドしない減量への7つの鍵~

全米NO1「こころの主治医」が教える なりたいカラダになれる7つのプログラム

この本は、ダイエット本です。しかし、この本には特定のエクササイズや料理や特定の道具を使ってやせる方法などは一切かかれていません。

本書は、ダイエットに失敗する理由、成功する理由を心理的側面から分析しダイエットが成功するための「7つの鍵」を紹介します。

本書を際立たせているのは、他のダイエット本のように一定の体型や体重になることを目標としていません。

この本では、目標とする体型や体重になることによって、得られる達成感や自分自身に対する自信といった「感情」を得ることを目標としています。

とは言っても、本書は一応ダイエット本ですので、健康的な体重や体型の目安のようなものは紹介されています。ただ、アメリカ人が書いた本だけあって、日本人の基準より一回り半ぐらい大きく設定されているので注意が必要かもしれません(実際、本書にもそういった注釈が書かれていたりします)。

本書で紹介されている自分の体型、体重を理想的な状態に維持するために必要な「7つの鍵」というのはそれぞれ以下のようなものとなっています。

・第1の鍵「正しい考え方」
・第2の鍵「心の癒し」
・第3の鍵「失敗しない環境」
・第4の鍵「過食と衝動的摂食の克服」
・第5の鍵「手間のかかる栄養価の高い食品」
・第6の鍵「運動」
・第7の鍵「支援者のサークル」

それぞれの鍵にはその鍵の説明と到達度を示す簡単なチェックリストのあとに鍵を開くための方法が説明されています。

本書を読んで強く思ったのが、「健全な魂は健全な肉体に宿るのではなく、健全な魂に健全な肉体が宿るのかな」ということです。

本書で重視されているのは、メンタル、運動、環境のバランスです。そして自分の日々の考え、行動の習慣を修正することでそれが達成できるようになっています。

紹介されているワークのほとんどが非常に簡単で、ちょっとした心がけでできるようになっています。たとえば食べる量を計測する方法として自分の手を利用する方法が紹介されています。

今までダイエットが上手く行かない、成功しても長続きしなかった人などは本書で紹介されているメソッドを試し、「7つの鍵」の扉を開くこと目指してみてはいかがでしょうか?

体重を維持するために必要な「7つの鍵」etc

2011年1月26日水曜日

Scala Swingでデザインパターン[Command]

また昔買った「デザインパターン入門講座」本のサンプルを実装してみました。

こちらのプログラムはCommandパターンのサンプルとして紹介されているプログラムで
  1. 「File」-「Open」からファイル選択ダイアログを開く
  2. 「File」-「Exit」からプログラムを終了する
  3. 「Red」ボタンを押下すると背景が赤になる
という3つの動作を行うだけです。

Java実例プログラムによるデザインパターン入門講座―Swingプログラムで体得する23のパターン

このサンプルを実装してみて思ったのですが、Scalaはこの方法でイベント処理を実装するのに不向きなような気がします。 サンプルで実装されているアクションの実行方法は、

  1. ボタン、メニューのコンポーネントオブジェクトにCommandオブジェクトを保持するためのインタフェースを追加する
  2. コンポーネントにCommandオブジェクトを追加する
  3. イベント発生時にイベントオブジェクトからイベント発生元のコンポーネントを取得する
  4. コンポーネントからコマンドを取り出し実行する

というものなのですが、4.のコンポーネントからコマンドを取り出すには、型キャスト(アンボクシング?)が必要になります。

ジェネリクスによる型認識を徹底的に駆使して、型付言語でありなが型を意識することなく実装していくことを意識して設計されているScalaなのに、型キャストをしなければいけないのはいかがなものかと思ってしまうわけです。

ScalaではScalaなりのアクションの実装方法があるような気がするんですが、それがなんだかは全く検討がつきません。

そのうち気付くかな?でも、そこまで Scala + Swing を追求していこうとも思っていなんですが・・・・。

型キャストはasInstanceOf[T]というメソッドで行うことができます。

実装例は下記のとおりになります。
reactions += {
  case ButtonClicked(a) => a.asInstanceOf[CommandHolder].command.execute
}
本サンプルのソースはこちら

2011年1月20日木曜日

Swingでデザインパターン[Bridge]

「デザインパターン入門講座」本から「Bridge」パターンのサンプルをScalaで実装してみました。 今回は一つのデータを利用して、一般顧客用とエグゼクティブ顧客用の2種類のビューを生成するというものです。 コンポーネント追加用のメソッドを持つ抽象クラスをつくり、それを実装するクラスに委譲の形でコンポーネントを持たせています。

そして、コンポーネントもインタフェースをかませることで抽象度を高くしています。

Java実例プログラムによるデザインパターン入門講座―Swingプログラムで体得する23のパターン

個人的には、コンポーネント追加用の抽象クラスがBorderPanelを継承しているところがちょっと気になりました。 デスクトップアプリ(Swing)以外の方法で表示したくなったときにどうするのかな?と。「そこは、継承より委譲だろ」と思ってしまいました。Swing、デザパタに詳しい人とかはひょっとしたらもっと大きな問題に気付けたりするのかもしれないですが、自分ではこれが精一杯。

今回はまったのがずばりscala.swingパッケージにJTreeのラッパークラスがない!!ということでした。

なんで、JTreeのラッパーだけないんでしょう?実装漏れ?JTreeクラスに何か欠陥があるのか?「こんなコンポーネントいらね~よ」と実装者が思ったのでしょうか?まあ、考えてもしょうがないのですが・・・・。

かなり調べるのに時間がかかってしまったのですが、scala.swing.Componentクラスの中にコンポーネントを委譲させるように実装すれば言いということがわかりました。
実装例は下記の通り
viewportView = new Component {
    override lazy val peer = new JTree(root)
  }

あまりいいサンプルじゃないので、もう一つ

class Tree extends Component {
  override lazy val peer = new JTree(root)
}

遅延評価変数になっているところがミソ?なのかな・・・。

Scala Swing 独特のイベントリスナの実装も割と簡単にできるのですが、それはまた別の機会にということで(知りたい人はコメントとかくれるとありがたいです)。

あと今回、Javaのリフレクション機能を利用して文字列から動的にクラスを生成する方法を色々調べたのですが、結局わからずじまいとなってしまいました。Scalaという言語の特性上、基本的にやらないほうがいい処理なんでしょうか?
ちなみに、コップ本でもプログラム内で生成処理を分岐させて別のクラスの実装を返す方法しか紹介されていませんでした(27章)。

本サンプルのソースとサンプル内で利用したデータファイルはこちら

2011年1月18日火曜日

Scala Swingでデザインパターン[Abstract Factory]

「デザインパターン入門講座」本のAbstract FactoryパターンのサンプルをScalaで実装してみました。 こちらは、左のラジオボタンで選択した庭園の種類に応じて、ボタンを押下したときに右上のパネルに表示される文字列が異なってくるというものです。
ラジオボタンに対応する庭園クラスがあるのですが、それぞれの庭園クラスの親クラスを実装し、イベントアクション内では親クラスを操作するという形になっています。Factoryクラスは直感的だから、そんなに説明も必要ないとは思いますが・・・・

Java実例プログラムによるデザインパターン入門講座―Swingプログラムで体得する23のパターン このサンプルは、特に困ることもなく実装できました。 強いて言うと、GridBagPanelクラスの中で利用するConstraintsオブジェクトをどうやって生成するのだろう?というところで、少しつまづいたぐらいでした。 結局GridBagPanelクラスの中のpairConstraintsメソッドから生成する方法ぐらいしかわかりませんでした。 まあ、こちらのメソッドの利用方法はAPIドキュメントをみればすぐわかると思うので、あえてここでは何も書きません。
本サンプルのソースはこちら

2011年1月15日土曜日

60歳までに1億円つくる術

~ ご飯の炊き方と同じぐらい大事なお金の知識 ~

60歳までに1億円つくる術―25歳ゼロ、30歳100万、40歳600万から始める (幻冬舎新書)

刺激的なタイトルに引かれた皆様、大変申し訳ありませんm(_ _)m 。
本書には、「こうすれば、投資で大もうけ!!」というような目新しい投資方法は何も書かれていません。

私自身そういった内容が書かれている本をたまに本屋で立ち読みしたりするのですが、そういった本に書かれているのは、大抵比較的短期の取引をしてキャピタルゲインで利益を得ようというものが多い気がします。著者はこのような投資方法を「投機」と呼び、このような投資方法をそもそも否定しています。それどころか、個人で特定の企業の株を購入することすら否定しています。

本書で紹介されている「1億円つくる術」といのは、「収入を増やす」、「支出を減らす」、「投資をする」という極めて地味で地道な方法です。しかも30代後半あたりからはじめた場合、本書で紹介されている方法だと「1億円つくる」のはかなり難しくなっています。1億円つくれるのは20代から投資をはじめないとちょっときついかなと思わせる内容となっています。

しかし、だからこそこの本は一読に値する本だなと思います。
本書では
  • 「ローリスク・ハイリターン」はありえない
  • 「コストを下げることは最も確実にリターンを上げる方法である」
  • 人生で取れるリスクの許容限度を把握する

など地に足のついた提言が数多く目につきます。
このような提言から著者の「投資はギャンブルではない」というメッセージや著者の「お金に対する誠実なスタンス」を感じ取ることができます。

また、著者は「お金を一人で抱え込んではいけない」と経済の面から見た投資の大切さについても主張しています。
次にあてはまる方は本書を一読してみてはいかがでしょうか?
  1. 「貯めるのが目的」というような使い道のない貯蓄が100万円以上ある。
  2. 自分の月々の収支を把握するため、家計簿をつけているがいつも続かない。
  3. 自分が加入している保険の内容と金額を正確に把握できていない。
    できたとしても、それぞれの保険に加入している理由を明確に説明えきない。
  4. 投資をはじめたいが、どのような債券、銘柄を購入すれば良いかわからない。 余計なお世話ですが、本書を読んで「将来が不安だから」と無理に生活を切り詰めて貯金ばかりしている若者が、
    正しいお金の知識を身につけ健全にお金を増やしていっていただければと願います。
お金を健全に増やす4つの方法

2011年1月14日金曜日

setterと「_」(アンダースコア)の不思議

ScalaでSwingのプログラムを組もうとして、apiのドキュメントを見ていたら、ちょいちょい「_=」で終わるメソッド名が目についた。

気になって、調べて見たら

Getters and Setters in Scala | The Personal Blog of Dustin Martin

を発見。

一番下のほうに

First, the method name is “age_=”. The underscore is a special character in Scala
and in this case, allows for a space in the method name which essentially makes
the name “age =”.

とあるんだけど訳すと

最初にメソッド名は "age_="となる。アンダースコアはScalaでは特別な文字で、この場合メソッド名に空白を許可し、メソッド名を実質的に "age =" とする

という意味になる。なんとなくこの文章読んで思ったのが
「文字列と"="の間に複数の空白が入ると実はエラーになるのでは」
と思って試してみた。

class SimpleTest {
   var _simpleTest = ""
   def test_=(strTest: String) = {_simpleTest = strTest}
   def test = _simpleTest
}

これを下記のように実行すると

val hoge = new SimpleTest
hoge.test = "Hello" // OK
hoge.test     = "Hello" //OK

という感じでどっちも問題なかった。

表記の仕方からするとエラーになった方が自然なような気がするんだけど、まあ、エラーにされると不便だからいいか。
でも不思議~~。

2011年1月5日水曜日

ナイスの法則

ナイスの法則
ナイスの法則
posted with amazlet at 10.12.14
リンダ・キャプラン セイラー ロビン コヴァル
幻冬舎
売り上げランキング: 517612

~ ナイスのパワーを発揮し、その恩恵を受ける ~

本書は人に優しくしたり、相手を肯定することこそが成功や幸せをもたらすのだと主張し、そのための具体的な方法について書かれています。
ナイスのパワーは、見返りを計算しながら、ただただ笑みを絶やさずに人と交際することでも、みんなの言うとおりにすることでもありません。
それは、知性、美、才能に敬意を払うように、自分自身や他人がもつやさしさに価値を置くことです。

とあるように相手を認めたり、誠意をもって接することで「ナイスのパワー」の恩恵を受けることができると主張しています。

本書を読むと他人と接するときに、自然体であることの大切さ、思いやりを持つことの大切さを「それが正しいことだから」というのではなく、「それが自分と相手の人生を幸せにするものだから」という側面から捉えることができると思います。

日頃の人間関係にちょっと疲れていたり、身の周りの人間との関係を少し改善したいなと思っている方は読んでみてはいかがでしょうか。

ナイスのパワーの恩恵を受ける8つの方法

2011年1月2日日曜日

Scala Swingでデザインパターン[Simple Factory]

ScalaのGUIプログラムの実行方法がわかったところで、今度はもうちょっと複雑なプログラムを組んでみようかな~ということで、昔買ったデザインパターンをSwing or awt なGUIのサンプルを用いて解説している本のサンプルを実装してみました。
こちらのプログラムは画面上部のテキストボックスに名前を入力したら、名前を姓(Last Name)と名(First Name)に分割してそれぞれのテキストボックスに表示するという簡単なプログラムです。
1. 名前を半角空白区切りにすると前が名で後ろが姓
2. 名前をカンマ区切りにすると前が姓で後ろが名

というような分割ルールになっています。

結構簡単なプログラムのはずなんですが、思いのほかはまってしまいました。
はまりポイントは下記の通り