またRoRと関係ないぜ。
pdfのパスワードが分からなくなってしまったら、
pdfcrackを使うとよいぜ。
Windows版はこちらだぜ。
使い方はGIGAZINEさんとか、いろいろ出てるから解説しないぜ。
厳密にはかったわけじゃないけど、U(L)inux版の方が速いような気がするぜ。
でも、どちらにしても、単純なパスワードじゃなければ結構時間はかかるわな。
のんびりいこうヽ(´ー`)ノ
あ~すみません。またPerlの話題です。
総務省の法律条文検索すると、漢数字が使われているこんなページが出てきますよね。
例:特許法
http://law.e-gov.go.jp/htmldata/S34/S34HO121.html
まあ、これをび~っとコピペして、UTF-8のテキストファイルにし、
Perlを使って条文と、年月日と、円の表記の漢数字を全角算用数字に変換しようという試みです。
Rubyだと、結構いろいろみんな試しているですね。
http://d.hatena.ne.jp/rubikitch/20081201/1228142072
Perlだと、すでにLingua::JA::Numbersモジュールというのがあって、それを使うと楽らしい、、、と。
http://www2u.biglobe.ne.jp/MAS/perl/waza/kansuji.html
と、まあ、いろいろ先人達の残してくれた知恵を使うと楽は楽なのですが、
それはそれ、自分でも作ってみることにしました。
(というより、本当は、作った後に探せばあるということに気が付いた。悔しいので公開)
で、ソースはこちら。
■名前はない(format.plといういい加減な命名なので大きな声では言えない)
#!/usr/bin/perl
use strict;
use utf8;
use encoding("utf-8");
unless ( -e $ARGV[0] ) {
print "Usage: \$perl format.pl 対象テキストファイル\n";
} else {
my $filename;
my $filename_new;
$filename = $ARGV[0];
$filename_new = "new_".$filename;
open (IN, "<:utf8", $filename) || die "Error \n";
`echo -n "" > $filename_new;`;
while (<IN>) {
my $line;
my $trans;
my $i;
my @lists;
# 1行分を$lineに代入する。
$line = $_;
# 号はタブで字下げする
$line =~ s/^([一二三四五六七八九十])/\t$1/g;
# "章"を変換する
@lists = ();
$trans = "";
$i = "";
push( @lists, ($line=~m/(第?[一二三四五六七八九〇十百千]+章[の]?[一二三四五六七八九〇十]*[の]?[一二三四五六七八九〇十]*)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/第?[一二三四五六七八九〇十百千]+章[の]?[一二三四五六七八九〇十]*[の]?[一二三四五六七八九〇十]*/$trans/;
}
# "条"を変換する
@lists = ();
$trans = "";
$i = "";
push( @lists, ($line=~m/(第?[一二三四五六七八九〇十百千]+条[の]?[一二三四五六七八九〇十]*[の]?[一二三四五六七八九〇十]*)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/第?[一二三四五六七八九〇十百千]+条[の]?[一二三四五六七八九〇十]*[の]?[一二三四五六七八九〇十]*/$trans/;
}
# "項"の見出しを変換
@lists = ();
push( @lists, ($line=~m/(^[一二三四五六七八九〇十百]+)/) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/^[一二三四五六七八九〇十百]+/$trans/;
}
# "項"を変換
@lists = ();
push( @lists, ($line=~m/(第?[一二三四五六七八九〇十百]+項)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/第?[一二三四五六七八九〇十百]+項/$trans/;
}
# "号"の見出しを変換
@lists = ();
push( @lists, ($line=~m/(^\t[一二三四五六七八九〇十百]+)/) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/^\t[一二三四五六七八九〇十百]+/$trans/;
}
# "号"を変換
@lists = ();
push( @lists, ($line=~m/(第?[一二三四五六七八九〇十百]+号)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/第?[一二三四五六七八九〇十百]+号/$trans/;
}
# "年"を変換
@lists = ();
push( @lists, ($line=~m/([一二三四五六七八九〇十百千]+年)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/[一二三四五六七八九〇十百千]+年/$trans/;
}
# "月"を変換
@lists = ();
push( @lists, ($line=~m/([一二三四五六七八九〇十]+月)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/[一二三四五六七八九〇十]+月/$trans/;
}
# "日"を変換
@lists = ();
push( @lists, ($line=~m/([一二三四五六七八九〇十百]+日)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/[一二三四五六七八九〇十百]+日/$trans/;
}
# "円"を変換
@lists = ();
push( @lists, ($line=~m/([一二三四五六七八九〇十百千万億]+円)/g) );
foreach $i (@lists) {
$trans = &func_TransKansuuji( $i );
$line =~ s/[一二三四五六七八九〇十百千万億]+円/$trans/;
}
#
# 変換の終わった行をファイルに書き込む
#
`echo -n "$line" >> $filename_new;`
}
close(IN);
}
####################################
# Sub func_TransKansuuji
# 漢数字を全角算用数字に変換する
# 0-9999まで対応
####################################
sub func_TransKansuuji{
use utf8;
use encoding("utf-8");
my $val;
$val = $_[0];
# 漢数字を変換する
$val =~ s/一/1/g;
$val =~ s/二/2/g;
$val =~ s/三/3/g;
$val =~ s/四/4/g;
$val =~ s/五/5/g;
$val =~ s/六/6/g;
$val =~ s/七/7/g;
$val =~ s/八/8/g;
$val =~ s/九/9/g;
$val =~ s/〇/0/g;
#
# 十の変換
#
# (十を削除) 2十1、、、9十9
$val =~ s/([23456789])十([123456789])/$1$2/g;
# (十を0に) 2十、3十、、、9十
$val =~ s/([23456789])十/$10/g;
# (十を1に) 十1-十9
$val =~ s/十([123456789])/1$1/g;
# (十を10に) 十
$val =~ s/十/10/g;
#
# 百の変換
#
# (百を削除) 2百10、、、、2百99
$val =~ s/([23456789])百([123456789][1234567890])/$1$2/g;
# (百を0に) 2百1ー2百9、、9百1-9百9
$val =~ s/([23456789])百([123456789])/$10$2/g;
# (百を00に)2百、3百、、、9百
$val =~ s/([23456789])百/$100/g;
# (百を1に) 百10、百11、、、百99
$val =~ s/百([123456789][1234567890])/1$1/g;
# (百を10に) 百1-百9
$val =~ s/百([123456789])/10$1/g;
# (百を100) 百
$val =~ s/百/100/g;
#
# 千の変換
#
# (千を消失)2千100、、9千999
$val =~ s/([23456789])千([123456789][1234567890][1234567890])/$1$2/g;
# (千を0に)2千10ー3千99、、、9千99
$val =~ s/([23456789])千([123456789][1234567890])/$10$2/g;
# (千を00に)2千1ー2千9、、9千1-9千9
$val =~ s/([23456789])千([123456789])/$100$2/g;
# (千を000に)2千、3千、、9千
$val =~ s/([23456789])千/$1000/g;
# (千を1に)千100-千999
$val =~ s/千([123456789][1234567890][1234567890])/1$1/g;
# (千を10に)千10ー千99
$val =~ s/千([123456789][1234567890])/10$1/g;
# (千を100に)千1ー千9
$val =~ s/千([123456789])/100$1/g;
# (千を1000に) 千
$val =~ s/千/1000/g;
return $val;
}
おいら、PerlとかRubyの省略記法とか特殊変数って、すぐ忘れちゃって苦手なんすですよね。
このソースコードもあと数か月で理解不能のものになる可能性は大きく、、、
いい加減、mediawikiに記事を作っていくのがめんどくさくなったのであった。
そこで、定番のインポート機能がないかと探していたところ。。。
あった。
How to migrate a lot of text files
という2種類が使えそうでした。
さて、helpをみると、、、
●edit.phpのヘルプ
$ php edit.php --help Edit an article from the command line Usage: php edit.php [options...]Options: -u Username -s Edit summary -m Minor edit -b Bot (hidden) edit -a Enable autosummary --no-rc Do not show the change in recent changes If the specified user does not exist, it will be created. The text for the edit will be read from stdin.
●importTextFile.phpのヘルプ
$ php importTextFile.php --help Import Text File USAGE: php importTextFile.php: Path to the file containing page content to import Options: --title Title for the new page; default is to use the filename as a base --user User to be associated with the edit --comment Edit summary --nooverwrite Don't overwrite existing content --norc Don't update recent changes --help Show this information
ふむふむ。
ほいじゃ、こんなperlスクリプトを書いてみたよ。
#!/usr/bin/perl
my $dir = './';
opendir DH, $dir or die "$dir:$!";
while (my $file = readdir DH) {
next if $file =~ /^\.{1,2}$/;
next if $file =~ /\.pl$/;
next if !(-f $file);
`/usr/bin/php ../importTextFile.php --user 編集部 $file`;
}
closedir DH;
このスクリプトをインポートするファイルがたくさん入っているディレクトリ内で、実行すると、mediawikiにガンガンページができていくのでした。
Railsと何も関係ないし、しかもRubyとも関係ないじゃねーかと思うんですが、Perlのほうが馴染みあるからねえ。ごめんなさい。
api.php?action=parse&page=Ruby&prop=text
(”Ruby”はページ名のつもり)
おお、この方法だと、ちゃんとWiki記法がHTMLでレンダリングされてでてくるぞ!
ということで、ちょっと変えてみた。
●rubyスクリプト
def hoge
require 'rubygems'
gem 'rbmediawiki'
require 'rbmediawiki'
mysite = Api.new("ja", nil, nil,
'http://example.jp',
'http://example.jp/wiki/api.php')
mysite.format("txtfm")
puts mysite.parse(nil, nil, "Ruby", nil, nil, "text")
end
hoge()
よしよし。
そんで、Railsにのせてみた。
●app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
# 省略
def self.hoge()
require 'rubygems'
gem 'rbmediawiki'
require 'rbmediawiki'
mysite = Api.new("ja",nil,nil,
'http://example.jp',
'http://example.jp/wiki/api.php')
return mysite.parse(nil, nil, "Ruby", nil, nil, "text")
end
end
●app/views/hogehoge/index.html.erb
# 省略 <%= ApplicationController::hoge() %>
よしよし。
次は、ハイパーリンクが相対パスになっているのを絶対パスにして、ActiveResourceを使う(のかもしれない)
rbmediawiki
をつかってみたよ!
やりたいことは、決まったタイトルのページを引っ張ってきて、そこにWikiタグが残らずに、かつ、ハイパーリンクがちゃんとした形で残っててほしかったのですが、、、
■rbmediawikiのインストール
# gem install rbmediawiki Successfully installed rbmediawiki-0.2.6.2 1 gem installed Installing ri documentation for rbmediawiki-0.2.6.2... Installing RDoc documentation for rbmediawiki-0.2.6.2...
■xml-simpleというのも必要らしい
# gem install xml-simple Successfully installed xml-simple-1.0.12 1 gem installed Installing ri documentation for xml-simple-1.0.12... Installing RDoc documentation for xml-simple-1.0.12...
そして、
http://~api.php?action=query&titles=Ruby&export&format=xml
をコードから取得できるようにする。
■そして、やっとこさ動いたサンプルコード
def hoge
require 'rubygems'
gem 'rbmediawiki'
require 'rbmediawiki'
mysite = Api.new("ja", nil, nil,
'http://example.jp',
'http://example.jp/wiki/api.php')
mypage = Page.new("メインページ",mysite)
puts mypage.get
end
hoge()
。。。しかし、これはただ、Wiki記法のままのテキストを引っ張ってくるにすぎなかった!
なんか、いい方法はないものか?
続く(かどうかはわからない)
まあ、別に目新しくもない方法なんですが、
mediawikiに、
http://~api.php?action=query&titles=Ruby&export&format=xml
とかやると、xml形式で記事が取得できますね。
これ、どないして使おうか。
http://www.mediawiki.org/wiki/API:Client_code#Ruby
やっぱりここらへんのを使うと楽なのだろうか。
まあ、やってみよう。
できたらうれしい。
やったー。
うちのDell PowerEdge T105 にバルク品のメモリ
DDR2-SDRAM PC2-6400 (800MHz) 2GB x 4
がささって、
8GB
になったぞー!!!
購入は
価格.comのアンジ-さん
※BIOS 1.4.4ね。
うちのPowerEdge T105には、
このメモリは認識されませんでした。
\14,000- 。。。泣けてくる。。。
–
商品名
DELL純正 PC2ーPC5300 DDR2 667MHz Registered ECC 4GB(2GB×2枚)デュアルチャネル対応 SAMSUN製
商品説明
PC5300 PC2ー667 DDR2 667MHz
Registered ECC
4GB(2GB×2枚)
SAMSUN製
デュアルチャンネル対応です。
付属品
なし
商品の状態
Registered ですのでお間違いないようお願いします。
新品同様、動作確認済み。
画像を使い回す場合がありロットNO等が異なる場合もあります。
対応機種
PowerEdge 2970
PowerEdge 6950
PowerEdge SC1435
PowerEdge T300
上記以外は不明
レジスタードですのでお間違いのないようお願いします。
–
http://pc.usy.jp/wiki/index.php?PowerEdge/T105
で見て、自分で判断した限り、全然大丈夫だと思ったのだが。。。
そうか、Unbufferedの対語がRegisteredなのか!!!(涙)
※すでに、WEBrickが起動しているものとして、すすめます
まず”hoge”という、サブディレクトリをつくってみようとします。
http://[IPアドレス]:3000/hoge
というURLになる感じですね。
rails_app/mondai2/のところで、
generate controller [ディレクトリ名(Controller名)]
とします。
[ディレクトリ名]というのは少々語弊がありますが、まあそんなもんだと思うべし。
$ ruby script/generate controller hoge
※-pオプションをつけると、dry-run、つまり、つくるふりだけで実際にはファイルは作られません。
ま、それはさておきつくります。
$ ruby script/generate controller hoge
exists app/controllers/
exists app/helpers/
create app/views/hoge
exists test/functional/
create test/unit/helpers/
create app/controllers/hoge_controller.rb
create test/functional/hoge_controller_test.rb
create app/helpers/hoge_helper.rb
create test/unit/helpers/hoge_helper_test.rb
できました。
重要なのは、
なんでございまして、
<html> <body> <h1>ほげ</h1> </body> </html>
class HogeController < ApplicationController
def index
end
end
でも、これだけではだめで、
http://[IPアドレス]:3000/hoge
を開いてみても下記のようなページが表示されると思います。
これはWEBlickが起動している状態で新しいControllerを作ったためで、本来は
$ rake routes (in /var/www/rails_app/mondai2) /:controller/:action/:id /:controller/:action/:id(.:format)
このルーティングテーブルにマッチして表示されます。
(:actionのDefaultは”index”だし、:idのDefaultはnilのため)
なので、WEBlickを再起動するか、
config/routes.rbをviなどでひらいて、何も書かずに上書きほぞんし、
config/routes.rbファイルのタイムスタンプを更新してやるとちゃんと表示されます。
generate controller [ディレクトリ名(Controller名)] [ページ名(Action名)] [ページ名(Action名)] …
例えば、generate controller hoge index
という書き方もできます。
こちらのほうがはるかに楽ですし、railsの流儀に沿っているといってもいいでしょう。
ちょっと試します。
まず、つくったControllerを壊します。
destroy controller [ディレクトリ名(Controller名)]
$ ruby script/destroy controller hoge
rm test/unit/helpers/hoge_helper_test.rb
rm app/helpers/hoge_helper.rb
rm test/functional/hoge_controller_test.rb
rm app/controllers/hoge_controller.rb
rmdir test/unit/helpers
rmdir test/unit
notempty test
rmdir test/functional
notempty test
notempty app/views/hoge
notempty app/views
notempty app
notempty app/helpers
notempty app
notempty app/controllers
notempty app
一応、実験なので、app/views/hogeも手動で消しちゃいます。
$ ls app/views/hoge/ index.html.erb $ rm -fr app/views/hoge
次に、
$ ruby script/generate controller hoge index
exists app/controllers/
exists app/helpers/
create app/views/hoge
create test/functional/
create test/unit/helpers/
create app/controllers/hoge_controller.rb
create test/functional/hoge_controller_test.rb
create app/helpers/hoge_helper.rb
create test/unit/helpers/hoge_helper_test.rb
create app/views/hoge/index.html.erb
おぉ、
app/views/hoge/index.html.erbもつくられているし、
$ cat app/views/hoge/index.html.erb <h1>Hoge#index</h1> <p>Find me in app/views/hoge/index.html.erb</p>
app/controllers/hoge_controller.rbにindexアクションも出来上がっている
$ cat app/controllers/hoge_controller.rb class HogeController < ApplicationController def index end end
ではないか!(知ってたけど)