タグ

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

  • 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 でい違っているけど、中身はほぼ同じ、というファイルを比較す

  • 未踏ソフトウェア創造事業最終報告会: 世界規模ソースコード検索エンジン

    未踏ソフトウェア創造事業最終報告会: 世界規模ソースコード検索エンジン 最終更新日: 2005-02-27 (公開日: 2005-02-27)

    mogwaing
    mogwaing 2009/01/28
    IPA 2004年度未踏ソフトウェア創造事業 「石田PM・長尾PM合同最終報告会」で30分間発表した内容のスライドです。 by 高林さん
  • 未踏ソフトウェア創造事業中間報告会: 世界規模ソースコード検索エンジン中間報告

    未踏ソフトウェア創造事業中間報告会: 世界規模ソースコード検索エンジン中間報告 最終更新日: 2004-11-08 (公開日: 2004-11-08)

  • いやなブログ: C のテンプレートでダックタイピング

    C++ のテンプレートでダックタイピング RubyPython などの動的な言語では、ダックタイピング (duck typing) というテクニックが多用されています。 ダックタイピングは、同じインタフェースさえ備えていれば型は何でも構わない、という考え方に基づく多態 (polymorphism) の手法です。アヒルのように見えて、アヒルのように鳴くなら、アヒルに違いない、というわけです。 そして、現在最も注目を浴びている言語である C++ でもテンプレートを用いるとダックタイピングを行えます。 ダックタイピングを使うと、継承関係を無視して多態的にオブジェクトのメソッドを呼び出せます。たとえば、次の Ruby のコードでは、func に Duck と Foo のどちらのオブジェクトを渡しても正常に動作します。これは Duck, Foo ともに、共通のインタフェースを持つ quack

  • いやなブログ: 普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す

    普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す Linux などの多くの Unix 的なOS には ptrace というシステムコールがあります。 ptrace を使うと実行中のプロセスに対して、レジスタの書き換えやメモリ上のデータの書き換えといったさまざまな操作を行うことができます。 普通のやつらの下を行けの第6回として、今回は ptrace を使って実行中のプロセスにちょっかいを出す方法を取り上げたいと思います。 ptrace とは デバッガの理論と実装 に次のような記述があります。 Unix の ptrace() は物のデバッガ API (アプリケーションプログラムインターフェイス) の一例であり、商品に相応しい品質を持ったデバッガをサポートするために設計された、最初の専用 API の1つである。 ptrace はデバッガ用に作られた API のようで

  • Text Escaping and Unescaping in JavaScript(Unicode の文字列をエスケープする JavaScript)

    Notes No data is sent to the server (i.e. everything is done in JavaScript). Conversion from Unicode to other encodings such as Shift_JIS can be slow first time as it needs to initialize internal conversion tables. Surrogate pairs in UTF-16 are supported. Try inserting \uD840\uDC0B in the second form. Three-byte characters in EUC-JP are not supported. Links JavaScript Unicode Charts Try GNU Libidn

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

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

  • 『計算機プログラムの構造と解釈』について

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

  • 子プロセスに 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 まで影

  • いやなブログ - 文字列操作の比較表: Ruby, Python, JavaScript, P...

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

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

  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

    mogwaing
    mogwaing 2007/08/28
    mainの前に関数を呼ぶ。gccの拡張を使う方法とc++のコンストラクタを使う方法
  • C++と Pthreads でミニマルなHTTPサーバを書く - いやなブログ

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

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

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

  • 横着プログラミング 第2回: Migemo: 日本語のインクリメンタル検索

    最終更新日: 2002-04-18 (公開日: 2002-04-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 知識には2つのタイプがある。ひとつは物事を知っていること。 もうひとつはそれをどこで見つけるかを知っていることである。 -- サミュエル・ジョンソン 前号では、頼りない記憶力を補う手段として Unix のメモ技術を取 り上げた。しかし、いくらメモを取ったところで、いざというとき にメモから必要な情報を見つけ出せなければ意味がない。そこで、 今回は日語のテキストをすばやくインクリメンタル検索するソフ トウェアMigemo を紹介する。 横着な上に短気な人間 私はものに対して -- 特に計算機に対して -- 短気である。といっ ても、怒り心頭してものを破壊するというわけではなく、文句を言 うだけである。「何

  • Migemo: ローマ字のまま日本語をインクリメンタル検索

    Migemo とは? Migemo はローマ字のまま日語をインクリメンタル検索するため のツールです。かな漢字変換をすることなく日語のインクリメン タル検索を快適に行うことができます。 新着情報 2004-06-28: 関連リンク集に fub と XUL/Migemoプロジェクト を追加しました。 2004-01-28: yoshi223氏による MigemizeExplorer が公開されました。 Windows の「エクスプローラーにおいてローマ字入力のみで日語 ファイルをインクリメンタルに検索/選択することを可能にする」 ツールです。 2003-05-29: Migemo 0.40 を公開 連文節の検索に対応しました。 C/Migemoに対応しました。 Emacs側でのキャッシュに対応しました。 (白井秀行さんによる改良) Ruby 1.8 でも動くようにしました。 その他、細

  • 横着プログラミング 第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 ディストリビューションなどのアーカイブ 英和や国語などの電子辞書 論文などの文書アーカイブ ホームディレクトリ以下

  • pdumpfs: a daily backup system similar to Plan9's dumpfs

    What's pdumpfs? pdumpfs is a simple daily backup system similar to Plan9's dumpfs which preserves every daily snapshot. pdumpfs is written in Ruby. You can access the past snapshots at any time for retrieving a certain day's file. Let's backup your home directory with pdumpfs! pdumpfs constructs the snapshot YYYY/MM/DD in the destination directory. All source files are copied to the snapshot direc

  • オープンソース開発の流れ: ソースコード検索エンジン gonzui の場合

    最終更新日: 2005-07-15 Linuxソフトウェアアンテナ Vol.1 に向けて書いた記事の元の原 稿です。文中の「原稿執筆時点」は「2005年 7月半ば」を指しま す。 稿ではオープンソース開発の流れについて、ソースコード検索エ ンジン gonzui を例にとって紹介します。 はじめに オープンソースのソフトウェアはどのように開発されているのでしょ うか。インターネット上には多種多様のオープンソースプロジェク トが存在しています。その中には Mozilla*1 や、 OpenOffice.org*2 などの巨大 なプロジェクトもあれば、1人の開発者がこつこつ行っているよう な小さなプロジェクトも無数にあります。 このように、ひとくちにオープンソースのソフトウェアといっても、 規模の異なるさまざまなプロジェクトがあり、開発形態もプロジェ クトごとに少しづつ異なるものとなっていま

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

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