タグ

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

  • Javaで最低限おさえておいてほしいクラス・インタフェース35 - 2024年版 - きしだのHatena

    ま、このくらい知っておいてもらわないと&とりあえずこんだけ知ってればだいたいの処理が書けるクラス・インタフェースをまとめてみました。2024年版。 詳しく知りたい人は「プロになるJava」を! java.lang.Class java.lang.Exception <- new java.lang.Integer java.lang.Object <- new java.lang.Runnable java.lang.String java.lang.System java.lang.Thread java.nio.file.Files <- new java.nio.file.Path <- new java.io.InputStream java.io.InputStreamReader java.io.BufferedReader java.io.OutputStream java.

    Javaで最低限おさえておいてほしいクラス・インタフェース35 - 2024年版 - きしだのHatena
    kknsd
    kknsd 2024/05/17
  • 画像対応ChatGPTで設計図からコードの世界が実現しててやばい - きしだのHatena

    アマチュア驚き屋のきしだです。 ChatGPTが画像入力に対応するよという話があって、来週くらいに使えるようになるかなーと思ったら、もう使えるようになってました。 で、写真から「カレーべてる男の人です」くらいを言えるイメージで試してたら、なんかふつうに画面設計やクラス図からコードを書いていてびっくりしてしまいました。 まあ、起きたらこういうのが来てたわけですね。 で、まあ試してみて「あぁ、いままでのマルチモーダルよりちゃんと画像認識してるなー」くらいに思ったわけです。 で、NetBeansでの画面設計を読ませてみたらこう。 こういうコードが生成されました。 import javax.swing.*; import java.awt.*; public class SimpleForm { public static void main(String[] args) { JFrame fr

    画像対応ChatGPTで設計図からコードの世界が実現しててやばい - きしだのHatena
    kknsd
    kknsd 2023/09/28
  • ChatGPTにブログ全エントリを学習させて「おしえてきしださん」を作る - きしだのHatena

    最近「100万件の文章をChatGPTに学習させて応答チャットを作りました」みたいなニュースがあって、違和感があります。 ということで「ChatGPTにブログ全エントリを学習させて「おしえてきしださん」を作る」としたときに、どんな仕組みになっていて、なぜ「ChatGPTに文章を学習させて」ということに違和感があるか見てみます。 とりあえずこんな感じで、質問に対して答えれてるっぽいチャットができました。 まず、Embedding APIを使って、全エントリのベクトルを得てMongoDBに突っ込んでおきます。 このエントリでやってるので、そのまま使います。 GPTのEmbeddingを利用してブログの投稿に対する近いものを探し出す - きしだのHatena 質問が入力されたら、質問文も同じようにEmbeddingでベクトルをとってきます。 var req = EmbeddingRequest.

    ChatGPTにブログ全エントリを学習させて「おしえてきしださん」を作る - きしだのHatena
    kknsd
    kknsd 2023/04/13
  • Java11、JavaFX11リリース!Java12EAにはRSLが入った - きしだのはてな

    Java11リリース! Java11がリリースされました!こちらでダウンロードできます。 http://jdk.java.net/11/ ビルドは28で、8/23にでたRC1そのままになっています。 Mark Reinhold氏の言ったとおり、最後のビルドになりましたね。 JDK 11: First Release Candidate Oracle JDKも開発・評価・テスト用にこちらでダウンロードできます。ただし、番運用には使えないライセンスになっているのでご注意を。 https://www.oracle.com/technetwork/java/javase/downloads/index.html 主な変更点としては、Java EE・CORBAモジュールが削除されたこと、HTTP Client APIが標準になったこと、単一ソースファイルのJavaコードをjavaコマンドで実行でき

    Java11、JavaFX11リリース!Java12EAにはRSLが入った - きしだのはてな
    kknsd
    kknsd 2018/09/26
  • Java11でのAPI変更を雑に列挙 - きしだのHatena

    先月末でJDK11はRampdownフェーズに入って、機能凍結されました。 なので、今後はAPIの追加・削除・変更はほとんどないと思われます。 おそらく、機能的には現在でているea20とほとんど同じものがJava11としてリリースされることになると思います。 JDK 11 Early-Access Builds 大きな機能変更としては、ここでJEPとしてまとまっています。 「JDK 11」 http://openjdk.java.net/projects/jdk/11/ Raw String Literalが間に合わなかったのはとても残念です。JDK11トレインに乗り遅れるからがんばるぞ!みたいな投稿があって仕様をまとめてからML上は音沙汰なしですが、Rampdownフェーズが始まってから機能追加するLate Enhancement Request Processというのがあるようなので、

    Java11でのAPI変更を雑に列挙 - きしだのHatena
    kknsd
    kknsd 2018/07/05
  • Java9、10でStringの+=に副作用があるバグ - きしだのHatena

    Java 9、10でStringの+=にバグがあるということがStack OverFlowで報告されていました。 Why does array[idx++]+="a" increase idx once in Java 8 but twice in Java 9 and 10? - Stack Overflow どういうバグかというと「s[i++] += i + ""」のようなコードが正しく動かないというものです。 次のコードを実行してみます。 public class PlusEqual { public static void main(String[] args) { System.out.print(System.getProperty("java.version")); String[] s = {"aa", "bb"}; int i = 0; s[i++] += i + "";

    Java9、10でStringの+=に副作用があるバグ - きしだのHatena
    kknsd
    kknsd 2018/06/12
  • Java10のvarをどう使うか - きしだのHatena

    Java 10でvarが追加されました。が、いろいろ使い方は悩ましい気がします。 いろいろ議論をしたので、そこで考えたことをまとめておきます。 JShellでは読むことを考えなくていいのでガンガン使いましょう。 あと、OpenJDKのStyle Guidelinesも見ておくとよさげ。 Style Guidelines for Local Variable Type Inference in Java ローカルメソッドの定義にvarを使う 通常の変数定義でのvarの使い分けは長くなりそうなので、最初にこれだけ書いておきます。 いままで、メソッド内で使えるローカルメソッドを使おうと思うと、Functional Interfaceを使うくらいしかありませんでした。 Function<Integer, Integer> twice = x -> x * 2; println(twice.appl

    Java10のvarをどう使うか - きしだのHatena
    kknsd
    kknsd 2018/03/27
  • JDK 11で2つメソッドが削除されてHTTP Clientが正式に入る - きしだのHatena

    JDK9でincubatedでJDK10でもincubatedなHTTP Clientが、ようやくJDK11でjava.net.httpパッケージで入るらしい。 JDK HTTP Client - JEP 321 - Update あと、 1.2からDeplicatedだったrunFinalizersOnExitメソッドが削除される。Runtime.runFinalizersOnExitとSystem.runFinalizersOnExit。 (11) RFR JDK-8198249: Remove deprecated Runtime::runFinalizersOnExit and System::runFinalizersOnExit Java 9でforRemoval=trueになってますね。 https://docs.oracle.com/javase/jp/9/docs/api

    JDK 11で2つメソッドが削除されてHTTP Clientが正式に入る - きしだのHatena
    kknsd
    kknsd 2018/02/22
  • 新しいリリースモデルは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
    kknsd
    kknsd 2017/10/07
  • Javaにデータクラスやパターンマッチングが導入される? - きしだのHatena

    DevoxxでのBrian Goetzのプレゼンで、Javaにデータクラスやパターンマッチを入れるというアイデアが発表されていました。 Oracleの資料では、必ず最初に「将来の仕様について約束したりするものではないですよ」というスライドが入りますが、今回のプレゼンではそこをかなり強調していますね。 Java9に入ることはないけど、Java10でも入るかどうか、そもそも検討されるかどうかもわかんないみたいな話です。 けど、このような仕様が技術的には実装可能ということではあると思うので、興味深いです。 また、パターンマッチするときに、varによって型推論されることが前提となっているというのも面白いところ。 Data Class よくJavaでは class Point { final int x; final int y; } のようなデータホルダーのようなクラスをたくさん定義しますね。んで

    Javaにデータクラスやパターンマッチングが導入される? - きしだのHatena
    kknsd
    kknsd 2017/01/10
  • カリーハワード同型対応についてのまとめ - きしだのHatena

    昨日のエントリでカリーハワード同型対応について触れました。 関数を扱えることはどのようにプログラミング言語の能力をあげるか - きしだのはてな ついでに、このエントリを書くのに調べたカリーハワード同型対応の資料をまとめておきます。 この記事では、カリーハワード同型対応で、どのような型がどのような論理命題に対応するかを解説してあります。 数理科学的バグ撲滅方法論のすすめ - 第14回 型=命題,プログラム=証明:ITpro こちらのほうが、ちょっとくだけてるかな? Curry-Howard Isomorphism - d.y.d. カリーハワード同型対応での山場は、排中律がSchemeのcall/ccに対応するというところで、gotoなどもだいたいこれにあてはまるようです。 排中律、つまり「a または not a」という命題です。これは証明としてはアヤシイので、古典論理からはずしましょうとな

    カリーハワード同型対応についてのまとめ - きしだのHatena
    kknsd
    kknsd 2016/10/27
  • 作って理解するWebフレームワーク - きしだのHatena

    前回、簡単なDIコンテナを作ってみたので、次はこれを使ってWebフレームワークを作ってみたいと思います。 Webサーバーをつくる まず、WebフレームワークなのでHTTPサーバーが必要ですね。なので簡単なものを作ります。 とりあえずブラウザからリクエストを受け取ったら200 OKとHTMLを返すだけのサーバーです。 今回は、そこらのブラウザからアクセスできればいいや、ということで、RFCとかの仕様に準拠することは考えません。 public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSoc = new ServerSocket(8989); for (;;) { Socket s = serverSoc.accept(); new Thread((

    作って理解するWebフレームワーク - きしだのHatena
    kknsd
    kknsd 2016/04/19
  • 作って理解するDIコンテナ - きしだのHatena

    DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?」に関しては、「DIはちょっとコードを書くのが楽になるだけで、それだけあっても仕方ない、大事なのはコンテナ」と答えるようにしてますが、コード比率からもそれがよくわかります。 続編としてWebフレームワークも作っているので参考まで。 作って理解するWebフレームワーク - きしだのHatena まずはコンテナを作る とりあえず1ソースの状態で。 こんな感じで、管理する型を登録できるようにします。 static Map<String, Class> types = new HashMap<>(); static void register(String

    作って理解するDIコンテナ - きしだのHatena
    kknsd
    kknsd 2016/04/06
  • コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena

    おととい、渋谷JVMというイベントがあって登壇させてもらったんですが、そのあとビール飲んでるときに、ぼくが「コード書く前にコメントだけ書くのいいよね」と言ったあとの返答としてきょんくん(kyon_mm)が言った言葉。 全体としては 「コード先に書いてそのコードに対してテストを書くと実装に対するテストになるし、コードを先に書いてそのコードに対してコメントを書くと実装に対するコメントになる」 という感じ。 ここに至るまでの話もおもしろかったんだけど、ここでは、コメントについて書いてみます。 まず、実装に対するコメントってどういうのかというと、こういうの。 id = findId(name); if(id == -1){ // idが-1だったとき登録 register(name); } いやそれはコード見ればわかるから、ってやつですね。 これは、こうやるとより適切です。 id = findId

    コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena
    kknsd
    kknsd 2015/04/21
  • プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena

    2005年くらいから、コンピュータの性能には余裕があるので、プログラムの効率が多少わるくなってもプログラムが組みやすく人間の能力が発揮できるほうがいいという傾向が強くなりました。 プログラムはサーバーで動かすものであり、サーバーの制約はネットワークとストレージでCPUやメモリには余裕があったためです。 また、世の中は、ITのない世界からITのある世界への変化の中にあって、サーバーでの情報処理やネットワークをサービスとして提供することで、世の中が変わっていきました。 そういった状況であれば、プログラムが組みやすく、思ったとおりのサービスを思った時期に提供できるということが大切になっていました。どんなに未完成でも、新しいアイデアをいち早く見て触ってもらうということが大切だったからです。 しかし、もうすでに世の中は、ITがある世界に変わりました。 もちろん、より便利な情報処理サービスも今後でてく

    プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena
    kknsd
    kknsd 2014/10/10
  • Java8日付時刻APIの使いづらさと凄さ - きしだのHatena

    いままでのJavaでは、日付時刻を扱おうとするとめんどくさい割に非常に低機能でした。 Java8では、新たに日付時刻APIが導入され、めんどくささが増しつつ非常に高機能になりました。 (以降、Java8で導入された日付時刻APIを単に「日付時刻API」と表します) もちろん、慣れてきて、ちょっとしたサポートメソッドを用意してやれば、結構使いやすいのですが、それは「このAPIは使いやすい」という評価にはなりません。 つまり日付時刻APIは、慣れないとぜんぜんわからないし、サポートメソッドがないと面倒なコードが必要ということです。 いろいろあってよくわからない 日付時刻では、時点を扱うInstantや期間を扱うPeriod、時間量をあらわすDurationなど多くのクラス・インタフェースが導入されています。 これらは、IDEの補完でAPIを探りながら機能を推測すれば、それなりにドキュメントなし

    Java8日付時刻APIの使いづらさと凄さ - きしだのHatena
    kknsd
    kknsd 2013/09/17
  • Java8 Lambdaの文法拡張まとめ - きしだのHatena

    デフォルトメソッドは前に解説しました。 Java8で最もインパクトのある構文拡張、デフォルトメソッド ここでは、それ以外の構文拡張についてまとめておきます。 ラムダ式 実装すべきメソッドがひとつだけのインタフェースを関数型インタフェースといいます。 UnaryOperatorインタフェースは実装すべきメソッドがapplyメソッドひとつだけなので、関数型インタフェースになります。 たとえば、UnaryOperatorインタフェースを実装したクラスを定義すると次のようになります。 class MyOp implements UnaryOperator<String>{ @Override public String apply(String t) { return "** " + t + " **"; } } このUnaryOperatorインタフェースを使う、List#replaceAllを

    Java8 Lambdaの文法拡張まとめ - きしだのHatena
    kknsd
    kknsd 2013/08/25
  • JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由 - きしだのHatena

    lombokは、JavaでのアクセッサやtoString、equalsなどボイラープレートなコードをコンパイル時に生成してくれるライブラリです。 ただ、こういったコードの生成は、IDEを使えば自動で行えるので、わざわざlombokを導入するまでもないと考えることもできますが、ぼくはlombokを導入するべきだと考えて、lombokを使うようにしました。 このとき「lombokを導入するべき」と考えた理由を書いておきます。 lombokとは lombokは冒頭でも書いたように、Javaのアクセッサなどを生成してくれるライブラリです。 Project Lombok import lombok.*; @Setter @Getter @AllArgsConstructor @NoArgsConstructor @ToString public class LombokSample { privat

    JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由 - きしだのHatena
    kknsd
    kknsd 2013/07/30
  • 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
    kknsd
    kknsd 2013/05/23
  • Java8のStreamを使いこなす - きしだのHatena

    さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基 まずは、Iterableインタフェースに用意されたforEachメソッドを見てみましょう。 List<String> names = Arrays.asList("hoge hoge", "foo bar", "naoki", "kishida"); names.forEach(s -> System.out.println(s)); これで次のように表示されます。 hoge hoge foo bar naoki kishida いままでの拡張forだと次のように書いてました List<String> names = Arrays.a

    Java8のStreamを使いこなす - きしだのHatena
    kknsd
    kknsd 2013/05/06