脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

paco が porg に

paco が porg に変わってた。
正確には後継プロジェクトらしい。

http://paco.sourceforge.net/http://porg.sourceforge.net/

configure の --disable-gpaco--disable-grop に。
make logme は無くなっている。

-a, -lD make install, -lp xxx make install あたりの使い勝手は変わらず。
paco2porg で paco からのデータ移行ができる模様。

paco の方が名前が可愛かった。

Windows10のセーフモードは厄介

Windows10のお試し中なのだけど、
Win7で使っていた常駐ソフトがWin10では動かないようで、起動後1分くらいでフリーズしてしまう。

こんな時、従来ならセーフモードで起動して、
問題となるソフトのアンインストールもしくはサービスの自動起動停止をしていた。

手順的にはOSの起動中に F8 を押したらセーフモード、とかそういう感じだったはず。

しかしWin10の場合はそういう起動方法を探すことができず、 通常起動した状態で、次回の再起動時にセーフモードにするかどうかを設定する方法しか見つけられなかった。

でもこれだと、通常起動しないくらい悪い状態になった場合にセーフモード起動ができず、OSの再インストールをするはめになるのでは?
本当に通常起動前に選択できないとしたら欠陥としか思えない。

今回の私の場合、フリーズまでには約1分の猶予がある。
通常起動後フリーズするまでの間に、急いでセーフモード起動設定をすればなんとかなるはず。

何度かチャレンジしているうちに成功したのでメモ。

  1. 電源投入
  2. ユーザを選んでパスワード入力
  3. Ctrl+Alt+Del連打 → タスクマネージャ これをすると、デスクトップが早く表示される気がする
  4. Windows+X → R → msconfig → ブート → セーフブート → OK → 再起動

今の私の知る限りの最短の手順。これを急いでやる。

再起動後はちゃんとセーフモードになっており、サービスを無効にしてから 再度 msconfig でセーフブートのチェックを外し再起動。
通常起動後、問題のソフトをアンインストールして解決した。

実にかっこ悪い方法だけど数時間はまったので記録。

php5 + JSON-C では JSON_BIGINT_AS_STRING が効かない

phpには、JSONを扱うためのjson拡張が同梱されている。(ext-json(JSON_parser))

しかしこのソース中の以下の一文が問題で、各種Linuxディストリで配布できないことになっている。

ext/json/JSON_parser.c

The Software shall be used for Good, not Evil.

Bug #63520 JSON extension includes a problematic license statement

よって、パッケージでインストールする場合、json拡張はphp同梱のではなく、別のものが使われている。
たとえば Remi の場合は たぶん pecl-jsonc

PHPコードからのインタフェイスはそのままに、実装の下位ライブラリだけ別物というイメージ。
しかし実装が違うため、挙動が微妙に違う。

開発環境がソースからビルドのPHPSTG/本番環境が Remi のPHP というプロジェクトで問題が起きたのでメモ。

続きを読む

浮動小数点は安全じゃない

浮動小数点数は誤差が出て安全じゃないから、重要な計算の時は使っちゃいけないよという話。
PHP に限った話ではなく、コンピュータ全般。

若手エンジニアからこんな質問がきた。
「5761800 を 小数切り捨てしたら 5761799 になっちゃった!」

<?php
$rate = 4.850/100;
$result = 1188000 * $rate;
echo $result*100;                 // 5761800
echo floor($result*100), "\n";    // 5761799
続きを読む

リダイレクトは絶対URI?

RFCによると、絶対URIらしい

RFC2616 (HTTP/1.1) で、
「HTTPのリダイレクトレスポンスでは、Location は絶対URI(absoluteURI)で書かなければならない」
というのが定められているけど、これはあんまり守っていない。

続きを読む