タグ

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

  • 僕は結城さんのことが好きなんだなぁ - 西尾泰和のはてなダイアリー

    僕は結城浩さんのことが好きなんだなぁ。彼の書いた「文章を書く心がけ」は自分が執筆をするときにも何度もお世話になった。彼の日記などに時々かいま見える「読者によりよいものを届けよう」という真摯な態度には好感を感じる。以前の僕は宗教と名の付くものが全て嫌いだったのだが、敬虔なクリスチャンである彼の日記を読んでいるうちに、その嫌悪感が軽減した。結局のところ、どんな集団にもいい人もいればわるい人もいるということなんだ。 では、わるい人に対してどう対処するのがよいのか。1601年生まれの哲学者バルタザール・グラシアンはこう言っている。 人の中傷は無視せよ。黙殺で答えることが賢明だ。身の潔白を明かそうとしてペンの力に訴えてはいけない。書かれたものはいつまでも残るから敵を懲らしめるどころかその名を留める手助けをしている。忘却に勝る復讐はない。 なるほどね。400年も経つけども、人間の社会はあんまり変わって

    僕は結城さんのことが好きなんだなぁ - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2015/05/09
  • 妻に公開鍵暗号を教えてみた - 西尾泰和のはてなダイアリー

    何気なく放送大学をつけていたら公開鍵暗号の話をしていた。 「この話、何度聞いてもわかんないのよね」 僕「え、どこがわからない?どこまではわかってる?」 「平文はわかるけど、鍵を共有するとか秘密にするとか、署名するとかがよくわからない」 僕「あー、鍵に例えているのが逆効果なのか」 「鍵」をNGワードに指定 僕「じゃあ『鍵』という言葉を使わずに説明してみよう。暗号って『平文を暗号文に変換する方法』で伝えたい文章を暗号文に変えて送り、受け取った人はそれに『暗号文を平文に戻す方法』を使って元の文章を得るわけだ。その目的は、途中の通信文が敵に取られたりしても通信の内容がバレないようにするため。」 「うん」 僕「昔の暗号化の方法は、片方の方法がわかるともう片方の方法も分かった。例えば『アルファベットを後ろに1個ずつずらすと平文に戻せます』って教えてもらったら、『なるほど、前に1個ずつずらせば暗号

    妻に公開鍵暗号を教えてみた - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2014/08/10
  • Re: なぜ国内でPerlが急速に萎んだのか - 西尾泰和のはてなダイアリー

    Python使いとしては「なぜ国内でPerlが急速に萎んだのか」について一言ツッコみたいところがあります。 >遂にPerlにとどめを刺したのはPythonである。守備範囲は当然ながらPerlと駄々被りで えっ、PerlPythonの守備範囲がだだかぶりって、著者の観測しているそれぞれの言語の「守備範囲」ってどんだけ狭いんでしょう? まあそんな重箱の隅をつつくのはやめておきましょう。このエントリーには結論の文章(の一部)はとても素晴らしいです。 >10年でここまで時代は変わる。今のメインテクノロジーも明日は我が身だ。 >変化の速い時代に生きる我々に必要なのは質を学ぶ事だ。 >もっと10年20年たっても色あせない情報工学を身につけなければならない。 そう、そこで拙著「コーディングを支える技術」のようなが必要になるわけです!(宣伝) ちなみに僕自身は仕事でも趣味でもPerlは使っていません

    Re: なぜ国内でPerlが急速に萎んだのか - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2013/08/21
  • トレイトを勉強していたらクラスの定義の食い違いに気づいた話 - 西尾泰和のはてなダイアリー

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

    トレイトを勉強していたらクラスの定義の食い違いに気づいた話 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2013/04/29
  • Scalaのtraitはmixinか? - 西尾泰和のはてなダイアリー

    Rubyのmixin(モジュール)、Squeakのtrait、Scalaのtraitそれぞれについて: Q1: メソッドの実装を持てる? はい、はい、はい Javaのクラスは「はい」、インターフェイスは「いいえ」、C++Pythonのクラスは「はい」 Q2: クラスがそれを複数個継承できる? はい、はい、はい Javaのクラスは「いいえ」、インターフェイスは「はい」、C++Pythonのクラスは「はい」 Q3: インスタンスを作れる? いいえ、はい、いいえ C++Pythonのクラスは「はい」 Q4: 複数個継承した際に名前が衝突しました、どうなる? しれっと上書き、エラー(*)、エラー (*) Squeakはクラス定義時には例外を投げず、衝突したメソッドを「衝突した旨の例外を投げるメソッド」に置き換える。ユーザが衝突に気づくのは、クラスブラウザでメソッドを確認した時か、そのメソッド

    Scalaのtraitはmixinか? - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2013/03/07
  • ランダムだと!?!?(ガタッ - 西尾泰和のはてなダイアリー

    確かに、このテンプレには僕も飽きている: onk:「リンゴが10個あります。ランダムに3人で取り分けなさい」ってどうコードに落とすと綺麗かな。。 yoshiori: @onk ランダムだと!?!? onk: @yoshiori 擬似ランダムでいいです yoshiori: @onk ふう、焦らせやがって……(俺の中でここまでテンプレ) yoshiori: もう、「ランダム」という言葉に反応してしまうのはネタでも良くない気がしてきた そこで新しいマサカリを考えてみた。「お前はなにを等確率にしたいんだ!?!?」 2個のりんごをAさんとBさんの2人に配ることを考えてみよう。全部で4通りの配り方がある。(A, A), (A, B), (B, A), (B, B)の4つだ。 この4通りを等確率にしたいのならば、それぞれのりんごについて1/2の確率でAとBに振り分ければ良い。ちなみにPythonのran

    ランダムだと!?!?(ガタッ - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2013/01/29
  • 「めんどくさい」「やる気がでない」時のチェックリスト - 西尾泰和のはてなダイアリー

    「めんどくさい」「やる気がでない」にも色々なパターンがあります。そこで質問に答えていくと解決策にたどりつくようなチェックリストを作ってみました。 追記: このエントリーの内容を元に平均10問の質問に答えるだけであなたの状況に合わせたアドバイスをする人工知能を作りました。オススメです。 Q1: やる気がでないのは今日に入ってからですか? 数日やる気がでない状態が続いているのですか?それとも今日に入ってからかですか? 今日に入ってから→Q2 数日続いている→Q8 Q2: 最近なにか新しい情報が明らかになりましたか? たとえば計画段階では知らなかった事実が明らかになって、今までやってきた作業が無駄になったとか。何らかの情報が最近明らかになりましたか? はい→状況が変わったのであれば、計画の通りに実行することが必要とは限りません。状況の変化に合わせて計画を変更したり中止したりしてはいけないのですか

    「めんどくさい」「やる気がでない」時のチェックリスト - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/11/19
  • 素数を計算するオートマトンを実装してみた - 西尾泰和のはてなダイアリー

    先日のWEB+DB PRESS Vol.70で和田先生が紹介されていた素数を計算するオートマトン、面白そうだったので僕も実装してみた。 まずは出力結果から。一番左端が空白(状態0)であるとき、それは素数。最初は0〜Fを使っていたんだけどもアスキーアート的にした方が面白いのでこれでw 米 1≫ 1/: 1\> 2 :ノ2\≫ 3 米\3\≫> 4/:ノ② \> 5 米\①  ≫ 6/:ノ米\ ≫> 7 米/: ノ≫> 8/米ノ:ノ |> 9/米\米\ |≫ 10/:ノ: ノ|≫> 11 米 :ノ ・≫> 12/:ノ米\ ・\> 13 米/: ノ・\≫ 14/米ノ:ノ 1\≫> 15/米\米\ 2\\> 16/:ノ: ノ3\\≫ 17 米 :ノ ② \≫> 18/:ノ米\ ①  \> 19 米/: ノ米\  ≫ 20/米ノ:ノ/: \ ≫> 21/米\米X :  ノ≫> 22/:ノ米 ノ: ノ

    素数を計算するオートマトンを実装してみた - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/10/03
  • 「Pythonで記号なしプログラミング」(未完) - 西尾泰和のはてなダイアリー

    竹迫さんがPerlで記号なしプログラミングの偉業を達成したのは7年前だった。(see ppencode) そしてoxyさんがRubyで記号のみプログラミングを達成した(rrencode) 7年前にも「Pythonで記号なしプログラミングできないの?」と言われた。当時若かった(まだ四捨五入したら二十歳だった)僕は「いやー、無理ですよ」とバッサリ切り捨てていた。 あれから7年経って、Pythonの文法はさほど変わっていないけど、僕の考え方が変わった。ユーザの要望に「それは無理」なんて言っちゃうのは下策だ。100%達成することが不可能な問題でも、8割解くのは可能だったりする。「100%やるのはこれこれの理由で無理だが、この条件を緩めれば可能」と提案する方が上策だ。後者では8割分の価値を作り出すことができているが、前者では理由がいかに正しかろうが何も作り出すことができていない。 さて、なにを緩める

    「Pythonで記号なしプログラミング」(未完) - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/09/07
  • Qlobe.py - 西尾泰和のはてなダイアリー

    こちらに種も仕掛けもないPythonのコードがありまして: $ cat qlobe.py C="The Qlobe (c)Yusuke Endoh, 2010. Ported to Python by NISHIO Hirokazu, 2012." v=0000;s="""import zlib,struct ,math,sys,re;d=re.sub('\s+|".*' '"',"", '''^Lcf<LK8,_@7gj* "%.#% :::##" LJ=c5nM)Tp1g0%Xv.,S[<>YoP4 ZojjV)O>qIH1/n[|2yE[>:i "##% ::##########" eC97N-A&Kj_K_><wS5rtWk@ *a+Y5yH?b[F^e7C/56j|p "##: ###############" mRe+:)BO98(Zh)'Iof*nm .,$C5Nyt=PPu

    Qlobe.py - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/09/06
  • Bloom filterのシンプルな実装 - 西尾泰和のはてなダイアリー

    Bloom filterは指定されたものがリストに含まれるならばTrue、含まれないならばFalseを返すようなデータ構造である。もちろん、単純にリストを保持するだけでもリストに含まれるかどうかの判定は可能だが、Bloom filterのメリットはオリジナルのリストを保存しておく必要がないという点にある。そのためメモリの消費量を格段に節約することができる。しかし、そのメモリ効率の代償として多少正確性が失われる。Bloom filterは指定されたものがリストにない場合でもたまにTrueを返すのだ。しかし、間違ってTrueを返す確率はあらかじめ計算することができるので、誤差が許容できる範囲であれば問題なく使うことができる。 下記はアルゴリズム勉強用のシンプルな実装である。 SIZE = 1987 def hashes(s): xs = [0, 0, 0] for c in s: o = or

    Bloom filterのシンプルな実装 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/09/04
  • 発表会でFacebookを使うことのメリットとデメリット - 西尾泰和のはてなダイアリー

    複数人が発表をするタイプのイベント(勉強会とかカンファレンス)で発表中に聞いている人がコミュニケーションをする場としてFacebookのパブリックグループを使うことのメリットとデメリット(追記: パブリックイベントを使うほうが便利だということが判明した) Facebookのメリット Togetterほどの編集コストを掛けなくても、発表者ごとにまとまったリストが作られるので後から読む人に優しい。複数の発表の話題が混ざらない。記録用のIRCボットも必要ない。 発表者ごとのスレッドにパーマリンクがあるので発表後のTwitter・ブログ等での言及がやりやすい。発表者が発表後に読んで質問に答えたり議論をしたりするのもやりやすい。 Twitter上で盛り上がるのに比べて、ハッシュタグのつけ忘れ・表記ゆれ、検索の取りこぼしなどの問題がなく、書き込んでいる人間でのコミュニケーションが密。 Facebook

    発表会でFacebookを使うことのメリットとデメリット - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/08/06
  • 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は使うな」と書いてあった話 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/07/19
  • Github PagesでSphinxの出力をホストする - 西尾泰和のはてなダイアリー

    難しそうな気配を感じて二の足を踏んでいたが意外とあっさりだったのでメモ。 1. Sphinxの出力ファイルを単に配置するだけでは_staticなどが無視されて悲しくなるので、github pages に Sphinx で生成したドキュメントを公開する。 - kuma8の日記を参考に、sphinxtogithubをインストールする。(←意外とあっさりポイント1) 2. make cleanしてmake htmlし直して問題ないことを確認。 3. 今回HTMLを生成するためのsphinxのコードは今このリポジトリで管理されているので、この手元のワークツリーを空っぽにしたりとかしたくない。そこでリポジトリ内で同じリポジトリをcloneする。ちなみにいまプロジェクトルートがlearn_languageで、その中のsphinxdocってディレクトリの中にいる。 $ git clone https:/

    Github PagesでSphinxの出力をホストする - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/06/11
  • JSXでjQueryを動かす上での障害 - 西尾泰和のはてなダイアリー

    飽きてきたのでやる気が0になる前に気づいた点を公開しておく $は識別子に使えない。 jQuery.isはisがJSXの予約語なので使えない。is_とかにリネームする? jQueryがjQuery(...)もjQuery.fooもできる存在なのが厄介。僕も今の実装ではclass jQueryを作ってコンストラクタのnew jQuery(...)とstatic methodのjQuery.fooを使う形になっているけども、見た目をjQueryに似せるのをやめてjQuery(...)的な使い方は全部きちんと名前付きで呼べ(jQuery.find(...), jQuery.ready(...), etc)という方がよい気がする。 jQuery.findの返り値は[0]とかができる「Arrayのような何か」だが、これは実はArrayではないのでJSXではArrayへのキャストが出来ない。 jQuer

    JSXでjQueryを動かす上での障害 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/06/04
  • Dive into .git 資料を公開しました - 西尾泰和のはてなダイアリー

    「Gitのいろんな概念が難しい」だって? じゃあ概念は置いといて、「物理的にはどうなってんの?」を確認してみよう! 社内勉強会でそういう趣旨の10分間デモをやった時の資料を公開しました。Gitがどんなものかイメージしやすくなれば幸いです。 Dive into .git語版 View more presentations from nishio

    Dive into .git 資料を公開しました - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/05/29
  • git indexの中身 - 西尾泰和のはてなダイアリー

    git indexの中身がどうなっているのか知りたくてソースコードを読んだ。 そうそう、以前「first commitが1200行くらいで読みやすい」とオススメされたけど、openssl関係のエラーが出たのでさっさと諦めて最新のバージョンを読んでる。 で、read-cache.cの中のint write_index(struct index_state *istate, int newfd)でindexの書き込みをしている。書かれているのは #define CACHE_SIGNATURE 0x44495243 /* "DIRC" */ struct cache_header { unsigned int hdr_signature; unsigned int hdr_version; unsigned int hdr_entries; };と struct cache_entry { st

    git indexの中身 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/05/24
  • JavaScriptクイズ「x + 0 == x - 0」 - 西尾泰和のはてなダイアリー

    以下の20問のconsole.logで何が出力されるか当ててみよう。 var x = {}; console.log(x + 0 == x - 0) var x = []; console.log(x + 0 == x - 0) var x = (function(){}); console.log(x + 0 == x - 0) var x = null; console.log(x + 0 == x - 0) var x = undefined; console.log(x + 0 == x - 0) var x = Infinity; console.log(x + 0 == x - 0) var x = Array; console.log(x + 0 == x - 0) var x = 0; console.log(x + 0 == x - 0) var x = false; c

    JavaScriptクイズ「x + 0 == x - 0」 - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/05/01
  • シェルスクリプトを多重起動しないようにする - 西尾泰和のはてなダイアリー

    最初はこう書いていた。 lockfile build.lock ... rm -f build.lockだけど、lockfileは失敗した時にデフォルトでは無限にリトライをする。ちょっと出来心で$ for i in {1..100}; do ./foo.sh; done;したから100人の待ち行列が出来てしまった。 やりたかったことは「既に起動していたら続行しないで終了」だったので-r 0でリトライ回数を0にした。 lockfile -r 0 build.lock || exit 1 ... rm -f build.lock

    シェルスクリプトを多重起動しないようにする - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/03/14
  • gitにでかいバイナリファイルを入れるとどうなるか - 西尾泰和のはてなダイアリー

    ふと気になったのでgitにでかいバイナリファイルを入れたらどうなるのか調べてみた。 自分の発表が録画された112メガのaviファイルを実験対象に使う。 cp まずはgitを使わない普通のcpの時間を測っておく。 real 0m0.744s user 0m0.001s sys 0m0.179s git add git addにはコピーの10倍以上の時間がかかる。 real 0m9.339s user 0m7.989s sys 0m0.490s git commit git commitには意外と時間が掛からなかった。 real 0m0.055s user 0m0.002s sys 0m0.031s git clone 先ほど動画ファイルをcommitしたリポジトリをcloneしてみる。単純なファイルコピーに比べると3倍弱時間がかかる。 real 0m1.943s user 0m0.932s

    gitにでかいバイナリファイルを入れるとどうなるか - 西尾泰和のはてなダイアリー
    nobu666
    nobu666 2012/01/23