DOMDocument->loadHTML()でパースすると文字化けする

PHP

大体HTMLに原因があるのでそこを見ればよい。 原因1: CP932なのにmeta charset=Shift_JISになっている 原因2: meta charsetは正しいが、それより前にマルチバイト文字がある 原因3: そもそもmeta charsetがない ブラウザが「いい感じ」に処理してくれるのも…

RawGitからjsDelivrに移行した

今月末以後にサービス終了とのことなのでjsDelivrに移行した。 アナウンスから終了まで割と短いが、jsDelivrに専用のガイドページが用意されている。jsDelivrはRawGitのようにGitHubの参照もできるが、npmパッケージがある場合はそちらの方が利用率は高くな…

Subversion 1.10で認可され(authorize)ない

1.9から1.10にサーバをバージョンアップしたら問題が発生した。 svn up なり svn list なりを行うと、 svn: E175013: Access to '/path/to/hoge/trunk' forbiddenと出てアクセスできない。HTTP(S)経由なので、LogLevel debug としてログを追ってみると最後に…

CentOS 7でgeoipupdateが動かなくなった

GeoIP-update-1.5.0-11.el7 が4月からエラーを吐くようになった。 /etc/cron.weekly/geoipupdate: Received Error -21 (Sanity check database_info string failed) when attempting to update GeoIP Database Received Error -21 (Sanity check database_in…

cURL 7.56.0で大きなデータをPOSTするとデータが壊れる

curl_setopt()のCURLOPT_POSTFIELDSでデータを設定し送信するときに、16KBあたり以降のデータが先頭からの繰り返しになる。 PHP 7.1.11以降、最新のPHP 7.2.1でも起きる。 cURLのバグのようで、公式WindowsビルドのcURLがPHP 7.1.11から7.56.0にアップデート…

GNU screenで行の折り返しが変になる

GNU screen内のbashやvimで画面幅に収まらない長い行を表示しても折り返されず、右端の文字が上書きされるだけになってしまう。 症状として、bashで上下キーなどでhistoryを表示していると長い行を表示した後でその分だけカーソルが上に行ってしまう。vimで…

parse_url()の結果が壊れる

parse_url()で日本語URL(IRI状態)を渡すと壊れる。具体的には全角空白が別のUTF-8として無効な文字列になった。(PHP7.1)調べてみるとphp_replace_controlchars_ex()でiscntrl()を呼び出し、コントロール文字を'_'に置換している。 日本語のWindows環境ではAS…

Let's Encryptが落ちていてOCSPリクエストがエラーになる

Web

Service status: Service Disruption https://letsencrypt.status.io/ アクセスのあるサイトはキャッシュが生きているのだが、運悪く証明書を更新したばかりのサイトがあった。これは困る。Firefox の security.ssl.enable_ocsp_stapling = true (デフォルト…

CentOS 7のduplicity (paramiko)でホスト鍵検証が通らない

サーバを入れ替えてホスト名に対するホスト鍵が変わったサーバ。事前にknown_hostsを編集して新サーバの鍵を追加してあり、OpenSSHのssh、sftpでは正常に接続できる。 また前提としてpython2-paramiko-1.16.1-2.el7 時点ではECDSA鍵は使えないっぽいのでRSA…

CentOS 7のduplicity-0.7.11-1.el7 の--encrypt-keyが動作しない

GPGがエラーを起こす。 GPGError: GPG Failed, see log below: ===== Begin GnuPG log ===== gpg: invalid option "--pinentry-mode=loopback" ===== End GnuPG log =====とりあえずオプション指定を外して対応した。 /usr/lib64/python2.7/site-packages/du…

Adventure Land

Adventure LandというMORPG風のゲームがある。数か月前くらいにできて、まだプロトタイプだそうだが、cursors.io, agar.io, diep.ioのようにHTML5ベースのゲームだ。 HTML5ということはJavaScriptで動いているわけで、クライアントサイドでごにょごにょやる…

diff -Wの関数名長制限をなくす

diffには差分文脈の関数を表示する機能があり、-W (--show-function-line)で関数とするパターンをカスタマイズできる。ただ関数名の長さに40字の制限があって長いと途中で途切れてしまう。 unix diff --show-function-line truncates outputやfunction is tr…

WindowsのStrawberry Perlで最新のSQLiteを使う

SQLiteで新しいバージョンを使いたくなった。CPANで入れてみても9か月前のバージョンしか入らない。 cpanm -n DBD::SQLite perl -MDBD::SQLite -e "print $DBD::SQLite::sqlite_version" # 3.10.2 インターフェイスをどうこうする必要はないのでSQLiteのソー…

32bit版Windows 7をWindows 10に更新

あるPCがPCIボードの事情でWin 7 32bitにしがみついていたが最近それが不要になった。すでに10月で無料更新期限後だが、まだ普通に更新できるという話なので更新してみた。 まず公式ダウンロードページから作成ツールをダウンロードする。後々のことも考えて…

startコマンドがファイルデスクリプタを引き継いでしまう

3つのスクリプトがあるとする。 a.bat は b.bat を実行し、そのエラー出力をログに保存する b.bat はいろいろな処理をする過程で c.pl というデーモンを起動する c.pl はデーモンなので終了しない # a.bat call b.bat 2>>error.log # b.bat start wperl c.pl…

起動ディスクをSSDにした

SSDに換装したのではなくHDDはそのままに起動ドライブをSSDにコピーする形。OSはWindows 7。 HDDはC, D, E, Fの4パーティションでC:が起動ドライブ。このC:のみをSSD化したわけだ。 CFD販売のSSDなのでクローンはOEM版のEasyDiskCopyをサイトからダウンロー…

Java (JRE 1.8.0 update 91)が動作しない (Windows 7, 32bit)

実行・アンインストールできない Javaを使ったプログラムを実行しようとしても何も起きない。タスクマネージャを見るとjavaw.exeが暴走している。Javaのコントロールパネルを開こうとしても同様。 再インストールするためにアンインストールしようとしても同…

符号化方式"UTF8"文字0xHEX<は"EUC_JP"と同じではありません

PostgreSQL 8.4 のメッセージでこんなのが出た。 意味が理解不能なので元のメッセージを見ると、"character 0xHEX of encoding "UTF8" has no equivalent in "EUC_JP"となっていた。 つまり正しくは「エンコーディング UTF8 の文字 0xHEX は対応する文字が E…

Windows 10への更新予告が出た。

Windows Updateを自動にしているPC。GWXのKBは入っているものの、そこからの予約は行なっていない。いきなり15分後にWindows 10にアップグレードするという通知が出た。 予約していない場合でもウインドウを閉じると強制アップデートされるという話は聞いて…

/以下のパーミッションを壊してしまった

find . -print0 | xargs -0 chmod o+rするつもりが.の代わりに/を打ってしまった。しかもrootでサーバ設定をいじっていた流れで作業していたので権限に不足無し。なぜchmod -R o+r .ではなくわざわざ長いコマンドにしたのか不明だが、だからこそtypoもしたの…

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\a…

PCRE は possessive を使うと速いのか → 変わらない

PG

簡単な例として /.*/ のようなパターンがあったときに "......" にマッチさせる必要がないならば /.*?/ (non-greedy) とすれば無駄なバックトラックが発生しない分相当速くなる。 これは当たり前だが、ここでさらに "...0 " にマッチさせたくないならば /[^*…

Genieo/1.0 のDoSアタック

ブラウザプラグインらしい。 robots.txtを無視してアクセスする。 Connection: close で間隔をおかずに連続アクセスする。 URLの #以降を無視しないので同じURLを何度も読み込む。 robots.txtの件は Disallow: /nobot と書いても /nobot.html にアクセスする…

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 (</server_hostname></html_path>…

[Linux] Cent OS 6 で sudo 無しの Let's Encrypt

注意 2016年6月現在 Let's Encrypt はベータ期間が終了し、公式のクライアントは certbot というものに置き換わっている。 自分では Perl で実装したモジュールである Protocol::ACME を使っているので公式クライアントの状態は不明だが、以下の情報はまった…

git clone https:// 時の証明書エラー

HTTPS で GitHub から clone しようとしたら証明書のエラーになる。 git clone --depth=1 https://github.com.example.com/repo.git Cloning into 'repo'... fatal: unable to access 'https://github.com.example.com/repo.git/': SSL certificate problem,…

target.microad.jpのアタックがひどい

Web

夕方頃に限って動的ページに秒間10アクセスしてくるので負荷が急上昇する。 マイクロアドというのは掲載していないのだがGoogle AdSenseリセラープログラムとやらの関係で来るのだろうか。他の広告ネットワークのbotはちゃんと間隔を置くし説明URLがUser-Age…

CentOS 6のLogwatch 7.3.6でFail2Ban 0.9.2のBan/Unbanがレポートされない

0.9(a9b9c6ea03, 5630c56c75)でログレベルが変わっていたようだ。Logwatch側も7.4.1(r225, bug#37)でそれに対応している。ただFail2BanはEPEL(Fedora)なのでバージョンの追従具合に差が出てしまったようだ。 間に合わせだがLogwatchのr225の差分を取り込めば…

fail2banが起動しない

サーバに再起動を掛けてから立ち上がらなくなった。(fail2ban-0.9.2-1.el6.noarch) 詳しいエラーを出すために fail2ban-client -xvd start してみると ERROR Failed during configuration: 'NoneType' object has no attribute 'startswith' Traceback (most…

JetBrains製品がサブスクリプション型になるらしい

単品の値段が$89/年、2年目$71、3年目以降$53になるようで製品にもよるが2年目以降ほぼ半額だった従来型と比べるとやや値上げのようだ。*1 ただし既存ユーザに関しては2016年中は割引があるため適用を受けると40%オフで最初から$53/年になる。これに加えて移…