タグ

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

  • 横着プログラミング 第3回: 履歴マニア

    最終更新日: 2002-05-18 (公開日: 2002-05-18) Unix Magazine 誌に 2002年1月号から 2003年2月号にかけて連載し ていた記事の元の原稿です。 コンピュータの方がうまくできることに人間を使うな。 -- Tom Duff *1 私の見る限り、プログラマという人種は決まって事務作業が嫌いな ようである。同じような書類を何枚も書かされたり、1つ誤字があ るから書き直せと言われたりすると、異常にストレスがたまる。 同様に、計算機を使っていても、同じような作業を何度も繰り返し たり、ちょっとでも間違えたら最初からやり直し、というのは耐え られない。そこで、今回は履歴を活用して作業の再利用をするノウ ハウを取り上げる。 シェルの履歴 Unixを使い始めて間もない初心者が作業しているところを見ると、 打ち間違えたコマンドを律儀に最初から打ち直しているのに気づく

  • 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

  • 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

  • wxWidgets でクロスプラットフォーム GUIアプリを作ろう

    最終更新日: 2004-10-08 (公開日: 2004-10-08) UNIX USER誌 2004年8月号 に掲載された記事の元の原稿です。 文中の「原稿執筆時点」は「2004年 6月半ば」を指します。 wxWidgets は Linux, Windows, Mac OS X など多くのプラットフォー ムに対応したオープンソースの GUI ツールキットである。稿で は wxWidgets を用いてクロスプラットフォーム対応の GUI アプリ ケーションを開発する方法を紹介する。 はじめに Unix の大きな魅力のひとつに、強力なコマンドライン処理がある。 zsh などのシェルと perl などのワンライナーを組み合せて、大量 のファイルを一気に処理するときなどは、「これぞコマンドライン の醍醐味」と感じる瞬間である。 一方、Unix の大きな不満のひとつに、凶悪なコマンドライン書法

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

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

  • Jockey で Linux のプログラムの実行を記録・再生する - bkブログ

    Jockey で Linux のプログラムの実行を記録・再生する Jockey は Linux のプログラムの実行を記録・再生するツールです。システムコールと一部の CPU命令をフックして実行時の入出力をログに記録することによってプログラムの再生を実現しています。主にデバッグ用途に使います。 インストール Jockey は Debian パッケージになっていないため、ソースコードからビルド・インストールしました。事前に ruby, boost, zlib などをインストールしておく必要があります。 記事を執筆している時点で Jockey の最新版は 0.8.1 です。手元の Debian GNU/Linux の環境ではこのようなパッチを当てる必要がありました。ビルド・インストールは普通に ./configure && make && sudo make install を実行すれば OK

  • Epeg で JPEG ファイルのサムネイルを高速に生成する - bkブログ

    Epeg で JPEG ファイルのサムネイルを高速に生成する Epegは JPEG ファイルのサムネイル (縮小画像) を高速に生成するライブラリです。JPEG に特化した手法でサムネイルの処理を行うため、内部的に画像をビットマップに伸張せず、高速かつ少ないメモリで処理できるのが特徴です。 インストール Epeg は Debian パッケージになっていないようなので、ソース (ダウンロード) からインストールしました Epeg は内部的に libjpeg を使っているため、Debian GNU/Linux では sudo apt-get install libjpeg62-dev で事前にインストールしておく必要があります。 Epeg そのものは ./configure && make && sudo make install でビルド・インストールできます。 サンプルコード Epeg の

    tks_period
    tks_period 2006/01/20
    はえー。ImageMagickもサイズ指定するとこんなに早くなるのか。
  • 普通のやつらの下を行け: Cで動的コード生成・実行 - bkブログ

    普通のやつらの下を行け: Cで動的コード生成・実行 スクリプト言語には動的にコードを生成して実行する機能を持ったものが多くあります。 普通のやつらの下を行けの第3回として、今回は C による動的なコード生成と実行に取り組んでみたいと思います。 今回書いたコードの main() 関数は以下のようなものです。 int main(int argc, char **argv) { assert(argc == 2); define(int, add, (int x, int y), "{ return x + y; }"); define(int, mul, (int x, int y), "{ return x * y; }"); define(int, add_argv1, (int x), "{ return x + %d; }", atoi(argv[1])); printf("%d\n"

    tks_period
    tks_period 2005/10/26
    CSPスゴスwwwwwww
  • 普通のやつらの下を行け: 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

  • いやなブログ: SpiderMonkey で JavaScript のインタラクティブシェル

    SpiderMonkey で JavaScript のインタラクティブシェル JavaScript のコードをインタラクティブに動かせるツール (Ruby における irb のようなもの) が欲しいと以前から思っていたのですが、今日になってようやく SpiderMonkey のインタラクティブシェルをインストールしました。 Debian GNU/Linux なら sudo apt-get install spidermonkey-bin を実行するだけでインストールできます。インストール後、 js コマンドを実行するとインタラクティブシェルが立ち上がります。 式を入力すると値が表示されます。 readline ライブラリがリンクされているので、コマンドライン編集は bash と同様にできます。 js> a = [1,2,3] 1,2,3 js> a.push(4) // 末尾に 4 を追加

    tks_period
    tks_period 2005/09/09
    キタコレ! irbみたいなのって説明がいいな(笑)
  • いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++

    配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ プログラムを書いていると、他のプログラミング言語の記憶とごっちゃになって、「配列の後ろに要素を追加するのは push だっけ、 append だっけ」などと混乱することがあります。特に Ruby, Python, JavaScript はコードの書き方が似ているので、この問題が起きがちです。 そこで、備忘録として、 Ruby, Python, JavaScript, Perl, C++ の配列操作の比較表を作りました。一番慣れている Ruby を基準にしています。間違いなどがあったらご指摘いただけると助かります。他の言語のもあるといいなあ。 Ruby (Array) Python (list) JavaScript (Array) Perl (@) C++ (std::vector)

    tks_period
    tks_period 2005/08/29
    便利。+PHP版を仕事用に作ろう。
  • 高林哲の検索技術論

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

  • Ruby: 日本語の文字列を UTF-8 に変換する

    Ruby: 日語の文字列を UTF-8 に変換する 日語の文字列 (euc-jp, shift_jis, iso-2022-jp, utf-8 のいずれかわからない) を UTF-8 に変換しようと思った。 最初は samidareに含まれる Mconv.guess_charset を試したが、巨大なテキストを扱うとかなり遅かったので、ここやここやここを参考にして、次のようなコードを書いた。 class Iconv Preference = ["iso-2022-jp", 'euc-jp', 'utf-8', 'shift_jis', 'windows-31j'] def self.tou8 (str) return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # us-ascii Preference.each {|name| begin

    tks_period
    tks_period 2005/06/08
    iconv で元のコードに関らず UTF-8 に変換する方法
  • 作れる、作る、作った - bkブログ

    作れる、作る、作った たまに「Namazu を作ったなんてすごいですね」と言われる。そう言われると、いつも違和感を感じる。同等のソフトウェアを作れる人ならざらにいるからだ。作れることは自体は全然すごくない。 では当は何が評価されているのかというと、何かを作って公開し、それが比較的広く使われたことだ。作れる人はざらにいるし、同じようなものを作ってみようと考える人もそこそこいるけど、実際に作ってくれる人はなかなかいない。だから、作った人が登場するとありがたがられる。それが広く使われれば、より評価される。案外、自分ではたいしたことないと思っているものでも好評を博したりする。 文章でも同じことが言える。誰でもうすうす分かっていて、誰かが日頃から考えているようなことでも、それを書いてくれる人はなかなかいない。だから、書いた人が登場するとやっぱりみんな喜ぶ。それが広く読まれれば、より評価が高まる。読

    tks_period
    tks_period 2005/06/08
    作れる人はたくさんいても作る人は少ない。そして作ると「評価」がついてくる。
  • JavaScript で複数箇所のキーワードをハイライト - bkブログ

    JavaScript で複数箇所のキーワードをハイライト JavaScript で複数箇所の キーワード をハイライトさせるいい方法ないすかーと miyagawa氏に訊いたところ、 次のようなコードをさらっと書いてくれた。 キーワードにマウスカーソルを載せると、複数箇所に出現するキーワードが一斉に ハイライトされるというもの。 <script> function hlclass(name, flag) { var t = document.getElementsByTagName('span'); for (var i = 0; i < t.length; i++) { if (t[i].className == name) { t[i].style.backgroundColor = (flag ? "yellow" : "white"); } } return true; } </sc

    tks_period
    tks_period 2005/06/08
    JavaScript 三部作(?) (1/3)
  • いやなブログ: JavaScript でインクリメンタル grep 検索

    JavaScript でインクリメンタル grep 検索 JavaScriptで grep 検索をしようと思い、次のようなコードを書いた。 function grep (pattern) { try { var regex = new RegExp(pattern, "i"); var spans = document.getElementsByTagName('span'); var length = spans.length; for (var i = 0; i < length; i++) { var e = spans[i]; if (e.className == "line") { if (e.innerHTML.match(regex)) { e.style.display = "inline"; } else { e.style.display = "none"; } } }

    tks_period
    tks_period 2005/06/08
    JavaScript 三部作(?) (2/3)
  • いやなブログ: JavaScript でインクリメンタル 検索 (grepではない版)

    JavaScript でインクリメンタル 検索 (grepではない版) JavaScript でインクリメンタル grep 検索 のコードでは、検索に正規表現をそのまま使っています。正規表現を使うと pr.*f のような検索ができるのですが、一方で、 . や * や ( などを検索するにはそれぞれ \ でエスケープする必要が生じます。そのことを知らないと「(*.*) がなぜか検索できねー」と混乱することになります。 正規表現を使えてもうれしいことはそんなになさそうなので、gonzui では次のような関数を作って、メタ文字をエスケープしてから検索をかけるようにしました。 function quotemeta (string) { return string.replace(/(\W)/, "\\$1"); } quotemeta を使ったインクリメンタル検索のコードは次のようになります。 f

    tks_period
    tks_period 2005/06/08
    JavaScript 三部作(?) (3/3)
  • いやなブログ: ポール・グラハム論法

    ポール・グラハム論法 ポール・グラハムの「ハッカーと画家」はハッカー的な人間のための癒し系エッセイである。ちょうど、もやもやと考えていたようなことを気持ちよく代弁してくれる。 氏のエッセイを読んで感化された人間は、「ポール・グラハムも言っていた」という一言を自分の主張に加えるという誘惑にかられる。虎の威を借りる作戦である。 これをさらに押し進めると、ポール・グラハムが言っていないことでも、ポール・グラハムが言っていたことにするといういかがわしい論法にたどり着く。「100論文は1ハックに如かず、とポール・グラハムが言ってたよ」という具合である。 「100論文は1ハックに如かず」はめちゃくちゃだが、ハッカー的な人間にとっては一理なくもない。ポール・グラハムも言っているように、大学などにいるハッカーは、論文を書かなくてはという強迫観念にかられ、結果として、ハックの手を止めてしまう。これは社会的な

  • 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

  • 1