タグ

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

  • C++ のシンボルをデマングルする - bkブログ

    C++ のシンボルをデマングルする C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。記事では GNU の開発環境で C++ のシンボルをデマングル (demangle) する方法を紹介します。 マングルの方法はコンパイラ依存です。同じコンパイラでもバージョンによってマングルの方法が異なることがあります。たとえば GCC 3.x では int foo(int) を _Z3fooi に、 int foo(const char*) を _Z3fooPKc のようにマングルしますが、 GCC 2.95 ではそれぞれ foo__FPCc, foo__Fi となります。 コマンドラインからデマングル C++ のオブジェクトファイルに nm をかけると、デフォルトではマングルされた読みづらい形式でシンボルが出力されます。 %

  • いやなブログ: 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 はどのプロセッサで

    tanakaBox
    tanakaBox 2014/05/13
    -fPIC
  • 信じ込ませる - 学校では教えてくれないバッドノウハウ英語 #11

    信じ込ませる - 学校では教えてくれないバッドノウハウ英語 #11 学校では教えてくれないバッドノウハウ英語の11回は、 hoge を取り上げたいと思います。 hoge は日のプログラマの間で、「何か適当なもの」を指す変数として親しまれています。英語圏では hoge の代わりに foo がよく使われます。このような変数は、メタ構文変数(metasyntactic variable) と呼ばれ、ソフトウェアに関する議論や文書などで広く用いられています。 hoge は日ではなぜかメタ構文変数として定着していますが、英語では「信じ込ませる」という意味のれっきとした単語 (ホウジと発音) です。日人以外に対して hoge を用いると誤解を生じる可能性があるため注意が必要です。hoge は通常、動詞として用いられます。 例) Please don't hoge me about the sto

    tanakaBox
    tanakaBox 2013/04/26
    くっそ。騙されそうになったぜ。
  • yak shaving で人生の問題の80%が説明できる問題 - bkブログ

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

    tanakaBox
    tanakaBox 2013/03/09
    いつもです。
  • 自転車置場の議論 - bkブログ

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

    tanakaBox
    tanakaBox 2013/03/09
    あるある。
  • 横着プログラミング 第6回: chatty: 小うるさい端末

    最終更新日: 2002-09-18 (公開日: 2002-09-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 才気に富んだことは個人が行うのが通例であり、信じがたきバカ さ加減は大抵組織に帰されるものである。 -- Jon Bentley *1 役に立たないソフトウェアを作るのが好きだ。面倒な作業を楽にす る横着ソフトウェアもいいが、たまには人を呆れさせるくだらない ソフトウェアを作るのも楽しい。 以前に私が開発した cdbiff*2というソフト ウェアは、メールが届くと PC の CD-ROMドライブが開いてメール の到着を通知するという役に立たないものであったが、そのくだら なさが受けて予想外の好評を得た。今回は、そうした役に立たない ソフトウェアの 1つである、小うるさい端末 chatty*3 を紹介する。

    tanakaBox
    tanakaBox 2009/12/26
    トライ木
  • プログラミングのノウハウ

    プログラミングに関するノウハウは大きく 3つにわかれると思う。 (またもや強引な分類) 1. 普遍的なノウハウ アルゴリズム, データ構造, オブジェクト指向, ツールボックスアプローチ, λ計算, etc. 2. システムのノウハウ 言語処理系, 計算機アーキテクチャ, OS, ネットワーク, etc. 3. 雑多なノウハウ 恣意的なAPI, 恣意的な言語仕様, 各種ソフトウェアの設定, 各種コマンドラインオプション, ソフトウェアのインストール作業, 各種システムの仕様の違い, 「最新技術」, etc. プログラミングをする上では 3種類のノウハウすべてが多かれ少な かれ必要なのだけど、僕のような人は、ついつい 3番目の雑多なノ ウハウばかりが増えていってしまう。日々のネットサーフィンで得 られるノウハウは大抵これである。 雑多なノウハウというのは、「たまたまそうなっている」だけであっ

    tanakaBox
    tanakaBox 2009/11/10
    日々のネットサーフィンで得 られるノウハウは大抵これである。
  • バッドノウハウと「奥が深い症候群」

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

    tanakaBox
    tanakaBox 2009/11/10
    奥が深い症候群という病気について
  • UNIXコマンドで順列・組み合わせの問題を解こう

    薩摩順吉著『確率・統計』 p.15 の問題を UNIXコマンドと順列生成プログ ラムを使っていんちきなやり方で解きます。 (注意: この方法は、文字列が長くなるとすぐに破綻します) 準備 文字列の順列を生成するプログラム permstr が必要です (Schemeで書かれていま す)。permstr を動かすには guile が必要です。 permstrの動作例: % permstr abcde | column abcde adceb bcade becda cdabe daceb deabc ebcda abced adebc bcaed bedac cdaeb daebc deacb ebdac abdce adecb bcdae bedca cdbae daecb debac ebdca abdec aebcd bcdea cabde cdbea dbace debca ecab

    tanakaBox
    tanakaBox 2008/04/07
    順列の生成。remove-1がポイント。
  • 『計算機プログラムの構造と解釈』について

    最終更新日: 2000-12-02 (公開日: 2000-12-02) ちょっと感傷的。「今年」は 2000年のこと。 目次 ことはじめ 2.2.4節の図形言語 書評 関連リンク集 ことはじめ 今年の4月に『 計算機プログラムの構造と解釈 』(SICP)を知った。これはす ごいである。MITの入門コース用の教科書らしいのだが、僕にとっ ては難しい (一応は情報科学が専門の大学院生なんだが)。が、難 しい以上に楽しい。物の計算機科学を感じる。perl だとか CGI だとか、くだらんことをやっていないで、もっと早く読むべきだっ た。 このでは、プログラミング言語として Lisp の 1つの方言である Scheme を採用している。僕は Lisp を長い間、敬遠してきた。あ んな括弧の多い言語、 IQの高い人間じゃないと理解できないに違 いない、そもそも実用性がないんじゃないか、と思って

    tanakaBox
    tanakaBox 2007/11/21
    7年遅れで図形言語まで追い付きました。λ教会入信中。
  • Unicode の文字列をソースコードに埋め込む方法 - bkブログ

    Unicode の文字列をソースコードに埋め込む方法 Unicode の文字列をソースコードに埋め込む場合、直接 UTF-8 などで文字列を書く方法と、\uXXXX などのようにエスケープして表記する方法があります。後者の方法についてまとめてみました。 \uXXXX 形式の場合 Java, JavaScript, Python, C++, C (C99から) などの多くの言語では \uXXXX という表記 (universal character names) でUnicode の文字を文字列の中に埋め込めます。たとえば、「あいう」は "\u3042\u3044\u3046" となります。 \uXXXX で埋め込んだ文字がどのように解釈されるかは言語や処理系によって異なります。 gcc/g++ の場合、 -fexec-charset オプションで、実際に使う文字セット・エンコーディングを指

    tanakaBox
    tanakaBox 2007/10/17
    多バイト文字を受け付けないコンパイラ用に。
  • 便乗5冊企画: スーパーエンジニアへの道、他 - bkブログ

    最初の一冊はワインバーグの「スーパーエンジニアへの道」にしました。 このコンサルタントの秘密―技術アドバイスの人間学と相補的な内容となっています。スーパーエンジニアの方は主に自分が学ぶするための方法、コンサルタントの方は人に影響を与えるための方法について書かれています。以前に、コンサルタントの秘密を読んで改心した話を書いていますが、結局のところ、基的にはあまり変わっていないような気もします。

    tanakaBox
    tanakaBox 2007/07/04
    「ウェブサイトの 正誤表に名前を載せてもらったこともあり」凄すぎ。
  • いやな法則

    思いついたいやな法則を集めています。 生産性 何もやらないよりはだらだらやった方がまし せっぱつまらないとやらない。せっぱつまってからではできない やらなければできない。やってもできない やらなくていいことはできる やらなければいけないことは楽しくない やらなくていいことをやっている人はいきいきしている 横着をするための労力を惜しんではいけない 横着をするための労力を惜しんではいけない、という口実で現実逃避してしまう 現実逃避の方が生産性が高い いやな仕事は、もっといやな仕事があるとき、いやではなくなる 決断 正しいことはすぐに中断し、間違ったことには頑固にしがみつく どちらかじゃなくて両方欲しい アイディア 考えて出てくるアイディアにろくなものはない アイディアを探してもアイディアは出てこない すぐにでも実行したいアイディアは嫌な仕事をしているときに思いつく よいと説明しないとわからない

    tanakaBox
    tanakaBox 2007/07/02
    にわかな奴ほど語りたがる // 僕
  • 横着プログラミング 第4回: ttyrec: 端末を録画再生するツール

    最終更新日: 2002-06-18 (公開日: 2002-06-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 他人のコードを進んで読もう。次に、自分のコードを書こう。 そして、自分のコードを他人にレビューしてもらおう。 -- Bill Gates *1 プログラミングに上達する最良の方法は他人のコードを読むことだ、 という主張をよく耳にする。実際、私が知っている優秀なプログラ マは皆コードを読むのが趣味のようである。中でも優秀な一人は、 「プログラミングのなど 1冊しかまともに読んだことがない。後 はすべて人のコードを読んで覚えた」という*2。 プログラミングの上達という目的はさしおいても、他人のコードを 読んで、それにほんの少しだけ手を加えることによって自分の目的 を達せられることは多い。今回はそのようにして

    tanakaBox
    tanakaBox 2007/05/18
    開発記が面白い。
  • 年を取ると環境設定がどうでもよくなる現象 - bkブログ

    年を取ると環境設定がどうでもよくなる現象 環境設定に関するエッセイを書きました。 もともとは、とあるメディア向けに書いたものですが、 諸事情により、ブログにて公開することにしました。 環境設定と老化 ソフトウェア開発を行う上で、プログラマはさまざまなツールを使います。そして、ツールをカスタマイズしたり、ときおり新たなツールを導入するなどして、開発環境を整えます。具体的には、テキストエディタの設定を変更したり、ブラウザに拡張機能をインストールしたり、といったことを行います。 私の場合、以前はこうした環境設定に情熱を燃やしていましたが、年をとるにつれて、その情熱は徐々に衰えてきました。周りのプログラマを見渡しても、多かれ少なかれ、同じ傾向が見られます。 というわけで、今回は「年を取ると環境設定がどうでもよくなる現象」がなぜ起きるかについて考察してみたいと思います。それではさっそく、思い当たる要

    tanakaBox
    tanakaBox 2007/04/11
    生産性あがってねぇ〜(汗
  • 続: zsh のプロンプトでカレントディレクトリを短縮表示 - bkブログ

    続: zsh のプロンプトでカレントディレクトリを短縮表示 昨日の設定に関して、鵜飼さんから次のような設定でいいんじゃないのと教えてもらった。 PROMPT='%n@%m:%(5~,%-2~/.../%2~,%~)%# ' 確かにこの方が簡潔でいいですね、 perl も動かないし。奥が深い! というわけで、次のように修正した。 case "$TERM" in xterm*|kterm*|rxvt*) PROMPT=$(print "%B%{\e[34m%}%m:%(5~,%-2~/.../%2~,%~)%{\e[33m%}%# %b") PROMPT=$(print "%{\e]2;%n@%m: %~\7%}$PROMPT") # title bar ;; *) PROMPT='%m:%c%# ' ;; esac

    tanakaBox
    tanakaBox 2007/04/11
    使える!!後で追加。
  • http://0xcc.net/reference/

    tanakaBox
    tanakaBox 2007/04/11
    必読。
  • 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

    tanakaBox
    tanakaBox 2007/04/11
    必読。重要。リンク切れ多数・・・
  • 高林哲の検索技術論

    最終更新日: 2004-10-08 (公開日: 2004-10-08) 日経バイト 2004年 1月号に掲載された記事の元の原稿です。実際の 誌面の記事は編集が加わり、もっと読みやすいものとなっています。 この記事は日経バイトの「技術の真髄」という連載向けに書きまし た。連載の内容は 「ソフトウェアの匠」 という書籍にまとめられ、記事も収録されています。 はじめに 数年前まではよく耳にしたが最近ではあまり聞かなくなった話題と いうものがある。情報の氾濫が深刻化して必要な情報を見つけ出せ なくなる云々、というのもそのひとつだ。実際に深刻化が収まって きたのか、単にニュースとして取り上げられなくなっただけなのか 不明だが、近年、インターネット上の検索技術は情報の急激な増加 に追いつくべく格段に向上している。 現在ネット検索の代名詞になっているGoogle社は、ミッションと して「世界中の情報

    tanakaBox
    tanakaBox 2007/04/11
    Namazu開発アレコレ。
  • いやなブログ - 文字列操作の比較表: Ruby, Python, JavaScript, P...

    文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ Ruby, Python, JavaScript, Perl, C++ の文字列操作の比較表を作りました。配列操作の比較表の続編です。間違いなどがあったらご指摘いただけると助かります。 Ruby (String) Python (str) JavaScript (String) Perl C++ (std::string)

    tanakaBox
    tanakaBox 2007/04/11
    cも欲しい!!