タグ

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

  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
  • 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
  • Javaの新元号対応を試す。そして実用には問題がある。 - きしだのHatena

    新元号対応はNewEraという仮の元号で対応が進んでいるので、試してみました。 おそらく、実用では使えない場面がある仕様になっています。 なので、元号対応が必要そうな人は、早めに試して声をあげる必要があると思います。 ビルドする ※ 2018/6/16追記 ea18が出ているのでそのまま試せます Masterブランチに取り込まれているので、明日あたりにでてくるea18で使えるようになると思いますが、いまは自分でビルドする必要があります。 ビルドについては、こちらを参考にしてください。ここに書いてるのとは違って、リポジトリはhttp://hg.openjdk.java.net/jdk/jdkです。 http://d.hatena.ne.jp/nowokay/20171104#1509753358 使ってみる JShellで使ってみます。 jdk $build/macosx-x86_64-no

    Javaの新元号対応を試す。そして実用には問題がある。 - きしだのHatena
    teracy_junk
    teracy_junk 2018/07/05
    .NETでは平成32年問題(勝手に命名)を対応する予定なのに対し、Javaでは…
  • 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
  • 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
  • 新しいリリースモデルは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
  • PPAPで学ぶ、Daggerによる非同期処理 - きしだのHatena

    前回は、DaggerのDI機能を紹介しました。 PPAPで学ぶDaggerによるDI - きしだのはてな DaggerはDIコンテナとしては知られていますが、非同期処理フレームワークとして使えることはあまり知られていないと思います。機能はあったのに、ドキュメントがなかったし、ドキュメントも非同期処理に使えることがわかりにくいし。 https://google.github.io/dagger/producers.html サーバーサイドではSpringFrameworkやCDIなどのDIコンテナがすでに使われているのと、DaggerのDIでは機能不足であるため、Daggerが候補になることはあまりありません。 でも、非同期処理フレームワークとしてであれば、SpringFrameworkやCDIを使っている状況でも有用です。 ExecutorModuleの定義 非同期処理を行うために、スレッ

    PPAPで学ぶ、Daggerによる非同期処理 - きしだの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
  • 作って理解する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年生までの子どもへの効果はほとんどなく、小学4年生でもほとんどの子どもには難しいと思う。 人間の知能の発達には段階があって、必要な段階に達していないうちにそれが必要な教育を行っても効果は望めない。 まず、なんでこのエントリを書いたかというと、プログラミングには適した発達段階があるということを知らないと、その発達段階に達する前にプログラミング教育を行って、もちろんプログラミングは出来なくて、その子には適性がないという判断をしてしまうとうことが起きてしまうんじゃないかと思ったからだ。 まだ適した段階まで来てないだけなのにプログラミング教育をして失敗して「この子にはプログラミングができなかった/興味をもたなかった」という実績を作ってしまうことによって、将

    小学校低学年へのプログラミング教育には効果がないと考えたほうがいい - きしだのHatena
    teracy_junk
    teracy_junk 2016/01/07
    なるほど、ループや分岐を理解できる発達段階に至ってないから時期尚早と
  • 品質におけるコメントの役割。あるいは、レビューとコメント - きしだのHatena

    昨日のエントリでも書いたきょんくんとの会話なんだけど、なんとなく、コメントとテストは同じように扱えるんではないかという認識のもとで話がすすんでた。もちろん、コメント書けばテスト書かなくていいとかそういうのではなくて。 テストは、書きやすい対象と書きにくい対象がある。関数的に計算を行うコードの場合はテストが書きやすい。一方で、関数的ではなく副作用のあるコードはテストが書きにくい。データベースを扱ったり通信したりUIがあったり。 そして、そのようなテストを書きにくいときに、コメントはテストのように品質のために使えるんではないか。 で、問題は、どのように品質のために使うかということなんだけど、コードレビューのときの指針として使えばいいんじゃないかなと思った。 コードレビューのとき、コードだけを見ていると、名前付けとかコードの順番とか条件文の使い方とか、体裁的なものだけのレビューになりがち。そこで

    品質におけるコメントの役割。あるいは、レビューとコメント - きしだのHatena
    teracy_junk
    teracy_junk 2015/04/21
    『で、やっぱり、きょんくんはテストコードにはコメントをたくさん書く、ということを言ってた。そうすることで、セルフレビューができるということかもしれない』
  • コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena

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

    コードに対してコメントを書くと実装に関するコメントになる - きしだのHatena
  • 会社員になってJJUG CCCのスポンサーセッションで発表してきた - きしだのHatena

    2月1日からLINE Fukuoka株式会社というところで会社員をやっております。 ということで、JJUG CCC 2015 Springのスポンサーをやらせてもらって、スポンサーセッションで登壇してきました。 だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。 from なおき きしだ ※4/15 15:41追記 P37の「近所の定屋」は今週値上げして490円になりました 内容としては、Javaエンジニア養成読の記事をベースに、Java歴史について、技術トレンドや経済的な情勢、そしてハードウェアの事情から捉えてみて、いろいろな流れのなかで影響を受けてきたことを示しつつ、コミュニティがどう変遷してきたか、個人的にこの先をどう考えて動いてたかってのを、ふんわりと説明したかった感じです。 ということで、タイトルにある「誰も教えてくれないJavaの世界」というのは、そう

    会社員になってJJUG CCCのスポンサーセッションで発表してきた - きしだのHatena
  • プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena

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

    プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena
  • 「きしだのはてなのあれってどうなの勉強会」やってきました - きしだのHatena

    24日の土曜日に、「きしだのはてなのあれってどうなの勉強会」やってきました。 【東京】きしだのはてな勉強会 〜「きしだのはてな」のあれってどうなの〜 - 日Javaユーザーグループ | Doorkeeper んで、あいかわらずその場にいないと意味がわからない資料ができあがりました。 きしだのはてなのあれってどうなの勉強会 運営のmegascusさんは 思ったよりもきしださんの人気が薄かったのか人が集まりませんでした。 【東京】きしだのはてな勉強会 〜「きしだのはてな」のあれってどうなの〜をやってきた - 水まんじゅう とは書いてますが、内容もなにか具体的にわからない、参加費3000円、そしてPlay勉強会とかぶる(時間的にはかぶってなかったようだけど)という中で21人集まってもらえたのは、なかなかありがたいことだなーと思いました。 運営のmegascusさんと岡澤さん、おつかれさまでした

    「きしだのはてなのあれってどうなの勉強会」やってきました - きしだのHatena
    teracy_junk
    teracy_junk 2014/05/28
    3D円グラフ事案
  • プログラムの難しさの階層 - きしだのHatena

    プログラムを理解するのは、まあ難しいです。 でも、その難しさには階層があります。 よく、変数は箱だとか箱じゃないとか議論になりますが、何人か初心者に教えた感じでは、変数自体でつまづくことはあまりないので、実際はそんな例えをしなくても「変数は変数だ」で充分だったりします。 デバッガでステップ実行しながら変数の内容を見ればいい。 で、条件分岐くらいは結構つまづくことはなくて、単純な演算と条件分岐だけが必要なプログラムであればまあそれなりに書けるようです。 ぼくも、一番最初に自分の意図で作ったプログラムは input "ワカレミチガアル。ドウスル? 1:ミギ 2:ヒダリ"; a if a = 1 then print "ガケニオチテシニマシタ" else print "ライオンニカマレテシニマシタ" みたいなものでした。こういった条件分岐をたくさん並べてアドベンチャーゲームっぽいものを作った人は

    プログラムの難しさの階層 - きしだの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
  • 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
  • 組み込みソフトウェア業界というナゾの裏世界の話 - きしだのHatena

    ここまでのあらすじ 我々の住むソフトウェア業界は、SI、サービス・パッケージ、ユーザー企業という大小3つの大陸にわかれ、時々いさかいがありながらも平和に暮らしていた。 そして、我々の住む世界とは別に、同規模の技術者が暮らす、組み込み業界という世界の存在も知られていた。 組み込み業界は、存在はすることは確かなのだが技術者の姿は見えず、そのプロダクトの存在も、わかるものにしかわからないのであった。 我々は、組み込み業界と交信できる唯一の手段、C言語を使って、その世界の住人と交信するしかなかった。 しかしあるとき、FPGAという次元ホールをみつけたワカモノ達が、組み込み業界に迷い込んでしまう。ワカモノ達の前に立ちはだかる屈強な組み込み技術者。彼らの前にワカモノたちは、あるものは倒され、あるものは捕らわれ、そして、命からがら表の世界に逃れてきたワカモノも「べり・・・ろ・・ぐ・・・」というナゾの言葉

    組み込みソフトウェア業界というナゾの裏世界の話 - きしだのHatena
    teracy_junk
    teracy_junk 2014/03/16
    自分自身全く交流のない業界
  • プログラマ業界の二分化 - きしだのHatena

    プログラマの業界は、同じソフトウェアを作るという作業でありながら、大きく2つの形態にわかれています。 小売業界が、コンビニやデパートなど、同じモノを売るという作業でありながら全く違う形態があるのに近いです。 この分化は、2010年ごろのGREE/DeNAの人材獲得合戦で明確に形ができたように思います。 なので、もう5年たって、定着しつつある感じでしょうか。 その2つの形態というのは、労働集約型の業界と、知識集約型の業界です。 労働集約型はSIで多い多人数開発の業界で、知識集約型がサービスで多い少数精鋭型の開発です。 知識集約型の業界は、最初こそちょっとお花畑すぎる感じもありましたが、最近は落ち着いてきており、徐々に経済的に均衡するところに収束していくと思います。それでも比較的めぐまれた労働環境ではあり続けると思います。ただし、常に勉強が求められる業界ではあります。 問題は労働集約型の業界で

    プログラマ業界の二分化 - きしだのHatena
    teracy_junk
    teracy_junk 2014/03/10
    『35歳定年説は存在しないとかウソだとか言っている人は、35歳定年説が存在しないほうの業界にいるだけだと思います』