タグ

programmingに関するf99aqのブックマーク (229)

  • 子プロセスに LD_PRELOAD を継承させない - bkブログ

    子プロセスに LD_PRELOAD を継承させない Linux で LD_PRELOAD 環境変数を使うと共有オブジェクト (共有ライブラリ) のプリロードを行うことができます。通常、LD_PRELOAD が設定されている間は、あるプロセスから呼んだ子プロセスも同様にプリロードを行いますが、場合によっては子プロセスにはプリロードさせたくないときもあります。 たとえば、make に対して foo.so をプリロードさせるつもりで、 LD_PRELOAD=./foo.so make と実行すると、make が呼び出すあらゆるコマンドも foo.so をプリロードします。 その結果、gcc や gcc の呼び出すプログラム cc1, as, collect2, ld まで foo.so をプリロードします。 foo.so が make の挙動を変えることのみを目的としていた場合、 gcc まで影

    f99aq
    f99aq 2007/08/26
    ctor で unsetenv("LD_PRELOAD")
  • naoyaのはてなダイアリー - sched_setaffinity(2) を使って任意のプログラムを任意のCPU上で動かす

    Linux 2.6 には sched_setaffinity(2) というシステムコールがあり、これを利用して任意のスレッドを(マルチCPU環境下で)特定の CPU で実行させることができます。http://www-06.ibm.com/jp/developerworks/linux/051028/j_l-affinity.shtml によるとリアルタイムプロセスでマネージャとなるスレッドをこのシステムコールで特定の CPU に固定する...といった応用が考えられるそうです。 へえ、と思ったのでちょっと遊んでみました。LD_PRELOAD を使って任意のプログラムを任意の CPU に固定して動かしてみます。GCC の __attribute__)((constructor))( で sched_setaffinitiy(2) を呼びます。(参考: http://0xcc.net/blog/

    naoyaのはてなダイアリー - sched_setaffinity(2) を使って任意のプログラムを任意のCPU上で動かす
  • 末尾再帰 - Wikipedia

    一般に再帰呼び出しが可能な言語では、サブルーチン呼び出しのたびにスタックに呼び出し先から戻るための情報を保存する。そのため再帰が深くなりすぎるとスタックオーバーフローでプログラムが異常終了する。 そのような場合、次のようにループに変換して回避する。 { 変換前 } function F (a1:T1, a2:T2, ..., an:Tn) : T0 begin P ; return func (b1, b2, ..., bn) ; end ; { 変換後 } function F (a1:T1, a2:T2, ..., an:Tn) : T0 begin loop P ; a1 := b1 ; a2 := b2 ; : an := bn ; end loop ; end ; { Ti は型、P は手続き、bi は値または a1~an に対する副作用を伴わない式である。 それ以外の識別子は変

  • inetd の仕組みを見てみる - naoyaのはてなダイアリー

    inetd や xinetd (以下 inetd) はインターネットサービスをデーモン化するのに共通している処理を担い、ほとんどの時間をアイドル状態で過ごすその手のサービスに必要なリソースを節約する役割を果たします。 inetd のひとつ面白いところは、inetd でサービス化したいプログラムの標準入力/標準出力がクライアントソケットの入出力に接続されるところです。例えば daytime 相当のサービスを自分で作ろうと思った場合 #!/usr/local/bin/perl # daytime.pl use strict; use warnings; use DateTime; use IO::Handle; STDOUT->autoflush(1); STDOUT->printf( "%s\n", DateTime->now(time_zone => 'Asia/Tokyo') ); と標

    inetd の仕組みを見てみる - naoyaのはてなダイアリー
  • GNU GLOBAL(gtags)ソースコードタグシステムの使い方

    GNU GLOBAL(gtags)は、ソースコードのタグジャンプです。簡単に複数のソース中から関数や、変数の定義元/参照元を見つけ、その箇所に移動することができます。 ctags、etags(cygwin や Linux に大抵標準で含まれています)と同じ働きをしますが、gtags はさらに強力な機能を持っています。大量の他人の書いたソースを読むプログラマには、必須だと思います。 GNU GLOBAL(gtags) の特徴 gtags は、次のような特徴を持っています。 C、 C++、 Yacc、 JavaPHP4 のソースコードに対応しています。 ※ Pygments 等を入れれば Python等のコードにも対応します 関数の呼び出し元を参照できます。 複数の候補が存在する場合は、一覧で表示してくれます。 タグ情報より、HTMLを生成できます。 コマンドラインや、vi、emacs な

    GNU GLOBAL(gtags)ソースコードタグシステムの使い方
  • round関数その6:啓蒙とお詫び - hnwの日記

    Referer一覧の存在に気づいたので、リンクして下さっている方々の文章を今更読んでいます。ただ、おそらく浮動小数点数の扱いが拙いのをround関数のせいにしているような文章を見つけました。もしそういう誤解があれば非常に残念だと思うと同時に、これだけ注目を集めたからには浮動小数点数一般の罠について簡単に紹介してみても良いかな、と思いつきました。浮動小数点数まわりでハマった人がここに検索でやってくることがあるかもしれません。 そんなわけで、今回のテーマは啓蒙です。浮動小数点数の不思議さについて簡単な紹介記事を書いてみました。また、第1回記事中の誤っている点について、1点訂正をします。今回はイメージ先行で書いてみましたが、伝えていないことはあっても嘘は書いていないつもりです。正確な内容が知りたくなった方はWikipediaの記事「浮動小数点数」を読むと良いでしょう。または、そこからリンクされて

    round関数その6:啓蒙とお詫び - hnwの日記
    f99aq
    f99aq 2007/06/20
    floating point number と round
  • 1975 年のプログラミング - steps to phantasien t(2007-06-17)

    少し前に Varnish という逆プロキシサーバが紹介されていた: 【レポート】高速化プログラミングの参照実装としても活用される「Varnish」 (2) vanishが採用している実装技術 : エンタープライズ : マイコミジャーナル. 気になったので資料を眺めてみる. プロジェクトの Wiki にある記事 Notes from the Architect, あとは 講演のスライド(PDF) などが概略には良さそうだ. 中味は仮想記憶やキャッシュ, SMP を有効活用して高速化しましょうという話. 仮想記憶の活用方法は二つ紹介されている. 一つ目は, "サイズに合わせて realloc() するかわりに最初からでかいサイズを malloc() しろ" というもの. 確保してもアクセスしなければ物理メモリにはコミットされないから, 拡張のたびにコピーの必要な realloc() より この

  • へ〜たのめも:Google のソフトウェア・エンジニアリング - livedoor Blog(ブログ)

    2007年06月07日 Google のソフトウェア・エンジニアリング Google Developer Day Tokyo の鵜飼さんのプレゼンより、「Googleエンジニアはどうやって開発しているのか?」 Google の研修 入社して最初の 3ヶ月は社(Mountain View)で研修 研修中は、メンターがついて「Google での開発の仕方」を学ぶ 内部ウェブ・サイトで社内共有ライブラリの使い方などを説明する動画があるので、それで自習 Googleプロジェクト・チーム 開発拠点は米国、スイス、オーストラリア、インド、日など 場所とプロジェクト・チームは関係なく、プロジェクト・チームが拠点をまたがることは普通。世界中の拠点全部合わせて、一つの Google エンジニアリング・チーム 開発はデザイン、コーディング、テスト、改善、デモの運用まで上流から下流まで同じチーム(同

  • gmailで添付ファイルが自動でアップロードされるしくみ - bits and bytes

    gmailでメールを書くとき、添付するファイルを選んでからしばらくすると、いつの間にか添付ファイルがアップロードされています。 添付するファイルを選ぶと、はじめファイル名が表示されていたのが 自動的にアップロードされて、名前とファイルサイズが表示されています! 実は、あまり名前も聞かなくなった Google Page Creator がリリースされたときにいちばんびっくりしたのはページの右下にこのgmailの自動アップロードとよく似たしくみがあったことでした。で、さっそく解析してマネしてみたことがあります。今回はgmailでその仕組みを見てみます。 ちなみにその Google Page Creator には、ログインすると右下にこんな ファイルをアップロードするのに使う部分があります。 gmailの場合、メールが自動保存されるタイミングでアップロードされているかんじでしたが、こっちのはBr

  • プログラミングを始めようとして何度も挫折した。 教えるプロみたいな人に..

    プログラミングを始めようとして何度も挫折した。 教えるプロみたいな人に教えてもらっても駄目だったし、尊敬している人に教えてもらったけどやっぱり駄目だった。 才能以前なんだろうな。必死さが足りないって言われた。でも必死になるってどういう事なのか全然判らない。 あと、前教えてもらったことを自宅で復習しても全然出来なかった。 何がわからないのかもわからない。基礎の問題とか出して貰っても判らない。用語や文法みたいなレベルで既に躓くというか。なんというか、「言葉」って何で言葉って言うの?みたいな変な疑問ばかり湧いてきて進まないんだよね。 結局両方とも途中でやめてしまった。 諦めるしかないか。 http://anond.hatelabo.jp/20070523231848 なんかこれみたらとてもじゃないけど無理だと思いました。判らない事だらけで柔軟体操にすら入れないです。諦めます。 http://an

    プログラミングを始めようとして何度も挫折した。 教えるプロみたいな人に..
    f99aq
    f99aq 2007/06/02
    あるとき点が線につながる時が来て、すごくなりそう。
  • プログラマとして - higepon blog

    プログラムは勉強すれば誰でもできると思う。知らない言語や知らない仕組みでも勉強すれば何とかなるだろう。最近になってやっとそう思えるようになった。 つまり「こういうプログラムできない?」と言われれば大抵の場合は「時間と手間をかければできる」と答えられるようになったのかもしれない。 となると、人生のうちプログラムに使える時間は有限なので(そもそも人生が有限だ)、取捨選択が重要になる。 「こんな仕組みがあったら便利だな」とか「あのアプリの使い勝手を改善したい」とか「あれを自動化したい」とか、自分で思ってもスグに手を出してしまってはやりきれなくなってしまうのである。 その取捨選択の基準が自分の人生を決めるのではないだろうか。もちろん直感にしたがうのもひとつの基準だろう。 それは実装が面白いか?新しいか? それは実現したら面白いか?新しいか?便利か? みんなの度肝を抜くか? 今までにない革命を起こす

    プログラマとして - higepon blog
  • より良いプログラマになるのに知るべきことは全て幼稚園で学んだ - minghaiの日記

    All I Need To Know To Be A Better Programmer I Learned In Kindergartenより。 原文 http://codist.biit.com/fiche/thecodist/article/all-i-need-to-know-to-be-a-better-programmer-i-learned-in-kindergarten プログラミングは複雑なもの。だけど良いプログラマを作るのに必要なことのほとんどは、僕らが幼い頃に習ったこととほとんど変わらない。 このリストのためのインスピレーションはRobert Fulghumの"All I Really Need to Know I Learned in Kindergarten"(http://www.robertfulghum.com/) から得られた。 1.なんでも分けよう 可能

    より良いプログラマになるのに知るべきことは全て幼稚園で学んだ - minghaiの日記
  • GoogleのJavaScript APIがこっそり統一されてきている件について。 - Ogawa::Memoranda

  • Dependency Injection の基本的なアイディア - bkブログ

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

  • 論理的思考の放棄 - 登 大遊@筑波大学情報学類の SoftEther VPN 日記

    僕は、1 日に少なくとも 3,000 行程度、多く書くときで 10,000 行以上のプログラムを書くことができる。その結果、多い月で 10 万行 / 月くらいである。なお、言語は書くソフトウェアの性質上、大半が C 言語である。 また、プログラミングにはバグが付き物だが、ここ 2、3 年の間は、発生するバグの数を極めて少なく保つことに成功している。 とても大きく複雑で、かつレイヤ的に OS に近い処理をたくさんやるプログラムを書く場合は、プログラミングをするときでも、事前の設計が極めて重要となる。設計をうまく行わないと、後になって全面的に書き直しをしないといけなくなったり、パフォーマンスが低下したりする原因となり、開発者の苦痛の原因となる。 当然のことながら、これまで書いたいくつかの大きく複雑といえるソフトウェアの大半の設計も、自分で行った。いかなる場合でも、設計は、最初の 1 回目で確定

    論理的思考の放棄 - 登 大遊@筑波大学情報学類の SoftEther VPN 日記
    f99aq
    f99aq 2007/04/08
    その境地に達するまでの道のりは長くて長くて…
  • 数字に関する短縮記法 - 学校では教えてくれないバッドノウハウ英語 #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-

  • prefork サーバーと thundering herd 問題 - naoyaのはてなダイアリー

    Catalyst を POE で動かす Engine の Catalyst::Engine::HTTP::POE という実装が CPAN にあります。"Single-threaded multi-tasking Catalyst engine " だそうです。"Single-threaded" と言いつつも実装を覗いてみると環境変数 CATALYST_POE_MAX_PROC を 1 よりも大きく設定することで prefork する実装になってます。POEシングルスレッドではアプリケーション内で発生するブロックを避けることが難しいのでそのための実装じゃないかなと思います。 ところでこの Catalyst POE エンジン、prefork の実装はどのように行っているかというと POE から prefork と名の付いたイベントが発生するとおもむろに子プロセスを生成する、というのもの。複数の

    prefork サーバーと thundering herd 問題 - naoyaのはてなダイアリー
  • TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと

    TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと 目次 この文書について C10K 問題 関連サイト まず読むべき I/O フレームワーク I/O 戦略 1. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と レベル・トリガ型の完了通知を利用する. 伝統的な select() 伝統的な poll() /dev/poll kqueue() 2. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と 変更型の完了通知(readiness change notification)を利用する. kqueue() epoll リアルタイム・シグナル fd 単位のシグナル (Signal-per-fd)

    f99aq
    f99aq 2007/03/05
    あ、asio
  • きまぐれ日記: 動的配列への追加コストはなぜ O(1)?

    動的配列への追加コストは O(1) ってのは覚えていればそれだけの話ですが,どうしてかと言われると意外と難しいものです. というのも, このO(1)ってのは動的配列の実装方法に強く依存しているからです.実装を知っていないと答えられません. 一般論として,1つ要素を追加するとき,配列に空きがなかったら新しく配列を作り直して全要素をコピーする必要があります.コピーのコストは O(n) だから,追加コストも O(n) になるという議論が混乱の元になっています. こういうときは,要素追加を n 回繰り返したときの計算量を n で割った平均をとるという解析方法が使われるそうです.一般に, ある operation C の計算量を C を n 回行ったときの計算量 O(n) を n で割った値 O(n)/n で評価する手法をならし解析 (amortized analysis)と言うそうです. さて,s

    f99aq
    f99aq 2007/02/27
    ならし解析
  • 檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算

    JavaScriptによるテンプレート・モナド、すっげー簡単!」にて: 紙と鉛筆でラムダ計算を実行できることは必要だな、やっぱり。 なんて強調したので、ラムダ計算の入門、いってみよう。 [追記]練習問題集を追加しました。説明を読みながら、あるいは読んだ後で是非やってみてください。→「JavaScriptで学ぶ・プログラマのためのラムダ計算 問題集」[/追記] ※印刷のときはサイドバーが消えます。 内容: JavaScriptの関数リテラル ラムダ式ってなんだ ラムダ計算の体系と適用操作 ラムダ式の例をいくつか β変換 -- ラムダ計算のキモ! β変換を何度か実行してみる 中間まとめ、まだ続きがあるよ JavaScriptの関数リテラル 最初に、JavaScriptに関する知識を確認しておきましょう。なお、JavaScriptの対話的実行環境については「もっともお手軽な対話的JavaScr

    檜山正幸のキマイラ飼育記 - JavaScriptで学ぶ・プログラマのためのラムダ計算