タグ

ブックマーク / nowokay.hatenablog.com (56)

  • jpackageでJavaアプリのインストーラーを作る - きしだのHatena

    Javaアプリケーションのインストールパッケージを作れるjpackageが、どうもJDK13に入りそうな勢いでEarly Accessが出てたので試してみます。 jpackageは、JavaFXにあったjpackagerをベースにしたパッケージングツールです。 JEP 343: Packaging Tool EAはこちらからダウンロードできます。開発中のJDK13をベースにしてると書いてありますね。 jpackage ※12/8追記 Java 14でincubatorモジュールとして含まれることになりました。 Windowsで必要なもの Windowsでインストーラーを作るには、iscc.exeが必要で、これはInno Setupに入ってます。 jrsoftware.org // Jordan Russell's Software ※12/8追記 Java 14では不要になったようです あ

    jpackageでJavaアプリのインストーラーを作る - きしだのHatena
    Nagise
    Nagise 2019/03/07
  • 新しいリリースモデルはJavaを使う人 全員要注目だった - きしだのHatena

    9月の頭くらいに、Javaのリリースモデルが6ヶ月ごとの短期リリースになるということが発表されてました。 で、「へぇ〜」みたいな感じで見てたのですけど、JavaOneでの話を聞くと、これ結構大変なのかも、ということになってそうなので、ちょっとまとめてみます。 追記:2018年05月の状況をQiitaでまとめています。 [Javaのサポートについてのまとめ2018 - Qiita](https://qiita.com/nowokay/items/edb5c5df4dbfc4a99ffb) Javaの新しいリリースモデル 公式情報はこちらにまとめられています。(10/4にアップデートされてます) http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html ざっくり言えば、6ヶ月ごとに機能リリースを行い、3ヶ月ごとにメンテナンス/セキ

    新しいリリースモデルはJavaを使う人 全員要注目だった - きしだのHatena
    Nagise
    Nagise 2017/10/07
  • Java8時代の文字列連結まとめ - きしだのHatena

    文字列の配列やリストを[〜]で囲ってカンマで区切って連結するという話、String.joinだとどう?とwatermintさんから指摘があったので、試してみました。 シンプル! public static String stringJoin(){ return "[" + String.join("],[", strarray) + "]"; } でも、1847msでした。改めて前後の文字を文字列連結してるところで時間かかってる感じ。 で、昨日のStringBuilder版はもう少し最適化できるので書き直します。 public static String stringBuilderJoin(){ StringBuilder s = new StringBuilder("["); for(int i = 0; i < strarray.length; ++i){ if(i != 0){ s.

    Java8時代の文字列連結まとめ - きしだのHatena
    Nagise
    Nagise 2014/04/09
    GJ
  • Java8の型推論でハマりまくった話 - きしだのHatena

    個人の日記レベルですんません、現象のみ。 書いてるコードに関しては型指定してあげれば解決したのだけど、再現させるのに苦労した。 まず、インタフェースを2つ用意。 interface A{} interface B{} それから、その両方を実装したクラスをふたつ用意 static class C implements A,B{} static class D implements A,B{} 片方だけ実装したクラスもふたつ用意 static class E implements A{} static class F implements A{} そんで、同じ型を継承してGでくるんだものを複数とって、共通の基底クラスをGでくるんだものとして返すメソッドを定義。 ※この文章では、実装したインタフェースも基底クラスと表現します。 static <T> G<T> o(G<? extends T>..

    Java8の型推論でハマりまくった話 - きしだのHatena
  • Java8には型推論があるので型指定不要で変数が使えますよ - きしだのHatena

    Javaプログラマのみなさんは、Javaは型推論がないから変数の型指定をしなくていけなくてダサい、などとイジメられた経験があると思います。 おかあさんに型推論をねだるとGroovyをわたされたり、おとうさんに型推論をねだるとScalaがやってきたり、プレステが欲しいって言ったのにWiiやXboxを買い渡される感を味わった人も多いのではないでしょうか。 そんな良い子のJavaプログラマのために、今年はサンタが素敵なプレゼントを持ってきてくれましたよ。 同じ型を書くのがダサい たとえばウィンドウを出してボタンを押したらメッセージが表示されるサンプルを書くとこんな感じになりますね。 public static void main(String... args){ JFrame f = new JFrame("テスト"); JButton b = new JButton("押して"); JText

    Java8には型推論があるので型指定不要で変数が使えますよ - きしだのHatena
  • 今どきのJava Webフレームワークってどうなってるの? - きしだのHatena

    昨日のSeasar2のエントリについたコメントなどで、「とはいえ代わりに何つかうの?」みたいな話が出てたので、とりあえずJava EEのWebフレームワークについて簡単にまとめてみます。 Java SE 8+Java EE 7+lombokで書いていますが、基的なところはJava SE 7+Java EE 6でも大丈夫です。 なので、今どきとは書いてますが、基的には2009年12月のJava EE 6ということで、実はすでに4年近くたってます。 何も考えてない なんも難しいこと考えないなら、やっぱJSPが楽ですよね。 なんでも書けちゃう。 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content=

    今どきのJava Webフレームワークってどうなってるの? - きしだのHatena
    Nagise
    Nagise 2013/11/08
  • 関数を扱えることはどのようにプログラミング言語の能力をあげるか - きしだのHatena

    Java8で関数が値として扱えるようになりました。 このことが、「関数が渡せると便利だよね」という観点ではなく、プログラミング言語としての能力をどのようにあげるか考えてみます。 圏論からのテクニックが使いやすくなる 集合論はどちらかというと値にたいする理論でしたが、圏論は関数呼び出しに関する理論です。 プログラムには、関数呼び出しを連結させて値を変換していくという側面があります。 そのような関数呼び出しの扱い方を整理するのが圏論で、圏論の考え方を使うことでより安定したプログラムを書くことができます。 モナドなど圏論由来のテクニックを使うには、どうしても関数を値として扱う必要があります。 関数を値として扱うことで、圏論のテクニックが使いやすくなり、安定したプログラムの書きやすさにつながります。 型の証明能力があがる 動的な型付の言語にくらべて、静的な型付の言語はプログラムが間違いにくいといわ

    関数を扱えることはどのようにプログラミング言語の能力をあげるか - きしだのHatena
    Nagise
    Nagise 2013/08/08
  • Java8で最もインパクトのある構文拡張、デフォルトメソッド - きしだのHatena

    Java8でのラムダの使い方などを説明してきたのですが、構文拡張自体には触れていなかったので、改めてここで簡単に説明しておこうと思います。 まずは、Java8で実際に最もインパクトがある言語拡張、インタフェースのデフォルトメソッドです。 デフォルトメソッドとデフォルト実装 いままでインタフェースには実装をもつことができませんでしたが、Java 8からはインタフェースが実装をもてるようになります。 実装をもつメソッドを定義するときには、キーワードdefaultをメソッドの前につけます。 interface Foo{ void print(String s); default void twice(String s){ print(s); print(s); } } twiceメソッドが実装をもっています。この実装をデフォルト実装といいます。 デフォルトメソッドを実装するクラスで、デフォルトメ

    Java8で最もインパクトのある構文拡張、デフォルトメソッド - きしだのHatena
    Nagise
    Nagise 2013/06/11
  • Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena

    Java8のlambda構文の話を書くと、旧来の書き方でいいというコメントがつくのですが、それでも便利になったMapの恩恵を受けることは多いんじゃないかと思います。 ※ 2018/5/31 Java9からはメモ化再帰には使えなくなっています ※ 2019/2/15 なんか問題ない? Mapには、lambda式を使ったメソッドが多く追加されていますが、たとえばgetOrDefaultメソッドのようなlambda式を使わないメソッドも追加されていて、これも便利です。 そして、このようなlambda式を使わないメソッドも、間接的にはlambda構文サポートでの言語拡張のおかげです。 Mapはインタフェースなので、Java7までの構文でメソッドを追加しようとすると、Mapを実装しているすべてのクラスに新しいメソッドの実装を追加する必要がありました。そしてそれは現実的に不可能なので、今までMapなど

    Java8で強化されたMapと、書きやすくなったメモ化再帰 - きしだのHatena
    Nagise
    Nagise 2013/05/24
  • Java8のlambda構文がどのようにクロージャーではないか - きしだのHatena

    Java8にlambda構文が入りましたが、これはクロージャーではない、とされています。 では、どのように「クロージャーではない」のか、ちょっと見てみます。 まず、lambdaを返すメソッドを定義します。 public static Supplier<String> createMessenger(String name, String address){ return () -> { return String.format("私は%s、%sに住んでる", name, address); }; } 呼び出すと、こんな感じでSupplierを受け取ります。 Supplier<String> messenger = createMessenger("きしだ", "ふくおか"); このSupplierを実行すると、次のようになります。 System.out.println(messenger.

    Java8のlambda構文がどのようにクロージャーではないか - きしだのHatena
    Nagise
    Nagise 2013/05/22
    クロージャの定義の議論はだいたいいつも紛糾してる気がする
  • Java 8を関数型っぽく使うためのおまじない - きしだのHatena

    やあ、3月に延期になったとはいえ、Java 8リリースが具体化してきましたね。 もうこれで、Lambdaがはずれるとかいうことはなさそうです。 ところで、Java 8で関数型っぽいことができるようになってうれしいのですが、ちょっと記述が冗長です。ということで、短く書けるおまじない考えてみました。 Function型 さて、まずはJava 8で標準で入ったFunction型をみてみましょう。パッケージ名まで含めるとjava.util.funciton.Functionです。 こんな感じで使います。 Function<String, String> enclose = s -> "[" + s + "]"; Genericsでの型指定の最初が引数、あとが戻り値の型です。ここではStringをとってStringを返す関数としてencloseを定義しています。 これを呼び出そうとすると、こんな感じ

    Java 8を関数型っぽく使うためのおまじない - きしだのHatena
    Nagise
    Nagise 2013/05/01
  • 文字列でswitchするときはif-else switchイデオムを使うほうが安全 - きしだのHatena

    Java SE 7から、switch構文で文字列が使えるようになりました。 public void hoge(String s){ switch(s){ case "a": System.out.println("AA"); break; case "b": System.out.println("BB"); break; default: System.out.println("Other"); } } ところが、残念なことに、sがnullの場合はdefaultには飛ばず、ぬるぽが発生します。 そこで、null判定は事前にif文で行うことになるので、次のようなif-else switchイデオムを使うと便利です。 if(s == null){ System.out.println("Null!"); }else switch(s){ case "a": System.out.printl

    文字列でswitchするときはif-else switchイデオムを使うほうが安全 - きしだのHatena
    Nagise
    Nagise 2013/04/26
    Enumをswitchするときもですねー。if-else-switch 大流行の予感 :-P
  • おねえさんを組み合わせ爆発から救う:ZDDがおねえさんを救う - きしだのHatena

    おねえさんを組み合わせ爆発から救うために、経路をBDDとして表しました。 http://d.hatena.ne.jp/nowokay/20121017#1350435805 ところで、「F」に至る経路で、ある辺を通るとした場合に即「F」となっているものが半分あります。 その節点を使うとしたときに、結果が偽になるのであれば、それは節点ごと不要だと言えます。そこで、そのような節点は省略してしまいます。 このような図を、ゼロ抑制BDD(Zero suppressed BDD)、略してZDDと呼びます。 「F」をすべて省略することもできます。ただし、BDDとは違って、どちらでも同じ結果になる場合も、それぞれの接続を表示する必要があります。 そうすると、2x2マスの経路でも、次のように表すことができます。かなり節点の数が減っていることがわかります。 「T」に至るパスの数が、経路の数です。 さまざまな

    おねえさんを組み合わせ爆発から救う:ZDDがおねえさんを救う - きしだのHatena
    Nagise
    Nagise 2012/10/18
    アルゴリズムの勉強しないとあかんな…
  • NetBeans7.3(Beta)に組込みブラウザがついて想像以上にすばらしい - きしだのHatena

    とうとうNetBeansに組込みブラウザがつきましたよ! いままで、FirefoxのレンダリングエンジンであるGeckoを使ったプラグインなどがありましたが、ネイティブコンポーネントとSwingの相性も悪くて、あまり使えるものじゃありませんでした。 でも、JavaFXにWebKitベースのブラウザが入ったことで、とうとうNetBeansにも使い物になるブラウザが組み込まれました!といっても、まだBetaですが。 んで、これが思ったよりも素晴らしくて、なんだか将来的に期待がもてそうな感じなので、紹介します。します。します。 Betaの前の開発版を使ったので、動きは少し違うかも。NetBeans7.3Betaはこっちからダウンロードできます。 http://dlc.sun.com.edgesuite.net/netbeans/7.3/beta/ オプションを見ると「Webブラウザ」の項目に、「

    NetBeans7.3(Beta)に組込みブラウザがついて想像以上にすばらしい - きしだのHatena
    Nagise
    Nagise 2012/10/03
  • クラスとは何かを集合論から考えなおす - 2009-03-08 - きしだのはてな

    いま論理学とか集合論とかを勉強してるので、クラスって何かという話のときも集合論として考えてた。 なので、そのとき考えたことをまとめておく。 まず、「なにか」があるとする。「なにか」はなんでもいい。 そして、その「なにか」の集合を考える。たとえば"aaa"や"bbb"を要素とするStringという集合を考える。3とか5とかを要素とするIntegerという集合を考える。 ここで、その集合がなにを扱うかという規則をどうするかというのがオブジェクト指向としては大切になるかもしれないけど、今回はそこには触れないでおく。 とにかく、「なにか」と『「なにか」の集合』を考えることをここでは大切にする。 これで『「なにか」の集合』を考えたところで、『「なにか」の集合』を要素とする集合を考えて、この集合をクラスとする。つまり、クラスという集合は、StringやIntegerといった集合を要素にもつ。 ここで、

    クラスとは何かを集合論から考えなおす - 2009-03-08 - きしだのはてな
    Nagise
    Nagise 2010/07/11
    クラスと集合論のあたりの話
  • JavaでFlashファイルを生成する - きしだのはてな

    JavaSWFを使ってSWFファイルを生成してみました。 JavaSWFは、名前のとおりJavaからSWFファイルを読み書きできるライブラリです。 http://sourceforge.net/projects/javaswf/ ソースはこんな感じ import com.anotherbigidea.flash.movie.*; import com.anotherbigidea.flash.structs.*; import java.io.IOException; public class NewClass { public static void main(String[] args) throws IOException{ //枠線 Shape sh = new Shape(); sh.defineLineStyle(3, new Color(0, 255, 0)); sh.set

    JavaでFlashファイルを生成する - きしだのはてな
  • Webアプリで動的型付言語や開発管理が流行りIDEが流行らなかった理由などなど - きしだのHatena

    考えてみた。 ここんところ静的型付けなんか不要な空気になってたり、プログラムの内容よりも品質だとか開発管理の話題のほうが盛んだったり、IDEはあると便利だけどなくても大丈夫って雰囲気だったりする理由。 この10年Webアプリケーション花盛りだから、その理由はWebアプリケーションの構造にあるとして考えた。 Webアプリケーションの構造 で、まずはWebアプリケーションの構造。 字が汚いけど、左からブラウザ、アプリケーション、セッション、DB。 赤文字は、左がプログラム実行、右がデータの永続と書いてある。つもり。 Webアプリケーションでは、ブラウザからのリクエストを受けて、プログラムが動き、データベースの情報を処理して返す。 ブラウザ側でプログラムが動くことはあるけど、入力補助程度であまりたいしたプログラムは書かないので、主にサーバー側のプログラムを組む。 このとき、サーバー側のプログラム

    Webアプリで動的型付言語や開発管理が流行りIDEが流行らなかった理由などなど - きしだのHatena
    Nagise
    Nagise 2010/01/05
    面白い。ブラウザ上で動く言語こそ静的なメリットが強く、サーバサイドは動的でいい、みたいなシチュエーションはあるかもしれない。
  • Google App Engineでコードを書くと、処理のひとつひとつが課金に見える

    先週末、ちょっとしたプログラムをGAE/Jで動かして実際に使ってもらってみたのですが、そうすると、いままでテストでちょこちょこやってたときには全部のDaily Quotaが0%だったものが、数%の数字を示すようになります。 これを、ちゃんとプロモーションして多くの人に使ってもらおうとすると、課金が発生したり制限にひっかかったりしそうです。 で、たとえばDatastore APIの呼び出し回数がヤバいとして、API呼び出しを減らすためにキャッシュしようとすると、MemcacheのほうのAPI呼び出し回数がヤバくなってきます。 で、じゃあということでデータストアにデータを置くようにすると、保存量の制約で課金がかかってきます。で、それならと、データストアに置くのはシリアライズしたデータにしてデータ量が最低限になるようにすると、今度はその処理をするためのCPU時間で課金がかかってきます。 コードを

    Google App Engineでコードを書くと、処理のひとつひとつが課金に見える
    Nagise
    Nagise 2009/12/18
    検収項目にプロファイラによる成績表がつくようになる未来。プログラムの質に対する見える化の一助になるかもしれない
  • Twitterで「イヤならremoveすればいい」というのは、問題が解けなくて悩む人に「解けないなら単位すてればいい」とアドバイスするようなもの - 2009-11-17 - きしだのはてな

    Twitterで「RTのやりかたがイヤだ」とか「@のつけかたがイヤだ」とか「まいんちゃんタイムラインがウザい」とか、いろいろと発言の仕方に不満があると言っている人に「イヤならremoveすればいい」と言う人がいる。 これは、学校の課題の問題が解けなくて悩む人に「解けないなら単位すてればいい」とアドバイスするようなものに思える。 たしかに、単位をすてればその問題を解く必要はなくなる。 その教科に興味がなかったり、単位に余裕があったり、卒業すること自体に興味がないのであれば、単位をすてるのも解決策になるかもしれない。 でも、その教科に興味があったり、その単位は必修だったり、単位をひとつでも多くとることにこだわりがあったり、その単位を簡単にすてれない場合のほうが多い。 問題が解けなくて悩む人に、単位をすてればいいとアドバイスするというのは、問題の解決ではなく問題の排除でしかない。 同様に、Twi

    Twitterで「イヤならremoveすればいい」というのは、問題が解けなくて悩む人に「解けないなら単位すてればいい」とアドバイスするようなもの - 2009-11-17 - きしだのはてな
    Nagise
    Nagise 2009/11/17
    その人の発言を見たいならフォローして見ればいいし、見たくないならフォローから外せばいい。見たいけど見たくないときに、機械フィルタで解消できればいいけど。
  • HTML5ローカルストレージの本当の難しさ 2009-11-16 - きしだのはてな

    HTML5でローカルストレージが使えるようになる。 そこでちょっと使ってみようと思ったのだけど、これはかなり難しいのではないかと思った。 もちろん、データを入れたり出したりするだけなら、window.openDatabaseなどとして、普通にSQLを発行すればいい。 SQL呼び出し結果の取得がコールバックになっているので少しコーディングは面倒だけども、それを除けば特に難しいことはない。 HTML5 ローカルストレージが難しいのは、実際にアプリケーションを組むときにそれが使えるとは限らないし、使えるときは唯一のDBではないということだ。 つまり、まず過渡期では、HTML5 ローカルストレージが使えるブラウザと使えないブラウザが混在する。Google Gearsをインストールすることで同様のことは可能だけど、そこでもGoogle Gearsをインストールしているブラウザとしてないブラウザが混在

    HTML5ローカルストレージの本当の難しさ 2009-11-16 - きしだのはてな
    Nagise
    Nagise 2009/11/16
    このあたりは難題だし開発者の腕があらわれるところ。果敢に取り組みたい