Strawberry Perl 5.22.1.3 (32bit)でText::Mecabをインストールできない
ポータブル版でWin-Rからportableshell.batを開き、cpanm --notest --interactive Text::MeCab
((cpanmでビルドする場合mecab-configのないWindowsでは--interactive
が必要。)) するとエラーになる。ビルドログには以下のメッセージ。
g++.exe -o blib\arch\auto\Text\MeCab\MeCab.xs.dll ... dll.exp path\to\MeCab\sdk\libmecab.lib: error adding symbols: File format not recognized collect2.exe: error: ld returned 1 exit status dmake.exe: Error code 129, while making 'blib\arch\auto\Text\MeCab\MeCab.xs.dll'
libファイルが認識されていないようだが、file
やgcc-ar t
してみると壊れてはいない雰囲気。
ためしに前にビルドが成功したStrawberry Perl 5.20.2.1に付いているcディレクトリと一時的に入れ替えてみたところ、正常にビルドできた。
5.22付属のMinGW環境が何かおかしいのかもしれない。ただWin32::Registryなど、特に外部ライブラリを必要としなさそうな他のモジュールのビルドは付属のもので正常にできた。
プログラムのバージョンを調べてみたら5.20.2の方が新しかった。いっそ入れ替えたまま使ってもいいかもしれない。
Perl | GNU ld | gcc |
---|---|---|
5.20.2 | 2.25 | 4.9.2 |
5.22.1 | 2.24 | 4.8.3 |
PCRE は possessive を使うと速いのか → 変わらない
簡単な例として /
のようなパターンがあったときに "
にマッチさせる必要がないならば /
(non-greedy) とすれば無駄なバックトラックが発生しない分相当速くなる。
これは当たり前だが、ここでさらに "
にマッチさせたくないならば /
というパターンにできる。
疑問なのは、これをさらに /
(possessive) としてバックトラックを禁止すると速くなるのかどうか。
感覚的にはマッチしなかった場合にバックトラックしない分、速くなりそうなのだが、以前Perlでpossessiveにしたところパフォーマンスが落ちたことがあったのでとりあえずドキュメントに当たってみた。
それによるとPCRE2では自動的にそのような最適化が行われるらしい。PCRE2_NO_AUTOPOSSESS
や /(*NO_AUTO_POSSESS)/
を指定しない限りは勝手にpossessiveになるそうだ。
ただPCREかPerlかBoostか忘れたが何かの正規表現エンジンで /^(?:A|B)/
を /^A|^B/
と書いたら目に見えて遅くなったことがあるので、明らかに等価でもいつも最適化されるとは限らないだろうとは思う。
Genieo/1.0 のDoSアタック
ブラウザプラグインらしい。
- robots.txtを無視してアクセスする。
Connection: close
で間隔をおかずに連続アクセスする。- URLの
#
以降を無視しないので同じURLを何度も読み込む。
robots.txtの件は Disallow: /nobot
と書いても /nobot.html にアクセスする。仕様にあるような先頭一致ではなく /
区切りで完全一致させているのだろうか。
ユーザ環境でクロールを行ってリコメンデーションをするらしいが、これだけトラフィックが発生するとユーザ側も重くなるのではと思う。使ってないので実際は不明なもののマルウェアとして分類しているところもある。
2012年頃はUser-Agentの偽装もやっていたらしいのでそれに比べれば今はUser-Agentでブロックできるだけマシなのだろう。
以下ログ
続きを読むLINE Corporation の harvester
203.104.145.* から変なbotのアクセスがある。
GET /<HTML_PATH> HTTP/1.1 Connection: close From: obs-jp Host: <SERVER_HOSTNAME> Accept-Charset: utf-8 Accept-Language: en-US,en;q=0.8,*;q=0.6 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 X-Obs-Proxy-Ip: <SERVER_IP_ADDRESS> Content-Length: 0 # <...>には適当な文字が入る
- robots.txtを無視する
- Chromeに偽装している
- そのくせロボット以外に通常付けないFromヘッダがある
- Fromヘッダがメールアドレス(を連想させるもの)ではない
GET
なのにContent-Length
ヘッダがある
なかなか素敵な実装だ。
HTMLしか読まないが、何をしているのだろう。
[Linux] Cent OS 6 で sudo 無しの Let's Encrypt
注意
2016年6月現在 Let's Encrypt はベータ期間が終了し、公式のクライアントは certbot というものに置き換わっている。
自分では Perl で実装したモジュールである Protocol::ACME を使っているので公式クライアントの状態は不明だが、以下の情報はまったく役に立たない可能性がある。
前書き
Let's Encrypt を使ってみようとしたが、インストールに sudo 必須なのが微妙。CentOS 6なので正式にはサポートもしていないらしい。
そこをなんとか sudo 無しでがんばってみた。
ただ、後で知ったが実際には純正クライアントを使わなければいけないということではないようだ。クライアント実装一覧にライブラリも含めたくさん存在する。クライアントでは ACME Tiny が手軽そうだ。