2008-01-01から1年間の記事一覧

djangoをmod_wsgiやcgiで使うためのpythonスクリプト

mod_wsgiを使うことでも、djangoアプリケーションが使えます: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango とはいえ、このドキュメントも、.htaccessで使うためのものはなく、いろいろな環境の対策が混在してるために自環境に合わせる部分…

BeautifulSoupで簡単に危険なタグをエスケープ

閉じてないタグを閉じたり、タグ名を小文字にしたりというような副作用もあるわけですが。 from BeautifulSoup import BeautifulSoup import cgi dangerous_tags = [ "script", "applet", "object", "embed", "img", "form", "input", "select", "textarea",…

Luaのはまりどころ

マイクロスレッドの比較対象のひとつとしてlua5.1を使ってみたけど、Luaって最近の言語と比べて結構独特な部分が多いなと思いました。以下、はまったところ: Tableを配列風に使うときの開始インデックスは1であることを忘れる Tableの存在しないインデックス…

0usersってどういうことでしょうね

http://b.hatena.ne.jp/bellbind/ http://b.hatena.ne.jp/entry/http://www.reddit.com/r/programming/comments/7fcaq/oo_programming_why_traits_rule_and_mixins_and/

新はてブの本文埋め込みがうざいので、Stylishで消してみる

新しいはてブは一覧ページでも本文を埋め込むようになったけど、どうもこの本文はノイズが多すぎて、一覧性にも支障があるので、Stylishを使ってユーザーCSSで消すことにしました。タグで絞り込むと非表示表示を切り替えられるのに、絞り込まないとそれがな…

merbを使ってみる

rails風にwebアプリを作成できる話題のmerbを使ってみました。 インストール すでにgem,rails,mongrelが入っているcygwin上にいれてみました*1。まずはgemの更新 gem update gem cleanそしてmerbを入れる gem install merb入ったのはmerb-1.0.1でした。デフ…

gccでのx86とamd64の時のsizeofの値

linux上でgcc-4.3を使った場合。違いはptr型、long、long double、size_t、time_tなどで起こる。 x86 sizeof(int) = 4 sizeof(void *) = 4 sizeof(size_t) = 4 sizeof(ptrdiff_t) = 4 sizeof(wchar_t) = 4 sizeof(void) = 1 sizeof(clock_t) = 4 sizeof(time…

つづき、文字単位コピーからブロック単位コピーにする

fgetcで書ければ、freadで書ける - ラシウラでは、fgetcからfreadを使うように変えました。これは機械的に変換しただけでしたが、ここからつぎは1文字づつコピーしている部分を、memcpyを使用して、ブロック単位でコピーするように変えてみましょう。 まずリ…

fgetcで書ければ、freadで書ける

初心者では、fgetcで一文字づつ処理するコードは記述できるのに、バッファを使うfreadで書くのに悩む人もいます。単純にfgetcで一文字づつ処理するコードは、以下のような形になるでしょう for (;;) { int ch = fgetc(file); if (ch == EOF) break; ... } こ…

PythonでDSL記法化に挑戦してみた

PythonでのDSL風記述に挑戦するため、PythonでのProlog風のソルバーを作ってみました。エンジンの実装は、 合併のお知らせ|OKIソフトウェア をベースにしています。PythonでPrologのDSLをやってるものとしては、以下のものがありました: http://code.active…

C言語の理解度を突いてみる

Cが使えると自称する人で、本当にC言語の意味を理解できてる人はわずかだったりします。というかリファレンスマニュアル等を見たことが無い人も多かったりするし、かれらが参考にしたリソースが仕様を理解して書かれているかどうか怪しいものも多い。実装が…

C言語の理解度を高めるための課題の案

配列シャッフルをC言語(ISO C89)で書くと以下のようになります: #include <stdlib.h> #include <math.h> #include <stdio.h> static void shuffle(const char ** const array); static void swap(const char ** const array, int i, int j); static const char * names[] = { "taro", "j</stdio.h></math.h></stdlib.h>…

ソートの学習では選択ソートをはじめにやるべき

配列のソートはいまさらいうまでも無いアルゴリズムですが、なぜか最初にくるアルゴリズムがバブルソートだったりするのはなぜでしょうか。正直バブルソートは直感的にわかりにくいと思います。比較的わかりやすいのは選択ソートだと思います。「一番小さい…

配列のシャッフルと落とし穴

風邪で寝てるあいだ、頭痛な頭でなぜか配列のシャッフルするアルゴリズムのことを思い出し、乱数と使い方の落とし穴について考えてました。シャッフルは、たとえば輪読の順番を決めるときにつかいます。名簿を最初あいうえお順に並べて配列に入れておいてシ…

自己生成プログラム

実行すると自分自身のコードを吐き出すプログラム。こういうのってなんていうんだっけ。自己複製? コード→文字列の変換のエスケープが不要になるrubyが一番作りやすくて、しくみも理解しやすいかも。注意したところは、改行文字を直接使わないようにしたこ…

cygwinでWIN32 APIプログラミング(日本語使用で)

cygwinのgccとmingwですが、Cソースにutf8を使えば日本語も使えました。しかしrcファイルをコンパイルするwindresはUTF8を受け付けませんでした(rc中の文字列をSJISで書いた場合、そのまま使えるっぽいけれど「表」のように'\'と同じ値を2バイト目に持つもの…

7の倍数の判定式を考えるプロセス

「7の倍数」でググると、いくつかの判定法が出てきます: 7の倍数 - Google 検索 昔自分が考え付いたときの方法は、単純に、二桁目と三桁目以上と一桁目をわけて、数列をだしてそこから法則をみつけたものでした。以下の表は、7で割り切れる数の一桁目をa、二…

django-1.0でmultithread webサーバ

djangoのrunserverで使っているdjango.core.servers.basehttp.WSGIServerは、Python標準のBaseHTTPServer.HTTPServerがベースになっています。これはスレッドを使わずに複数のリクエストを耳順に処理していく仕組みになっています。このためrunserverでは、A…

PLoP2008のプログラムからJames Noble関係を読む

PLoP 2008 - 15th Conference on Pattern Languages of Programs よりJames Noble氏*1が著者に連ねてるのは以下の二つ: http://hillside.net/plop/2008/papers/PLoP2008_16_Coelho_et_al.pdf http://hillside.net/plop/2008/papers/PLoP2008_33_Pearce+Noble…

bochsを使ってHello World!

x86仮想マシンのbochsを使ってみました。オプションの設定に苦労した。以下、ブートセクタにHello Worldを出すコードを入れたFDイメージをつくり、bochsで起動させています。 FDイメージの作成 ブートセクタ用のアセンブリ*1 ; hello.asm org 0x7C00 ; start…

hprbUpdate.exeを止める方法

VistaでHPのプリンタドライバを使ってると、定期的にhprbUpdate.exeに権限を求めるダイアログが出てうざいことこの上ないのだが、検索しても止める方法がみつからなくて自分で調べてみました。Yahoo!知恵袋とか、OK Webとか質問袋とかではスパイウエアだから…

RailsのActiveResourceに対応したControllerの最小限のコード

検索でヒットするものは、Rails本化したものの残骸だったり(なぜ消すんだろか、古いから?)、知りたいところが省略されてたりと完全でないものばかりなのでメモ。 基本的にはscript/generate scaffold ...で生成されたものがActiveResource対応しているので…

Python3とPython2で両方で動くコードを書こうとしてみた

Python3には、2系で作られたコードを3用に変換する案をパッチを生成する2to3というコマンドラインツールが付属してます(本体はlib2to3という標準モジュール群)。たとえば、エンコード引数つきのunicode関数でも、そのままエンコード引数が存在しないstr関数…

PythonでのFFI

Pythonでは、FFI(Foreign Function Interface)としてctypesモジュールを使います http://docs.python.org/lib/module-ctypes.html http://python.net/crew/theller/ctypes/tutorial.html DLL 読み込むDLLのCソース dll.c: // gcc -fPIC -shared -o dll.so dl…

Stackless Pythonで関数呼び出しの深さ制限を突破する

PythonでLISPっぽい何かを作ってみた - ラシウラでは、evalメソッドではfuncオブジェクト内でも再帰的に呼び出されるため、例中のfactでも引数を100程度にしてしまうと、"RuntimeError: maximum recursion depth exceeded"が発生してしまいます。再帰にしな…

PythonでLISPっぽい何かを作ってみた

Pythonでのインタプリタのコードは、本体は200行程度で、builtinで100行程度の300行程度です。一番やりたかったのはmacro機構を実装してみたかったこと。一般のデータに対しては、整数以外の関数は組み込んでないのですが、以下のようなコード例を解釈できま…

JavaScriptのalertを上書き

alertって手軽だけど、ダイアログがモーダルでクリックがうざいので、非モーダルな別窓としてTabに出るようにちょこっと上書きすることにしたり function alert(obj) { var title = "alert: " + window.location.href; var win = window.open(null, title); …

エラトステネスのふるい on Google Gears WorkerPool

エラトステネスのふるい on JavaScript-1.7/1.8 - ラシウラ をGoogle Gearsのworkerpool上に実装してみました。workerには制限がいくつかあり、その対策は少し面倒でした。 alert等は使えない createWorkerできない これらを実現するため、親workerPool(ID=0…

エラトステネスのふるい on JavaScript-1.7/1.8

「エラトステネスのふるい」は、平行プログラミングの基礎的な例としても用いられる。この場合は、各ふるい(sieve)は最初に受け取ったものを素数とし、その担当の素数の倍数を受け取ったらふるい落とし、そうでないものを受け取ったら次のふるいへ渡すコード…

v8のビルド方法とTraceMonkeyとの比較など

gcc-4.3では"Explicit template specialization cannot have a storage class"エラーが出るので、 CXX=g++-4.2 sconsでビルドできる http://gcc.gnu.org/gcc-4.3/porting_to.html $ svn co http://v8.googlecode.com/svn/trunk/ v8 $ cd v8 $ CXX=g++-4.2 sc…