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
}
本サンプルのソースはこちら