タグ

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

  • GPTの仕組みをちゃんと勉強したい本 - きしだのHatena

    やっぱGPTを仕組みから勉強したい、というをいくつか見つけたのでまとめておきます。 まず理論的な概要。 機械学習からニューラルネットワーク、CNNでの画像処理、トランスフォーマーでの自然言語処理、音声認識・合成、そしてそれらを組み合わせたマルチモーダルと章が進むので、理論的な概観を得るのにいいと思います。 最初は数式が多いのだけど、Σをfor文だと思いつつ、定義が説明文中に埋まってるPerlよりたちが悪い記号主体言語だと思えば読めるけどめんどくさいので飛ばしても問題ないと思います。 深層学習からマルチモーダル情報処理へ (AI/データサイエンスライブラリ“基礎から応用へ” 3) 作者:中山 英樹,二反田 篤史,田村 晃裕,井上 中順,牛久 祥孝サイエンス社Amazon で、もういきなり作る。 トークナイザーから全部つくっていきます。TensorFlowでBERTをつくってGPT2をつくる

    GPTの仕組みをちゃんと勉強したい本 - きしだのHatena
  • 新しいリリースモデルは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
    bobbyjam99
    bobbyjam99 2017/10/07
    "これだけだと大事なことが抜けています。LTSはOracle JDKのみで、オラクルと契約した人だけがダウンロードできるようになる、ということです。" ΩΩΩ<ナンダッテー
  • 作って理解するDIコンテナ - きしだのHatena

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

    作って理解するDIコンテナ - きしだのHatena
  • OptionalがSerializableではない話と使い方まとめ - きしだのHatena

    Optionalは意図的にSerializableではなくなってますね。 でその意図としては、一旦Serializableにして出力形式を決めてしまうと、今後ずっとその出力形式を維持しないといけないことになるので、そのメンテナンスコストを嫌ったというのがあるようです。 このメンテナンスコストの中には、仕様が変えれなくなる、というコストも含みます。 なので、シリアライズしたい場合には、フィールドはnullを持つようにして、getterでOptionalに変換するということになると思います。 基的にOptionalは、Optional-returnイディオムをサポートするもの以上ではない、ということをBrian goetzさんも書いています。 Shouldn't Optional be Serializable? そこで、Optionalの使い方としては、基的にメソッドの戻り値としてだけ、

    OptionalがSerializableではない話と使い方まとめ - きしだのHatena
  • コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena

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

    コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena
    bobbyjam99
    bobbyjam99 2015/04/20
    "いいコメントが書けないという人は、コードを書く前にコメント書いておきましょう" / 似たようなことしてた / コードに対してコメントを書くと実装に関するコメントになる - きしだのはてな :
  • ソフトウェアプロセス技術がロストテクノロジーになっている - きしだのHatena

    最近会った人とよく話すのが、ソフトウェアプロセス技術がロストテクノロジーになってるんではないかということです。 ソフトウェアプロセスというのは、「プロセスがよいソフトウェアをつくる」という前提のもと、どのようなタイミングでどのような成果物を作り、どのような管理をし、どのように検査をしてソフトウェアを作るかという手順です。 そして、プロセス技術というのは、そのようなプロセスを構築し運用し改善する技術です。 このようなソフトウェアプロセス技術は、1995年くらいから2000年くらいにかけて盛り上がり広まりかけたのですが、そのタイミングでWebが広まりはじめ、「Webは進化が速い」「作るものがどんどん変わる」などを合言葉に、「アジャイルプロセスを採用する」という名目でなんら管理されないプロセスが普及しました。その結果、プロセス技術は完全に下火になっているように思います。 もちろん、Webの発展段

    ソフトウェアプロセス技術がロストテクノロジーになっている - きしだのHatena
    bobbyjam99
    bobbyjam99 2015/03/12
    ロストテクノロジーという響きかっこよす / ソフトウェアプロセス技術がロストテクノロジーになっている - きしだのはてな :
  • オブジェクトはストックで、関数はフロー - きしだのHatena

    的にオブジェクトと関数はおんなじもので、Javaのラムダ式では記述は関数だけど扱いはオブジェクトになってたりします。逆に、関数でオブジェクトを実現することもできます。 なので、オブジェクトと関数が、モノとしてどう違うかっていう話にはあまり意味がなくて、問題は表現としてどう違うかってことになると思います。 表現として、オブジェクトはフィールドとかプロパティとかで状態をもって、その状態をもとにいろいろ動いて、状態を変えます。 関数は引数をとって、その引数をもとにいろいろ動いて、戻り値を返します。 オブジェクトは状態が大事、関数はデータの流れが大事、って感じになります。 アプリケーションの中では、ユーザーインタフェースとデータ構造・ストレージは状態が大事です。処理に関してはデータの流れが大事です。 ここで、ユーザーインタフェースやデータ構造はプラットフォームごとに一揃えあれば充分です。ストレ

    オブジェクトはストックで、関数はフロー - きしだのHatena
  • JJUG CCC 2014 fall Javaが見るニュータイプの夢 - きしだのはてな

    JJUG CCC 2014 fallでProject Valhalla・Panamaについて話しました。 JJUG CCC 2014 fall Javaが見るニュータイプの夢 from なおき きしだ 時間があまってしまった。がんばってSumatraまで入れたほうがよかったかなー。 終わったあとはぼくと菊田さんのサイン会になってましたw。 しかし、全体的に人が多かったなー。応募も多かったのだけど、実際に来る人の比率も多かったようだ。

    JJUG CCC 2014 fall Javaが見るニュータイプの夢 - きしだのはてな
  • Java最強リファレンス - きしだのHatena

    ソフトバンク編集の方から送っていただきました!なかなかいいです。というか、これすげー時間かかってそう。 Java最強リファレンス 作者: 田中裕一出版社/メーカー: SBクリエイティブ発売日: 2014/10/25メディア: 単行この商品を含むブログ (1件) を見る 書名のとおりリファレンスなんですが、逆引きになってます。逆引きなので、やりたいことからJava APIを引く形になってます。 これが特に威力発揮してるのが、日付時刻の扱いやファイル操作です。日付時刻の扱いやファイル操作は、Java 8でDate & Timeが入ったり、Java 7でNIOが強化されたりで、同じことを新しい書き方と古い書き方で書けるようになってます。これらがやりたいことごとにまとまっているのは、結構便利だと思います。 特に、ファイル操作の新旧API比較表は、概要みるのに便利そうです。 よくないところとして

    Java最強リファレンス - きしだのHatena
    bobbyjam99
    bobbyjam99 2014/11/10
    "あと、Java8の日付時刻APIを「Joda Timeというライブラリをベースにした」とか書くと、どっかからマサカリ飛んでくる気がします。" / 書評:Java最強リファレンス - きしだのはてな :
  • Java8のラムダで再帰する - きしだのHatena

    宮川さんが、不動点コンビネータを使ってラムダで再帰するエントリ書いてました。 不動点コンビネータを使ってラムダ式で再帰関数を定義する - 宮川拓の日記 型ごとのコンビネータが必要というのは、これはspecializationが導入されるのを待つしかないですね。 「念のため、これはきわめて効率の悪い方法です」ということで、とりあえず、ラムダで再帰する効率の悪くない方法を書いておきます。 とはいえ、一度自分で試してみたほうがいいと思います。 なのでここでCM。 Javaエンジニア養成読 [現場で役立つ最新知識、満載!] (Software Design plus) 作者: きしだなおき,のざきひろふみ,吉田真也,菊田洋一,渡辺修司,伊賀敏樹出版社/メーカー: 技術評論社発売日: 2014/11/11メディア: 大型この商品を含むブログ (9件) を見る 詳しくはまた今度かきます。きっと。

    Java8のラムダで再帰する - きしだのHatena
  • Java VMの改善案が楽しそう - きしだのHatena

    なんか、Java VMの改善案がでてますね。 すげー楽しそうです。 http://cr.openjdk.java.net/~jrose/pres/201407-JVMEvolution.pdf プロジェクトValhallaとプロジェクトPanamaがあります。 http://openjdk.java.net/projects/valhalla/ http://openjdk.java.net/projects/panama/ Valhallaは、Value TypesとSpecialization、PanamaはArrays 2.0とLayoutsがあります。 概要をまとめてみますが、かなり適当な解釈で書いてたりするので、細かいことはちゃんと原文みてください。 Value Types 簡単にいえば、新しい基型を定義できるようにするというものです。 http://cr.openjdk.ja

    Java VMの改善案が楽しそう - きしだのHatena
  • Java Developer Day Taipeiに行ってきた - きしだのHatena

    ということで、8/1に台湾、台北のJava Developer Dayに言ってnull書いたら負け的なことを言ってきました。 きっかけは、1月に台湾いったとき、台湾Javaイベントあったら行ってみようとTwitterでつぶやいたところ、 @kojilin さんから教えてもらったリンクがこれだったから。 2014 Java Developer Day Call for Paper Call for Paper出せばいいのかーと思って、とりあえず出してみたら通ってしまった、と。 @kojilinさんには、イベントの連絡だとか準備、そしてプレゼンまで非常にお世話になりました。ありがとー謝謝〜。 準備 で、28日月曜から台湾行ってたんですが、資料つくったり読み原稿を書いたり、その日語原稿を中国語に翻訳してもらったりと、昼はホテルこもりっぱなし、夜はkojilinさんと作業でまったく余裕がなかっ

    Java Developer Day Taipeiに行ってきた - きしだのHatena
    bobbyjam99
    bobbyjam99 2014/08/05
    発表お疲れさまでした!!
  • JAWS-UG三都物語で「そろそろJavaみなおしてもええんやで」というプレゼンしました - きしだのHatena

    夏のJAWS-UG 三都物語 2014というイベントで「そろそろJavaみなおしてもええんやで」というプレゼンしてきました。 Javaのイベントではなかったので、Javaを使ってない人を想定したプレゼンでしたが、実際会場のほとんどがJavaメインではなかったようです。 for(int num : nums){ if(num > 10) continue; sum += num * 2; } というコードが、NetBeansの「関数操作を使用」というリファクタリングで sum = nums.stream().filter((num) -> !(num > 10)).map((num) -> num * 2).reduce(sum, Integer::sum); になったところがハイライト。 ここまでできるとは思ってなかった。 そろそろJavaみなおしてもええんやで from なおき きしだ

    JAWS-UG三都物語で「そろそろJavaみなおしてもええんやで」というプレゼンしました - きしだのHatena
  • 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
  • StringBuilderを使ったクソコードはどこまで遅いか - きしだのHatena

    ※ 4/9 11:25 いろいろ計測しなおしてます。こちらも参照 Javaで文字列連結する場合には+演算子よりもStringBuilderを使うべき、という話があるのですが、よく sb.append("[" + data + "]"); みたいなコードをみかけて、あんまり意味ないなーと思ったりします。 あと、 sb.append("title:"); sb.append("[" + data + "]"); みたいに、+演算子を使った一行の式にして sb = "title:" + "[" + data + "]"; としておけば「title:」と「[」はコンパイル時点で最適化されたのに、ってコードもあります。 ということでTwitterJavaでの文字列連結は+を使うべき、ってやったほうが、StringBuilder使ったsb.append("[" + data + "]")みたいなク

    StringBuilderを使ったクソコードはどこまで遅いか - きしだのHatena
  • iteratorや拡張forよりStreamのforEachが速い? - きしだのHatena

    ちょっと気になったので、簡単にベンチマークしてみました。 最初は、ラムダ呼び出しが入る分forEachは遅いんじゃないかと思っていたら、倍の速さに。 もちろん、いろんな条件で変わるんだろうけど、ここまで差が出ることがあるのは驚き。 あと、Collectors.summingIntのような基型に対するCollectorを使うよりは、intStreamに変換してからsumなど専用メソッドを使うほうが圧倒的に速いことも確認できた。 とりあえず、0から10万件のListを用意。 array = IntStream.range(0, 100_000).boxed().collect(Collectors.toList()); それからベンチマーク用のメソッドを用意。 public static void bench(String name, Supplier<Integer> proc){ ben

    iteratorや拡張forよりStreamのforEachが速い? - きしだのHatena
  • 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で必須のPairとzip - きしだのHatena

    Java8リリースされました! けど、ちょっと足りない。 zipメソッドは一瞬Java8の開発ビルドに入っていましたが、JavaOneのときには外れていました。JavaOneでzipはどうなるの?という質問にもBrianは、ちょっと難しかったからはずしたというようなことを言っていました。 とはいえ、Java8に正式に含まれる品質じゃなくていいから欲しい。 あと、zipならPairも欲しい。 ということで、とりあえず置いておきます。 public class Pair<T, U> { T left; U right; public Pair(T left, U right) { this.left = left; this.right = right; } public static <M, N> Pair<M, N> of(M left, N right){ return new Pair

    Java8で必須のPairとzip - きしだのHatena
  • Java SE 8でパターンマッチを実装する - きしだのHatena

    Java Advent Calendar 2013の12日目のエントリです。 昨日はtorutkさんでした。 Java Advent Calendar 2013 11日目 - Java SE 8の新クラス・メソッド一覧 - torutkの日記 明日はbitterfoxさんがマニアックな記事を書くんだと思います。 ところでパターンマッチ 実は去年のAdvent Calendarでもパターンマッチを考えていました。 Javaでのパターンマッチを考える - きしだのはてな このときは、Javaの言語機能としてパターンマッチに使えるものはないかと考えました。 今回はJava 8ラムダを利用して、どれだけ型安全に条件分岐しつつ構造を分解できるかということにチャレンジしてみます。b115で確認してます。 値の比較に関しては、型の扱いさえできれば、まあ実装すりゃ実装できるっていう感じなので、今回は省きま

    Java SE 8でパターンマッチを実装する - きしだの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