開発メモ,主に補足by子連れ親父プログラマー

2011-07-29

JSON形式の過去に一体何があったのか?

それにしても分からないのはJSON形式だ。
今phpで配列からJSON形式のデータを作ろうってことになったら、普通にphp5.2以上を使っている人たちは、
普通に json_encode を使うんだろう。悩む必要はない。
それ以外のちょっと前の環境の人だって、 pear が使えればそれでやっちゃってるんだろう。
だから世の中の人達は本当に正しいJSON形式なんてものに興味も関心もないに違いない。
それが自動的に作ってくれるんだから。
で、pearもねぇ、phpはいまだに4.3という、絶望のどん底のような環境にいる私は仕方なく自分でJSON形式を作ろうとすることになるんだが、
一昔前までは、
{ とか [ とか "" とか '' とか結構いい加減でもJSONとして動いていたらしいフシがある。
jQuery のプラグインです、なんつって配布されてるものでも jQuery1.2 くらいの時代のものだと、 key を""で囲っていなかったりして、これを最新の jQuery で動かすとエラーになる。
つまり、その時代に結構いい加減に作られていたJSON形式の一体どこがいけないのか、自分で分かってなきゃ作れないってことなんだ。
ということでJSONとはこれだ! というのがこのページらしいんだが。。。
http://json.org/
さっぱりわからん(笑)。
おそらくしかしこれは、配列は [] で囲め、 [] の中にはなにがしかの要素が入る。
オブジェクトは {} で囲め、その中にはキーと値をコロンでつないだものが入る、複数入れるならカンマで句切れ。
っていうようなことなんだろう。
ということでこちらの
http://d.hatena.ne.jp/kovaio/20060610
2006年の古い記事の関数を書き換えてみました。
$json = "[".toJson($data)."]";

function toJson($data) {   
 $json = array();
 foreach ($data as $string => $value) {
  $key = (is_numeric($string) ? "" : "\"$string\":");

  if (is_array($value)) {
   $json[] = sprintf("%s {%s}", $key, toJson($value));
  } else {
   $json[] = sprintf("%s \"%s\"", $key, addslashes($value));
  }
 }
 return implode(", ", $json);
}
JSON形式に何があったのか知らないが、こんだけ絶望的に変わってるのに、なんで誰も憤慨していないのかが不思議だ。

2011-07-28

OSXにおけるjava、javacの文字化け

もちろん食わず嫌いで、これまで徹底して避けてきた java なんですが、ふと思い立って参考書を買ってきたので勉強中。
OSXにも入ってるかなと見てみれば
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
ちゃんと入ってるようだ。ということで一発目のサンプルソースをコンパイルしたところでいきなりエラー。
っつーか文字化けしててなにがなんだか分からない。
$ javac Hello.java 
Hello.java:3: ?x??:???̕????́A?G???R?[?f?B???O SJIS ?Ƀ}?b?v?ł??܂???B
  System.out.println("初めてのプログラ??);
                                     ^
なによこれ。
ということで調べたところ、 .profile に
alias javac="javac -J-Dfile.encoding=UTF8"
alias java="java -Dfile.encoding=UTF8" 
といれればよいらしい。
しかし、例えば、 javac Hello. とかって間違えて打ってしまった時のエラー、これ、
$ javac Hello
エラー:クラス名 'Hello' が受け入れられるのは、注釈処理が明示的に要求された場合だけです
エラー 1 個
笑えるくらい意味わからん。

2011-07-21

一日の仕事が終わったらDropboxにシンボリックリンクを貼ってファイルをバックアップしておこう

や、一時は Dropbox フォルダーをドキュメントルートにしたろうかとか思ってやってみたんだが、なんだか OSX の ACL だかなんだかでうまくいかないので、シンボリックリンク方式に変更。

今作業してるフォルダーが
/Users/xxxx/Sites/admin
だとしたら、あらかじめ Dropbox フォルダー内にも Sites を作っておいて、
ln -s /Users/xxxx/Sites/admin /Users/xxxx/Dropbox/Sites
で、OK。
作った途端に、勝手に中のファイルが保存されてくれる。
Finderからファイルの情報を見ると、
種類:エイリアス
と表示されている。
ちなみに作ったシンボリックリンクの一覧が見たければ
find ./Dropbox/Sites/ -type l
とすればいい。消すときは
rm Dropbox/Sites/admin
こりゃーいい。
しかしなあ、常に同期してるってことは、間違って消してしまったら Dropbox からも消えてしまうってことではないか?
つまり、結局は全部消えるんでしょ、と。
思ってやってみたところ、確かに消えますね。Dropbox から削除される。
削除されるけれども、Dropbox は「削除済みファイルの復元」というのができる。
やってみる。
復元すると、シンボリックリンクは消滅し、削除されたファイルが再び現れる。
そしてそれはシンボリックリンクではなく、実体なのである。

2011-07-08

本当に phpunit なんて要るのか? pear なんて大っきらい編

本当に要る。ということなので、インストールを試みる。

PHPUnit Manual
第3章 PHPUnit のインストール
http://www.phpunit.de/manual/3.6/ja/installation.html

とりあえずこちらに書いてある通り
以下の3つをチャンネルに追加。

pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
sudo でないとエラーになったのでこうなった。
$ sudo pear channel-discover pear.phpunit.de
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded

$ sudo pear channel-discover components.ez.no
Adding Channel "components.ez.no" succeeded
Discovery of channel "components.ez.no" succeeded

$ sudo pear channel-discover pear.symfony-project.com
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded
自分のチャンネルのリストはこうやってみる。
$ pear list-channels
Registered Channels:
====================
Channel                  Alias   Summary
components.ez.no         ezc     eZ Enterprise components
doc.php.net              phpdocs PHP Documentation Team
pear.php.net             pear    PHP Extension and Application
                                 Repository
pear.phpunit.de          phpunit PHPUnit PEAR Channel
pear.symfony-project.com symfony The symfony project PEAR channel
pecl.php.net             pecl    PHP Extension Community Library
__uri                    __uri   Pseudo-channel for static packages
で、いざ、
$ sudo pear install phpunit/PHPUnit
を実行してみると
Failed to download pear/HTTP_Request2 within preferred state "stable", 
latest release is version 2.0.0RC1, stability "beta", 
use "channel://pear.php.net/HTTP_Request2-2.0.0RC1" to install
というようなエラーが出る。
この use "channel://pear.php.net/HTTP_Request2-2.0.0RC1" to install
という一文が意味がわからなかったのだが、これはつまり、
$ sudo pear install channel://pear.php.net/HTTP_Request2-2.0.0RC1
こうしろってことらしい(笑)。
そうならそう書いてくれよって。

ということで、結局、以下の順に実行して無事終了。
$ sudo pear install channel://pear.php.net/Net_URL2-0.3.1
$ sudo pear install channel://pear.php.net/HTTP_Request2-2.0.0RC1
$ sudo pear install phpunit/PHPUnit
$ phpunit
PHPUnit 3.5.14 by Sebastian Bergmann.

このブログを検索

Powered by Blogger.

ラベル

php (17) jQuery (13) OSX (10) MySQL (8) Javascript (7) Postgres (7) port (7) apache (6) Java (3) Smarty (2) html (2) pear (2) FCKEditor (1) XAMPP (1) css (1) git (1) perl (1) ruby (1)

Facebookバナー