Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

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

  • prelink の効果を測定する - bkブログ

    prelink の効果を測定する prelink は大量の共有ライブラリをリンクしたプログラムの起動時間を短縮するためのツールです。最近の Linux で利用できます。Gentoo Linux Prelink ガイドによると「典型的なKDEプログラムの起動時間は50%も短縮することができます」とのことです。このエントリでは簡単なプログラムを書いて prelink の効果を調べる実験を行ってみます。 通常、動的リンクされたプログラムはシンボルの参照時に再配置およびシンボルのルックアップなどを行う必要があります。prelink は実行ファイルと依存する共有ライブラリを書き換えて、これらの処理を行う必要性を減らします。また、prelink されたプログラムはリロケーションによって発生する共有不可能ページが減るため、プロセス間で共有できるページが増えるというという効果もあります。 prelink

  • 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 、という意味になります。

    dann
    dann 2011/06/26
  • ltrace で共有ライブラリの関数呼び出しをトレースする - bkブログ

    ltrace で共有ライブラリの関数呼び出しをトレースする ltrace は共有ライブラリの関数呼び出しをトレースする Linux 用のツールです。システムコールをトレースするstrace と同様に、デバッグに大変役立ちます。 ltrace は Debian GNU/Linux の場合は sudo apt-get install ltrace でインストールできます。 ltrace の使い方は簡単です。基的には ltrace コマンドの引数にトレースしたいコマンドとその引数を並べれば OK です。デフォルトでは ltrace のメッセージは標準エラーに出力されます。これをファイルに出力させるには -o オプションを用います。たとえば、次のように実行します。 % ltrace -o log.txt wget https://www.codeblog.org/ この例では wget が ht

  • C++と Pthreads でミニマルなHTTPサーバを書く - いやなブログ

    C++と Pthreads でミニマルなHTTPサーバを書く 『UNIXネットワークプログラミング』を読んでいると、自分でも何かネットワーク系の小さなプログラムを書いてみたくなりました。そこで、ミニマルなHTTPサーバを C++と Pthreads で書いてみました。 同じ著者の「詳解UNIXプログラミング」もそうだったように、今回のもほとんどすべてのページに、重要なことが書かれています(最後のほうのXTIの部分は例外かもしれませんが)。 たとえば、27章ではネットワークサーバの実装として、次の設計方針がそれぞれ検討され、実際のコード付きで解説されています。 クライアントごとに fork 事前に fork - 各プロセスで accept 事前に fork - ファイルロックで accept を保護 事前に fork - Mutex ロックで accept を保護 (PTHREAD_PRO

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

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

    dann
    dann 2010/09/22
  • いやなブログ: gdb の gcore コマンドを使う

    gdb の gcore コマンドを使う デバッガの理論と実装を読んで以来、デバッガをもっと活用しようという意欲がわいてきました。そこで、gdb について調べていると、 gcore (generate-core-file) というコマンドを見つけました。 gcore は実行中のプロセスの core を生成する gdb のコマンドです。通常、 core ファイルはプログラムが異常終了したときにカーネルによって生成されますが、gdb の gcore コマンドを使えば実行中のプロセスを終了させることなく core ファイルを生成できます。 gcore コマンドは次のように使います。 % gdb (gdb) attach PID (gdb) gcore core (gdb) detach まず attach コマンドで PID を指定して実行中のプロセスにアタッチします (gdb -p PID で起

    dann
    dann 2009/07/01
  • GNU diff の地味だけど便利な機能 - bkブログ

    GNU diff の地味だけど便利な機能 最近になって GNU diff の地味だけど便利な機能を2つ知りました。調べてみると、いずれも昔からある機能でした。 --side-by-side は2段組で結果を表示するオプションです。変更されていない行を含めて2つのファイルの内容全体と変更点が表示されるのがポイントです。変更された行の前後数行だけでなくファイル全体をまとめて読みたいときに使えます。デフォルトの表示の横幅は130文字です。必要に応じて --width オプションで変更できます。 こういった用途には meld などの GUI の diff ツールを使えばいいのですが、 ssh 端末しかないような状況で重宝します。 --strip-trailing-cr は行末の CR を無視する機能です。改行コードが CRLF と LF でい違っているけど、中身はほぼ同じ、というファイルを比較す

    dann
    dann 2009/02/22
    --side-by-side
  • LINUXシステムプログラミング - bkブログ

    LINUXシステムプログラミング 発売後すぐに入手したものの長らく積読状態が続いていた『LINUXシステムプログラミング』をようやく読みました。 書はその名の通り、Linux のシステムプログラミングについての解説書です。システムプログラミングの定義は明確ではありませんが、システムコールを用いて OS に近いレイヤーで行うプログラミングのことと考えて差し支えないと思います。 UNIX一般のシステムプログラミングについては『詳解UNIXプログラミング』という決定版がありますが、書は Linux 固有の話題や POSIX の比較的新しい API が載っているところが異なります。 たとえば、前者になく書にだけ載っている話題としては以下のようなものがあります。知らなかった話も多くて勉強になりました。 posix_fadvise で I/Oのアクセスパターンのヒントを与える epoll でI/

  • デジイチデビュー、一年後 - bkブログ

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

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

  • 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 オプションで、実際に使う文字セット・エンコーディングを指

  • 外に追い出す - 学校では教えてくれないバッドノウハウ英語 #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 はコードの

    dann
    dann 2007/05/02
  • Dependency Injection の基本的なアイディア - bkブログ

    Dependency Injection の基的なアイディア Inversion of Control コンテナと Dependency Injection パターンを読みました。関連する事柄を広くカバーした、隙のない記事です。 ただ、割とボリュームがあるので、「Dependency Injection って結局何なの?」ということを手っ取り早く知りたい向きにはあまり向かないかもしれません。そこで、基的なアイディアを手短にまとめてみました。 Dependency Injection (依存性注入、DIと略) とはその名の通り、依存性を注入するパターン (テクニック) です。もう少し言葉を加えると、依存性を内部に抱え込まずに外部から注入する、パターンです。 Dependency Injection の基的なアイディアは「依存性を外部から注入する」です。 DIコンテナと呼ばれるフレームワ

    dann
    dann 2007/04/08
    >関数ポインタを使って関数への依存性を外から注入することもできます。
  • 重箱の隅をつつく - 学校では教えてくれないバッドノウハウ英語 #10 - bkブログ

    重箱の隅をつつく - 学校では教えてくれないバッドノウハウ英語 #10 学校では教えてくれないバッドノウハウ英語の10回は、 nitpick, cherrypick という、ともに pick で終わる表現を取り上げたいと思います。 "nitpick" は「あら探しをする」という意味の表現です。動詞にも名詞にも使われます。nit はシラミの卵という意味で、シラミの卵を摘み取るのはいかにも小さなこと、という響きがあります。コードレビューの際に、重箱の隅をつつくような指摘をするときにぴったりの表現です。nit-pick とハイフンが入る場合もあります。 例) It's just a nitpick but I think "file_name" is better than "filename". 重箱の隅だけど、 filename より file_name の方がいいと思うよ。 Please

    dann
    dann 2007/03/17
  • 特別扱いする - 学校では教えてくれないバッドノウハウ英語 #9 - bkブログ

    特別扱いする - 学校では教えてくれないバッドノウハウ英語 #9 学校では教えてくれないバッドノウハウ英語の9回は、special case ~という動詞の表現を取り上げたいと思います。 "special case" は通常、「特別な場合」という意味の名詞として使われます。しかし、英語も日語と同様に、名詞は動詞化する傾向があるため、"special case" は「特別扱いする」という意味の動詞としてもよく使われます。 例) I didn't want to special case IE4 but I had to... IE4 を特別扱いしたくなかったんだけど、避けられなかったよ。。 Would it be possible to special-case this file so that we don't have to worry about it? このファイルのことを気にし

    dann
    dann 2007/03/05
    >"special case" は「特別扱いする」という意味の動詞としてもよく使われます。
  • 数字に関する短縮記法 - 学校では教えてくれないバッドノウハウ英語 #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-

    dann
    dann 2007/02/17
  • いやなブログ - スクリプト言語用のデバッガの使い方 - 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

  • デバッグに使えるサスペンス用語 - 学校では教えてくれないバッドノウハウ英語 #7 - bkブログ

    デバッグに使えるサスペンス用語 - 学校では教えてくれないバッドノウハウ英語 #7 学校では教えてくれないバッドノウハウ英語の7回は、"post-mortem", "tombstone", "culprit" を取り上げたいと思います。いずれもデバッグに関する議論で使える表現です。 "post-mortem", "tombstone", "culprit" の通常の意味はそれぞれ「検死」「墓石」「容疑者」です。どれもサスペンス映画に登場するような言葉ですが、ソフトウェア開でも、デバッグという一種のサスペンスの場面で使われます。 "post-mortem" は、プログラムの検死、すなわち、プログラムがなぜ死んだのかを原因調査すること、または調査結果を意味します。 例) We should perform a post-mortem analysis to make sure this doe

    dann
    dann 2007/02/08
  • JavaScript でソートアルゴリズムを可視化 - bkブログ

    JavaScript でソートアルゴリズムを可視化 JavaScript でソートアルゴリズムを可視化するプログラムを書いてみました。元ネタは Jon Bentley による ソートアルゴリズムを可視化する Java アプレットです。 アルゴリズム 要素数 動作確認は Firefox 2, IE 7, Opera 9 で行いました。要素数は最大で200まで選べますが、かなり重くなるので遅いマシンで実行すると危険です。 English version is also available. ソースコード: sort-animation.js 解説 X軸が配列の添え字、Y軸が配列の要素の値を示しています。最初に要素がランダムに並んでいる配列 (値に重複なし) を作って、それを各種のソートアルゴリズムでソートする様子をアニメーションで表示します。 ただし、要素のあらゆる変更に対して毎回表示を更新し

  • 実用上OK - 学校では教えてくれないバッドノウハウ英語 #6 - bkブログ

    実用上OK - 学校では教えてくれないバッドノウハウ英語 #6 学校では教えてくれないバッドノウハウ英語の6回は、"in practice" を取り上げたいと思います。ソフトウェアの設計に関する議論などで役立つ表現です。 ソフトウェアの設計にはトレードオフがつきものです。速度を追求しようとすればメモリの消費が増えたり、メモリを節約しようとすればプログラムが複雑化したりと、さまざまな面でトレードオフが発生します。 すべての条件を満たす理想の設計は存在しないため、実用上問題にならない要素については割り切る必要があります。そこで便利なのが今回紹介する "in practice" という表現です。 "in practice" は「実際上」「事実上」「実用上」といった意味を表します。同様の意味は副詞の "practically" でも表せますが、"in practice" の方が多少、フォーマルっぽ

    dann
    dann 2007/01/22