2008-04-01から1ヶ月間の記事一覧

Zip/Ruby 0.2.2

http://zipruby.rubyforge.org/ https://rubyforge.org/projects/zipruby/ エントリ読み込みのときに、allocaでまとめてバッファを確保するのをやめて、固定長のバッファにちまちま読み込むようにした ちまちまエントリを読み込むAPIを追加 Zip::Archive.ope…

vmstatに日付を付ける

perlでやっている人がいたので真似てみた。 $stdout.sync = true while l = ARGF.gets puts Time.now.strftime('%F %R ') + l end ~/work$ vmstat 3 | ruby append_time.rb 2008-04-30 10:41 procs -----------memory---------- ---swap-- -----io---- --sys…

Zip/Ruby: 読み込めないファイルの件

id:gioextさんから読めないファイルがあるとのことで、調べてみた。 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0xb7d1eb60 (LWP 16748)] zipruby_file_read (self=3081164780) at zipruby_file.c:181 181 if (zip_fread(p…

PKWAREのCRC32のテーブル

ここから拝借。 これ仕様書に載ってんのかなぁ? $__crc32_table = [] # Lookup table array def __crc32_reflect(ref, ch) # Reflects CRC bits in the lookup table value = 0 # Swap bit 0 for bit 7, bit 1 for bit 6, etc. (1..ch).each do |i| if (ref…

Zip/Ruby: decryptできたぁ〜

さんざてこずって、なんとか暗号化Zipを復号できた。 とりあえず、Windowのバイナリも含めてリポジトリにコミット。 require 'zipruby' Zip::Archive.decrypt('test.zip', 'x') # ファイル, パスワード

Info-ZIPのCRC32とzlibのcrc32

Info-ZIPのCRC32とzlibのcrc32でなぜか戻り値が違う。 printf("%x", CRC32(305419896L, 'x')); //=> 123456 printf("%x", crc32(305419896L, "x", 1)); //=> d210dbdb で、zlibのcrc32のソースを読む。 /* ================================================…

Zip暗号化

仕様書とZipのバイナリとにらめっこしてわかったのは、とりあえず… 暗号化したZipファイルはgeneral purpose bit flagにフラグが立つ Data descriptorが付加される…みたいだけどよくわからん データの先頭12バイトが鍵(?)。その分、サイズが増える。

Overall .ZIP file format:

http://www.pkware.com/documents/casestudies/APPNOTE.TXT Overall .ZIP file format: [local file header 1] [file data 1] [data descriptor 1] . . . [local file header n] [file data n] [data descriptor n] [archive decryption header] [archive ex…

C. Data descriptor:

http://www.pkware.com/documents/casestudies/APPNOTE.TXT C. Data descriptor: crc-32 4 bytes compressed size 4 bytes uncompressed size 4 bytes This descriptor exists only if bit 3 of the general purpose bit flag is set (see below). It is byt…

D. Archive decryption header:

http://www.pkware.com/documents/casestudies/APPNOTE.TXT D. Archive decryption header: The Archive Decryption Header is introduced in version 6.2 of the ZIP format specification. This record exists in support of the Central Directory Encryp…

Zip暗号化

Info-ZIPで暗号化するとData descriptorはつかないけど、Windowsで暗号化したらData descriptorがついてきた。 なーぜー。

Traditional PKWARE Encryptionの復号処理を書いてみる

データを処理してみないとなんとも。 #include <string.h> #include "zlib.h" void init_keys(uLong *keys) { keys[0] = 305419896L; keys[1] = 591751049L; keys[2] = 878082192L; } void update_keys(uLong *keys, char c) { keys[0] = crc32(keys[0], &c, 1); keys[</string.h>…

Zip/Ruby 0.1.0

http://zipruby.rubyforge.org/ https://rubyforge.org/projects/zipruby/ これはなに? libzipのRubyバインディングです。 Zipファイルの作成・解凍ができます。 インストール/ビルド gem install zipruby UNIXでのビルドにはlibzipが必要です Windowsで使…

Zip/Rubyタスク

https://rubyforge.org/projects/zipruby/ eachメソッドの実装 []メソッドの実装 ←クローズが必要なので中括弧をfopenにしない Enumerableのインクルード add_functionのテスト ←関数をなくした マーク漏れ、メモリリークのチェック パスワード付きZipの操作…

off_tがらみのバグ

off_tがらみのバグが。 ruby.hのインクルードを最後にしたら直った。どっかで2重に定義されてる?

RUBY-DOC.ORG

http://www.ruby-doc.org/

CRTのrename

http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aWindows%2fVC%2b%2b%3alog%3adetail_2005_2#H-igextc 同じ名前のファイルがあっても上書きしてくれないらしい。しかたないのでzip_close.cのrenameを置き換え。 #ifdef _WIN32 #include <windows.h> #include <io.h> </io.h></windows.h>…

Zip/Ruby α版

※リリースしました libzipのRubyバインディング。 とりあえず。 ソース http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/zipruby/ext/?root=svn ダウンロード http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/zipruby/ext.tar.gz?root=svn&view=tar ms…

libzip win32 patch(修正版)

アーカイブを作るとやたらとCRCエラーが出るので、なんで?なんで?と思ってたら、fwriteでバイナリデータの改行コードが書き換えられていたせいだった…orzfopenではバイナリモードで開いているので、openを修正。 #define open(p, f, m) _open((p), ((f) | …

APPNOTE.TXT - .ZIP File Format Specification

http://www.pkware.com/documents/casestudies/APPNOTE.TXT アルゴリズムはともかくフォーマット自体はシンプルな気がする。

C++勉強した方がいいのかな…

ICUを使ってみて自分の頭の悪さに絶望した! …C++勉強するかなー。

Rubyでどう書く?:連続した数列を範囲形式にまとめたい

http://builder.japan.zdnet.com/sp/ruby-doukaku-panel/story/0,3800086254,20369264,00.htm引数のデフォルト値って、これいいのかなぁ? def asm(seq, head = seq.first, i = seq.first) if seq.first == i asm(seq.slice(1..-1), head, i + 1) else [[hea…

SimpleDateFormat(smpdtfmt) 0.0.1

http://jadtfmt.rubyforge.org/smpdtfmt/ http://rubyforge.org/projects/jadtfmt/ これは何? ICUのSimpleDateFormatのラッパです。 実装はJapaneseDateFormatとほとんど同じです。 ダウンロード http://rubyforge.org/frs/?group_id=6074 ビルド/インスト…

link:最適化の為のアセンブラ入門

http://ray.sakura.ne.jp/asm/index.html あとで読む。

JapaneseDateFormat 0.0.4

http://jadtfmt.rubyforge.org/ http://rubyforge.org/projects/jadtfmt/ これは何? ICUを使ってTimeオブジェクトを和暦で出力します。昭和64年の判定とかがわりと正確です(たぶん)。OSによっては寛政とか寛永とか出力できるかもしれないです。 書式につ…

マウスで画像のサイズを変更

http://storehouse.sakura.ne.jp/resizable/resizable2.htm 以前作ったResizableで画像のサイズも変更できることに気がついた。 そのうち使うかな?

ICUで和暦

こちらのエントリからコードを拝借。コードページとか。 C++難しいなぁ…。ちゅーか元号変わったら、ICUバージョンアップするのかな? #include <string> #include <iostream> #include "unicode/calendar.h" #include "unicode/smpdtfmt.h" void format(char *dst, const char </iostream></string>…

ICUで和暦変換モジュールを作ってみた

※ちゃんとしたの作りました JaDatesの記事を呼んでICUで和暦の変換ができることを思い出して、昨日からちまちまと作成。http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/jacal/jacal/?root=svn require 'jacal' class Time def jafmt(fmt) JaCal.format(s…

拡張での$KCODEの判定

拡張ファイルでの$KODEの判定はどうやるんだろうと思ってソースをあさったら、re.cにrb_get_kcode()があった。 const char* rb_get_kcode() { switch (reg_kcode) { case KCODE_SJIS: return "SJIS"; case KCODE_EUC: return "EUC"; case KCODE_UTF8: return…

和暦変換拡張ライブラリのリリースに向けたメモ

リリースしました 出力のバッファを考慮のこと 書式文字列の2倍のサイズでよいかな? 書式にマルチバイトが含まれていたらどうしよう? JapaneseDateFormatに名前を変えて、JapaneseCalendarをadoptしたSimpleDateFormatのラッパにする $KCODEを見て出力文…