タグ

ブックマーク / nishiohirokazu.hatenadiary.org (43)

  • 不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー

    プログラミング言語は人が作ったもの。人は誤るもの。なので完璧なプログラミング言語は存在しない。 「人は誤るもの、しかし誤りに固執するのは馬鹿の所業だ。」(キケロ) プログラミング言語も、間違った設計をして、馬鹿でない人がそれを修正することの繰り返しで発展してきた。 というわけで言語間での設計判断のい違いとか失敗した設計とかを収集中。一部抜粋して講義資料に入れるつもりなので他の事例をご存知でしたらぜひ情報をいただけるとありがたいです。 if(x = 0) C言語では代入が式であるためif(x == 0)のつもりでif(x = 0)と書いてしまい、常に偽になってしまう。 x = 0の値はint、条件式はboolでないといけないので型エラーだよ派: Java x = 0は式ではないので条件式に入れたら構文エラーだよ派: Python 条件式にx = 0をいれたらx == 0と解釈するよ派: H

    不完全にしてかなり言葉足らずな比較プログラミング言語学 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2016/07/25
  • 「文字列を文字の列とみなす単純化」ってどういうこと?解説編 - 西尾泰和のはてなダイアリー

    先日 @shyouhei さんのTweetに反応して文字列が文字の列かどうかが言語によって異なるという話をTweetしました。 shyouheiさんの投稿: PythonはどうかしらんがRubyの設計思想は「世の中はシンプルじゃない」だからな。文字列を文字の列とみなす発想その物がすでにRubyからすると過度に世界を単純化しすぎている。 https://twitter.com/shyouhei/status/528106973565165568 もうちょっと言っておくと数値計算で勝ち目のないRubyは文字列処理にめっちゃ注力してるんで。文字列処理こそがRubyの主戦場。そこでRubyが文字列をあえてカタマリで扱ってることにはそれなりの理由というものがある。つまり分解しようとするほうが困りごとが増える。IVSとか。 https://twitter.com/shyouhei/status/528

    「文字列を文字の列とみなす単純化」ってどういうこと?解説編 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/11/07
  • 例えば「写経」という言葉を避けてみる。 - 西尾泰和のはてなダイアリー

    サイボウズ式「続・エンジニアの学び方」の第5回が公開されました。この回では、小崎さんが「どうしてコードを読もうと思ったのか」と、コードを読むために新しい言語を学ばなければいけない場合に「どうやって学ぶか」を聞きました。 ところで、小崎さんは自分の学び方を「写経」と読んでいて、僕もこの用語は自然に理解できるのですが、公開後のTwitterの反応を見ていると「写経と呼ぶことが嫌」もしくは「仏教での写経の印象で、内容を勘違いしている」という事例がいくつも見つかりました。 プログラミングの学習法としての「写経」という言葉は色々な書籍で使用されています。例えば「100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊」の70ページでは「まず写経することから始めた」というエピソードが紹介されています。また「改訂新版 コンピュータの名著・古典100冊」の99ページでは「技術書の内容にそって深い

    例えば「写経」という言葉を避けてみる。 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/09/06
  • ネタとしての黒歴史と本当の黒歴史について - 西尾泰和のはてなダイアリー

    「締め切りがないと、到達しないすごく遠いゴールに向かって走ってしまう」──カーネルハッカー・小崎資広(2) | サイボウズ式が公開されました。 公開前は「締め切りを設定することのメリット」に関して、いくつか他の実例を紹介したりしようと思っていたのですが、いざ公開してみると意外なことに小崎さんが勉強会発表動画を「黒歴史」と呼んだことについての反応がいくつかありました。 考えてみてください。自分がインタビューを受けて、そのインタビュー内容は記事になることがわかっているとします。「当に人に知られたくない過去」について言及するでしょうか。 また自分の「当に人に知られたくない過去」が動画として公開されている場合、その動画を公開した人に「おい、やめろよ」と言わないってことが考えられるでしょうか。言われた勉強会の主催者が「やだよ、消さないよ」と言って公開し続けることがありえるでしょうか。 ないない、

    ネタとしての黒歴史と本当の黒歴史について - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/08/24
    “小崎さんが伝えたかったことは「勉強会で発表すると黒歴史化するからやめろ」ではなく「動画が残ってちょっと恥ずかしいこともあったりするけど、でも発表するほうがいいよ」なんです”
  • でかい企業のOSSがApache License 2.0だと嬉しい理由 - 西尾泰和のはてなダイアリー

    「無期限で世界規模で非独占的で使用料無料で取り消し不能な特許ライセンスを付与します」という条項があるので使わせてもらう側が「わーい、便利なライブラリだー」と思って使っていたら後から「特許料払え!」と言われるという悲劇が起こらないことだって。 3. 特許ライセンスの付与 ライセンスの条項に従って、各コントリビューターはあなたに対し、成果物を作成したり、使用したり、販売したり、販売用に提供したり、インポートしたり、その他の方法で移転したりする、無期限で世界規模で非独占的で使用料無料で取り消し不能な(この項で明記したものは除く)特許ライセンスを付与します。ただし、このようなライセンスは、コントリビューターによってライセンス可能な特許申請のうち、当該コントリビューターのコントリビューションを単独または該当する成果物と組み合わせて用いることで必然的に侵害されるものにのみ適用されます。あなたが誰かに

    でかい企業のOSSがApache License 2.0だと嬉しい理由 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/05/04
  • U理論を実践してみた日記 - 西尾泰和のはてなダイアリー

    U理論によれば、新しい理解を結晶化するには、一度今までのコダワリを捨てることが必要。「自分は何にこだわっているのか」と内省したところ、やはり「を読む以上はその内容を理解しなければならない」という点にこだわりがある。そこで、これを捨てて、中身を説明できないぐらいの速度で速読し続けたら何が起こるかを実験してみた。 その結果「理解度」に関する考え方が変わった。 「理解度」という概念は、いままで特に疑問を感じることなく使ってきた。しかし、理解度ってなんだろう?「に書かれている情報のうち、理解できた情報の割合」だろうか? この定義は有益ではない。まず、自分は「に書かれている情報の総量」を知らないので、の内容を100%理解してない状態で、自分の理解度がどれくらいかを知ることはできない。次に、時間をかければ掛けるほど高い値になる傾向がある。そして最後に「理解度100%」がかならずしも好ましい状態

    U理論を実践してみた日記 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/04/28
  • 「エンジニアの学び方」を執筆しました。 - 西尾泰和のはてなダイアリー

    4月24日発売のWEB+DB PRESS Vol.80に、特別企画として「エンジニアの学び方」という記事を書きました。 Vol.80自体は4月発売ということもあって「新人さん大歓迎!」と銘打っています。「エンジニアの学び方」もこの4月に就職・進学をした人を想定読者にしています。ですが、きっとその他の人にも役に立つ内容だと思います。 この記事を書くきっかけとなったのは、ベストセラーにもなった拙著「コーディングを支える技術」のコラムです。余白があるからコラムを書けと言われて、学び方についてのいくつかのコラムを書きました。 p.23「理解を確認するためにはまずアウトプット」 p.26「何を学べばよいかがわからない理由」 p.79「具体的な知識と抽象的な知識」 p.80「噛み砕く」 p.82「必要なところからかじる」 p.134「おおまかにつかんで徐々に詳細化する」 p.235「端から順番に写経す

    「エンジニアの学び方」を執筆しました。 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/04/27
    ざっと読んで面白かったのであとでじっくり読む。
  • U理論が面白い - 西尾泰和のはてなダイアリー

    U理論のを流し読みしてたけど、これは結構面白い。 PDCAサイクル(計画→実行→評価→改善)は、既にサイクルが回っている人にとっては納得感があるのだろうけども、回ってない人にやらせようとすると「で、計画はどうやって立てるの?」で悩んで止まってしまったり、逆に問題に対する知識が不足してる可能性に無自覚なまま、詳細すぎる計画を立ててしまって、後からわかった情報で瓦解したりする。 科学的思考法の「仮説→実験→検証→修正」のサイクルでも、流行りのリーンスタートアップの「仮説検証のサイクルを高速に回せ」でも、やっぱり実際にやろうとすると「で、仮説はどうやって見つけるの」というところでつまずく人がいる。 この手の「サイクル」に入る手前でつまずいている問題について、僕はいままで「まず観察を」と言ってきたのだけど、U理論はこの部分を7段階に分けて考えている。 一つ目は、物事を既成概念に当てはめて見ている

    U理論が面白い - 西尾泰和のはてなダイアリー
    gfx
    gfx 2014/04/11
    “PDCAサイクルが回り始める前に、まだPの材料となる知識がない状態から最初の一歩(D)をどう踏み出すか、に特化した本だと言えるだろう”
  • 「キャリア戦略論 - 人・生き方・働き方の多様性」講義資料を公開しました - 西尾泰和のはてなダイアリー

    10月19日に灘校土曜講義にて、キャリア戦略に関して多様性にフォーカスして1時間半の講義をしました。講義資料を一部公開します。 参加者のみなさんがアンケートに書いてくれた感想は、全部目を通しました。一点、僕がうまく伝えられてなかったらしきところがあるのでここで補足します。 「マジック・ザ・ギャザリング」と「プログラミング」のどちらがよいか 「マジック・ザ・ギャザリングに時間をさくよりプログラミングを学ぶべきという趣旨か?」という質問がありました。いいえ、違います。 中学高校時代の時間を投資する対象として「マジック・ザ・ギャザリング」(MtG)が「プログラミング」よりも劣ると主張したようなとらえられ方をしてしまったようですが、そう主張したいわけではありません。僕がプログラミングに時間を投資したのは「将来役に立つ」とおもったからではなく、単にそれが楽しかったからです。MtG投資している人も、

    「キャリア戦略論 - 人・生き方・働き方の多様性」講義資料を公開しました - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/10/21
  • トレイトを勉強していたらクラスの定義の食い違いに気づいた話 - 西尾泰和のはてなダイアリー

    以前自分が書いた記事Scalaのtraitはmixinか?を元に、トレイトに関する補足記事を書こうとして「そうだ、どうせならば元論文の記述とも照らしあわせたほうがよいな」と「Traits: A Mechanism for Fine-grained Reuse」を読んだ。そこで気づいたのだけども、この件に関して意見が咬み合わないことがあるのは、そもそも「クラス」の定義にい違いがあるせいではないか? 「Traits: A Mechanism for Fine-grained Reuse」での定義ではクラスとは「空クラスnil」もしくは「属性の集合と、メソッドの集合と、親クラス」と定義されている*1 で、トレイトとは「メソッドの集合」と定義されている*2 これがどういうことかというと、トレイトなどから作られたクラスは「自分を構成するのにどういうトレイトが使われたか」という情報を持たないってこと

    トレイトを勉強していたらクラスの定義の食い違いに気づいた話 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/07/08
  • 文字列の解析 その3: 正規表現の歴史 - 西尾泰和のはてなダイアリー

    第1回では文字列から特定パターンの部分を切り出すことがなぜ必要になるのか、そして第2回ではパターンが複雑になるとそれを実装するコードがとても複雑になるということと、その複雑なコードを人間が書くのではなくコンピュータに作らせる「正規表現」について学びました。 ここではその正規表現がどのように生まれてきたのか、軽く歴史を振り返ってみましょう。[1] (注:書きかけです) マッカロピッツのニューラルネット 1943年、Warren McCulloch と Walter Pittsの2人が神経細胞(ニューロン)の振る舞いをモデル化して、複数の神経がネットワークとしてどういう振る舞いをしうるかについての研究を発表しました。[2] 後のニューラルネットワークにつながる研究です。[3] この論文の中で彼らは、複雑なニューロンの接続関係を表現するために、独自の記法を発明しました。 (脚注[1] 今回の話は

    文字列の解析 その3: 正規表現の歴史 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/07/08
  • 再帰呼び出しを再帰呼び出しなしで実現 - 西尾泰和のはてなダイアリー

    拙著「コーディングを支える技術」の第5章「関数」では、P.50で「再帰呼び出しを使っているプログラムは、再帰呼び出しを使わなくても書くことができる」と説明しました。この件に関してここで補足記事として解説することにしました。 P.53の簡単な再帰呼び出しの例(total関数)をターゲットにします。これは空行とコメントを除くと8行の簡単な例です。このコードから、挙動を変えずに再帰呼び出しを取り除いてみましょう。腕に自身のある人はは続きを読む前に自分で実装してみるとよいでしょう。 チャレンジする人向けの注意点 今回の対象では再帰呼び出しをしながら行う処理が「要素の足し算」でした。足し算は順番を入れ替えても結果が同じです。なので、うっかり計算の順番を変えてしまっても、結果からは間違いに気付けません。例えば深さ優先探索を幅優先探索に変えてしまうと、[1, [2, 3], 4]が来の1, 2, 3,

    再帰呼び出しを再帰呼び出しなしで実現 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/06/01
  • Javaでヒープ領域を余らせたままOutOfMemoryErrorを出す方法 - 西尾泰和のはてなダイアリー

    先日、こんな問題を見かけたのだけども、JavaのGCにはあまり詳しくないので答えがわからなかった。 OutOfMemoryErrorが発生しました。(中略)ヒープメモリは足りているようです。原因として何が考えられますか? http://d.hatena.ne.jp/iad_otomamay/20130318/1363596244 なんでだろうなぁと思っていたところid:moriyoshiが「Permanent領域があふれたんじゃないの」と一言。「Permanent領域」で検索してみると、なるほど、そういうことなのかー。 というわけで早速それを再現させるコードを書いてみた。ヒープの大部分ががら空きなのにPermanent領域だけ99%になっているのがわかるかと思う。 Exception in thread "main" [Full GC [Tenured: 515K->515K(56896K

    Javaでヒープ領域を余らせたままOutOfMemoryErrorを出す方法 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/03/20
  • 一方バルタザール・グラシアンはこう言った (RE: ネットで毒を吐いている人たちにツイッターで反撃するのは、リスクばかりで、ほとんど何のメリットも無いという話) - 西尾泰和のはてなダイアリー

    [徳力]ネットで毒を吐いている人たちにツイッターで反撃するのは、リスクばかりで、ほとんど何のメリットも無いという話。を読んで連想したこと。1601年生まれの哲学者バルタザール・グラシアンはこう言っている。 人の中傷は無視せよ。黙殺で答えることが賢明だ。身の潔白を明かそうとしてペンの力に訴えてはいけない。書かれたものはいつまでも残るから敵を懲らしめるどころかその名を留める手助けをしている。忘却に勝る復讐はない。 人と争ってはいけない。公正に戦うものなどほとんど居ないのだ。敵は使えるものなら何でも利用しようとし、来使うべきでない卑劣な手まで繰り出してくる。そんなことしても何の得にもならないのだが、仕返しができたと言うさもしい満足感が得られれば彼はそれで十分なのだ。 失うもののないものと戦ってはいけない。仮に相手を打ち負かしても、なくしたものを取り返すことはできない。 400年経っても人間はあ

    一方バルタザール・グラシアンはこう言った (RE: ネットで毒を吐いている人たちにツイッターで反撃するのは、リスクばかりで、ほとんど何のメリットも無いという話) - 西尾泰和のはてなダイアリー
    gfx
    gfx 2013/02/21
  • Pythonで__slots__を使ってメモリを節約 - 西尾泰和のはてなダイアリー

    先日こんな実験をして、大量のオブジェクトを作った時にはそのオブジェクトが持っている__dict__の1048バイトが無視できなくなってくることを確認した: Pythonでメモリ消費量のプロファイルを取る 今日はその解決編。先日のコードに1行書き足してみよう。__slots__で始まる行がそれだ。 from guppy import hpy h = hpy() N = 100000 class Hoge(object): __slots__ = ['x', 'y', 'z', 'a', 'b', 'c'] def __init__(self): self.x = 1 self.y = 1 self.z = 1 self.a = 1 self.b = 1 self.c = 1 x = [Hoge() for x in range(N)] print h.heap() これによって、変更前ではH

    Pythonで__slots__を使ってメモリを節約 - 西尾泰和のはてなダイアリー
  • 作りたいもの:技術書向きの電子ブックリーダ - 西尾泰和のはてなダイアリー

    昨日Twitterでつぶいたことのまとめ。こういうアプリが既にあったりしないのかなぁ。既にあるなら喜んでそれを使うんだけど。あったら教えて下さい。 技術書小説の違い 技術書小説と大きく異なる点は、シーケンシャルアクセスじゃなくてランダムアクセスが必要になるケースが多い点だ。 小説のように頭から順に読んでいくのではなく「ざっくり眺めておいて必要なところだけじっくり読む」という読まれ方のニーズがある。 「ざっくり斜め読み」をどうやって電子ブックビューワ上で実現するか? ページを画像として縮小しても漫画じゃないから「全く読めないゴミ情報」の山にしかならない。章タイトルだけ表示とか、太字や図などだけ表示とかが必要 ざっくり読んだ後の「あれどこに書いてあったっけ」支援のために検索とタグクラウド(検索キーワードのサジェスト)が重要 縦書きの対応は必要ない 理想を高く持つ 電子書籍ビューワはページを

    作りたいもの:技術書向きの電子ブックリーダ - 西尾泰和のはてなダイアリー
    gfx
    gfx 2012/07/30
  • manに「cp -rは使うな」と書いてあった話 - 西尾泰和のはてなダイアリー

    cp -rでシンボリックリンクまで実体としてコピーされて困ったのでMacのmanを読んでいたのだが、そもそもcp -rってオプション一覧に載ってない。あれれ?と思って続きを読んでいたら互換性の章でstrongly discouragedと書かれていた。 COMPATIBILITY Historic versions of the cp utility had a -r option. This implementation supports that option; however, its use is strongly discouraged, as it does not correctly copy special files, symbolic links, or fifo's. 代わりに-Rを使うべきだそうだ。その場合のシンボリックリンクの扱いをどうするかはオプションで指定でき

    manに「cp -rは使うな」と書いてあった話 - 西尾泰和のはてなダイアリー
    gfx
    gfx 2012/07/18
    な、なんだってー!
  • java-jaで例外処理の話をしてきました - 西尾泰和のはてなダイアリー

    ブログを書くまでがjava-jaですが、もう眠いのでとりあえず1行だけ書いて、あとは徐々に書き足す。 会場を無料提供してくれたグリーさん、ありがとうございます! 誰かが検査例外の話をするだろうと思って書かなかったら結局誰も言及しなかった、Javaのコミュニティなのに。 っていうか聴衆が100人もいると、もしかしてそもそも「検査例外ってなに?」って人もいたんじゃないか?「検査例外がOCPを壊す」とか「Liskovの置換原則のLiskov」とか通じてるんだろうか?とりあえず直和型が通じてないことだけはひしひしと感じた。 Twitterの自分の発言を転載しておく。 ちなみにZen of Pythonでも「エラーを握りつぶすな」と書いてあります 禅 of Python: 20の格言 「例外はそもそも何のため」ってところ、ざっくり省いたんだけどもそういうところのほうがニーズあったかね?? 「C#1.

    java-jaで例外処理の話をしてきました - 西尾泰和のはてなダイアリー
  • 作りたいもの: プログラミング言語のコア概念を学ぶサイト その2 - 西尾泰和のはてなダイアリー

    作りたいもの: プログラミング言語のコア概念を学ぶサイトの続き。 サイト自体や日語での解説はまだ完成していないが部品が色々揃ってきた 完成したもの JavaScriptのASTをリアルタイムにSVGで可視化(Esprimaを使う、見栄えに不満があるので改善の余地がある) JavaScriptによるLISPの実装(パーサだけのはずだったのに関数定義、レキシカルスコープ、マクロ、までできちゃった) JavaScriptによる中置記法の数式の再起下降パーサ(演算子の種類や優先度をブラウザ上で変更できる、これも予定以上の出来) JavaScriptによるBrainf*ckの実装(IO周りに改善の余地がある) 現在進行中のもの JavaScriptによるLazyKインタプリタ(SKI記法に限定してパーサ完成、可視化部分を実行部より先に作成中) JavaScriptによるForthインタプリタ(あと

    作りたいもの: プログラミング言語のコア概念を学ぶサイト その2 - 西尾泰和のはてなダイアリー
  • heXeを試してみた(jQueryのcssとclickを使ってみる) - 西尾泰和のはてなダイアリー

    haXe(ヘックス)は静的型付け言語で、コンパイルするとJavaScript(とかいろいろな言語)ができるらしい。JSXをいじっていたら「コンパイルするとJavaScriptが出力される静的型付け言語にはhaXeもある」を教えてもらったのでこれも試してみよう。JSXでやった「型のことを全然考えてないjQueryを使ってクリックのハンドラを付けたり色を変えたりする」というのをゴールにする。 インストールする Download - Haxe インストーラをダウンロードして起動する。特に問題なくインストール完了。 ~$ haxe haXe Compiler 2.09 - (c)2005-2012 Motion-Twin Usage : haxe -main <class> [-swf|-js|-neko|-php|-cpp|-as3] <output> [options] Options : .

    heXeを試してみた(jQueryのcssとclickを使ってみる) - 西尾泰和のはてなダイアリー
    gfx
    gfx 2012/06/04
    "僕は既存のJSのコードを完全な型安全にするには現実的でないコストがかかると思っているので、heXeの移行コストが低そうなのは魅力的に見えるな。"