タグ

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

  • AI時代に必要なのはプログラミング能力ではなくコンピューティング能力 - きしだのHatena

    「プログラミング教育について語る会 」で話した内容をまとめておきます。 「AI時代のプログラミング教育」としたのだけど、内容的には「コンピューティング能力を伸ばそうぜ、その道具としてプログラミングしよう」みたいな話になりました。 https://nextbeat.connpass.com/event/346052/ 資料はこちら まず前提として、AIのコーディング能力が7ヵ月で倍になっているというのがあります。なので、今現在の能力で話をしてもあまり意味がなく、ゆくゆくはかなりのレベルでAIがコードを書くという想定をしておいたほうがいいです。 元ネタのツイートはこれ https://x.com/METR_Evals/status/1902384481111322929 論文はここ [2503.14499] Measuring AI Ability to Complete Long Tasks

    AI時代に必要なのはプログラミング能力ではなくコンピューティング能力 - きしだのHatena
  • Javaオブジェクトを永続化させるEclipse Storeがよさそう - きしだのHatena

    Eclipse Storeというのをみつけて、これはJavaオブジェクトを永続化するものなのだけど、トランザクションもあったりPostgreSQLなどのDBをバックエンドにできたり結構よさそう。 https://eclipsestore.io/ MicroStreamがEclipseに寄贈されてオープンソース化したものみたいですね。Eclipse Selializerとセットです。 https://github.com/microstream-one ということでGetting Startedをみてみます。 https://docs.eclipsestore.io/manual/storage/getting-started.html 組み込み版を使うのでこんな感じのdependencyを追加 <dependencies> <dependency> <groupId>org.eclipse

    Javaオブジェクトを永続化させるEclipse Storeがよさそう - きしだのHatena
  • 電子ペーパーAndroid端末BOOX Nova2を買って不要になった端末たち - きしだのHatena

    電子ペーパーAndroid端末であるBOOX Nova2を買いました。 BOOX Nova2,7.8インチ,電子書籍リーダー,Android,Einkタブレット メディア: 2021/4/29追記 いまはNova3が出てます BOOX Nova3,電子ペーパー,7.8インチ,E Ink,Android10,電子書籍リーダー メディア: 4年前にBOOX C67ML Carta2を買ったのだけど、メモリが512MBで安定して動いてなくて、そんなもんかーとあきらめていた。 それがなんか新しいBOOXは 結構ちゃんと動くっぽいという話で、メモリも3GBになってるし使えるやろーということで買ってみた。 そしたら想像以上によくて、いろいろなものが不要になったのでまとめてみる。 重さはほぼカタログ通り。 Kindle Paperwhite まず完全に用途がかぶるKindle Paperwhiteは完全

    電子ペーパーAndroid端末BOOX Nova2を買って不要になった端末たち - きしだのHatena
  • GraalVMはどれだけ遅いか - きしだのHatena

    GraalVM流行ってますね。 そして、多くの人はGraalをAOTとして使うnative-imageのことだけをGraalVMと言ってたりします。 ご安心を。このエントリではGraalをJITとして使うHotSpotモードとGraalをAOTとして使うnative-imageの両方が遅いという話です。 GraalVMは速い、と言われてますが、残念ながらHotSpotモードでC2より速い結果を手元では出せていません。 公式ブログでは1.7倍から5倍速くなると書いてますけど、手元では再現できてません。 Under the hood of GraalVM JIT optimizations - graalvm - Medium native-imageは速い、というのはよくありますが、これはネイティブ化によりJVMの起動時間や最適化の時間、最適化されずに動く時間が省略されるので起動が速い、とい

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

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

    プログラマの実力は経験だけであがらないことがレベル格差につながる - きしだのはてな
  • Java 10のコンパイラバグを見つけた - きしだのHatena

    予定通りにJava10が出ましたね!Javaが予定通りにリリースされることが珍しすぎたのか、関東では雪になっていたようです。 Java10の変更点についてはこちらにまとめています。 Java 10新機能まとめ - Qiita Java10のJEP以外の変更まとめ - Qiita ところで、varが導入されたのでいろいろ試してたらコンパイラが落ちました。 次のようなコードを-g付でコンパイルすると落ちます。 import java.util.List; public class Main { public static void main(String... args) { var m = List.of("a", 1); System.out.println(m); } } このように、正式リリースであるbuild 46でコンパイルするとこうなります。 src$ javac Main.ja

    Java 10のコンパイラバグを見つけた - きしだのHatena
  • 正月から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
  • 電子工作たのしー!ブラウザ上で回路シミュレーション。Arduinoも簡単 - きしだのHatena

    ブレッドボードを使った練習回路をちょっといじろうと思って、たぶんいいツールがあるはずだと探してたら、ブラウザで回路シミュレーションできるTinkercad circuitというのをみつけました。 https://www.tinkercad.com/circuits もともとはサンハヤトのキットでタイマーICを使ったブザーを作って、これをArduinoに対応させたかったのだけど、電子回路は不慣れなので、なにかシミュレーションできるツールを探していたのでした。 サンハヤト 小型ブレッドボードパーツセット SBS-203 タイマーIC555を使った電子工作セット 出版社/メーカー: サンハヤトメディア: Tools & Hardwareこの商品を含むブログを見る まずはそのままWeb上で動かしてみる。 電子工作たのしー! pic.twitter.com/QNr87vleqG— きしだൠ (@ki

    電子工作たのしー!ブラウザ上で回路シミュレーション。Arduinoも簡単 - きしだのHatena
  • JUnit5で変わるテストの書き方 - きしだのHatena

    JUnit5が案外よさげなので、JUnit5を使うとどんな感じでテストが変わるのか考えてみます。 実際にどこが変わったかとか、使い方自体はいろいろまとめられたブログがあるし、公式ドキュメントも読みやすいのでそちらを。 http://junit.org/junit5/docs/current/user-guide/ メソッドごとのテスト JUnit5でいいのは、Nestedですね。 いままで、いろんなメソッドを対象にしたテストが入り混じってたと思います。 import org.junit.Before; import org.junit.Test; public class PurchaseTest { @Before public void setup() { // 全体のセットアップ // purchase()用のセットアップ // history()用のセットアップ } @Test p

    JUnit5で変わるテストの書き方 - きしだのHatena
  • Database Management Systems 8章読み終わった - きしだのHatena

    一日1ページとか2ページとかいうペースで、Database Management Systemsを読んでるのだけど、やっと8章「Overview of storage and indexing」が読み終わった。 Database Management Systems 作者: Raghu Ramakrishnan,Johannes Gehrke出版社/メーカー: McGraw Hill Higher Education発売日: 2002/09/01メディア: ペーパーバック購入: 1人 クリック: 9回この商品を含むブログ (2件) を見る ついでに言うと、8章から読み始めたので、最初の章がやっと終わった感じ。 さらについでに言うと、7章までは普通にリレーショナルモデルとかSQLの説明とか、日語でも読めるような内容なので、読み飛ばしてる。JDBCのAPIの説明とかJSPとか、どうでもいいし

    Database Management Systems 8章読み終わった - きしだのHatena
  • PPAPで学ぶDaggerによるDI - きしだのHatena

    Daggerってありますよね。コンパイル時に依存性を解決するのでパフォーマンス的に有利なDIコンテナです。 https://google.github.io/dagger/ 依存関係の不備がコンパイル時にエラーになって発見できるのも、実行時にエラーが出たときの修正の難易度が高いAndroidアプリにはありがたいということで、Androidでよく使われてるようです。 基的なオブジェクトの定義 I have a pen. public class Pen { @Override public String toString() { return "ペン"; } } I have an apple. public class Apple { @Override public String toString() { return "アッポー"; } } Ohh!!! Apple Pen!!! p

    PPAPで学ぶDaggerによるDI - きしだのHatena
  • Javaにデータクラスやパターンマッチングが導入される? - きしだのHatena

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

    Javaにデータクラスやパターンマッチングが導入される? - きしだのHatena
  • [java][netbeans]Jackpotでリファクタリングを作成したらNetBeansが超便利に - きしだのHatena

    NetBeansには、Jackpotという言語クエリーエンジンが載っているという噂がありました。でも新機能として紹介されるでもなく、なんかもしかしたら使えるのかなーという感じですっかり忘れていたところ、今回のJavaOneで紹介があって、試してみたら超便利だったので、使い方を紹介します。 Jackpotのスクリプトは、クラスパス上のMETA-INF/upgradeにhintという拡張子でファイルを作るか「検査と変換」の「単一の検査」のところの「参照」から開ける「検査の管理」で「新規」を選ぶことで作成できます。 ただし、「検査の管理」で作成すると埋め込まれてる <!description="Empty Inspection">という行の処理がうまくいってないようで、この記述を消す必要があります。 このせいで、今まで何度ためしてもうまくいってませんでした。。。 それでは、試しに「foo ==

    [java][netbeans]Jackpotでリファクタリングを作成したらNetBeansが超便利に - きしだのHatena
  • 作って理解する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
  • 作って理解するDIコンテナ - きしだのHatena

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

    作って理解するDIコンテナ - きしだのHatena
  • 乱数のたのしい話と遺伝アルゴリズム - きしだのHatena

    金曜日の「プログラマのための数学勉強会@福岡」で乱数の話をしてきました。 プログラマのための数学勉強会@福岡 #3 - connpass で、乱数の生成だとか、クイックソートや素数判定などの乱択アルゴリズムの話とかをしました。 乱数タノシイヨ 乱数のたのしい話 from なおき きしだ その中で、遺伝アルゴリズムで巡回セールスマン問題(TSP)を解くというのをやってみました。遺伝アルゴリズム、すいぶん昔から名前は知ってて、どういうアルゴリズムかも知ってて、実装もそんな難しくないと知りつつ、書く機会がありませんでした。なので、この機会に書いてみようと。 とりあえず最初に完全にランダムでTSPを解いてみます。 TSP with random ぐちゃぐちゃですね。 下部のグラフはその時点での最短距離。最初に距離が短いものをみつけていくけどだんだんみつかりにくくなる、という感じになっています。 1

    乱数のたのしい話と遺伝アルゴリズム - きしだのHatena
  • 平方根を使わずに高速で2点間の距離を近似する - きしだのHatena

    2点間の距離の計算では平方根が必要になりますが、平方根は少し重い計算です。ということで、平方根を使わず、掛け算・割り算・足し算と絶対値・最大・最小だけで距離を近似する方法についての記事を翻訳してみました。 flipcode - Fast Approximate Distance Functions (12:02 補足:おそらく今の標準的なCPUでやる意味はほとんどないと思います。近似のアプローチとして面白いというくらいの話。Z80でやりましょう) 距離関数高速近似 by Rafael Baptista (27 June 2003) 2点間のユークリッド距離を求める計算式は次のようになる。 二次元では次のようになる。 この関数の計算には、平方根が必要になる。これは最近のコンピュータでも高価な計算である。平方根は逐次近似によって求められる。つまり、コンピュータは平方根近似のループを行って、与え

    平方根を使わずに高速で2点間の距離を近似する - きしだのHatena
  • OptionalがSerializableではない話と使い方まとめ - きしだのHatena

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

    OptionalがSerializableではない話と使い方まとめ - きしだのHatena
  • Java SEバージョンアップでのトラブルの話が面白かった - きしだのHatena

    Java Day Tokyo 2015で、NECJava SEバージョンアップでのトラブルの話が面白かった。 Java EEアプリケーションサーバの開発現場で見たJava SEの実際 資料はこちらで公開されてるので、資料に書かれてることはそちら参照という感じで、どんな話だったか書いてみます。 Java Day Tokyo 2015 アプリケーションサーバーを提供する中でJava SEをバージョンアップしたときに出て来たさまざまなトラブルの話と、Java SE 8から導入されたMetaspaceの話が主でした。 Java EEは機能が標準化されているので、アプリケーションサーバーはカスタマーサポートで差別化をはかるしかない、顧客から見ると、Java SEやOSまで全て含めてアプリケーションサーバーなので、全部対応していく、という話をされていました。 Javaにもそれなりにバグはあって、アプ

    Java SEバージョンアップでのトラブルの話が面白かった - きしだのHatena
  • Javaでのnullチェックのパフォーマンス - きしだのHatena

    Javaでのプログラムでは、Optionalが入ったとはいえ、nullとのつきあいは依然として重要です。 そんな中で、nullが入ってると困る処理を書くときには、nullチェックを行うほうが安全です。 そのとき、どのようにnullチェックを行うかというのが問題になります。 Java7からは、Objects.requiredNonNullというメソッドが導入されたので、このメソッドを使って、以降の処理でnullじゃないことを保証するということができます。 けど、このrequiredNonNullが遅いんじゃないかという話があるので、どう遅いのか調べてみました。 requireNonNullと同様に、値がnullだったらNullPointerExceptionを吐いて、null以外だったら素通りするという書き方のひとつに、getClassメソッドを呼び出すというものがあるので、これと比べてみま

    Javaでのnullチェックのパフォーマンス - きしだのHatena