駒形電産

最近よく見るJSONの意味がわからなかったので調べてみました。

Introducing JSON

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C , C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

JSONとは軽量のデータ交換用のフォーマットだそうです。 というかJavaScriptのオブジェクトの形式でデータをやり取りしたら楽だよねってことみたいです。
↓たとえばこんな感じだそうです。(via XMLをJSONデータに変換するJavascriptライブラリ – スピリッツオブゼロ@blog)

  ListingInfo: {
    Request: {
      Parameters: {
        Parameter: [
          { value: "あいうえお",
            name: "keyword" },
          { value: "Shift_JIS",
            name: "enc" },
          { value: "xml_lite4",
            name: "tf" },
          { value: "FP",
            name: "at" },
          { value: "10",
            name: "ipp" },
          { value: "777",
            name: "categ_id" }
        ]
      }
    }
  }
}

PHPの配列をJavaScriptの配列に変換する処理なんかはやってる人も結構いるかもしれませんが、ちゃんと名前付けて仕様化してるところがすごくいい。

よく見たらPEARにもServices_JSONがProposalに上がってます。

JSON/READ-ME-JSON.php:

// create a new instance of JSON
require_once('JSON.php');
$json = new JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);

print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = $GLOBALS['HTTP_RAW_POST_DATA'];
$value = $json->decode($input);

こんな感じで使えるなら便利そう。

既にXMLでやり取りしてるサービスもコレ(Amazon Web サービス ブログ: XML→JSON展開クラス)とか使ったらもっと便利になるかも!

ゼンドジャパンとユヒーロが障害対策のソリューションで提携 – HotPHPPER News

ITmediaにてゼンドジャパンとユヒーロという会社が提携がし、PHP+MySQL/PostgreSQL環境の障害対策のソリューションの実現について掲載されています。

ユヒーロってまさか、あの・・・?

kunitの日記

(2)で特定したファイルをAspectをかませるように書き換えて、「components_c」に出力する。この際、「Zoo」クラスとなっている場合には「Foo_Bar_Zoo」に書き換えてしまう。

Aspectかませて書き換え!

X ole.net : 動的にクラス生成

その後、生成したファイルをunlink()すれば、メモリ上(?)にクラスファイルが読み込まれたされた状態になって、いつでも new できるって状態になってます。(詳しくはソース読んで :p)

includeして削除しちゃうって考えが面白い!

PHPでもコードインジェクションやコードジェネレーションの波が。
厭な感じを持たれる方もいるかもしれませんが、どんどんやっていーんです!

p0t: 軽快なPHP

軽快なJavaに感化される。特にためになったのが、透明性を確保するための方法について。つまりアプリケーションの各ドメインがそれぞれ独立して他に依存しないようにする方法。ぱっと考えてそんなことできるのかと思いましたが、現在主流になってる方法は

  • リフレクション
    (きたオブジェクトに動的に対応)
  • コードインジェクション
    (Build時にAntで自動的にコードを付け加える)
  • コードジェネレーション
    (コード自体を生成する)

PHP 観測所日誌 – phpcon_quebec_cd [PHP] PHPConference Quebec 2004 の CD が到着。

もう注文した事も忘れていたですよ。面白そうなコンテンツがあれば PHP-Stady のネタになるかと思ったんだけど、今更 Introduction to SQLite や Introduction to PHP5 ってのも。

さすが 2004 だぜ!

笑った。

PHPeclipse 1.1.7 available at update site

The update site (for use with the Eclipse configuration manager) now contains version 1.1.7 for Eclipse 3.1: http://pipestonegroup.com/eclipse/updates

There are still several annoying bugs with the debugger:

  • Debugger view initialization fails at the beginning (appears harmless)
  • Variables view doesn’t work (Eclipse 3.1 event handling differs from 3.0)
  • Source locator doesn’t work automatically (have to click the call stack to go to the current line)

Eclipse 3.1対応のPHPEclipse1.1.7がリリース。
Debugger周りでまだバグが少しあるようですが、Eclipse 3.1は速度面でも機能面でも何かと素晴らしいので嬉しいです。
そんな中でもおれが地味に一番嬉しかったのがCVS commitにキーボードショートカットの割り当てが可能になったこと!

Mojavi 2.0 Tutorials, Updates and Docs

Downloads

I have recently been working on a bug-fixed release of Mojavi 2.0. I’ve comp leted the changes, and would love to have some people test against it before I c onsider it an official release. The highlights of this release include PHP 4.4. 0 support, and several bug fixes and enhancements.

MojaviProjectのやる気の無さに2.0.3βを勝手に出しちゃってる人が。
PHP 4.4.0対応とか良さそうだけどこれありなの?
Tanner BursonはPHP5で動くMojavi2プロジェクトYumaの人でもあります。(どんだけMojavi2好きなんだって話だよ)

Yuma Project Page

What is it?

The Yuma project is a custom build of the Mojavi project. More specifically it is aimed to be a PHP5 compatible build of Mojavi 2.0. Mojavi 2.0 is an excellent framework for building PHP applications. It is efficient in both execution speed, and development time.

Mojavi Japan – フォーラム Smarty-Lightについて

SmartyRendererではSmarty-Lightって使えないんですよね?(頓珍漢な質問であればすいません)使えなかったら使えるようなプラグインがあったらいいかなぁ…と。

という話題があったのでSmartyLightRenderer作りました。

SmartyLightRenderer-0.1

質問されたので答えたついでにのせるシリーズ。

Q: 「ログアウト後の戻るボタン対策はどうすればいいのか?」

A: 「PHPデフォルト設定(php.ini-dist)なら正しくログアウト(session_destroy)してればそれで良い。」

「ログアウト後の戻るボタン問題」とは何か。

ログアウトしてもブラウザの戻るボタンで戻るとキャッシュ上のページが表示されてそこから「購入」とか都合の悪い処理をされちゃう問題。

要はブラウザがキャッシュしないで、戻るボタンを押されても必ずサーバに問い合わせてくれれば大丈夫。
ブラウザに「キャッシュ使うな」と言うにはHTTPヘッダに下記を書けば良い。

Expires: 0
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache

Expiresは過去の日付とかなら良い。no-storeとno-cacheは、「ファイルとかにキャッシュするな」と「メモリ上とかにもキャッシュするな」、must-revalidateは「必ずサーバ見に行け」、PragmaはHTTP 1.0用らしいです。
ヘッダを自分で書いてもいいですが、PHPではphp.iniでsession.cache_limiternocache(デフォルト)に設定されていると上記のヘッダを自動的に出してくれます。
必ずサーバに問い合わせてくれれば、ログアウトされてるので「ログインしてください」画面に飛ばすことができます。

via: Hypertext Transfer Protocol HTTP/1.1 – 13 Caching in HTTP

プログラマー日記(2005-08-09)

なおRailsは、Rubyという言語の特徴を最大限に生かし、またJavaのフレームワークを参考にせず設計されています。PHPのフレームワークも、Javaのさるまねに陥ることなく、PHPの良さとは何かを考えながら、製作していただけたらと思います。

PHPの良さとは何か!

おれの考えたPHPの良さ:

  1. 関数いっぱい
  2. HTMLに埋め込める
  3. オブジェクト指向とか知らなくても作れる

それをフレームワークに生かせないかということで、一発ネタのはずだったAwesomeFrameworkをちょっと変えてみました。

AwesomeFramework-0.5.0.tar.gz

1.関数いっぱい

AwesomeFramework(以下AF)は関数のみ!(クラスとか無い)

  • forward($action) : アクションを実行する。(処理が移る)
  • redirect($action) : アクションにリダイレクトする。(別リクエストになる)
  • fetch($action) : アクションの実行結果の出力を取る。

2.HTMLに埋め込める

AF標準のRendererはPHP!
いままでは「HTMLに埋め込める機能いらねぇ」とか思ってましたが、たとえば単に

Hello World!

と書いたテキストに拡張子「.php」をつけてincludeすると全内容が勝手に出力される!
PHPタグの外側は勝手に出力される=PHPタグが無いテキストは全部が普通に出力される。

3.オブジェクト指向とか知らなくても作れる

AFのactionはただのPHPファイル。関数ですらなく、上から順番に実行されます!

Hello Worldアプリのaction:

<?php
$_REQUEST["message"] = "Hello World";
forward("view");
?>

PHPファイルにするとグローバル変数地獄になって大変だろうと思っていたんですが、全てのactionはforward関数内でincludeされるのでフィルタチェイン的構造になったforward関数のスコープになって何気にnamespaceが分かれてる!

ファイルをactionの単位として$selfというそのaction自身の情報を含んだ変数をインポートすることにしました。($thisだと混乱するのでPerl的な$self)

$selfの中身:

Array
(
    [action] => index
    [file] => index.php
    [abs_path] => D:/Program Files/eclipse-3.0.2/workspace/AwesomeFramework/actions/index.php
    [abs_uri] => http://localhost/index.php?action=index
    [resource] => Array
        (
        )
)

オブジェクト指向JavaScript

クロージャとはブロック化されたコードの事です。その特徴はクロージャが生成されたスコープのローカル変数を取り込むことができる、というものです。

JavaScriptでのクロージャの話。PHPだと馴染み浅ですが、楽しいし便利!