タグ

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

  • エンジニアのためのChatGPTプラグイン3選+1 - きしだのHatena

    前のブログでも紹介したのだけど、ChatGPTプラグインのローリングアウトが始まって使えるようになっていて、結局みんな使うのはこの3つくらいかなーとなったので、まとめておきます。 前のブログはこれ。 Bardも世の中のサービスぜんぶGoogle製と思ってるらしい - きしだのHatena 同時に使えるのは3つまでのようだけど、他のプラグインはアメリカ不動産情報など日からは使いづらかったり、作ってみたレベルだったりなので、結局この3つに落ち着くかなーという気がします。 WebPilot これは手放せなくなります。Web記事を読み込んでくれるプラグイン。 ChatGPTには「この記事を要約して」しか入力しなくなりそう。 このエントリを要約してもらっています。 大規模言語モデルの「脳波」が反応してる部分を壊すとどうなるか試した - きしだのHatena ※ 追記 15:21 ぼくのところには

    エンジニアのためのChatGPTプラグイン3選+1 - きしだのHatena
    pochi-mk
    pochi-mk 2023/05/15
  • M1搭載MacBook Airが届いたのでJavaやDockerなどいろいろベンチマークした - きしだのHatena

    M1 MacBook Airが届いていろいろやってたら年も明けてだいぶたったけども、ビルド速度とかJavaとかDockerとかTensorFlowとか、技術者が気になるベンチマークを試してたので、まとめました。 MacBook Airを買ってしまった なんかM1 Mac解説動画をとるためにいろいろ調べていたら、悪質サイトのリンクを踏んだみたいで、MacBook Airを買ってしまっていた。 その悪質サイトは最初は7万円台ですよーっていっておいて、結局12万円くらいになっていた。 みんなもapple.comってサイトには注意しましょうね。 www.youtube.com とどいた! 12/12到着予定といいつつ11日になっても羽田から動いてなかったので大丈夫かーと思ったら11日深夜というか12日未明というかそのあたりには福岡に届いてて、朝発想されて夜にとどいた。 でこれだ! ベンチマーク G

    M1搭載MacBook Airが届いたのでJavaやDockerなどいろいろベンチマークした - きしだのHatena
    pochi-mk
    pochi-mk 2021/01/27
  • Dynamic CDSよりJava10からある自力ダンプの方が起動が速い - きしだのHatena

    昨日のエントリでDynamic CDSを使いましたが、自分でダンプしたクラスデータを使うほうが速くなりました。 Java 13のDynamic CDSで想像以上に起動速度が速くなった - きしだのHatena Java 10からOpenJDKでもApp CDSが使えるようになりました。Oracle JDKでは8u40からあるっぽい。 JEP 310: Application Class-Data Sharing Dynamic CDSと違うのは、クラス一覧を指定しないといけないところ。 クラス一覧は、こんな感じで-XX:DumpLoadedClassListでファイル名を指定すると生成されます。 $ java -Xshare:off -XX:DumpLoadedClassList=mn.lst -jar build/libs/myapp-0.1.jar そうするとこんな感じでロードされたク

    Dynamic CDSよりJava10からある自力ダンプの方が起動が速い - きしだのHatena
    pochi-mk
    pochi-mk 2019/10/19
  • Java 13のDynamic CDSで想像以上に起動速度が速くなった - きしだのHatena

    Java 13で、読み込み済みのクラスデータを終了時に保存するDynamic CDSが導入されました。 https://openjdk.java.net/jeps/350 で、試してみたら結構起動速度が変わっていました。 Micronautで試してみます。 追記: Java 10でApplication Class-Data Sharingが入っているので、自分でクラスリストを作ってダンプすれば同等のことができていたのだけど、面倒さが低減された感じです。LTSであるJava 11ではAppCDSを使うといいと思います。 追記2: 自分でダンプしたほうがかなり速かった Dynamic CDSよりJava10からある自力ダンプの方が起動が速い - きしだのHatena 準備 インストールは全部SDKMAN!で行います。(Windowsの場合はCygwinかWSLを使います) $ curl -s

    Java 13のDynamic CDSで想像以上に起動速度が速くなった - きしだのHatena
    pochi-mk
    pochi-mk 2019/10/17
  • JVM Language Summit 2019(JVMLS) day 1 - きしだのHatena

    JVMLSに来ています。 JVM Language Summit — July 29–31, 2019 JVMLSはJava VM Language Summitの略で、JVMで動く言語に関するイベントだったのですけど、JVM言語の話はJavaも含めて減っていて、JVMの話がメインになっています。 場所はサンタクララのOracleキャンパスで、元はSunだったところ。 これは去年の写真ですが、普段は社員しか入れないところにSunの看板が、しかも初期のロゴのものです。 技術的な内容につっこんでいくとキリがないので、気になる人は動画を見てもらって、セッションの雰囲気のメモを。 Clojure Futures まず最初はClojureの話 IFnというクラスを中心にいろんな実装の話をしていたのですが、最初なんでiPhoneの話をしてるんだろう?って思ってしまいました。 そんなかで、constan

    JVM Language Summit 2019(JVMLS) day 1 - きしだのHatena
    pochi-mk
    pochi-mk 2019/07/30
  • 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
    pochi-mk
    pochi-mk 2018/03/27
    varの濫用はだめよ、という話。納得、というか俺的には反省だな。
  • 正月からMSXのZ80アセンブラを書いていた - きしだのHatena

    あけましておめでとうございます。 どこぞに、正月3日に起こった出来事が1年を決めるという話が流れてましたが、そうすると今年は1年、夜中にZ80アセンブラを書いて昼間寝る感じになるんでしょうか・・・ 書いてたのは、こんな感じで誤差拡散でカラーテーブルを表示するプログラムです。 まずは素直なカラーテーブル 最初、年末に何を思ったかこんな感じのカラーテーブル表示プログラムを作りました。MSX2は赤緑8階調、青4階調の256色を同時表示できていたので、それを表示するとこうなるのです。 100 DEFINT A-Z 110 SCREEN 8 120 FOR I=0 TO 15 130 R=(I MOD 8)*32 140 B1=INT(I/8) 150 FOR J=0 TO 15 160 LINE (I*16,J*13)-(I*16+15,J*13+12),R+B1+(J MOD 8)*4+INT(

    正月からMSXのZ80アセンブラを書いていた - きしだのHatena
    pochi-mk
    pochi-mk 2018/01/08
  • 作って理解するDIコンテナ - きしだのHatena

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

    作って理解するDIコンテナ - きしだのHatena
    pochi-mk
    pochi-mk 2016/04/06
  • オブジェクト指向は禁止するべき - きしだのHatena

    プログラムがまだ不慣れな人が「プログラムちょっとわかるようになったけど、まだぜんぜんオブジェクト指向とかできてません」のように言ったり、ちょっと慣れた人が「このソース、ぜんぜんだめ。オブジェクト指向ができてない」にようなことを言ったり、まるで、オブジェクト指向ができてるかどうかがよいプログラムかどうかを表すことになってるようだ。 Javaのアルゴリズムのに、「Javaなのにオブジェクト指向ができていない」のような書評がついているのを見たときには、お前は何を求めてるんだと思ったりもした。 そのようなオブジェクト指向は、窓から投げ捨てるべきだ。オブジェクト指向はプログラムのよしあしの基準にならない。 むだにHogeインタフェースとHogeImplクラスがあったり、むだにnewするだけのcreateメソッドがあったり、どこで値が設定されてるかわからないオブジェクトがひきまわされてたり、ソースコ

    オブジェクト指向は禁止するべき - きしだのHatena
    pochi-mk
    pochi-mk 2014/07/19
    「コードは複雑になるけど、責務としてはこのクラスに書くべきだからこのコード」というのはほとんどの場合よくないコードになる。- 実際に目の当たりにしてあわわわってなってる
  • 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 Streamではクイックソートが書けない - きしだのHatena

    タイトルは釣りです。 もちろん、汎用ライブラリなので、Streamを使ってクイックソートが書けないわけではありません。 ただ、Streamで完結したままではクイックソートは書けません。Listとの相互変換が必要です。 で、Streamで完結したままクイックソートが書けない直接的要因はいくつかあって、それを解消するユーティリティメソッドが用意されてれば、この件に関してはStreamで完結することもできるのですが、だからといってさまざま出てくる「xxxが書けない」を解決するためのユーティリティメソッドを追加しまくれば幸せになれるかというと、そうでもないわけです。 そもそも、なんでそんなユーティリティメソッドが必要になるのかというのが題。 結局のところListなどCollectionと、新たに追加されたStreamが別扱いになっているところに原因があって、CollectionとStreamの変

    Java8 Streamではクイックソートが書けない - きしだのHatena
    pochi-mk
    pochi-mk 2013/11/22
    過去の資産が沢山あるから、既存のCollectionの挙動を変えるわけにはいかなかったんだろうなぁ。IDEとかエディタのサポートがないととっつきにくい感じ(慣れれば問題ないのだろうけど)。
  • 勉強会に参加しないと不幸になる話 - きしだのHatena

    昨日のOSC福岡2013の「勉強会x勉強会」セッションで飛び込みLTしたときのプレゼンに加筆して公開しました。 追記:福岡の人はFacebookの福岡IT関連勉強会に参加しておくと、勉強会情報が得やすいと思います。

    勉強会に参加しないと不幸になる話 - きしだのHatena
  • TDDで「テストばかり書いて間に合うのか?」と質問されたときの正解 - きしだのHatena

    TDDにおいて、顧客などから「テストばかり書いていて間に合うのか?」などと質問されることがあると思います。 そんなときには、後ろからそっと抱きしめて 「そんな質問させてごめんな」 が正解です。 https://twitter.com/kis/statuses/350279800600018944 テスト駆動開発の効果はどのくらいある? − Publickey テスト駆動開発 作者:Kent Beckオーム社Amazon

    TDDで「テストばかり書いて間に合うのか?」と質問されたときの正解 - きしだのHatena
  • 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
    pochi-mk
    pochi-mk 2013/06/10
    「デフォルトメソッドは、Javaに多重継承を持ち込みます。」なるほど、でも意図的に多重継承をする目的でデフォルトメソッド使うなんてことあるのか...
  • 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
    pochi-mk
    pochi-mk 2013/05/06
    なかなか良いな、Stream。ただ Stream チックなプログラミングが普及するにはまだ時間がかかりそうな気がする(でも自分は趣味では Clojure 使うから関係ないかな)。
  • SIerは日本にしかいないのか - きしだのHatena

    ちょっと気になったので。 まず、SIerってのは、システム受託開発専門のソフトウェア会社や部門ということでいいんですよね? で、アメリカにはそういったSIerはいないのか、と。 ちょっと古いのだけど、手元に「ソフトウェア開発の定量化手法 第2版」という1998年刊行のがあるので、調べてみました。 187ページに「分野ごとのソフトウェア要員の概数(1995年)」という表があって、ここに「アウトソーシング」という項目には175,950人という数字があります。全体が2,432,168人なので、割合としては少ないですが、それなりに多い人数です。 この「アウトソーシング」は、「受託開発/アウトソーシング」として説明されていて、日でいう受託開発のことを指すと思います。 ところで、このサイトの「図表2」を見ると、日の情報サービス産業の従業員数は、1995年には40万人程度だったことがわかります。

    SIerは日本にしかいないのか - きしだのHatena
  • プログラマの実力は経験だけであがらないことがレベル格差につながる - きしだのはてな

    プログラマというのは、道具に慣れることが、実力があがることにならないのですよね。だから、勉強せず業務経験だけだとレベルが低いままということになってしまう。 Javaを10年さわり続けて、Strutsを5年さわり続けても、それだけでは、与えられた画面を手際よく作成できるようになるだけで、たとえばStrutsすらよりよく使えるようになるわけではなかったりする。 Javaにしても、「volatileってなんですか?」という問いに、まあ知らないのはしかたないとしても、解説を見ながらですら答えられない可能性がある。 プログラムの反復生産は、プログラミング能力の向上にあまりつながらない。設定や記述に慣れるだけだ。そして、この「慣れ」というのには「難しいからそもそも実装を回避する」というようなものも含まれる。実力の向上は、作業ができるレベルで止まってしまう。 プログラマとしての実力をあげるための勉強が自

    プログラマの実力は経験だけであがらないことがレベル格差につながる - きしだのはてな
  • MVCは死んだ。MOVEするときがきた - きしだのHatena

    Conrad Irwinさんの「MVC is dead, it's time to MOVE on.」を訳してみました。 MVC is dead, it's time to MOVE on. この訳文も原文のライセンスを引き継いでCC-BY-3.0ライセンスで利用可能とします。 追記13:58 すでに訳してた方がいました。MVCの時代は終わった。MOVEを使い始めましょう。 - ふじこのプログラミング奮闘記 MVCは死んだ。MOVEするときがきた MVCはすばらしいアイデアだ。モデルを持ち、モデルは内部に少しの状態をもつ。ビューは内部に少しのUIをもつ。そして、コントローラは内部に少しの・・・ 何を持つ? 私は確かにこのことに気づいた最初の人物ではない。しかし示されたようなMVCの問題のために、あなたは最後には過剰なコードをコントローラに詰め込むことになる。なぜなら、他にどこに入れていいか

    MVCは死んだ。MOVEするときがきた - きしだのHatena
    pochi-mk
    pochi-mk 2012/07/04
    翻訳ありがたやありがたや。が、頭が悪いのでサンプルコードでも無いといまいちピンとこない。
  • おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな

    やっと、Yコンビネータが何を意味するものなのか、どういう意義があるのかがわかりました。 名前を使わず再帰ができますよ!というだけのものじゃなかったのですね。 まずλありき 関数の話をしたいのです。 そのとき、いちいち hoge(x) = x * 2 としてhogeを・・・、とか名前をつけて話を進めるのがめんどうなので、関数を値としてあらわすと便利ということで、λという値を定義するのです。 そうすると、上のhoge関数なんかはλ(x)(x*2)などとあらわせますが、引数をあらわすのに()を使うといろいろまぎらわしいので、 λx.x*2 のように表記します。 というのがλ。 このとき、λになにかわたされたら、引数としてあらわされる部分を単純におきかえます。 (λx.x*2)y とあったら、xの部分をyでおきかえて (λx.x*2)y → y * 2 となります。λの引数部分を与えられた引数で置

    おとうさん、ぼくにもYコンビネータがわかりましたよ! - 2009-04-09 - きしだのはてな
    pochi-mk
    pochi-mk 2012/06/19
  • Z80での平方根計算が非常におもしろい件 - きしだのHatena

    昨日の記事のブックマークコメントで、Z80の平方根計算が紹介されてた。 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/nowokay/20120604%231338773843 んで、見てみると、なんでこれで平方根もとめれるの!って感じだったので非常におもしろかった。 http://wikiti.brandonw.net/index.php?title=Z80_Routines:Math:Square_root このサイズ最適化のほう、遅いけど12バイトで実装できるってのが、結構わけわかんないって書いたら、id:finalfusionさんにこの解説を教えてもらった。 https://twitter.com/AoiMoe/status/209542023575904256 このコードなんだけど sqrt: ld a,$ff ld de,1 sqrtlo

    Z80での平方根計算が非常におもしろい件 - きしだのHatena
    pochi-mk
    pochi-mk 2012/06/05
    すげぇ。びっくりした。