2014-05-04

Eclipse のソースコードをリポジトリから clone する

Eclipse のプラグイン開発をしてみようと思い,そもそも Eclipse 自体のソースを読みたくなったのでメモ.

Eclipse のソースの Git リポジトリ一覧は以下にある.

http://git.eclipse.org/c/

例えば UI まわりは eclipse.jdt.ui.git というというプロジェクトがあるので,この Git リポジトリを clone すれば良さそう.
ページの下部に clone するための URI が書いてあるので,コマンドラインベースなら
git clone git://git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git
とする.  Eclipse で clone する方法は別途.

2014-01-12

[murablog] Ruby on Rails アプリケーション事始め

この Blog を自前に置き換えることを目標とする.
サーバーサイドを Java で書くことも考えているが,去年触ってみたものの中途半端になってしまった Rails も触ってみようと思ったので,まず全面的に Rails で書いてみる.
(まず Rails の scaffold ベースの Blog アプリを作る → クラサバを JSON API に書き換える → サーバー側を JSON の Restful API に書き換える…というちょっと無駄な流れ.でもあえてやる.)

で,まずは Article エンティティつくるところまで.



rails new murablog-app


テストフレームワーク変更


で,テストフレームワークは test_unit ではなく RSpec を利用したいので,ライブラリを読み込み,デフォルトのテストフレームワークを変更します.

vim Gemfile
することで Bundler のライブラリ設定が編集できるので,

group :test do
  gem 'rspec'
  gem 'rspec-rails'
end

を追加して,
bundle
を実行.

で,
rails generate rspec:install
をすると rspec の設定ファイルとヘルパーが作られる.

しかし,このままだとrails 上でモデルを作った時に作られるテストコードは unit_test のものなので,デフォルトの設定を変更する.
config/application.rb の,以下の太字の3行を追加する.

module MurablogApp
  class Application < Rails::Application
    config.generators do |g|
      g.test_framework :rspec
    end
  end
end

記事エンティティを作成

おなじみ, scaffold で作成.
rails generate scaffold article title:string content:text posttime:datetime

そして,
rake db:migrate
rails server
を行った後に,ブラウザで以下を開けば OK.
http://localhost:3000/articles/new

ひとまずここまで.


2014-01-05

【JavaFX】Transition クラスで遊んでみる

JavaFX で遊ぶ,第3回目は Transition クラス.

--

今日のサンプルコードはこちら.

結局 Scene Graph とは何なのかというと,ツリー構造を持った GUI のデータ構造のこと.で,そのデータツリーの各要素が Node というクラスで構成されているわけだ.

Node のうち,子要素を持たないものを Leaf Node というのだが,コレの代表が Shape クラスのサブクラスで, javafx.scene.shape パッケージに属している.
これらのコンストラクタは,例えばこんな感じ.
Circle circle = new Circle(200, 2, 80);
Rectangle rectangle = new Rectangle(10, 100, 40, 50);
Arc arc = new Arc(200, 180, 40, 40, 0, 180);
どの型も,まず x 座標と y 座標を指定して,その後,それぞれの型に特有なプロパティを当てはめる感じですね.
--
で,これらの Shape にアニメーションを与えるのが Transition クラスです.
これは,サンプルコードを見てもらったほうが早いのですが,例えば TransrateTransition クラスを見てみます.
Text text1 = new Text("Sandbox");
TranslateTransition moving = 
new TranslateTransition(Duration.seconds(3), text1);
moving.setToX(-40);
moving.setToY(80);
どの Transition クラスも同じなのですが,まずコンストラクタでは Duration インスタンスを設定することで,アニメーションにどれだけの時間をかけるのかを決めています.この例なら3秒です.
コンストラクタの2つ目の引数は任意で,後から setter でセットすることも可能ですが,どの Node にアニメーションを与えるかを決めます.
moving#setToX と moving#setToY は TranslateTransition のメソッドで,どこに Node が移動するかを決定しています.
こんな感じで結構簡単にアニメーションを表現できるので,便利かも?
--
サンプルコードの配色はかなり適当 (目についたものを適当にピックアップしてるだけ)なので,ご容赦を…

2014-01-04

JavaFX にて,ボタンにリスナー登録 (addEventFilter と addEventHandler の違い)

JavaFX いじり,その2です.コンポーネントにイベントリスナーを登録する話.

--

本日のサンプルコードはこちら.

AWT パッケージでいうところの Component は,おおよそ JavaFX での Node というクラスに当たるようです. (だから,多分本当は「コンポーネント」という表現は良くないのかもしれません…)
それで, Node のサブクラスであるそれぞれのコンポーネントを表現するクラスは java.scene 下のパッケージで色々と用意されているようです.

Node#addEventHandler メソッド,及び Node#addEventFilter メソッドでイベントリスナーを登録します.この感覚はおおよそ AWT と変わらなさそうですが, addEventHandler と addEventFilter はどう違うの?ということ.

addEventFilter メソッドの Javadoc には「イベント伝達の capturing phaze」に呼ばれると書いてあり, addEventHandler メソッドの Javadoc には,「イベント伝達の bubbling phaze」に呼ばれると書いてあります.

つまり, Node クラスはツリー構造を持ち,ツリーの親要素から子要素に向かってイベントが伝播してゆくときに呼ばれるのが addEventFilter メソッドで登録されたリスナーであり,そのイベント完了が子要素から親要素に伝播するときに呼ばれるのが addEventHandler メソッドで登録されたリスナー,というようですね.

なので,サンプルコードでは (JDK 8 (Early Access) で書いてあるので注意!)

    button.addEventHandler(MouseEvent.MOUSE_PRESSED,
            e -> System.out.println("Handler 1"));
    button.addEventFilter(MouseEvent.MOUSE_PRESSED,
            e -> System.out.println("Filter 2"));
    button.addEventHandler(MouseEvent.MOUSE_PRESSED,
            e -> System.out.println("Handler 3"));
    button.addEventFilter(MouseEvent.MOUSE_PRESSED,
            e -> System.out.println("Filter 4"));

とボタンにリスナーを登録しているので,コンソールには
    Filter 2
    Filter 4
    Handler 1
    Handler 3
と表示されるわけです.

自分自身,あまり DOM を分かってないのですが, Node の種類を増やしてった後でいろいろ試してみようかと思います.

2014-01-03

JavaFX で Hello World するまで

久々に書きます. Mura-Mi です.
もう何度も,シリーズ化を思わせるような記事を書きつつ1回で終わるようなことをやってきたのですが,懲りずに (半分備忘を兼ねて) 記事書いてみます.

というのも,ちょっとだけ JavaFX を触ってみようかと思ったので,その記録です.
特に大きな理由があったわけではないのですが, 2014 年になり, Java 8 のリリースも3月に控えているということで,ラムダ式とかで遊んでみてたところ,ツイデだし JavaFX もこの正月で触ってみようかな,と思ったまでです.
ちなみに,普段は Java で金融系の業務システム開発に携わってますが,主に計算ロジックだったり,画面開発も社内フレームワークの上でゴニョゴニョする程度です.

--

本日のサンプルコードはこちら.

で, JavaFX で作られるアプリケーションのエントリポイントは, Application というクラスになります.
Application クラスは抽象クラスであり, start(Stage stage) メソッドが抽象メソッドで宣言されています. Application クラスから extends したクラスの start() メソッドで処理を書けば OK となります.
で, Application クラスで宣言されている launch(String... args) メソッドを呼べば start(Stage stage) 処理が動かされます.

サンプルコードを動かしたら,こんな感じになります.


とまぁ,まだまだ API に書いてあることをそのままやっただけですが,今日はここらで.
今度こそ (笑) なるべく続けようと思います


--
さて, Blogger だとソースコードのハイライトとかいろいろうまく行かないので,別のメディアに移行するのも考えてます.
仕事が忙しくなければ,勉強&遊び半分で Blog 自体も自分で作ってみようかな〜,とかも考えている今日このごろ.そのついでに,今年は勉強することを少しはアウトプットすることも習慣としてしまいたいなぁ,と.
それが出来るかどうかも,今年の仕事場が炎上しないことにかかっているのですがね…^^;

2013-05-08

Hibernate のソースや Doc をまじめに読んでみる (1)

以前,見よう見まねで手元で Hibernate を動かしてみようとやってみたのですが,
まじめにちゃんと使いこなそうと思ったので,勉強メモをつけ始めようと思います.
3回くらいで終わってたら察してください.
現時点では, Hibernate 4.1.12.Final を元に記事を書いていきます. Update した時には都度書きます.

ということで,まず本当に基本的なところから.
http://docs.jboss.org/hibernate/orm/4.1/quickstart/en-US/html/ch01.html

tgz ファイルでパッケージをダウンロードし,解凍するとこんなディレクトリ構成になっている.
changelog.txt
documentation
hibernate_logo.gif
lgpl.txt
lib
project
このうち,勿論ソースが入っているのは lib ディレクトリの下.

envers
jpa
optional
required
で,必要最低限必要になるライブラリは required ディレクトリ下に入っている.
jpa ディレクトリの下にあるライブラリが JPA (Java Persistence API) の Hibernate 実装を決めている.
envers はちょっとわからないので省略.
optional っていうのは追加的な機能を利用するときに使うんだろうけど,それもおいおいわかるものでしょう,と.
で,大元に戻って project ディレクトリに行くと,その下にソースとかバイナリファイルがあるわけですね.
で, hibernate-core プロジェクトは,そもそもの Hibernate の API とか hbm.xml のフォーマットなどを決めている.
hibernate-entitymanager プロジェクトが JPA の実装をしている. hibernate-core プロジェクトに依存.
他にもあるけど,ひとまずこの2つが重要そう…

いかん,全然わかってない,っぽい書きっぷり.

2013-03-22

大学に入るまでと,大学に入ったあと

去年まで,名の通った予備校のスタッフとして働いていたんだけど,
そんな去年の3月,受験を1年後に控えた高校2年生40人くらいを前に,僕は最後の勤務を迎えて.
最後に生徒に伝えたことを,改めて書いておこうと.

ひとつは,受験生として1年間「大学の名前にこだわってほしい」こと.
受験が,高校生にとって必要なものかは,僕は当時もわかんなかったし,
いまでも分からない.
受験に注ぐエネルギーで,もっと他のことが出来るかもしれない.
でも,受験を経て,他では得られない経験値を手に入れることもあるだろう.
どっちが偉いでも,かっこいいでもないと思う.
でも,受験をするって決めたんだったら,とことんやってみようよ,と.
受験するって決めて,その受験に一生懸命になれない人が,
他の何かで,力を出し切れるわけがない.
厳しい道でも,自分の決めた目標に,強くこだわって欲しい,と伝えた.

そしてもうひとつ,大学に入ったら「大学の名前にはこだわらないでほしい」こと.
それが,僕が伝えたことだった.
君たちが1年間,もしくは2年間懸命に目指して手に入れた学歴というブランドは,
入った瞬間,意味がなくなるんだと.
今の僕に言わせれば,むしろ自分から良い意味で学歴の壁を崩せば良いとさえ思う.
予備校の職員がこんなことを言って良かったかは今でもわからないけど,
僕はこのことを,高校2年生だった彼らに伝えたかった.

僕は大学生になってから,お寿司屋さんのフロアや,洋服屋さんの店員もやってきた.
きまって,「そんな頭がいいのに,なんでこんなところにいるの?」と言われた.
僕に言わせれば,軽々とフロアの客誘導をするおばちゃんや,
寸分の狂いもなくジーンズを畳むお姉さんの方が,
僕のウン百倍も能力を持った,頭のいい人間だった.

昔の恋人は,志望する大学を共有し,一緒に目指した仲だった.
僕が負けないようについていったのに,気づけば僕が合格し,
彼女は併願した大学に進学することになった.その大学で,あれもこれもそれもと,
千手観音のようにいろんな活動に手を出して,
全部やり切っちゃうようなスーパーウーマンだった.
きっと,社会人になった今もそうだろう.
それでも,僕の前で「あーあ,お前の大学行きたかったなぁ」って,
そんなんじゃなくてもっと上品な口調だったけど,そう言っていた.
なんで僕が合格したんだろうって思ったことばかりだった.

自分が必死こいて入った大学だったけど,
おもいっきり僕を失望させてくれる人間もたくさんいた.
自分が望んだゼミで,提出物も出さなければ遅刻して平気な人間も,
単位の取得に他人の力しかアテに出来ない人間も,
教室をありえないくらい散らかす人間もいた.

関係ないんだ,どれだけ力を注いだとしても,受験でどんだけがんばったかなんて.
受験を頑張った子たちには,そのことに早く気づいて貰いたい.
もちろん,僕のおせっかいなんて関係ない人が,ほとんどだろうけど.
頑張って念願かなった人も,
惜しくも持てる力を発揮しきれなかった人も,
そんなの関係なしで,自分がかっこいいと思う生き方を
すればいいと思うんだよね.
脳ミソは鍛えればどれだけでも強くなるし,
まだ会ったことのない人,見たことのない景色が,世界にはたくさん広がっている.
それを信じて,大学の4年間を自由に過ごしてほしいな,という気持ちを込めて
生徒に話しかけた…つもり.どれだけ伝わったかは知らないけど.

さて,去年面倒見ていた彼らは,どうなったのかな.