タグ

ブックマーク / 0xcc.net (42)

  • bkノート

    Google+に書いていたエッセイのアーカイブです。 すぐ置き換わるから大丈夫 #62 TeXの思い出 #61 Welcome to the industry! #60 ビルドという名のトンネル #59 キーボードを替えた話 #58 テストを実行するとログインシェルから追い出される問題 #57 シークレットストーリー #56 ドットコムバブルの思い出 #55 コミュニケーション能力とは何ぞや #54 メールで時間を無駄にしない方法 #53 パッチの数え方 #52 zipファイル中毒 #51 はじめてのIPv6 #50 最近の毛刈り #49 練習してもっと速くやるべし! #48 忍耐力指向プログラミング (Patience Oriented Programming) #47 VPNの謎 #46 ウェブプログラマへの道 #45 プログラムの見通しをよくする方法 #44 パイプがなぜか詰まってし

  • シークレットストーリー #56

    学生の頃、オープンソースのプログラムを作って公開したところ、予想外に人気が出て、いろいろと面白い経験をした。その中のエピソードをひとつ。 あるとき、何かの用事で東京にやってきたとき、開発者の集まりがあった。そこで知り合った一人は、だいぶ年上だけどハイテンションで独特な雰囲気を漂わしていて、東京を案内してくれたりと、あれこれと親切にしてくれた。お礼を言おうとすると、仕事で使わせてもらっているから、と言って、まったく耳を貸してくれない。 一方で、私がするたわいもない話には、しっかりと耳を傾けてくれるので、氏の職場にお邪魔をして、いろいろな話をした。確か、私はこんなようなことを言った。 このプログラムはたいしたことは何もやってないし、もっとすごいプログラマはいくらでもいて、そういう人たちからパッチがきたりすると、どうも引け目を感じてしまうんですよね。 すると、氏はこんな話をしてくれた。 その昔、

  • 練習してもっと速くやるべし! #48

    数年前の話。とあるレポートを書くのに苦労していると、たまたま当時のマネージャーがやってきた。 私「このレポート書くのって大変っすねえ」 マネージャー「そう?どのくらい時間かかってるの?」 私「正直いって、2時間くらいですね」 マネージャー「そりゃあきれるほど遅いな。20〜30分くらいに縮めないと」 私「でもレポートの品質は大切だと言ってませんでしたっけ?」 マネージャー「だからといって2時間もかかるってわけじゃない。練習してもっと速くやるべし!喝!」 ひええ。と、これはまあ考えてみれば当たり前のアドバイスだけど、こんなことを単刀直入に言われることはなかなかないのでインパクトがあった。実際、時間を計測して練習すると20~30分で書けるようになった。 このルールはコードを書いているときにも適用できる。練習してもっと速くやるべし!短い時間で質の高い仕事をするのが生産性の質である! なんだけど、

  • man読め!という強迫観念 #13

    「man読め!」「過去ログを調べてから質問しろ!」「レスって何ですか!」[1] みたいな昔のネット文化に浸かってコンピュータに関するもろもろを学んだ私は、わからないことは自分で調べるのが大原則であり、人に質問するのは最終手段だと思っていた。迂闊にくだらない質問でもしようものなら、この恥知らずの、ど素人めが!という勢いで罵倒されてしまうのだ。 今思えば、これは一種の強迫観念のようなものであった。こういった文化に触れたおかげで自分で調べ物をするのが苦ではなくなった、という点ではよかったのだが、「man読め!」のような偏狭なスタイルに毒されて、自分もそういう態度をとるようになってしまった、というのは反省すべき点である。 それはさておき、自分で調べるのが基というのは今でも大体そう思っている。が、チームで格的に開発するようになって学んだのは、自分で調べることに時間を費やしすぎてはいけない、という

  • いやなブログ: 学校では教えてくれないバッドノウハウ英語 アーカイブ

    誤った判定 - 学校では教えてくれないバッドノウハウ英語 #13 学校では教えてくれないバッドノウハウ英語の13回は、誤った判定(間違った判定)に関する表現を取り上げたいと思います。 続きを読む...

  • objcopy で実行ファイルにデータを埋め込む

    普通のやつらの下を行け: objcopy で実行ファイルにデータを埋め込む プログラムの実行に不可欠なデータをファイルから読み込んで利用することがあります。この方法を用いると、データの更新が手軽にできるという利点がある一方で、単体の実行ファイルで実行できない、データファイルが紛失してしまう、といった問題もあります。 普通のやつらの下を行けの第5回として、今回は objcopy を用いて実行ファイルにデータを埋め込む方法を取り上げたいと思います。 データの埋め込み 小さなデータをソースコードに埋め込むのは簡単です。ソースコード中に埋め込まれている "hello, world" などのメッセージはソースコードに埋め込まれたデータといえます。 一方、画像や辞書などの巨大なデータをソースコードに埋め込むのはそう簡単ではありません。まず、データを文字列などに変換する必要がある上に、変換後の巨大なソー

  • 設定ファイルの整理 - Emacs 編 - bkブログ

    設定ファイルの整理 - Emacs 編 zsh に続き、Emacs の設定を整理しました。Emacs の設定もかなり垢が溜まっていることが予想されます。 Emacs を使い始めたのは 1996年頃だったと思います。zsh と同様、emacs の設定ファイルもここ数年は放置状態でした。ひさびさに見てみると、やはり垢だらけでした。 (defun support-color-p () (or (eq window-system 'x) (>= (string-to-number emacs-version) 21))) (when (support-color-p) (cond ((eq window-system 'x) (set-face-foreground 'region "DarkSlateBlue") (set-face-background 'region "#ddccff") (

  • ポイントにつられやすい人 - bkブログ

    ポイントにつられやすい人 航空会社のマイルや買い物で貯まるポイントの類に私は結構つられやすい方で、まめに貯めたり使ったりしています。そんな話をしていたら知人に「ポイントは(発行側にとって)負債」という考え方を教えてもらいました。 いわく、ポイントは発行側のお店にとっては負債(いつか客に返さないといけない債務)であり、反対に、客の側から見ればお店にお金を貸しているようなもの(しかも利子はつかない)、ゆえに、早く使って回収するのがよい、とのこと。 有効期限が切れたり、店がつぶれたり、といったリスクを考えて、こまめに使う方がいいと思っていましたが、早くお金を返してもらうという考え方の方がわかりやすくて強力です。 ポイントがもらえるより、その分安くしてもらった方がありがたいのですが、最近はたくさんの店でポイントを発行しているので、ポイントから逃れて暮らすのは難しそうです。 と言いつつ、ポイントプレ

  • パターン、Wiki、XP ~時を超えた創造の原則 - bkブログ

    パターン、Wiki、XP ~時を超えた創造の原則 『パターン、Wiki、XP ~時を超えた創造の原則』を読みました。著者の江渡浩一郎さんとは面識があるのでバイアスがかかってしまいますが、感想を率直に書いてみようと思います。 これは類書が見当たらない、非常にユニークなです。 まず第一に、パターン、Wiki、XP をそれぞれ別個に扱ったはよく見かけますが、これらをまとめて扱ったは見たことがありません。しかもなぜか建築まで登場します。第二に、パターン、Wiki、XP といったにありそうな実践的なハウツーは一切なく、歴史と思想に焦点を絞っています。第三に、歴史を紐解くという形式をとりながら、優れた創造に必要な原則とは何かを探るという思索的なでもあります。 このように書くと、ごった煮的で、何の役にも立たたず、その上、明確な答えもない、というとんでものように聞こえますが、実はそのようでいて

  • プログラミングの力を生み出す本 - bkブログ

    プログラミングの力を生み出す 知人がお勧めしていた『プログラミングの力を生み出す』を読みました。 読みはじめてすぐに、このは異色なプログラミングの入門書であることがわかりました。普通のプログラミングの入門書は「プログラミングとは」という序論が終わったら hello, world 的なものからコードを書き始めるものが多いと思うのですが、書の導入はまるっきり異なります。1章の目次は以下の通りです(カッコ内は私のコメント)。 1章 プログラミングへの導入 プログラミングことはじめ(なぜか例が x-y プロッタ) プログラミングの構造(なぜかフローチャート登場) データ(整数、文字列、論理型など) プログラミング言語の構造(コンパイラ、リンカの説明とか) x86 CPU の概要(レジスタの説明とか) GCC と GNUPLOT(なぜか GNUPLOT が導入に登場...) GNU アセンブ

  • split の研究 - bkブログ

    split の研究 split 関数の挙動が言語ごとに微妙に異なると知人と話題になったので調べてみました。結果はまとめをどうぞ。 Ruby まずはRubyから調べてみます。irb を使って調べました。 % irb ... まずは普通に分割 >> "a,b,c".split(",") => ["a", "b", "c"] 末尾に空要素があると、省略されてしまう >> "a,,c,,".split(",") => ["a", "", "c"] 末尾の空要素を省略しないためには -1 が必要 >> "a,,c,,".split(",", -1) => ["a", "", "c", "", ""] 空文字列だと結果も空 >> "".split(",") => [] -1 をつけても同様 >> "".split(",", -1) => [] 分割パターンを指定しない場合も同様 >> "".split

    samurai20000
    samurai20000 2008/08/31
    splitの空要素、入力が空文字列の挙動
  • yak shaving で人生の問題の80%が説明できる問題 - bkブログ

    yak shaving で人生の問題の80%が説明できる問題 つい最近、 yak shaving (ヤクの毛を刈る)、という言葉を知りました (原典)。これは「一見無関係に見えるけど、真の問題を解くのに必要な問題を解くのに必要な(これが何段階も続く)問題を解くのに必要な活動」という意味の言葉です。 yak shaving は、ようするに「ある問題を解こうと思ったら別の問題が出てきて、それを解こうと思ったらさらに別の問題が出てきて…」ということが延々と続く状況を表しています。ちなみに、ヤクとは毛が長い、牛の一種です。 yak shaving は、以前に覚えた bikeshed と同じくらい便利そうな表現です。というもの、プログラムを書いていると yak shaving 的な状況がすぐに発生するためです。 たとえば、「Amazon のほしい物リストを CSV 形式に変換して Excel で読み

    samurai20000
    samurai20000 2008/06/21
    yak shavingおもしろいな
  • デジイチデビュー、一年後 - bkブログ

    デジイチを買ってから1年以上経ちました。すぐ飽きるかと思いきや、いまだ飽きずに遊んでいます。同じ頃にデジイチを買った周りの人間も案外、飽きずに楽しんでいるようです。 ここでは、1年ほど使ってみて、「こんなことは最初から知っておけばよかった」と思ったことをまとめてみます。説明書に載っていることばかりですが…。 基的な事柄 絞り優先モードだいたい絞り優先モードで撮っています。開放(絞っていない状態)だとシャッター速度が速く、ピントより奥と手前がぼけます。反対に、絞るとシャッター速度が遅くなって、前後ともにシャープになります。『カメラのしくみ』にしくみが載っています。シャッター速度よ く、「1 / 焦点距離(35mm換算)」が手ぶれせずに撮れるシャッター速度の限界の目安と言われています。どのくらい当てになる目安か不明ですが、手ぶれ補正機能のない E-330 では 1/2, 1/4 秒といったシ

  • カメラのしくみ - bkブログ

    このは日カメラ博物館の売店で見つけました。売店の限られたスペースの中で並んでいるには何か理由があると思い、著者略歴を見ると、ニコンに長年勤めた後、現在は大学で教えているという豊田堅二さんという方でした。 もともと、なぜカメラのしくみに興味を持つようになったかといえば、 デジイチを使うようになってから、絞りやシャッター速度といったパラメータに気を使うようになった割に、そのしくみをちっとも理解していないのはいかがなものか、と思い始めたためです。 これはちょうど、プログラミングで「a() という関数を使えば A という結果が得られるが、そのしくみはわからない」という状態でプログラムを書いているのと似ているかもしれません。求める結果が得られればそのしくみを知らなくても多くの場合、困りませんが、しくみを知っているのと知らないのでは大違い、という場合もあります。 というわけで、『カメラのしくみ』を

  • 外に追い出す - 学校では教えてくれないバッドノウハウ英語 #12 - bkブログ

    外に追い出す - 学校では教えてくれないバッドノウハウ英語 #12 学校では教えてくれないバッドノウハウ英語の12回は、factor out を取り上げたいと思います。 factor out はコードレビューの際によく使われる「外に追い出す」という意味の表現です。たとえば、長くなりすぎた関数の一部分を外に追い出すときに factor out といいます。 例) Would it be too hard to factor out the inner loop into a separate function? その内側のループを別の関数として外に追い出すのは難しい? You should factor out the part common to foo() and bar(). foo() と bar()で共通している部分を外に出すべし。 たいていの場合、factor out はコードの

    samurai20000
    samurai20000 2007/04/28
    factor out はコードレビューの際によく使われる「外に追い出す」
  • 数字に関する短縮記法 - 学校では教えてくれないバッドノウハウ英語 #8 - bkブログ

    数字に関する短縮記法 - 学校では教えてくれないバッドノウハウ英語 #8 学校では教えてくれないバッドノウハウ英語の8回は、数字に関する短縮記法を取り上げたいと思います。 2x, 10x, ... ソフトウェアの開発では、性能が2倍になった、などのように数字が何倍になったかを議論することがよくあります。このようなときに便利なのが数字の後ろに x をつける記法です。 例) C++ is 10x faster than Perl for this kind of application. この手のアプリには C++ の方が Perl より10倍速いよ This simpler code gained a 5x performance improvement. もっと単純なこのコードで 5倍の性能改善が得られたよ。 上の例は x を使わない場合、 ten times faster や five-

  • いやなブログ - スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl

    スクリプト言語用のデバッガの使い方 - Ruby, Python, Perl スクリプト言語用の CUIのデバッガの使い方を簡単にまとめました。対象言語は Ruby, Python, Perl です。 私は C, C++ でプログラムを書いているときはデバッガ (主に GNU/Linux 上の gdb) を頻繁に利用します。しかし、スクリプト言語ではそれほどでもありません。これはおそらく次のような理由によります。 ビルドが不要なので printf デバッグが容易 (ある程度大きい C++ のプログラムではビルド時間が長いので printf の挿入はしんどい) 異常終了時にスタックトレースが表示される (Ruby, Python なら自動、Perl の場合は use Carp; $SIG{__DIE__} = \&Carp::confess; など) オブジェクトのインスペクトが簡単 (Ru

  • 問題を再現させる - 学校では教えてくれないバッドノウハウ英語 #5 - bkブログ

    問題を再現させる - 学校では教えてくれないバッドノウハウ英語 #5 学校では教えてくれないバッドノウハウ英語の5回は、"reproduce" と "reproducible" を取り上げたいと思います。バグ報告のやり取りの際に役立つ表現です。 エラーを再現させる、という意味での「再現させる」は英語では "reproduce" という動詞を使います。問題を再現させることはデバッグの基ですが、報告を受けたバグが手元では再現しないことはよくあります。そのようなときは "I can't reproduce the error" (そのエラー再現できんかったよ) と相手に伝えるといいでしょう。 例) I tried the same configuration you used, but couldn't reproduce it. お前と同じ設定を試してみたけど、再現しなかったよ。 A way

    samurai20000
    samurai20000 2007/01/14
    reproduce
  • 動くようにする - 学校では教えてくれないバッドノウハウ英語 #4 - bkブログ

    動くようにする - 学校では教えてくれないバッドノウハウ英語 #4 学校では教えてくれないバッドノウハウ英語の4回は、"get it to work" を取り上げたいと思います。トラブルシューティングの場面で使える表現です。 "get it to work" の直訳は「それを動くようにする」です。簡単にいえば「動かす」です。典型的な用例は I can't get it to work で、「動かせねー!」というときに使います。 例) I tried all sorts of things but just could not get it to work. いろいろやってみたけど、動かせなかったよ。 I couldn't figure out if there was a way to get it to work. 動かす方法があるかわからんかったよ。 Do you happen to

    samurai20000
    samurai20000 2007/01/02
    get it to work
  • もし必要なら - 学校では教えてくれないバッドノウハウ英語 #3 - bkブログ

    もし必要なら - 学校では教えてくれないバッドノウハウ英語 #3 学校では教えてくれないバッドノウハウ英語の3回は、"if need be" を取り上げたいと思います。"if need be" はソースコードのコメントの中でとりわけよくみられる表現です。 "if need be" の意味は「もし必要なら」です。同じ意味を表す "if necessary" という表現も一般的ですが、"if need be" の方が2文字分短いためか、"if need be" の方を好むプログラマも多いようです。 例) // Change the font size if need be. // フォントサイズを変更する、必要なら。 We could help improve the test coverage if need be. 必要ならテストカバレージの改善を手伝ってもいいよ。 この表現はメールでもよ