import されたファイルのフルパス表現

build.xml 自体は ${ant.file} で取得できるのですが、import された方はなんでしょうという話. ツール一式は別ディレクトリだったりするので情報が取れないとパスを構成できない罠. 答えは /project/@name が付いた ant.file. プロパティ. $ ant Buildfile:…

ParallelFor

出来ましたよと. ブロック内の計算量が少ない場合、ループの中で関数コールするオーバーヘッドが大きくなるので、2引数の無名関数にも対応. unit ParallelUtils; interface uses Windows, SysUtils, Forms; procedure ParallelFor(Start, Stop: Integer; Blo…

OpenMP テスト

MinGW GCC 4.4.0 リリース記念、OpenMP 動作テスト. テスト後に libgomp-1.dll が GPL であることに気づき絶望した. pthreadGC2.dll は LGPL なのに・・・. #include <stdio.h> #include <omp.h> int main() { int i; #pragma omp parallel for for(i = 0; i < 20; i++) { pr</omp.h></stdio.h>…

RGB to L*a*b*

Delphi に移植しないと・・・. def xyz2rgb(xyz): def from_linear(v): def clamp(v): if v < 0.0: return 0.0 elif v > 1.0: return 1.0 else: return v if v <= 0.0031308: return int(clamp(v * 12.92) * 255.0 + 0.5) else: return int(clamp(1.055 * v …

PDF を暗号化する

Jython で PDF を暗号化するスクリプト. Jython 2.5.0 + iText 2.1.5 + Bouncy Castle 1.43 で動作確認. Jython 2.5.0 リリース記念(嘘). Office 2007 SP2 リリース記念(本当). from sys import argv from java.io import FileOutputStream from com.lowagie…

mod_rewrite で Content-Encoding: gzip

CentOS 5.3 (httpd-2.2.3-22.el5.centos.1) 及び さくらのレンタルサーバ(Apache/1.3.41) で動作確認済. 直接 .gz に来られた時に、Accept-Encoding に関わらず Content-Encoding: gzip になるのがイケてないけど気にしない :-D. <IfModule mod_rewrite.c> RewriteEngine On RewriteB</ifmodule>…

subjectAltName

複数の FQDN に対して有効な証明書を作ってみるテスト. 具体的には x509v3 拡張の subjectAltName を使う. やり方としては CSR に subjectAltName を入れて、署名時にそれをコピー. 署名時に subjectAltName を入れる の2パターンがある. 今回は前者で作成. …

gzip_decode

なんとなく書いてしまったので. def gzip_decode(data): from zlib import decompress, MAX_WBITS def skip_string(data, i): while data[i] != '\0': i += 1 return i + 1 flag = ord(data[3]) i = 10 if flag & 0x04: i += 2 + ord(data[i]) + 256 * ord(d…

GetNumberOfProcessors

そろそろ並列プログラミングの世界へってことで準備体操. function GetNumberOfProcessors(): Integer; var SystemInfo: TSystemInfo; begin GetSystemInfo(SystemInfo); Result := SystemInfo.dwNumberOfProcessors; end;

prettifyjson.py

json.dump が ASCII 範囲外を勝手にエスケープするのはどうかと思います. 入力 stdin, 出力 stdout、文字エンコーディングは入出力ともに UTF-8 を想定. #!/usr/bin/env python from json import load, dumps from sys import stdin, stdout stdout.write(du…

Apache のアクセスログを TSV に変換する

setbuf 重要. stdout に fflush するのは初めてだw #include <stdio.h> int main() { int c; int q = 0; int b = 0; char buf[BUFSIZ]; setbuf(stdout, buf); while ((c = getchar()) != EOF) { switch (c) { case ' ': case '[': case ']': case '"': if ((c == ' ')</stdio.h>…

パスワードをハッシュ化して DB に格納する

Django 始めて2日目です. 以下のソースで掲題の件が動いていますが、書き方が正しいか分からないので晒しておきます. コメントを求む. from django import forms from django.contrib import admin from models import User from hashlib import sha1 class …

openssl s_client を HTTP PROXY 対応にするパッチ for OpenSSL 0.9.8j

オリジナルはここ>http://marc.info/?l=openssl-dev&m=103106024113390&w=2 最近の OpenSSL に適用できなかったので手直し. 0.9.8k でも動作確認済. --- s_client.c.orig 2008-12-21 02:04:08.000000000 +0900 +++ s_client.c 2009-02-16 19:33:16.03125000…

RHEL5 の /etc/init.d/httpd が pidfile を設定しても機能しないのを修正する

追記: httpd-2.2.3-31.el5 (2009-09-02) で直った 機能しないのなら設定できるが如く変数にするなよと・・・. # diff -u /etc/init.d/httpd.orig /etc/init.d/httpd --- /etc/init.d/httpd.orig 2008-01-16 10:36:21.000000000 +0900 +++ /etc/init.d/httpd …

Python で cat | grep | wc -l を真似てみるテスト

cat クラスをコンベンションに従って書き換えていかないと機能強化できないのがいけてない. from __future__ import with_statement from re import compile class cat(object): def __init__(self, filename): def _cat(filename): with open(filename) as …

PDF にページ番号を書き込む

Jython で PDF にページ番号を書き込むスクリプト. Jython 2.2.1 + iText 2.1.4 で動作確認. from sys import argv from java.io import FileOutputStream from com.lowagie.text.pdf import BaseFont, PdfReader, PdfStamper, PdfContentByte def write_nom…

self_path

実行したスクリプトそれ自身の絶対パスを返す関数. from sys import argv from os.path import dirname, abspath def self_path(): return abspath(dirname(argv[0]))

pexpect

pexpect.py だけ持ち込めば使える pexpect はとても便利. python でごりごりコードが書ける分だけ expect よりも便利! デプロイ、ログ収集と大活躍. 以下、ssh でログインして uname -r の結果だけを拾ってくる例. from sys import stdout, stderr from getp…

メールヘッダフィールドの折り返し

To フィールドが長くなったので作ってみた. def create_field(name, values): LINE_LIMIT = 78 result = '' s = name + ': ' + values[0] for v in values[1:]: if len(s) + len(v) + 2 > LINE_LIMIT: result += s + ',\n' s = '\t' else: s += ', ' s += v …

pulldom の外部エンティティ参照の無効化

pulldom で cobertura の吐く xml を処理していたら urllib2.URLError: というエラーが. 何でかと思ったら の部分で DTD の URL を読みに行っているのが原因のよう. マニュアルを読んでも、対策が分からなかったのでライブラリのソースを読んで直感で p = p…

Symantec AntiVirus のウインドウをタスクバーから消す

昨日フルスキャンをかけている途中で間違って止めてしまった. 意味も無くタスクバーを占拠するせいだということで、隠してしまうことに決めた. #include <tchar.h> #include <windows.h> #define BUFFERSIZE (1024) #define SAVSTR _T("Symantec AntiVirus") BOOL IsSAVWindow(HW</windows.h></tchar.h>…

SOCKSv5 の接続コード

認証不要のSOCKSv5サーバにTCPで繋ぐだけwww 接続先もIPじゃないと駄目www 将来に向けた布石のつもりではある. from sys import exit, stdout, stderr from socket import socket, AF_INET, SOCK_STREAM s = socket(AF_INET, SOCK_STREAM) try: s.connect(('…

TRange

Python の yield が恋しい. unit MyUtils.Range; interface uses Generics.Collections; type TRange = record strict private FStartIndex: Integer; FEndIndex: Integer; public constructor Create(StartIndex, EndIndex: Integer); type TEnumerator = c…

PChar + Char の書き換え

Delphi 2009 では理由不明ながら PChar + Char が ShortString になる?ようだ. 更に何かまずいらしく、それを文字列変数に突っ込んで参照するとアクセスバイオレーションが起きる. (バグ???) 警告もこんな感じで出る. [DCC 警告] main.pas(33): W1057 文字列…

Char in CharSet の書き換え

Delphi 2009 では string が UnicodeString になった関係で Ch in ['0' .. '9', '.'] みたいに書くと下記のような警告が出る. [DCC 警告] main.pas(391): W1050 set 式で WideChar がバイト char に縮小されました。'CharInSet' 関数を 'SysUtils' ユニット…

文字列の SJIS での保存

Delphi 2009 では string が UnicodeString になった関係で Stream.WriteBuffer(S[1], Length(S)) ではおかしくなる. TBytes (array of Byte) に変換してから書き込む必要がある. var Stream: TStream; Buffer: TBytes; begin Stream := TFileStream.Create(…

NTP から現在時刻を取得する関数

何で書いたのか記憶に無いのだが、発掘されたので. def ntp_now(server, port = 123): from socket import socket, AF_INET, SOCK_DGRAM from struct import unpack from datetime import datetime s = socket(AF_INET, SOCK_DGRAM) try: s.sendto('\x1b' + …

Atom 内の ID によるダイジェスト

rss_sum が要るなら atom_sum も当然要るよねと. def atom_sum(s): from xml.dom import pulldom from hashlib import md5 acc = [] p = pulldom.parseString(xml_encoding_hack(s)) for (e, n) in p: if (e == pulldom.START_ELEMENT) and (n.tagName == 'e…

XML のエンコーディングを UTF-8 にする関数

pulldom が EUC-JP 他に対応していなかったので作った手抜き関数. def xml_encoding_hack(xml): s = xml.splitlines()[0] if s.find('

RSS 内のパーマリンクによるダイジェスト

コメントが付くだけで RSS の最終更新日時が変動するのはどうかと思います. 記事単位での変動で更新を検出するために、ダイジェスト関数を作りました. def rss_sum(s): from xml.dom import pulldom from hashlib import md5 acc = [] p = pulldom.parseStri…