タグ

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

  • bkブログ

    bkブログ プログラミングやバッドノウハウについてのブログ 2004-2011年に書いていたブログのアーカイブです。 机の上のもののワイヤレス化 - Microsoft Arc Keyboard の導入 iPodは何を変えたのか? 人が問題にぶち当たったときには、どうするか? ソフトウエアの肥大化について、の続き ソフトウェアの肥大化について ある程度の年齢を迎えたプログラマが抱える悩み Unicode の雪だるま 設定ファイルの整理 - Emacs 編 設定ファイルの整理 - zsh 編 パターン、Wiki、XP ~時を超えた創造の原則 マッキントッシュ物語 - 僕らを変えたコンピュータ GNU diff の地味だけど便利な機能 C++ の string と vector の reserve() の挙動 暗号化 - プライバシーを救った反乱者たち Best Software Writin

  • いやなブログ: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

    Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで

  • checkstack.pl で関数のスタック消費量を調べる - bkブログ

    checkstack.pl で関数のスタック消費量を調べる Linux カーネルのソースコードに付属する checkstack.pl を使うと、C/C++ のプログラムの関数のスタック消費量を調べることができます。checkstack.pl は objdump -d のディスアセンブルの出力からスタックポインタの操作をパターンマッチしてスタックの消費量を計算しています。 入手方法 checkstack.pl は Linux カーネルのソースコードに付属しています。Debian GNU/Linux sarege なら次のようにコマンドラインから実行して取得できます。ソースツリーに含まれる scripts/checkstack.pl が目的のものです。 % apt-get source kernel-source-2.6.8 使い方 checkstack.pl の使い方は簡単です。スタックサイ

  • Binary Hacks - バイナリアン度チェック

    Binary Hacks 的な技術に精通したエンジニアのことを、専門用語で 「バイナリアン」と呼びます。 ここでは、みなさんのバイナリアン度を診断できるチェックリストを用意しました。 目次を見て、 「こんな内容はぬるい」と思った方も、 「バッドノウハウばっかり」 と思った方も、ぜひ挑戦してみてください。 診断には JavaScript が有効なブラウザが必要です。 問題は15問あります。 診断スタート

  • 自転車置場の議論 - bkブログ

    自転車置場の議論 人が集まると、なぜかどうでもいいようなことほど議論が紛糾してしまう傾向がありますが、このような現象のことを、FreeBSD のコミュニティでは自転車置場の議論 (bikeshed discussion) と呼んでいることを知りました。 この、「瑣末なことほど議論が紛糾する現象」はパーキンソンの法則というの「議題の一項目の審議に要する時間は、その項目についての支出の額に反比例する」という法則として知られています。 このの中で著者は、原子炉の建設のような莫大な予算のかかる議題については誰も理解できないためにあっさり承認が通る一方で、市庁舎の自転車置場の屋根の費用や、果ては福祉委員会の会合の茶菓となると、誰もが口をはさみ始めて議論が延々と紛糾するというストーリーを紹介しています。 このように、「瑣末なことほど議論が紛糾する現象」はパーキンソン氏によって見事に説明されているの

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

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

  • バッドノウハウと「奥が深い症候群」

    計算機を使っていると、何でこんなことを覚えないといけないのだ ろうか、とストレスを感じつつも、それを覚えないとソフトウェア を使いこなすことができないためにしぶしぶ覚えなければならない、 といった類いのノウハウは多い。そうした雑多なノウハウのことを、 来は知りたくもないノウハウという意味で、私はバッドノウハウ と呼んでいる。 バッドノウハウは、ソフトウェアの複雑怪奇な仕様が歴史的に引き ずられ、根的な改善は行われないまま、そのノウハウが文書によっ て受け継がれることによって蓄積が進行する。Unix 上で広く使わ れているツールとしてはTeX, Emacs, sendmail, bind, perl, gnuplot, procmail などは、役に立つツールであると同時に、その 複雑怪奇な仕様によって長年に渡ってユーザを苦しめ続け、バッド ノウハウの温床として悪名が名高い。こうしたツー

  • プログラミングの光景 - プログラマについて

    最終更新日: 2008-01-26 WEB+DB PRESS Vol. 43 に向けて書いた記事の元の原稿です。 「プログラミングに関する雑多な事柄」がテーマの連載、最終回の今回はプログラマについて取り上げてみたいと思います。 生産的なプログラマとは? 生産的なプログラマは平均的なプログラマの何倍もの仕事をする、という話をよく耳にします。確かに経験に照らし合わせても、できるプログラマの生産性には目を見張るものがあります。 ここでは私がこれまでに関わった中で、生産的なプログラマにどんな特徴が見られたか紹介したいと思います。 レスポンスが早い チームでの開発では、他のメンバーから質問があったり、何かを依頼されたときに、できるだけ早くレスポンスすることが大切です。 たとえば、ちょっとした質問への返事が遅いだけで、誰かの進行が止まってしまうことがあります。レスポンスの早いプログラマと一緒に仕事

  • ある程度の年齢を迎えたプログラマが抱える悩み - bkブログ

    ある程度の年齢を迎えたプログラマが抱える悩み ある程度の年齢を迎えたプログラマが抱える悩みに、「若手のプログラマと比べて、どうやって価値を出していくか」という問題があります。これは言い換えれば「同じような生産性であれば、相対的に給料の低い若手のプログラマに置き換えられてしまうのではないか」という悩みです。 この問題のひとつの解決策は、プログラマ以外の仕事のポジション(たとえば管理職など)に移ることですが、他のポジションには向いていない、まだまだ現役でプログラマをやりたいという場合にどんな戦略があるか考えてみました。なお、後述するように、以下に挙げた戦略は相反するものではなく、組み合わせが可能です。 エキスパート戦略 この分野ではトップクラス、というレベルの専門性を身につけ、その分野に特化してキャリアを築くという戦略です。たとえば、ネットワークやセキュリティといった分野で一流と認められる専門

  • 普通のやつらの下を行け: 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

  • gdb tips - bkブログ

    gdb tips gdb を使う上で便利な tips を紹介します。基的な使い方をマスターしている人向けです。 .gdbinit の設定 ホームディレクトリに .gdbinit を置いておくと、gdb の起動の際に読み込まれます。私の場合は次のような設定をしています。 set history save on set history size 10000 set history filename ~/.gdb_history set print pretty on set print static-members off set charset ASCII set history から始まる最初の 3行は履歴に関する設定です。それぞれ、 gdb のコマンドラインの履歴をファイルに保存する、保存する行は最大 10000 行、ファイル名は ~/.gdb_history 、という意味になります。

  • Cプログラミングのメモ

    CODE COMPLETE によると、プログラミングを上達するには日頃から よく読むこと (マニュアル・書籍・他人のソースコードなど) とよ く考えることが肝要だそうです。 何か耳寄りな情報があれば教えてくださいませ。 (ページの内容はかなり古くなっています) 目次 書籍 インターネット上の文書 ライブラリ ツール メモリプロファイラ GTK+/GNOME関連 その他 書籍 書籍の情報は 別の場所に移しました。 インターネット上の文書 Programming in C * C言語についての網羅的な情報源。 Steve Summit: C Programming FAQs: Frequently Asked Questions * 書籍版の 3/4ほどの内容。 情報源: Web版, 日語訳, 日語訳のHTML版 Henry Spencer: The Ten Commandments f

  • 横着プログラミング 第1回: Unixのメモ技術

    最終更新日: 2002-03-18 (公開日: 2002-03-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 横着プログラミングとは 私は必要が発明の母だとは思わない。私の意見では、発明とは怠惰 から、おそらくはまた、まさに無精から生じるものである。面倒を 省くために。 -- アガサ・クリスティ この言葉によると、どうも発明とは横着したいがために生まれるも のらしい。そう考えてみると確かに、私がプログラミングをする動 機は、横着するためのソフトウェアを作るため、という要素が大き い。突然、「うげー、面倒くせー」と叫んでプログラムを書き始め るのである。 そんなわけで、横着するためにプログラミングすることを私は勝手 に「横着プログラミング」と呼んでいる。連載では横着プログラ ミングをテーマに、横着のコツや私が作っ

  • いやなブログ - Binary 2.0カンファレンス 2006 発表資料とレポート

    Binary 2.0カンファレンス 2006 発表資料とレポート Binary 2.0 カンファレンス 2006 は大盛況のうちに無事終了いたしました。開催にご協力いただいた皆様、スピーカーの皆様、参加していただいた皆様、大変ありがとうございました。当日の発表資料とレポートをこのエントリでまとめます。

  • memccpy() で文字列をコピーする - bkブログ

    memccpy() で文字列をコピーする 詳解Unixプログラミングを読んでいたところ、標準入出力ライブラリの章に「この例からわかることは、行単位の関数は memccpy(3) を用いて実装されていることである」という記述がありました。 一瞬、memcpy(3) の誤植かと思いましたが、調べてみると 4.3 BSD で追加された関数ということがわかりました。 glibc に入っているので Linux でも使えます。 マニュアル によると memccpy() は次のような関数です。 書式 void *memccpy(void *dest, const void *src, int c, size_t n); 説明 memccpy() はメモリ領域src からメモリ領域dest に最大でnバイトコピーする。nバイトコピーする前に文字 c が見つかると、そこでコピーを中止する。 返り値 memc

  • 1