タグ

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

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

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

    僕は結城さんのことが好きなんだなぁ - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2015/05/09
    信頼という概念の言語化。腑に落ちた。
  • Facebookに書き続けることは損失なのではと思い始めた - 西尾泰和のはてなダイアリー

    ブログの更新頻度が落ちてるのは、Facebookに書いた方が有益なフィードバックの頻度が高くて、ついついそっちに書いてしまうから。 そうやってFacebookにばかり書いていると「あれ、この前Facebookに認知心理学が生まれてきた流れについて書いたと思うんだが、あれどこだったかな、参考にしたいのだが…」なんてことが起こるようになってきた。以前であれば、だいたいそういうのは自分のブログに書いているので、Googleに行って「西尾泰和 認知心理学」とかで検索すればすぐ見つかった。しかしFacebookに書いたものはそういうわけにはいかない。 で、発掘するのにすごく時間がかかったり、発掘できなくてあきらめてしまったりする。これってものすごい損失なのではないか?クロールして手元に保存して検索できるようにする必要があるのではないか? そしてそのクロールもまた手軽ではない。エクスポートの機能はある

    Facebookに書き続けることは損失なのではと思い始めた - 西尾泰和のはてなダイアリー
  • FlaskをJSから叩いてエラーになった時に対話的デバッグする方法 - 西尾泰和のはてなダイアリー

    WebアプリフレームワークのFlask(が内部で使っているWerkzeug)は、デバッグモードをONにしておくとエラーが起きた時にそのエラー画面からブラウザ上で対話的にコードを実行したり変数を表示させたりしてデバッグが出来る。これは超便利。なのだけど、最近JSからAPIを叩くケースが多くなって、その場合JSが予期しないHTMLを受け取ってパースに失敗するだけなので折角の対話的デバッグが生かせない。 そこで、エラー時には新しいwindowを開いて、レスポンスの内容をそちらに書き出すようにした。初回だけポップアップブロックが発動してしまうけど、それ以降はこれでAPIでも対話的デバッグが出来る。 $.ajax({ url:'/buggy/', data: 'q=42', success: function(x){console.log(x)}, error:function(x){ var w

    FlaskをJSから叩いてエラーになった時に対話的デバッグする方法 - 西尾泰和のはてなダイアリー
  • HTTPよりHTTPSの方が速い?それSPDYですから! - 西尾泰和のはてなダイアリー

    HTTP vs HTTPS Test — Does encryption make websites slower or faster?というサイトでHTTPとHTTPSの速度の比較ができて、しかもHTTPSの方が速い、なぜ?という話をFacebookで見て、僕もChromeで試してみたら確かに速い。なぜ? SPDYですよね。参考文献:Web表示の高速化を実現するSPDYとHTTP/2.0の標準化 | 最新の技術・取り組み | IIJ SPDYが使われているかどうかを確認できるSPDY indicator - Chrome Web Storeをインストールして試してみたら「SPDY3.1が使われています」という表示が出た。 chrome://net-internals/#spdy を見ると以下のようになっていた。Force SPDY Alwaysをtrueにするか、SPDY Enabled

    HTTPよりHTTPSの方が速い?それSPDYですから! - 西尾泰和のはてなダイアリー
  • でかい企業のOSSがApache License 2.0だと嬉しい理由 - 西尾泰和のはてなダイアリー

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

    でかい企業のOSSがApache License 2.0だと嬉しい理由 - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2014/02/22
    特許訴訟の抑止力。
  • 評価戦略について - 西尾泰和のはてなダイアリー

    「コーディングを支える技術」の書評で、評価戦略についていくつかご意見をいただきました。 id:dankogai 評価戦略がまるまる抜けてしまったのは残念である。かつては事実上先行評価しかなく、評価戦略において選択肢があること自体ほとんど知られていなかったが、今では遅延評価を主体とする言語も普及したとまでは言えないものの、充分実用的に使われるようになってきている。著者はもちろんHaskellを知っているし、書にも登場するにも関わらず、これが抜けているというのはなんとももったいない。もし改訂版を著す機会があったら、絶対に一章割いていただきたい。 http://blog.livedoor.jp/dankogai/archives/51864510.html 確かに、世の中の大部分の言語が先行評価なせいで「そういうもんだ」と思い込んでしまっている人も多そうですね。そういう人にHaskellでun

    評価戦略について - 西尾泰和のはてなダイアリー
  • 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__を使ってメモリを節約 - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/10/21
    暗黙の辞書が__slots__になるだけで全然違う
  • Pythonの__xxx__まとめ - 西尾泰和のはてなダイアリー

    データモデル - 特殊メソッド名 — Python 2.7ja1 documentation 27.11. __future__ — future 文の定義 — Python 2.7ja1 documentation 30.7. runpy — Python モジュールの位置特定と実行 — Python 2.7ja1 documentation 以下がpython2.7.3リポジトリ中のすべての*.pyから出現頻度をカウントしたもの、ベスト100。全部見たい人はこちら: Pythonの__xxx__の集計。1行解説を付けてみたが途中で飽きた。 __init__ 3058 コンストラクタ __name__ 1729 モジュールの名前。インポートされたのではなくスクリプトとして起動された時には__main__になることを利用して(続き) __main__ 1191 インポートして使う時とスクリ

    Pythonの__xxx__まとめ - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/09/02
    結構__slots__が使われている。
  • 発表会でFacebookを使うことのメリットとデメリット - 西尾泰和のはてなダイアリー

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

    発表会でFacebookを使うことのメリットとデメリット - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/08/05
    これはFacebookのグラフがTwitterと同じ範囲まで広がっても構わない人でないとキツイ
  • Macのスクリーンショットで1日の作業を記録して動画で振り返り - 西尾泰和のはてなダイアリー

    スクリーンショットを10秒に1回撮影して連番の画像で保存するスクリプトを走らせて1日の作業を記録し、一日の最後にffmpegで動画にして振り返りをしてみた。結構面白いよ。 社内掲示板やメーラやエディタで文章がにょきにょき伸びていくのが見えるのも楽しいけど、一日の終わりに「ああそうそう、これを調べてたんだった、途中でインタラプトが入って忘れてた」「この調べ物をした後サイドバーに出てた記事を読みふけってしまったけど、必要ではなかったな」「この作業は今やるべきことじゃなかったな」「時間を結構無駄にしたな」などという振り返りができる。反省。 10秒に1回撮影したのを10FPSで動画にしているから1時間が36秒になる。もうちょっと速くしてもいいかも。1分に1枚にすると1時間が6秒か。その間くらいかなー。 記録用スクリプトが連番で画像を吐いているのは後でffmpegで読み込ませるため。screenca

    Macのスクリーンショットで1日の作業を記録して動画で振り返り - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/08/02
    screencapture(1)
  • 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は使うな」と書いてあった話 - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/07/19
    普通に使ってた…。
  • zshのgitプロンプトにrebase中であることも表示してみた - 西尾泰和のはてなダイアリー

    https://github.com/nishio/dotfiles/commit/42ddca1cff1716f806f052067fc49ea241aba0d4 zshで文字列やパスを操作する方法がわからなかったのでpythonで実装しておいた。もっと良い方法があったらpull requestください。 追記 時々 git_is_rebasing:local:1: not valid in this context: not-rebasing というメッセージが出る。どういう状況で出るのか未確認だが、submodule addしたsubmoduleの中に入った時とかに出る。。 追記 直した https://github.com/nishio/dotfiles/commit/16534c0597904fdfaf694c0675ecf276384b5642

    zshのgitプロンプトにrebase中であることも表示してみた - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/07/16
    python <<EOF (code) EOF みたいな書き方を初めて見て、なるほどと思った。
  • Pythonのwith文とJava7のtry-with-resourceとC#のusingの比較 - 西尾泰和のはてなダイアリー

    http://nhiro.org/learn_language/with_statement.html Java7は名前の通りtryと抱き合わせになっている。C#とPythonは分離されている。なのでJava7でC#やPythonと同じ挙動をしたければ必要なくても空のfinallyを書くことになる。(追記: finallyやexceptを伴わないtryもOKでした。thanks id:nowokay) 体が正常終了または例外を投げて異常終了した場合のどちらでも呼ばれる「後片付けメソッド」はC#だとDispose、Java7だとclose、 Pythonだと__exit__。しかしPython以外は引数を取らない。体が正常に終了したのかどうかはどうやって知るんだろうか。知る必要はないという判断なんだろうか。追記: Pythonがどんな引数を取るのか他の言語の人には想像がつきにくいらしいの

    Pythonのwith文とJava7のtry-with-resourceとC#のusingの比較 - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/07/15
    安全なリソース解放 コメント欄も
  • 作りたいもの: 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム - 西尾泰和のはてなダイアリー

    増井さんの作りたいものリストを作ろうというスライドを見て「確かに『いつかやる』リストに入れてるだけじゃ発展しないから、公開しても問題ないものは公開したらいいなぁ」と思ったので早速やってみました。2つ目。 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム なんちゃらVille系のゲームはどうして人の心をとらえるのか? 「小さい粒度のミッションが提示されて、それを達成すると次のミッションが表示される仕組み」は、頻繁に「達成感」という報酬を与えることで人の心をとらえるのだろうか? そういえば僕が昔書いた、対話的インタプリタで1歩ずつ操作しながらPythonを覚えるコンテンツも評判が良かったなぁ。だったらgitの使い方も、1歩ずつ対話的にミッションをクリアしながら学べるようにしたら面白いんじゃないか? 学習ユーザのユースケース 実は既にgithubにおいてあったりする。一応遊べ

    作りたいもの: 1歩ずつミッションをクリアすることでGitの使い方を覚えられるゲーム - 西尾泰和のはてなダイアリー
  • git config --add receive.denyCurrentBranch ignoreはどう危険なのか - 西尾泰和のはてなダイアリー

    git config --add receive.denyCurrentBranch ignoreをやるとどう危険なのか。一言で言うと「ある人が行った実装を、別の人が無意識に削除してコミットする」という事態を引き起こす。これが危険じゃなくて何なんだ。 まずローカルで実験用のリポジトリを作ってみよう。fという名前のリポジトリを作って、READMEをおく。今は中身は空っぽだ。 $ git init f Initialized empty Git repository in /Users/nishio/tmp//f/.git/ $ cd f f$ touch README f$ git add README f$ git commit -m "initial" [master (root-commit) ce6d7d5] initial 0 files changed, 0 insertions

    git config --add receive.denyCurrentBranch ignoreはどう危険なのか - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/04/20
    >一番素直なのは「githubなりbitbucketなり自分で作るなりしてbareなブランチを用意する」なんだけども、あえて今回のような「bareでないリポジトリからcloneして、しかも二人ともmasterで作業している」というひどい状態から
  • 言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー

    言語女子会: undefとnullは両方必要?の続編です。 varは必要なの? とあるプログラミング言語が集う女子会にて: Python: JavaScriptちゃんってさ、なんでvarだらけなの? JavaScript: えっ、変? Python: varなんかいらなくない?私ぜんぜん持ってないよ? JavaScript: えー、じゃあ変数をどうやって宣言するの? Python: 宣言っていうか…「x = 1」みたいな代入文があれば変数xが必要なのって自明じゃない?宣言とか必要? Ruby: 必要ないよね。っていうか変数宣言とか古臭くない? JavaScript: そうかなー。 Python: 少しダサイかも。ほら断舎離ブームだし要らないものは捨てなきゃ! JavaScript: 要らないかなぁ、変数宣言。Pythonちゃんは関数がネストしているときに外側のスコープの変数に代入するのって

    言語女子会2: varは必要?/privateがない? - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/03/22
    リフレクションを持ち出されたらJavaちゃんのprivateすらも逃げ出すしかない…。
  • 禅 of Python: 20の格言 - 西尾泰和のはてなダイアリー

    Pythonには "Zen of Python"という、Pythonの設計原則を簡潔に20個の格言にまとめたものがあります。それを単純に翻訳しても伝わりにくいだろうなぁと思ったので、訳注をたくさんつけて翻訳してみました。 美は醜より良い 明示は暗黙より良い 単純は複雑より良い 複雑なほうが理解しにくいよりは良い *1 平坦は入れ子より良い 疎は密より良い *2 読みやすさが重要 「特殊なケース」はルールを破るほど特殊ではない*3 しかし、実利は純粋さより重要 *4 エラーを黙って通してはいけない ただし、明示的に黙らせた場合は別 *5 曖昧さに面したら、正解を推測したくなる誘惑を退けよ *6 一つの明確なやり方があるべきだ。そしてただ一つであることが望ましい。 *7 しかし、その方法はオランダ人以外にはとっつきにくいかもね *8 今やる方がやらないより良い しかし、やらないほうが、今 *す

    禅 of Python: 20の格言 - 西尾泰和のはてなダイアリー
  • 言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー

    Twitterのタイムラインが面白すぎて、ついうっかり言語を擬人化して脳内で言語女子会なるものを開いてしまいました。なお、登場人物と実在の人物は1対1に対応しません。 undefinedとnullの両方必要なの? とあるプログラミング言語が集う女子会にて: Perl: そういえばさ、なんでJavaScriptちゃんってundefinedとnullの両方もってるの? JavaScript: えっ、未定義の変数にアクセスした時undefined返したいじゃない? Python: 例外投げて死ねばいいじゃん Ruby: 例外投げて死ねばいいよね Python & Ruby: ねー♡ Java: いやそこは参照型ならnull、数値型なら0で初期化すべきでしょ C: これだから最近の若い子は…初期化にだってコストが掛かるんだからね!デフォルトで初期化するなんて無駄遣いよ!必要な人だけが責任をもって初

    言語女子会: undefとnullは両方必要? - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/03/17
    凄く面白い。ブレずにKeyError投げて死にまくるPythonちゃん最高やでえ。
  • githubでfork元の変更を取り込む - 西尾泰和のはてなダイアリー

    githubで誰かのリポジトリをforkしたんだけど、自分がいじり始める前にその人が更新をした。差分を自分のforkしたリポジトリにも適用したいなーと思ったが、それはWebUIでできるのか、それとも自分の作業コピーで相手のをpullしてから自分のリポジトリにpushするのか…(from my tweet) WebUIでできるのかなとしばらく探してしまったが見つけられなかったので下のようにした。taroのところにはfork元を作った人の名前を入れた。 $ git clone <myrepos> $ git remote add taro <taro's repos> $ git pull taro masterこれで問題なく手元のリポジトリにマージされた。taroのリポジトリには書き込み権限がないから、僕が作業を行ったら自分のリポジトリにpushして、それからtaroにpullリクエスト出せ

    githubでfork元の変更を取り込む - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/02/18
    いわゆるupstreamを取り込むやり方、fetch -> merge master upstream/masterする他に、同期用にmasterはそのままとしておいて適宜rebase -iしつつ作業ブランチで黙々と進める方法も。
  • 他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー

    他の言語に慣れた人がPythonを使ったときにつまずきがちな9つのポイントの続編。ささださんも書いています see: だいありー 0は真, 空文字列も真 C言語などと違って、0は偽ではない。PythonJavaScript, PHPと違って空文字列も偽ではない。 >if 0 then print "true!\n" end true! > if "" then print "true!\n" end (irb):1: warning: string literal in condition true! 括弧がなくても0引数での関数呼び出しが起きる PythonJavaScriptでは式中に現れた関数名は関数を指す。しかしRubyでは0引数での呼び出しが行われる。 # Python >>> def foo(): print "foo!" ... >>> foo <function foo

    他の言語に慣れた人がRubyを使ったときにつまずきがちな9つのポイント - 西尾泰和のはてなダイアリー
    raimon49
    raimon49 2012/01/28
    真偽評価やクラス宣言で拡張してしまうところは、つまづきと言うかRubyの哲学を感じさせる部分