タグ

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

  • 作って理解する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
    yojik
    yojik 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
    yojik
    yojik 2016/04/06
  • 小学校低学年へのプログラミング教育には効果がないと考えたほうがいい - きしだのHatena

    子どもへのプログラミング教育は早ければ早いほどいいというものではない。 最近子どもへのプログラミング教育が話題になることが多いけど、恐らく小学3年生までの子どもへの効果はほとんどなく、小学4年生でもほとんどの子どもには難しいと思う。 人間の知能の発達には段階があって、必要な段階に達していないうちにそれが必要な教育を行っても効果は望めない。 まず、なんでこのエントリを書いたかというと、プログラミングには適した発達段階があるということを知らないと、その発達段階に達する前にプログラミング教育を行って、もちろんプログラミングは出来なくて、その子には適性がないという判断をしてしまうとうことが起きてしまうんじゃないかと思ったからだ。 まだ適した段階まで来てないだけなのにプログラミング教育をして失敗して「この子にはプログラミングができなかった/興味をもたなかった」という実績を作ってしまうことによって、将

    小学校低学年へのプログラミング教育には効果がないと考えたほうがいい - きしだのHatena
    yojik
    yojik 2016/01/07
    “プログラミングで論理的な思考力を早くから鍛えておくと例えサッカー選手になるにしても有利だと思う”
  • JavaOne2015サンフランシスコ-2日目 - きしだのHatena

    ※11/8 公開 JavaOne、今日からが番ですね。 主にJava EE 関連のセッションを聞きました。 会場はHiltonとParc55に別れているのですけど、Java EE関連はParc55のほうです。 ホテルの中のエスカレーターにもDukeが貼ってあります。 Java EE 8 Work in Progress [CON2554] Java EEのえらいひと、リンダのセッション。 ちなみに、目の前は大きい人だったので、結構大変。 あと、クラウドマイクというのを使って質問ができる、ということだったのだけど、あまり有効に使われなかった気がする。ちょっとだけ使われたのかな。 内容は大きく3部にわかれてて、これまでのコミュニティアンケートの結果、今後の仕様と、開発への参加方法などの話がされていました。 今後の仕様としては、HTML5対応として、JSON・Server Send Event

    JavaOne2015サンフランシスコ-2日目 - きしだのHatena
    yojik
    yojik 2015/11/09
  • OptionalがSerializableではない話と使い方まとめ - きしだのHatena

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

    OptionalがSerializableではない話と使い方まとめ - きしだのHatena
    yojik
    yojik 2015/09/01
    じわじわとつらい気がする
  • ソフトウェアプロセス技術がロストテクノロジーになっている - きしだのHatena

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

    ソフトウェアプロセス技術がロストテクノロジーになっている - きしだのHatena
    yojik
    yojik 2015/03/12
  • 「訳書があるから原書を読む人が増えない」という精神論 - きしだのHatena

    @ cocoatomo さんのブログに次のようなことが書いてありました。 「訳書が出続けると, 英語を読まない人が減らない」という指摘もあります 翻訳のススメ ― Elliptium 要するに、訳書がなければ、みんな原書で読むようになるだろうっていう話です。 けど、もし訳書がなければ、そのを読む人が減るだけだと思います。 「IDEでプログラムを勉強するとダメな技術者になる。コマンドラインを使うべき」とか「手取り足取り教えてると甘えた職人になる。よい職人になりたければ目で盗め。」みたいな精神論じゃないかと。 もし「訳書があるから原書を読む人が増えない」みたいな指摘で翻訳を躊躇する人がいたら、そんな指摘はほんと有害じゃないかとも思います。 そもそも、Courseraみたいなネット学習サイト、いまはほとんど英語しかないんですけど、だからがんばってみんな英語でやってるかというとそういうことはなく

    「訳書があるから原書を読む人が増えない」という精神論 - きしだのHatena
    yojik
    yojik 2014/11/20
  • 「Javaエンジニア養成読本」養成読本 - きしだのHatena

    Javaエンジニア養成読」でてます。 Javaエンジニア養成読 [現場で役立つ最新知識、満載!] (Software Design plus) 作者: きしだなおき,のざきひろふみ,吉田真也,菊田洋一,渡辺修司,伊賀敏樹出版社/メーカー: 技術評論社発売日: 2014/11/11メディア: 大型この商品を含むブログ (9件) を見る すでにもうみんな買って読んでると思うので、内容についてはここで書くまでもないと思います。 内容については、他の著者のエントリや Javaエンジニア養成読が出ます! - Challenge Java EE ! 「Javaエンジニア養成読」が出るのです - 日々常々 Javaエンジニア養成読が発売されました!! - bitter_foxの日記 読んだ人の書評などで。 L'eclat des jours(2014-11-11) 「Javaエンジニア養成

    「Javaエンジニア養成読本」養成読本 - きしだのHatena
    yojik
    yojik 2014/11/14
    “Javaを本気でやるつもりはないけどDisるための知識が必要という人にも結構おすすめです”
  • Java8のラムダで再帰する - きしだのHatena

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

    Java8のラムダで再帰する - きしだのHatena
    yojik
    yojik 2014/11/04
  • JavaOne 2014 サンフランシスコ2日目 - きしだのHatena

    JavaOne報告ブログは、ためたら死にます。毎日宿題が増えます。 その日の分はその日のうちに。 これが会場のひとつであるParc55ホテルです。主にJava EE系がこちらです。 で、今日はJava EE 8のセッションがあるので来てみたら、たぶん定員いっぱいになってて入れませんでした・・・ 昨日のブログの写真をアップするのに30分でも終わらなくて、結局あきらめて出てきたんだけど。 今日とったのは、この8セッションです。 CON2517:Movile JavaServer Faces CON3294:Introduction to HotSpot CON1738:Unlocking the Magic of Monaads in Java 8 CON5659:Faster Object Arrays CON5585:Going Farther with CDI 1.2 BOF6563:W

    JavaOne 2014 サンフランシスコ2日目 - きしだのHatena
    yojik
    yojik 2014/10/06
  • プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena

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

    プログラムの組みやすさが世界を変えるフェーズは終わったのではないか - きしだのHatena
    yojik
    yojik 2014/10/06
  • 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
    yojik
    yojik 2014/08/12
    値型よい
  • オブジェクト指向は禁止するべき - きしだのHatena

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

    オブジェクト指向は禁止するべき - きしだのHatena
    yojik
    yojik 2014/07/22
    そういう事前設計しすぎの迷路に陥らないためのYAGNI(久しぶりに使った)だし、テスト駆動設計だしリファクタリングだと思うし、こういう議論は過去のものだと思うなー。 (OOとか関数型とか関係ない話)
  • オブジェクト指向について - きしだのHatena

    参考までに、ぼくの基的な定義は、ランボーの「データ構造と振る舞いが一体となったオブジェクトの集まりとしてソフトウェアを組織化すること」という定義に従っています。そのようなオブジェクトが単体ではなく組織化されるということが重要です。オブジェクト指向を勉強するとはそのような組織化のしかたを勉強することだと考えています。 現在のシステムは、データはデータベースに格納され、振る舞いとは分離して管理されています。そのような中では、システムをオブジェクトの集まりとして組織化することはできません。 局所的にも、ステートレスを前提としたHTTPの処理では、オブジェクト組織の必要な局面はありません。 個別のオブジェクトの共通化に継承を使うという点では「クラスは単にユーザー定義型であり、継承は部分型と差分プログラミングを実現する仕組みだととらえる」だけで充分だと考えています。 そうしたシステムにオブジェクト

    オブジェクト指向について - きしだのHatena
    yojik
    yojik 2014/07/22
    「データベースに格納されているデータ」は、オブジェクト指向設計の主役になれるほどの粒度じゃないと思う(細かすぎて出来ることが少ない)。デスクトップアプリでいうファイル(を抽象化したやつ)程度の存在。
  • 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
    yojik
    yojik 2014/07/09
  • SEやPGではなく、プログラマでもなく - きしだのHatena

    SEとかPGという言葉を使ってるところに近づかないほうがいいと言われるようになってかなりたちましたが、だからといってプログラマというのも違うなと思っていた今日この頃。 そういえば、Twitter技術者系タイムラインを見ていると、どうもみんなエンジニアとか技術者って言ってるなということに気づいたのでメモ。 自分でも、こうやって「技術者」と書いてるし。

    SEやPGではなく、プログラマでもなく - きしだのHatena
    yojik
    yojik 2014/02/20
    ソフトウェアエンジニアかなー (略すとSEになってしまうけどそれはおいて置いて)
  • もっとJavaEE6っぽくcometチャットを実装する - きしだのHatena

    もっとJavaEE6っぽくやってみよう 昨日のエントリでは、AsyncContextの使いかたを試すため、サーブレットだけを使って実装してみました。 でも、すこし泥臭いコードも多くなっていたし、このまま実用的なコードにしていくときにゴテゴテとコードを継ぎ足していくというのもイヤな感じです。 そこで、もっとJavaEE6っぽいコードに書き換えてみましょう。 少し準備 今回は、JAX-RSでのRESTful Webサービスと、CDIでのインジェクションを使ってみます。 JAX-RSの準備 まずは、JAX-RSを使うための設定クラスを作成します。 package chat2; @javax.ws.rs.ApplicationPath("rs") public class ApplicationConfig extends javax.ws.rs.core.Application { } こういう

    もっとJavaEE6っぽくcometチャットを実装する - きしだのHatena
    yojik
    yojik 2014/02/06
  • Java8でラムダで書くかメソッド参照で書くかの指針 - きしだのHatena

    Java8では、関数型インタフェースへの値として引数が揃ったメソッドの呼び出しを単純に渡す場合に、ラムダの形でもメソッド参照の形でも書くことができます。 このときの書き分けの基準を考えてみます。 つまり、 public void actionPerformed(ActionEvent ae) { System.out.println("押された"); } のようなメソッドがある場合に JButton b; b.addActionListener(ae -> actionPerformed(ae));//ラムダ と書くか、 JButton b; b.addActionListener(this::actionPerformed);//メソッド参照 と書くかという話です。 まず、この例のactionPerformedメソッドのように、関数型インタフェースに渡すことが前提で定義されたメソッドのよ

    Java8でラムダで書くかメソッド参照で書くかの指針 - きしだのHatena
    yojik
    yojik 2014/01/09
    メソッド参照はかなり好きな構文。
  • RDBMSの時代の終わりが見えてきた - きしだのはてな

    クラウドと一緒にやってきたもの 最近、クラウドが流行ってます。 GoogleMapResuceから始まって、MicrosoftのAzureまで、大手のクラウド製品が出揃った感じ。 で、そこで、こんなクラウド製品が出ましたというときに、必ずといっていいほどそのクラウド用のデータベースの説明があります。そして、それはRDBMSではありません。 GoogleだとBigTable、MicrosoftだとSQL Data Services、あとはAmazonSimpleDB。どれも、基的にはひとつのテーブルにハッシュコードでアクセスするようになっています。 ほかのクラウド製品も、Oracle Coherenceだったり、楽天のRomaだったり、非RDBMSのデータストレージを提供します。 クラウドというわけではないけど、mixiのTokyo TyrantやApache CouchDBも、RDB

    RDBMSの時代の終わりが見えてきた - きしだのはてな
    yojik
    yojik 2014/01/08
  • Java8には型推論があるので型指定不要で変数が使えますよ - きしだのHatena

    Javaプログラマのみなさんは、Javaは型推論がないから変数の型指定をしなくていけなくてダサい、などとイジメられた経験があると思います。 おかあさんに型推論をねだるとGroovyをわたされたり、おとうさんに型推論をねだるとScalaがやってきたり、プレステが欲しいって言ったのにWiiやXboxを買い渡される感を味わった人も多いのではないでしょうか。 そんな良い子のJavaプログラマのために、今年はサンタが素敵なプレゼントを持ってきてくれましたよ。 同じ型を書くのがダサい たとえばウィンドウを出してボタンを押したらメッセージが表示されるサンプルを書くとこんな感じになりますね。 public static void main(String... args){ JFrame f = new JFrame("テスト"); JButton b = new JButton("押して"); JText

    Java8には型推論があるので型指定不要で変数が使えますよ - きしだのHatena
    yojik
    yojik 2013/12/24