2015/06/07 このエントリーをはてなブックマークに追加 はてなブックマーク - Javaエンジニア養成読本をようやく読んだので感想

Javaエンジニア養成読本をようやく読んだので感想

カテゴリ: ,






2014年の秋ぐらいにたしかJavaエンジニア養成読本という本が出てまして。
僕、すぐポチッと買ったんですよ。共同著者の皆さんに(8割ぐらい)サインまで貰ったんですけど、
ゆっくりゆっくり読んでたら全部読見終えたのが今日という…(激遅)


結論を言うと、以下の人は読みましょう。


・僕と同じぐらいのキャリアの人(2〜3年前後とか)
・Javaの研修は終わったぜー、これからプロジェクトで頑張るぜって人
・ワタシJavaチョットデキル人


Java覚えたての人、Javaを使って仕事しているけどなんだか自分の中に答えを持てない人。
ハッタリで仕事してる人。とか、とにかく一回読んで損はない内容だと思いました。

あと、Androidな人もよんでほしいなー。なんとなくですが。

うっすい本なのですぐ読めますよ!!!


ということで、感想を書いていこうと思います。



2015/06/04 このエントリーをはてなブックマークに追加 はてなブックマーク - JavaエンジニアのためのJavaScript資料を目指して色々

JavaエンジニアのためのJavaScript資料を目指して色々

カテゴリ: , ,








プログラマの中には何故かJavaScriptを避けたがる人がいるように思います。

フロントエンドのマルチブラウザ環境や
変化の早さ、テストの難しさなどを敬遠しているのかなと思っています。

[JavaFX] Why, Where, and How JavaFX Makes Sense

だけど、個人的には言語だけ見るとそんな必要もないなと思うのです。
JavaScriptは素直で便利なやつだと思ってます。


そこで、今回はJavaエンジニアに贈るJavaScriptについて、
という気持ちを込めて記事を書きます笑



2015/05/28 このエントリーをはてなブックマークに追加 はてなブックマーク - Java SEのパッケージを独断と偏見だけで断捨離する

Java SEのパッケージを独断と偏見だけで断捨離する

カテゴリ:








Javaの歴史も20年。
脈々と後方互換が守られてバージョンが上がってるわけですが、
ライブラリも豊富になっていき、覚えることも増えてきている気がします。

だけど、逆に今さら覚えなくても良いものもたくさんあるんじゃないか。
という疑問が浮かんできました。


それに加えて、個人的なことだけど、
Javaの色々を調べるうちにだんだんJavaが分からなくなった。
ので、全体図を俯瞰してみたくなりました。

ということで、Java SE のパッケージを眺めるのが良いかと思い、
それぞれ見ていくことにします。


2015/05/22 このエントリーをはてなブックマークに追加 はてなブックマーク - [Java]いまだにAPTって言葉使ってるの日本人だけっぽい

[Java]いまだにAPTって言葉使ってるの日本人だけっぽい

カテゴリ:










皆さんはAPTって言葉聞いたことありませんか?

Dagger2、Android Annotations、Lombokとかああいったものを使う時に
一緒に使われるシーンがあるようです。


APTって何気なく使っている方が多くて、なんとなくひっかかりました。
APTそのものをちゃんと説明している人は少ないなーって。


2015/04/21 このエントリーをはてなブックマークに追加 はてなブックマーク - Javaのコレクションフレームワークで物足りないならGS Collections使ったほうが良いかもしれない

Javaのコレクションフレームワークで物足りないならGS Collections使ったほうが良いかもしれない







最近ちょっと話題になっているJavaのコレクションフレームワークライブラリである、
Goldman Sachs社のGS Collectionsというライブラリを試してみました。
GS Collections - GitHub



Java Day TokyoやJJUG CCC 2015 Springで僕は興味を持ち始めました。




結論としては題名通り。


2015/04/15 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Javaの仕様が決まるとき】JSRの歩き方(基本編)

【Javaの仕様が決まるとき】JSRの歩き方(基本編)

カテゴリ: , ,




Javaでのプログラミング、特にJava EEを用いたコーディングとかをしていると、
僕は「あれこれってどういう仕様なんだろう」ってなることが結構あります。


2015/04/12 このエントリーをはてなブックマークに追加 はてなブックマーク - 【JJUG】JJUG CCC 2015 Springに参加してきました

【JJUG】JJUG CCC 2015 Springに参加してきました

カテゴリ: , , ,



2015年4月11日に行われたJJUG CCC 2015 Springに参加してきました。

午前中はサボって13時から参加。。。(ごめんなさい)


2015/03/21 このエントリーをはてなブックマークに追加 はてなブックマーク - 【JUnit】出来るの?かもしれない@Aftrer処理をメソッド単位でSkipする方法

【JUnit】出来るの?かもしれない@Aftrer処理をメソッド単位でSkipする方法

カテゴリ: ,





例えば、テストクラスで@Afterな処理があったとして、
どうしてもTestA、B、Cではその後処理が必要なのだけれども
TestEで不要だということありませんか???ありますよね?(多分あんまりない)。

TestEのためだけに@Afterで定義しているメソッドをいじるのはなんだか嫌ですよね



これはテストがNなのに対して@Afterの処理が1なので起こり得る問題なのではないかと思います。
そういう時のためのTipsです。



2015/03/01 このエントリーをはてなブックマークに追加 はてなブックマーク - 続・【Selenium WebDriver】wait処理のCustomConditionを作る

続・【Selenium WebDriver】wait処理のCustomConditionを作る

カテゴリ: ,


http://www.softwaretestingclass.com/what-is-selenium-webdriver-selenium-training-series/より引用


前回に書いた記事の waitのCustomConditionなのですが、微妙な気がしたので書き直しました。



2015/02/08 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Selenium2 WebDriver】マルチブラウザのWebDriverをJUnitから実行する

【Selenium2 WebDriver】マルチブラウザのWebDriverをJUnitから実行する

カテゴリ: , ,



http://www.code-thrill.com/2012/03/selenium-walkthrough.htmlより引用






とりあえずIEとChromeとFirefoxを簡単に動かせる実装をする






・IEとChromeなどのDriver.exeを用意する



ダウンロードはSeleniumのオフィシャルから。



・プロパティファイルを用意する



こんな感じ


#IE
driver.ie.exe=C:\\IEDriverServer.exe
driver.ie.key=webdriver.ie.driver
driver.ie.driverclass=org.openqa.selenium.ie.InternetExplorerDriver

#Chrome
driver.chrome.exe=C:\\chromedriver.exe
driver.chrome.key=webdriver.chrome.driver
driver.chrome.driverclass=org.openqa.selenium.chrome.ChromeDriver

#Firefox
driver.ff.driverclass=org.openqa.selenium.firefox.FirefoxDriver







JUnit4.9から導入された@Ruleを利用して、マルチブラウザ対応をしてみようと思う。
便利ですね。Ruleアノテーション。最近まで全然知らなかったので地味に感動してる。










まずは簡単なRuleクラスとデータの受け渡し用のstaticなクラスを作る。
(誰かデータの受け渡し方にもっと良い方法があれば教えてください)






public class BrowserRule implements MethodRule {
    private final String[] paths;

    public BrowserRule(String... paths) {
        this.paths = paths;
    }

    public Statement apply(final Statement base, FrameworkMethod method, Object target) {

        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                for (String path :  paths) {
                    ModeContext.setBrowserName(path);
                    base.evaluate();
                }
            }
        };
    }
}


public class ModeContext {

    private static String browserName;
    private ModeContext () {}
    
    public static void setBrowserName(String name) {
        browserName = name;
    }
    
    public static String getBrowserName() {
        return browserName;
    }
}





呼び出し側はこんな感じで@Ruleをつけてコンストラクタ引数に任意のブラウザ名を渡すだけ。
keyのバインドがダサいなぁ。。。。

Firefoxに関しては、Systemプロパティの設定が不要らしい。普通に動く。
(ブラウザの設定を変えたりするにはプロファイルの設定とか必要だったりするらしい。)





public class HogeHogeTest {

    @Rule
    public BrowserRule browserRule = new BrowserRule("ie"); // ie
    //public BrowserRule browserRule = new BrowserRule("chrome"); chrome
    //public BrowserRule browserRule = new BrowserRule("ff"); firefox
    //public BrowserRule browserRule = new BrowserRule("ie","chrome","ff"); これもできる

    public WebDriver driver;


    @Before
    public void startUpClass() throws Exception {
        Properties prop = loadProperties();
        final String browser = ModeContext.getBrowserName();
        final String[] PROP_KEYS = new String[] { "driver." + browser + ".exe", "driver." + browser + ".key", "driver." + browser + ".driverclass"};
        if(!browser.equals("ff")) {
            Path path = Paths.get(prop.getProperty(PROP_KEYS[0]));
            System.setProperty(prop.getProperty(PROP_KEYS[1]), path.toAbsolutePath().toString());
        }
        Class<?> clazz = Class.forName(prop.getProperty(PROP_KEYS[2]));
        driver = (WebDriver) clazz.newInstance();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
        driver.manage().timeouts().setScriptTimeout(3, TimeUnit.MINUTES);
        driver.get("http://localhost:8080/hogehoge");
    }

    private Properties loadProperties() {
        try {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            Properties prop = new Properties();
            prop.load(loader.getResourceAsStream("DriverSetting.properties"));
            return prop;
        } catch (IOException e) {
            throw new IllegalStateException("failed load DriverSetting.properties ", e);
        }
    }
}















ここまで作るのだけならとても簡単です。
ただ、ここから実際に複数のブラウザでテストを実行すると
テストが赤くなりまくりますね。ブラウザの差異があるのでどうしてもそうなってしまう。
差異とは、画面描画時の位置が微妙に変わりElementNotBisibleExceptionが発生したりとか
そういうことです。そのほかにもブラウザ特有のものとか、、、きっとあるでしょう。



やるなら、はじめに1つのブラウザから始めることを推奨します。
その後マルチブラウザ対応というのが良いのではないでしょうか。















2015/01/30 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Selenium2】WebDriverでハマったところとかTips8選

【Selenium2】WebDriverでハマったところとかTips8選

カテゴリ: ,


http://www.softwaretestingclass.com/what-is-selenium-webdriver-selenium-training-series/より引用








最近、Selenium WebDrvierを利用する機会を得ている。


自動テストはやはり便利。打鍵やるのはバカらしいなって気分になる。
ただ、あんまり難しいことしようとするとどうしても作りこみが必要。


GebというWebDriverのラッパーがかゆいところに手が届く感じらしいので、
次回は検討しようかなぁ。

参考
脱・独自改造! GebでWebDriverをもっとシンプルに


使い始めて感じたことやTIPSをメモがてら残しておこうと思う。


2014/12/08 このエントリーをはてなブックマークに追加 はてなブックマーク - 別のプログラミング言語を使うということ #ktac2014

別のプログラミング言語を使うということ #ktac2014

カテゴリ: ,





こちらは、Kotlinアドベントカレンダーの8日目の記事です。





 はじめに



達人プログラマーの本では
「毎年、新たなプログラミング言語を1つは学ぶこと」と言っています。
その言葉がきっかけというわけではありませんでしたが、
結果的にKotlinを介して、その通りの経験を僕はしました。



2014/12/05 このエントリーをはてなブックマークに追加 はてなブックマーク - マジ感謝ないろふさんに俺のライムを送る

マジ感謝ないろふさんに俺のライムを送る



この記事はいろふアドベントカレンダーの5日目です。


ゆとりさんに圧力をかけられて書いています。

というのは嘘で、ほとんどいろふさんには縁もゆかりもないのですが、書きたいと思い書いています!



いろふさんとの接点と言えば、
関西Kotlin勉強会でjavapに関してツッコミをいただいたのと





先月のJJUG CCC Fallでサインをいただいたぐらいです。







2014/11/17 このエントリーをはてなブックマークに追加 はてなブックマーク - JJUG CCC 2014 Fallに参加してきました #jjug_ccc

JJUG CCC 2014 Fallに参加してきました #jjug_ccc

カテゴリ: , , ,




JJUGサイトより引用






JJUG CCC 2014 Fallに参加させていただきました。


各セッションの詳細に関しては@YujiSoftwareさんの以下のエントリが分かりやすくまとまっています。
地平線に行く- JJUG CCC 2014 Fall ( #jjug_ccc ) - セッション資料の一覧



その他にもすでにレポート記事を書いてくださっている方多数です。


Challenge Java EE !- JJUG CCC 2014 Fallで感じたJavaの熱気
mike-neckのブログ- UG CCC 2014 Fallに行ってきた #jjug_ccc #jjug
この国では犬がコードを書いています- JJUG CCC 2014 Fall のメモ #jjug_ccc
きしだのはてな- [java]JJUG CCC 2014 fall「Javaが見るニュータイプの夢」
torutkの日記- [Java]JJUG CCC 2014 Fallにちょっとだけ参加
susumuis Info- JJUG CCC 2014 Fall ( #jjug_ccc )に参加して来ました

おそらく、今のところこんなかんじです。土曜日の出来事をすでにこんなにたくさんの人が書いてるとは。。。!





参加してないものを書いても仕方ないので、
参加したセッションやハンズオンを中心に何がすごいか、実際に現地で何が起こっていたかを伝えたいと思います。









2014/11/03 このエントリーをはてなブックマークに追加 はてなブックマーク - 【PrimeFaces】FileUploadのCancelActionSelectorのIEバグをfixする

【PrimeFaces】FileUploadのCancelActionSelectorのIEバグをfixする

カテゴリ: , ,








PrimeFacesには、IE上で動かないバグが結構あります。
原因としてはJavaScriptでうまくいかない事がほぼなのですが、
結構困ります。


僕がハマってしまって一応解決した事を書いていこうと思います。


今回は、FileUpload部品でIEのみスクリプトエラーが出てしまう事象の解決方法を書いていきます。
















【社内ニートJavaプログラマに捧げる】Closed環境での暇のつぶし方

カテゴリ:



仕事しないで時間をつぶすなんて、やってはいけません。
他のチームメンバーやリーダーに「何か手伝う事はありませんか?」と聞くなり、
前倒しして、作業を進めていくのが社会人たる基本です。



ただ、どうしても、プロジェクトで やる気の無い 暇な時というのはおとずれます。
そんな時にインターネットにもつながらない。何もやる事が無い!そんなあなたに送るエントリです。




・"JDK_HOME/bin"のパスが通っている事を前提とします。

















2014/10/31 このエントリーをはてなブックマークに追加 はてなブックマーク - 【そんなBigDecimalで大丈夫か】Javaシステムの計算処理について

【そんなBigDecimalで大丈夫か】Javaシステムの計算処理について

カテゴリ: ,





Twitterの話題に乗っかって、内容をまとめてみようと思います。


私自身の考えではなく、様々な意見を整理したいなという試みです。僕には知識はありません。
B○zzNews並みに頑張ろうと思います。





基本的に、Javaを中心として、その周辺についても少し触れるぐらいのアプローチで書こうと思います。
ポイントとしては、以下の3点です。
※無意識に利用している部分(基礎的で普段意識しないところ)ではありますが、とても重要な話です。

1.Javaではあたり前のように計算処理にはBigDecimalが使われている
2.ではなぜ、BigDecimalではないといけないのか
3.どういった計算ならBigDecimalを利用するのか/利用しないのか



※本記事は演算誤差についてあまり厳密に的確な内容ではない可能性があります。
Java内の演算処理方法としてベターな方向の提示を目的としていますが、「誤差」や「精度」などに関して、
誤解を招く可能性があり、申し訳ないです。
BigDecimal以外もそうですが、100%誤差の無いものではなく、 それぞれの言語仕様、型仕様、小数点数方式、有効桁数、実行環境etc...によって精度は変わってくるという認識です。


精度などについては言及せず、以下のURL参照という形でお願いします。


参考:浮動小数点数の限界
BigDecimal 基本編
Javaプログラマーのためのjava.math.BigDecimalまとめ












2014/10/24 このエントリーをはてなブックマークに追加 はてなブックマーク - 【PrimeFaces】JSF + PrimeFaces環境でjQueryを使いたい

【PrimeFaces】JSF + PrimeFaces環境でjQueryを使いたい

カテゴリ: , , , ,








最近、JavaEE環境でJSF2.xとPrimeFacesを触る事が増えてきましたので、
これからそういった構成でシステムを構築する方のために記録として書いておきます。
先に釘を刺しておきますが、JSF環境ではJavaScriptを多用する事はオススメしません。



   JSF



JSFはJavaEE標準機能のモジュールドリブンなMVCフレームワークです。
JSF2系になり、かなり実用性が増していると思います。
JSF1.xのバージョンではxmlベースでのマッピングであるのに対し、
2系ではアノテーションベースで簡易に関連付けが出来るようになっています。




    PrimeFaces



PrimeFacesはJSFを前提にして、リッチなUIライブラリを提供するものです。
基本的にJSFのタグライブラリを全てラップするような形でPrimeFacesのタグライブラリが作られています。
PrimeFacesのjarの内部には関連するJavaクラスとjs、cssが内包されています。
JavaScriptでは内部的にjQueryが利用されています。



多分、説明するより、ソースを見た方が早いですね。
GitHubにソースが上がっています。META-INF内にJsファイルは格納されています。
GitHub - primefaces/primefaces

独自にjQueryのjsファイルをダウンロードしてきて、xhtml上から読み込もうとすると、
conflict(衝突)します。
では、どうしたらいいのでしょう。









2014/10/20 このエントリーをはてなブックマークに追加 はてなブックマーク - 【JavaOne】JavaOne 2014 サンフランシスコ報告会 Tokyoに参加させていただきました #j1jp

【JavaOne】JavaOne 2014 サンフランシスコ報告会 Tokyoに参加させていただきました #j1jp

カテゴリ: , ,




毎年行われており、今年で19回目を迎えるJavaOneの報告会、
JavaOne 2014 サンフランシスコ報告会 Tokyoに参加してきました。


togetterはこちら - 2014/10/18(#j1jp)JavaOne 2014 サンフランシスコ報告会 Tokyo

もうすでに、皆さん詳しく書かれています。



関連レポート
・きくたろーさん
JavaOne 2014 サンフランシスコ報告会 Tokyoに参加しました #j1jp
・みけさん
JavaOne2014報告会Tokyoに参加してきた #j1jp
・のた犬 (id:notainu)さん
のた犬のうまい猫めし
・yuji0316さん
Yuji Blog


発表者の実際の現地レポート的なものもみつけました
JavaOne 2014 SF レポート集



発表スライド等はすでにweb上に上がっていますので、直接僕が話を聞いた中で印象的だったところ、
スライドからは読み取りにくいところを中心に書いていこうと思います。

では、発表を順々に振り返っていこうと思います。








2014/08/19 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Glassfish4】EclipseからGlassfishが起動出来ない(サーバーアダプターが見つからない)

【Glassfish4】EclipseからGlassfishが起動出来ない(サーバーアダプターが見つからない)

カテゴリ: , ,




Glassfish4をEcllipseから起動しようしても、サーバーアダプターが現れてくれない。



  • Eclipse Luna
  • Glassfish4
  • マーケットプレースより、Glassfish4.xプラグイン導入済み



  • EclipseにGlassfish4対応のプラグインをインストールしたはずなのに、
    サーバのビューで新規サーバを立てようとしても、Glassfishサーバが候補として出てこない。
    プラグインが丸々インストールされていないかのように見える。




  • EclipseをJava7で起動する

  • 具体的にはこんな感じ。
    eclipse.exe -clean -vm "{JAVA_HOME}/bin/javaw.exe"


    Java6とか複数のJavaバージョンが混在している場合に起こる可能性のある問題。
    明示的にvmを指定するのが最も平和的な解決な気がする。



  • Glassfish4はJava7以上でしか動かないよ
  • EclipseもJava7以上で起動しないとGlassfish4がガン無視されるよ
  • Java7以外のランタイム環境を全てアンインストールするのも方法としてあるけど、 Eclipse起動時にvm指定した方が平和的
  • vmオプションはeclipse.iniに書いても良いと思う









  • GA