java

Gaborフィルタで画像の特長を抽出してみる

風邪で咳が出てカートを休んだりしてヒマだったので、なんとなく、画像フィルタの処理を書いてみました。 Gaborフィルタというやつで特長抽出してみます。 画像処理 (2) ガボール・フィルタ で、やってみたら、こんな感じで、縦成分とか横成分とか、ななめ成…

ファイルを日付別フォルダに振り分ける

public class DivideToDateFolder { public static void main(String[] args) throws IOException { String dir = "path/to/dir"; Path path = Paths.get(dir); Files.list(path).filter(p -> Files.isRegularFile(p)) .collect(Collectors.groupingBy(p -> …

JJUG CCC 2014 fall「Javaが見るニュータイプの夢」

JJUG CCC 2014 fallでProject Valhalla・Panamaについて話しました。 JJUG CCC 2014 fall Javaが見るニュータイプの夢 from なおき きしだ 時間があまってしまった。がんばってSumatraまで入れたほうがよかったかなー。 終わったあとはぼくと菊田さんのサイ…

「Javaエンジニア養成読本」養成読本

「Javaエンジニア養成読本」でてます。 Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)作者: きしだなおき,のざきひろふみ,吉田真也,菊田洋一,渡辺修司,伊賀敏樹出版社/メーカー: 技術評論社発売日: 2014/11/11メディア: 大…

パーフェクトJava改訂2版

著者の井上さんからいただきました! 改訂2版 パーフェクトJava作者: 井上誠一郎,永井雅人出版社/メーカー: 技術評論社発売日: 2014/11/01メディア: 大型本この商品を含むブログ (4件) を見る 位置づけとしては、ある程度Javaを知っている人が、知識を補完す…

Java最強リファレンス

ソフトバンク編集の方から送っていただきました!なかなかいい本です。というか、これすげー時間かかってそう。 Java最強リファレンス作者: 田中裕一出版社/メーカー: SBクリエイティブ発売日: 2014/10/25メディア: 単行本この商品を含むブログ (1件) を見る…

Java8のラムダで再帰する

宮川さんが、不動点コンビネータを使ってラムダで再帰するエントリ書いてました。 不動点コンビネータを使ってラムダ式で再帰関数を定義する - 宮川拓の日記 型ごとのコンビネータが必要というのは、これはspecializationが導入されるのを待つしかないですね…

StringBuilderを使ったクソコードはどこまで遅いか

※ 4/9 11:25 いろいろ計測しなおしてます。こちらも参照 Javaで文字列連結する場合には+演算子よりもStringBuilderを使うべき、という話があるのですが、よく sb.append("[" + data + "]"); みたいなコードをみかけて、あんまり意味ないなーと思ったりします…

Streamで2つの集計を同時に行う

個数と平均と合計、最大、最小を取るのであれば、標準でできます。 IntSummaryStatistics iss = IntStream.of(2, 5, 7) .summaryStatistics(); System.out.printf("%d %d %.1f%n", iss.getCount(), iss.getSum(), iss.getAverage()); ただ、二乗和とかを取ろ…

Java SE 8でパターンマッチを実装する

Java Advent Calendar 2013の12日目のエントリです。 昨日はtorutkさんでした。 Java Advent Calendar 2013 11日目 - Java SE 8の新クラス・メソッド一覧 - torutkの日記 明日はbitterfoxさんがマニアックな記事を書くんだと思います。 ところでパターンマ…

JavaFXでSeleniumっぽいものを作る

JavaFX、SeleniumのAdvent Calendar11日目です。 JavaFX Advent Calendar 2013 - Adventar Selenium Advent Calendar 2013 - Adventar 両方に対応できるネタとして、JavaFXでSeleniumっぽいものを作ってみました。というか、以前ためしに作ってみたものを、…

CDI1.1でInterceptorを使うときの注意

CDIを使うときに便利なInterceptorですが、なんかJava EE 7のCDI 1.1で試そうと思ったら Enabled interceptor class MyInterceptor in file:/C:/.../beans.xml@7 is neither annotated @Interceptor nor registered through a portable extension という例外…

直列加算と並列加算でdoubleの足し算の結果が変わる話

Javaに限った話ではないのだけど、Javaで並列加算が気軽にできるようになったので、気に留めておいたほうがいい話。 まず、次のようなコードを動かしてみます。 public static void main(String[] args){ double[] data = { 1.234E80, -1.234E80, 2, 3}; Sys…

Java8 Streamではクイックソートが書けない

タイトルは釣りです。 もちろん、汎用ライブラリなので、Streamを使ってクイックソートが書けないわけではありません。 ただ、Streamで完結したままではクイックソートは書けません。Listとの相互変換が必要です。 で、Streamで完結したままクイックソートが…

Java SE 8 lambdaで変わるプログラミングスタイル

JavaOne2013報告会福岡第二段で話したlambdaの資料に加筆して公開しました。 lambdaの詳細な構文は適当に調べてもらうとして、lambdaでどのようにプログラミングスタイルが変わるかということに重点おきました。 追記「用意されたFuncationalInterface」のリ…

今どきのJava Webフレームワークってどうなってるの?

昨日のSeasar2のエントリについたコメントなどで、「とはいえ代わりに何つかうの?」みたいな話が出てたので、とりあえずJava EEのWebフレームワークについて簡単にまとめてみます。 Java SE 8+Java EE 7+lombokで書いていますが、基本的なところはJava SE 7…

Seasar2を新規案件に採用するのはそろそろやめたほうがいい

Seasar2の機能追加停止が宣言されてから、すでに6年弱たっています。 Seasar2.4に対する追加要望があれば、もちろん検討します。ただし、大きな変更や追加はもうないでしょう。 Seasar2の今後のロードマップ 2008-01-29 - ひがやすを blog 後継になる予定だ…

PrimeFacesでラベルやパネルの表示非表示を切り替える

JSFではrendered属性でコンポーネントの表示・非表示を切り替えることができます。 ただ、Ajax動作で、例えばPrimeFacesのチェックボックスやコンボボックスで表示・非表示を切り替えようとすると、単純には切り替えできません。 たとえば、チェックボックス…

Java8のOptionalがモナドになったよ!

Java8にはOptionalクラスが導入されたのですが、5月にエントリを書いた時点ではモナドではありませんでした。 Java8でのプログラムの構造を変えるOptional、ただしモナドではない それが、5月末にどうもソースにモナドに必要なメソッドが追加されたらしいと…

PrimeFacesのファイルダウンロードを条件によってエラーにする

PrimeFacesにはファイルダウンロードのコンポーネントがあって、これは非常に便利なのですが、Ajax動作ができないのでダウンロードすべきデータがないときなどのエラー処理ができません。 そこで、別ボタン経由でダウンロード開始を行ってエラー処理を行うよ…

JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由

lombokは、JavaでのアクセッサやtoString、equalsなどボイラープレートなコードをコンパイル時に生成してくれるライブラリです。 ただ、こういったコードの生成は、IDEを使えば自動で行えるので、わざわざlombokを導入するまでもないと考えることもできます…

WebSocketをネタにJava EE 7正式版を試してみる

Java EE 7がリリースされて、それに対応したGlassFish 4もリリースされました。 ついでに、Java EE 7やGlassFish 4に対応したNetBeans 7.3.1もリリースされています。 ということで、NetBeansとGlassFishを使ってJava EE 7を試してみようと思います。 今回は…

Java8で最もインパクトのある構文拡張、デフォルトメソッド

Java8でのラムダの使い方などを説明してきたのですが、構文拡張自体には触れていなかったので、改めてここで簡単に説明しておこうと思います。 まずは、Java8で実際に最もインパクトがある言語拡張、インタフェースのデフォルトメソッドです。 デフォルトメ…

Java8でのプログラムの構造を変えるOptional、ただしモナドではない

※ 5/29 3:23 追記:なんかモナドになったかも。最下部参照 さて、Java8での拡張をいろいろ見てきたわけですが、ではアプリケーションプログラムでFunctionを受け取るメソッドをがんがん定義するかというとそういうことはあまりなく、フレームワーク的な部分…

Java8で強化されたMapと、書きやすくなったメモ化再帰

Java8のlambda構文の話を書くと、旧来の書き方でいいというコメントがつくのですが、それでも便利になったMapの恩恵を受けることは多いんじゃないかと思います。 ※ 2018/5/31 Java9からはメモ化再帰には使えなくなっています ※ 2019/2/15 なんか問題ない? M…

Java8のlambda構文がどのようにクロージャーではないか

Java8にlambda構文が入りましたが、これはクロージャーではない、とされています。 では、どのように「クロージャーではない」のか、ちょっと見てみます。 まず、lambdaを返すメソッドを定義します。 public static Supplier<String> createMessenger(String name, S</string>…

Java8で体験するオブジェクトと関数の狭間

Java8でlambda構文が導入されることで、Java言語も関数型のような性質をもつことになりました。 関数型の性質として大事なことのひとつに、関数を戻り値として返せるということがあります。lambda構文によって、Javaでも表記上は関数を戻り値として返すこと…

Java8のStreamの目的と書きやすさや可読性、並行処理の効果について

さて、前回Java8のStreamの使い方をざっと見てみたのですけど、はてなブックマークのコメントで「Javaが使われている領域でこんな言語拡張は必要か」「可読性が損なわれていて単なる自己満足ではないか」のようなコメントがついていました。 実際どうなのか…

Java8のStreamを使いこなす

さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基本 まずは、Iter…

Java 8を関数型っぽく使うためのおまじない

やあ、3月に延期になったとはいえ、Java 8リリースが具体化してきましたね。 もうこれで、Lambdaがはずれるとかいうことはなさそうです。 ところで、Java 8で関数型っぽいことができるようになってうれしいのですが、ちょっと記述が冗長です。ということで…