2013年2月26日火曜日

IntelliJ IDEAでinterfaceの実装クラスに移動する

今日(2013/02/26)の18時までに13時間眠っていたミケです。

IntelliJ IDEAの記事を書きます。

eclipseガチ勢な人は読まないで下さい。

それとeclipseガチ勢なのに、むかついて僕に批判を投げてくる人も読まないで下さい。

しかもeclipseは無料で同じことできるんだよとか、

さも自分は社会一般に貢献してるアピールとか絡めて

批判するような輩ははやくこのタブ閉じて下さい。


今、僕に必要なのは、ガチ勢が求めるような

何が速いとか、何が正しいとか、何が真実かとかいう

ガチ勢のための心の安定剤ではなく、

僕のための自信です。


デバッグでインターフェースにたどり着いてしまったんだけど…


デバッグなどをしていて、

メソッドコールを辿って行ったらインターフェースにたどり着いて\(^o^)/オワタとなる人は多いのではないでしょうか?

eclipseではそのような人のために、

コマンドがあるようです。

Eclipseで例えば↓のようなInterfaceをimplement


一方、その頃IntelliJ IDEAでは…


とりあえず、インターフェースにたどり着いてしまいました。




(実はabstract classでしたが…)


クラスの宣言の横に緑色の下向きの矢印のついたアイコンがあります。

それをクリックすると…





実装クラスの一覧が表示されます。

そのうちの一つを選択します。





実装クラスに移動出来ます。





かなり楽です。

2013年2月21日木曜日

今更Java7のmulti-catchとか… #Java6ネガティブキャンペーン

退院間近のみけです。

気分は落ち込みつつあります。(2週間ごとに波があって、今は下り坂)



Java7のmulti catchとか






まあ、Java7が発表されてから1年以上も経っているので、

今更Java7のmulti catchをIDEでどうすんのか悩んでいる人など

いるわけもないと思いますが…

(普通のIDEはもうJava8まで対応しているので、
今苦労するのはJava8の方だと思っています。)


IntelliJ IDEAはJava6のシンタックスで書いていたコードを

すぐ簡単にJava7っぽく出来ます。


とりあえず、Exceptionとか無視して書いたコード…





とりあえず、try()の部分をどうにかしましょう。

try()のところの赤線の範囲にカーソルを当てて、

⌥ + Enterを押します。





おもむろにAdd Catch Clause(S)を選択します。





なんんか、まだ赤いエラーが残っていますね。

最初の部分をどうにかしちゃいましょう。

factory.createXML…の部分にカーソルをあてて、

また⌥ + Enterを押します。





やっぱり、Add Catch Clause(S)を選択します。





なんか、catchのあたりがドドメ色(どんな色???)になっています。

僕は、IntelliJ IDEAの設定でエラーっぽい箇所をこういう色になるように設定しているから、

こんな色になっていますが、多分何も設定をいじっていない人は、

黄色の波線かなんかが表示されると思います。

(デフォルトはとっくに忘れた)


気持ち悪いのでなんとかしましょう。

catchのあたりにカーソルを合わせて、

またまた⌥ + Enterを押します。





ひとつしか選択肢がないので、あとはわかるな(ry。

Collapse 'catch' blocksを選択します。





あとは良い感じに握りつぶしましょう(ダメ)。





そうそう、メソッドにthrowsをつけるのも、

だいたいおんなじです。

⌥ + Enterやりたいことの順番です。




簡単ですね。


まあ、簡単ですが、eclipseに慣れている人はeclipseの、

netbeansに慣れている人はnetbeansの固有の方法でやればいいと思います。


2013年2月18日月曜日

IntelliJ IDEAでassertThatをimport staticする一番ひどい手段

意識の高いエントリーがありました。みけです。




僕は意識が高くないので…(´・ω・`)


いつもassertThat(hoge, is(foo));ってのを書くときはこんな感じで書いています。

(1) asまで入力




(2) assertで一旦入力補完を完了する。




(3) Thatassertの直後に付け加える。




(4) ⌥ + Enterして、「static import method」を選ぶ。




(5) org.junitAssert.assertThatを選ぶ。




(6) static import された状態。




(7) actual value を入力した後に、 is と入力する。




(8) 変な補完がうざいので、esc を押す。




(9) is に括弧を付けて、括弧の中にカーソルを合わせる。




(10) ⌥ + Enterかまして、 static import method を選ぶ。




(11) Matchers.is を選ぶ(他にもいろいろ使えるMatcher が使えるため)。




(12) static import ができた状態。




(13) expected value を入力する。




(14) おもむろに、⌥ + ⇧ + F10 を押して、テストを実行する。




(15) はい完了。




結論


僕は実はあまりIntelliJ IDEAの設定をしていません。

カレットを行の終わり以降にも置けないようにするとか、
使っていない変数とかクラスとかに対してオレンジ色の背景にするとか、
怪しい式(SuppressUnwarnings)が必要な奴やシンプルにできるやつの背景を紫色にするとか

といった設定しかしていません。

でも、eclなんたらより快適にコーディングできるので、やっぱりIntelliJ IDEA様は素晴らしい。

ついでに言うと、テストでhamcrestとか使うんなら、

groovyのPower Assertを使(ry。

2013年2月17日日曜日

JavaのAST標準について

みけです。

最近はPluggable Annotation Processor APIにハマっています。

ただ、ここで一つの課題に直面しています。

このエントリーでは、僕が今直面していて、どうしてもやっつけたい課題について書いて行きたいと思っています。


JavaのASTの標準仕様?


これは僕が不勉強なのもあるのですが、

JavaでASTを操作する場合の標準AST(Abstract Syntax Tree)のモデルがないような気がします。

もちろん、package com.sun.toolsにはASTの実装がありますし、

Pluggable Annotation Processor APIをいじっているとInterfaceベースでASTを扱うので、

ないとは言えないのですが、

AST解析用にあるだけっぽくて、ASTからクラスファイル生成の標準がないような感じがします。


ASTモデルにあっては、javaファイルをパースしてASTモデルを生成する方向のAST利用シーンと、

自らASTモデルを生成してjavaファイルを生成するという二つの利用目的があるように思います。


Eclipse JDT


一応Eclipse JDTを簡単に調べてみましたが、

Eclなんとかを使用することが大前提のため、

宗教的な理由により却下。


好みは


僕はGroovyっ子なので、GroovyASTTransformationで使われている

package org.codehause.groovy.ast のモデルを使うのが比較的好きです。

このパッケージは非常に洗練されていて、

僕は一日程度で覚えることができました。


だからこのASTモデルを元にして、

javaファイルジェネレーションを実行できたらいいなと思う反面、

このpackage自体を取り出すのが面倒なので、

さて、困った…という状況にあります。


ASTモデル形成後の話


ASTモデルでクラスを組成できたとしても、

それを実際のjavaファイルに出力するには別途出力するエンジンが必要になるかと思っています。

その辺りについてはGroovyのコードをまだ追っていないので、

よくわかっていません。

まあ、結局のところ、勉強不足という事ですね。


Groovy依存を取り除く


また、Javaの標準的なASTの仕組みが欲しいので、

Groovy依存を無くしたいと思っている次第です。

なので、希望としてはJavaのAST標準がJSRあたりで提起されないかな〜

なんて思っています。


考えてもしかたがないので


ありうる形でASTモデルとjavaファイルジェネレーションを分離しつつ、

標準っぽいのを作って行きたいなーと思っています。

で、思っているだけだと

『[発声練習] 「何がわからないか」がわからないをそのままにしておかない技術モドキ』

こういう感じで突っ込まれそうなので、

githubあたりでコードを公開しつつ、

やろうかなと思っているんですが、

イマイチ抽象的な分野なので、

成果がなかなか現れない(´・ω・`)

@SupressWarnings("serialVersionUID")
public class Hoge implements java.io.Serializable {}

この程度でいいので生成できるASTとコードジェネレーションから作っていければいいかな

なんて思います。


今更だから笑えるオレオレフレームワーク

自分のブログに書いても誰もたどり着かないので、ここにも書く(元ネタ1元ネタ2)。

僕は最近夜10時くらいに寝て、2時30分、5時30分に起きるという生活パターンになっています。
(2日連続しただけ…)


@btnrougeさんが荒れてんだが…


というわけで、5時30分に目が覚めた僕は、

レディグレイをいれてTwitterをひらいた。

というのも、iTunesが僕のiPhone4Sに入っている

音楽を消去して同期しようとするから、

「iTunes使いづらくなったな」とツイートしようとしてだな、

まあTwitterを見たわけだ。


ああ、どうでもいいや、そうでなくて、

Twitterを見たら、@btnrougeさんが大暴れしてたんですよ。


曰く





古代、いにしえの話


某前の前の会社にいた時にDWHのリプレースをするという案件があったわけだ。

一応、そのDWHは元々某前の前の会社が作成したもので、

お客様の都合により継続的に開発することを断念したシステムだった。


元々継続的に受注→開発することを想定していたので、

あまりドキュメントが正確ではなかった。

いや、正しく言おう。

ドキュメントが正確に書かれているSIerのプロジェクトなんて
ひとつもありゃしないんだということを。


そして、これもよくあることだが、その初代のDWHを作成する際に、

要求仕様を決めた人っていうのは他の部署に転属していて、

もはやそのDWHで出力される帳票がどういう理屈でデータを集計して、

吐き出しているかを知っている人なんて皆無だった。

まあ、こんなの自社サービスで開発しているプロダクトでなければ、

よっぽどのことがない限り分かる人なんていないわけだよね。


RFPあるある


で、まあ、サーバーとかの耐用年数がアレになったので、

サーバーをリプレースすることになったのだが、

要求を書くことのできる人がいないわけで、

故あってそのDWHを使っているユーザー部門に

人を派遣している某前の前の会社がRFPを書くことになったわけなのです。


で、RFPを書くことになった担当者というのが、

まあ所謂、

娘「パパァ、意識たかい、たかいやってぇ〜」
  パパ「ほうら、意識たかい、たか〜い」


社員で
(別にバカにはしていませんので…
って書くと本当にバカにしているように
受け取られますが、
本当にバカにしていません。
むしろ僕は本当に意識が低いので、
敬意の念を抱くほどです。)

意識高く、要領よく、良い感じのRFPを書いてくれたわけです。


検索条件の画面定義と出力項目の意味と入力データの仕様と運用周りの要求だけ…


どういう業務をやっていて、どういうシチュエーションで、

どういうデータが必要になるか、それはどのデータのどの部分にあるので、

どういう風に集計して欲しいのかという情報は一切なし。


たぶん、そのRFPに書かれていたこと、

およびRFPを書いた人にユーザーが求めていたことは、

次のたった一つの短歌で言い表すことができる。


なるべくね

  はやくやすく

    作ってよ

  今と同じで

    後はよろしく( `・∀・´)ノヨロシク
        (結構字余り)



いわゆる、丸投げですね。





…以下、力尽きた…(元ネタ)


2013年2月16日土曜日

教師は教師である前に、一人の人間である

みけです。

プログラムが全然書けていないので、

一般的な問題を…

私生活のマルクス


マルクスの思想はすごいと思っていますが、

マルクスの人そのものは結構最低だったそうです。

酒場で飲んだくれて、

他の客と口論の末に喧嘩するなどよくあったそうな。


教師は教師である前に、一人の人間である


体罰問題がわんさか出てきていますが、

「体罰があってはいけない」となんだか精神論が語られています。

しかし、彼(=教師)は「体罰があってはいけない」という一般的な理想を前にして

一人の個別の感情をもった人間なのです。


彼は彼なりの考えがあるだろうし、

彼は使いこなせる限りの言葉を以って、

生徒と接してくるかもしれません。


でも、彼にだって欲望はあるだろうし、

欲望を抑えられることもあります。


彼はそうした中で鬱積した欲望を、

低コストで発露できる方法を発見できるかもしれません。


それはタバコであったり、酒であったり、ギャンブルであったり、

字を書くことであったり、素数を数えることであったり、

異性と性交することであったり、暴力であったり。


その一つの例が自分が優位であるという立場から

立場的に下位の者へ暴力を発出してしまう

-- 所謂、体罰とかパワハラとかセクハラとか -- を

見出すかもしれません。


貨幣の魔力


僕の個人的な意見では、

年齢の差がなんであれ、

持っている資産がなんであれ、

一人対一人の個人というのは

対等な関係であると思っています。


そこに、住んでいる土地であるとか、

個人の特殊な技能であるとか、

食料を獲得する手段を持っているとか、

なんだかんだの生存の条件という差が発生します。


詳しいことはここでは省きますが、

教師(持っている知見を与える)と生徒(知見を求める)との間に

上下の関係が発生します。


もちろん、そこには

ある知見が使用価値でない人間(=教師)、

ある知見に使用価値を見出している人間(=生徒)、

という二人の人間の間に

そのものが価値である商品(=貨幣)の授受が発生している

という事実があります。


貨幣の授受が発生していない状態においては、

ある知見が使用価値でない人間(=教師)、

ある知見に使用価値を見出している人間(=生徒)、

前者のほうが圧倒的に優位にあります。


欲望の対象である「ある知見」というのが、

前者にだけしか存していないので。


そして、この関係を維持したまま、

ある知見の授受を成立させる第三者が発生します。

所謂、生徒の保護者です。




2013年2月13日水曜日

finding jobs - 転職活動的な何か

こんにちわ、みけです。

いちおう、個人事業主であまり稼いでないので、

どっかの会社に入ろうとしていますので、

現況を…

エントリー状況


エントリーしているのは下記の会社(会社名は伏せています)

  • ソシャゲー的な会社
    • Javaしかできない僕にPHPの会社がオファーを出しているので、若干びっくりしている
    • 貢献できるとしたら、テストを書くぐらい…
    • ヒルズ勤務
  • Web的な会社
    • 一応Javaのコーディングができそうな感じ
    • プロダクト、テストあたりで貢献できるかな
    • 電車で一本、駅直結傘いらず
  • なんか基盤系的な会社
    • 分散データベースとかのエンジン作ってるらしい
    • JavaのAPIを作るとか、Erlangをいじれそう
    • 駅から遠いのが若干難点
  • クラウド的な会社
    • ある程度はJavaのスキルが生かせるかもしれんが、eclipseを使わざるを得ないので、IntelliJのプラグイン自作しないといかんっぽいな
    • 通勤経路がかなり面倒いけど、勤務時間が比較的緩いので妥協する

ちなみに、僕6時間くらい働くのが、今の精神状態でやっとなので、

その辺を考慮してくれる会社だといいなー。

あとひとつ、六本木駅直結の会社に送ったんだけど、

連絡来てないっす…orz