タグ

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

  • ソフトウェアの肥大化について - bkブログ

    ソフトウェアの肥大化について 肥大化したソフトウェアというとリソースいでメンテナンスがしづらい厄介ものというイメージがあります。しかし、広く使われているソフトウェアは多かれ少なかれ肥大化しているように思えます。ソフトウェアの肥大化はよくないことなのでしょうか。 結論からいえば、必ずしも悪いことではありません。この話題は Joel Spolsky 氏がストラテジー・レターIV:ブロートウェアと80/20の神話で書いています。私が付け加えられることはあまりありませんが、最近、知人との間で話題になったので、少し書いてみたいと思います。 数年前、 Alan Kay 氏の Squaek についての講演を聞きにいったとき、途中でコードのサイズが話題になり、Squeak のコードはこんなに小さい(具体的な数字は忘れました)といって、何千万行もある Windows NT を引き合いに出して、Squaek

  • シンプル=バッドシグナル説 - bkブログ

    シンプル=バッドシグナル説 知人と話していて、シンプルという言葉は手抜きの言い訳として使われることがあまりに多いので、シンプル=バッドシグナル(バッドな兆候)なのではないか、という話になりました。 シンプルが言い訳としてよく使われるのは以下のような場面です。 必要な機能が足りていない デザインがださい そこらじゅう手を抜いている プログラミングにおいてよくあるのが、まじめに実装していないクラスに Simple なんとかという名前をつけるパターンです。自らシンプルと名乗っているものには疑ってかかったほうがいいのかもしれません。 以上、シンプルな考察でした。

  • Cのプログラムの中でブレークポイントを設定する - bkブログ

    Cのプログラムの中でブレークポイントを設定する Cのプログラムをデバッグする際には GDB などのデバッガが役立ちます。通常、ブレークポイントはデバッガの中から設定しますが、デバッグ対象のCのプログラムの中で設定することもできます。 Linux なら #include <signal.h> して、任意の箇所に raise(SIGTRAP); を挿入すれば OK です。 raise() 関数を用いて SIGTRAP シグナルを発生させています。 あるいは x86 限定なら __asm__("int3"); でも OK です。ここでは SIGTRAP を発生させるために int3 (0xcc) 命令を埋め込んでいます。GDB もソフトウェア的にブレークポイントを設定するときは当該箇所に int3 を書き込んでいるので、やっていることは割と似ています (GDBの場合は int3 を書き込む部分の

  • ファイル記述子をUnixドメインソケット経由で渡す - bkブログ

    ファイル記述子をUnixドメインソケット経由で渡す Unix 系の多くの OSには、ファイル記述子を別のプロセスに Unix ドメインソケット経由で渡す機能があります。一見、何のために使うのかよくわからない機能ですが、 glibc の nscd はこれをうまく使っています。 nscd (name service caching daemon) は glibc 内で行われる名前関連の問い合わせをキャッシュするサーバです。NIS や LDAP などを用いてネットワークベースでユーザ管理を行っている場合、 getpwuid() などの関数はユーザ名の取得にネットワークアクセスを必要としますが、 nscd を立ち上げておけば、二度目からの同じ問い合わせはキャッシュから得られます。 nscd を立ち上げている GNU/Linux システムでは、キャッシュファイルが /var/db/nscd 以下に作

    nobyuki
    nobyuki 2012/01/13
  • UNIXにみる世代間の断絶

    (まだまだ調査中) UNIXにみる世代間の断絶をまとめようという試 みです。どちらが良い悪いという比較をするつもりはありません。 両者の良い点を学んでいこう (新旧自在の hybrid type を目指そ う) 、というのがこの文書の目的です。

  • いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++

    配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ プログラムを書いていると、他のプログラミング言語の記憶とごっちゃになって、「配列の後ろに要素を追加するのは push だっけ、 append だっけ」などと混乱することがあります。特に Ruby, Python, JavaScript はコードの書き方が似ているので、この問題が起きがちです。 そこで、備忘録として、 Ruby, Python, JavaScript, Perl, C++ の配列操作の比較表を作りました。一番慣れている Ruby を基準にしています。間違いなどがあったらご指摘いただけると助かります。他の言語のもあるといいなあ。 Ruby (Array) Python (list) JavaScript (Array) Perl (@) C++ (std::vector)

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

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

  • 横着プログラミング 第8回: pdumpfs: 毎日のスナップショットを保存する

    最終更新日: 2002-11-18 (公開日: 2002-11-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 The steady state of disks is full. (ディスクの定常状態はフルだ) -- Ken Thompson *1 ハードディスクの容量がどんなに増えても、ディスクがいっぱいに なるまで必ず消費される、という法則がある。実際、私はつい 3年 ほど前までは 4Gバイトのハードディスクで間に合っていたが、現 在は 70 Gバイトのディスクをほぼフルに使っている。 70Gバイトも何に使っているか改めて調べてみると、 MP3音楽データ MP3で録音したラジオ講座 Linux ディストリビューションなどのアーカイブ 英和や国語などの電子辞書 論文などの文書アーカイブ ホームディレクトリ以下

  • 横着プログラミング 第5回: QuickML: 超お手軽なメーリングリスト

    最終更新日: 2002-07-18 (公開日: 2002-07-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 わたしは、インターフェイスの研究においては、試験と評価という 方法がそれほど役に立つものだとは思っていない。傲慢な考え方か もしれないが、わたしがそう判断する根拠はこうである。つまり、 注意深く試験しなければ見つからない程度の違いならば、そもそも そこに大した違いはないということなのだ。 -- Nicholas Negroponte *1 年がら年中メールを書いている。以前は計算機に向かっているとき だけだったが、最近では携帯電話でメールを打つことも多くなった。 当然ながら、年がら年中メールを読むことになる。1日に受け取る メールのほとんどはメーリングリストからのものである。 「インターネットはメーリング

    nobyuki
    nobyuki 2009/04/07
  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

  • yak shaving で人生の問題の80%が説明できる問題 - bkブログ

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

  • 1