タグ

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

  • 4月にプログラム始めた人がゴールデンウィークに積んでおく本 - きしだのHatena

    大きく挙げたのは7冊なので、7日の休みで1日1冊ですね! 連休の間に読んでおいて、友達に差をつけよう! うっかり、先輩にも差をつけちゃえばいいと思います。 プログラムを組むとはどういうことか を挙げる前に、まずプログラムを組むとはどういうことかということを考えておきます。 ざっくりとした説明なので、だいたいこういう感じ、だと考えてください。 その上で、どのようなが必要かを考えて、を選んでいきます。 以前描いたものですが、プログラムを作るということと各分野の関係はこのようにあらわせます。 まず、プログラムは最終的にユーザーに使ってもらうためのものです。 ただ、ユーザーはプログラムを直接使うことはできません。プログラムはハードウェアで動かす必要があります。そして、ユーザーインタフェースを介してユーザーが使います。 (ハードウェアからプログラムへの矢印は逆のほうがいいですね) このような、

    4月にプログラム始めた人がゴールデンウィークに積んでおく本 - きしだのHatena
  • アルゴリズムの勉強のしかた - きしだのHatena

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

    アルゴリズムの勉強のしかた - きしだのHatena
  • プログラムの理論とはなにか - きしだのHatena

    プログラムには、手続きを記述するという側面と、式を記述するという2つの側面があります。 そして、それぞれの基礎理論としては、チューリングマシンとラムダ計算があるので、プログラムの理論としては、この2系統を勉強する必要があると思います。 ラムダ計算というのは、式によってどのような計算ができるかという理論です。式による条件分岐はそれほど難しくなく、Yコンビネータなどの不動点定理で、式によって繰り返し処理が行えるということが証明されたので、どのような計算でもできるということになっています。 チューリングマシンの理論とは、どのような手続きがどのような性質をもつかという理論です。プログラムの性質というのは、ある出力を行うプログラムが、入力に対してどのように時間がかかるか、どのようにメモリを使うかというものです。そしてこれがアルゴリズムの理論になります。 ところで、ぼくはブログで「アルゴリズムを勉強す

    プログラムの理論とはなにか - きしだのHatena
  • 技術者が哲学を勉強する意味 - きしだのHatena

    Twitterにも次のように書いたのだけど、あらためて。 理系の人は、専門で必要ないとか言わずにちゃんと哲学とか倫理学とかやっておくほうがいいと思う。その専門の技術者としては不要かもしれないけど、技術者として生きるにはあったほうがいい。んで、技術者として生きつつ技術者ではない時間のほうが長いわけだから。 http://twitter.com/#!/kis/status/94022172787490816 技術者としてやっていくときに、結局、自分の追っている技術が使われなくなったりだとか、あきらかに技術的に優位な方法が採用されなかったりとか、メシをうための仕事を取りにいったりだとか、技術力ではどうにもならないようなことに対処する必要もでてくる。 そこで「技術力を高める」という勉強しかしてないと、「もっと技術力があればいいのだ」と技術に幻想をもちすぎてドツボにはまったり。 そのとき、論理的な

    技術者が哲学を勉強する意味 - きしだのHatena
  • JavaFXのWebViewでSeleniumみたいなWebテストやってみたら面白かったんだけど 2011-05-30 - きしだのはてな

    JavaFX2.0のWebViewで、Javaからブラウザが操作できるようになって、これをSeleniumが組み込んだらおもしろいことになるだろうなと思ってたのですが、よくよく考えると、SeleniumナシでWebサイトのUIテストが簡単に書けることに気づきました。 ということで、まずはテスト対象のサイトをつくってみます。 最初の画面(first.html)。テキストフィールドがあって、OKボタンを押すと「ほんと?」という確認ダイアログがでて、「OK」を押すと次の画面に行きます。 <!DOCTYPE html> <html> <head> <title>テスト画面</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h1>テスト画面</h1> <form id

    JavaFXのWebViewでSeleniumみたいなWebテストやってみたら面白かったんだけど 2011-05-30 - きしだのはてな
  • Igoという形態素解析器をつかって圧縮新聞っぽいものを作ってみる 2011-06-02 - きしだのはてな

    うどんのこんぶだしが取れるまで時間があったので、ちょっと試しにつくってみました。 簡単なプログラムだけど、それっぽい結果がでてます。登録する文章しだいで結構おもしろくなりそう。 Igoはこれです。 Igo - a morphological analyzer ここに書いてある手順で辞書バイナリを作ってください。 あとは、ソース中でその位置を指定します。 ※ 追記 2023/4/6 GitHubに移行しているようです。 https://github.com/sile/igo mecabはこちらに https://taku910.github.io/mecab/ で、上側のテキストエリアに新聞記事をはりつけて「登録」ボタンを押します。 いくつか新聞記事を登録して「生成」ボタンを押すと、なんかそれっぽい文章が生成されます。 文章の生成自体は、簡単なプログラムでそれっぽいものができることがわかりま

    Igoという形態素解析器をつかって圧縮新聞っぽいものを作ってみる 2011-06-02 - きしだのはてな
  • JDK6のHttpServerで簡単なWebサーバーを作る - きしだのHatena

    日付があしただけど気にするな。 (今は11/23) JDK6にHTTPサーバークラスが用意されてるということで、これを使って静的ファイル専用の簡単なWebサーバー作ってみました。 package webserver; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWrit

    JDK6のHttpServerで簡単なWebサーバーを作る - きしだのHatena
  • おとうさん、ぼくにも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 - きしだのはてな
  • [Java]正しい無限ループの書き方 - きしだのはてな

    boolean д = true; for(;д;){ System.out.println("でれません"); } boolean ω = true; for(;ω;){ System.out.println("ぬけれません"); } boolean ェ = true; for( ;(ェ); ){ System.out.println("終わりません"); } boolean TдT = true; while(TдT){ System.out.println("帰れません"); } 参考 while(1)をfor(;;)って書くやつ(2ch)

    [Java]正しい無限ループの書き方 - きしだのはてな
  • 1