php5 + JSON-C では JSON_BIGINT_AS_STRING が効かない
phpには、JSONを扱うためのjson拡張が同梱されている。(ext-json(JSON_parser))
しかしこのソース中の以下の一文が問題で、各種Linuxディストリで配布できないことになっている。
The Software shall be used for Good, not Evil.
Bug #63520 JSON extension includes a problematic license statement
よって、パッケージでインストールする場合、json拡張はphp同梱のではなく、別のものが使われている。
たとえば Remi の場合は たぶん pecl-jsonc
PHPコードからのインタフェイスはそのままに、実装の下位ライブラリだけ別物というイメージ。
しかし実装が違うため、挙動が微妙に違う。
開発環境がソースからビルドのPHP、STG/本番環境が Remi のPHP というプロジェクトで問題が起きたのでメモ。
続きを読むリダイレクトは絶対URI?
RFCによると、絶対URIらしい
RFC2616 (HTTP/1.1) で、
「HTTPのリダイレクトレスポンスでは、Location は絶対URI(absoluteURI)で書かなければならない」
というのが定められているけど、これはあんまり守っていない。
BASEトランザクションとCAP定理
BASEトランザクションとCAP定理
クラウドや分散システムで使われる用語
BASEトランザクションとは
- Basically Available
- 可用性が高く常に利用できることを重視。
- 楽観ロックやキュー。
- Soft State
- あるノードの状態はその内部に埋め込まれた情報によって決まるものではなく、 外部から送られた情報によって決まるという状態の考え方
- Eventual Consistency(結果整合性)
- 一時的に整合性が満たせない状態が起きるが、 ある一定の期間が経てば満たせるようになる、こと。
- DNSやNTPなど。
CAP定理とは
以下の3つのうち、2つまでしか満たせないという定理。
- Consistency(整合性)
- Availability(可用性)
- Partition(分散)
システムへの要求によって選択する必要があり、クラウドの場合はAとPは必須となる。 厳密なConsistentは満たすことができないが、少し緩めて、結果整合性なら実現できる。
- 複数のレプリカノードにデータ送信時
- いくつかノードで何らかの事情で書き込みに失敗した
- すべて書き込みには成功したが、同時に終わったわけではない
ブライスの法則 (Bryce)
Good Systems Design + Good Programming = Great Systems Good Systems Design + Bad Programming = Good Systems Bad Systems Design + Good Programming = Bad Systems Bad Systems Design + Bad Programming = Chaos