開発メモ,主に補足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.

2011-01-25

OSXのMacPortsでphpのバージョンが5.3.5になり、なにもかもおかしくなった件

前の記事を見たら2010/3/18ってなってたからおよそ一年近くほったらかしになっていたことになるが。
1年前に自宅のOSXの環境にMacPortsでphpを入れて、その時は5.3.2だったんだが、
それで昨日そいつを更新しようと思い立ち、
sudo port upgrade installed
とやったが最後、とんでもなく延々と待たされた挙げ句に
 php5 @5.3.2_0+apache2+macosx+mysql5+pear+sockets+sqlite
 php5 @5.3.5_0+apache2 (active)
と2つのphp5が存在している状態になり、もう訳が分からない(涙)。
なんなんすか、これ。
phpのバージョンを5.3.2から5.3.5にするんだったら、
 php5 @5.3.5_0+apache2+macosx+mysql5+pear+sockets+sqlite
こうなるのが普通じゃないか?!
おかしい、これは絶対おかしい。
ということで
sudo port uninstall -f php5 @5.3.5_0+apache2
とやって消してみた。
消してからふと、そういえばmbstringが使えなかったような気がしたナーと思ったので
ついうっかり、
sudo port install php5-mbstring
とやってしまった。すると、
 php5 @5.3.2_0+apache2+macosx+mysql5+pear+sockets+sqlite
 php5 @5.3.5_0+apache2 (active)
げげーっつまたしても5.3.5が復活している!!
さすがにここまでやって気がついた。
恐らくこれは5.3.2と5.3.5とでは、もう、違うってことだ。
これからはもう絶対に
php5 @5.3.5_0+apache2+macosx+mysql5+pear+sockets+sqlite
こういう風にはならないってことだ。
結果、
php5 @5.3.5_0+apache2 (active)
php5-mbstring @5.3.5_0 (active)
php5-mysql @5.3.5_0+mysqlnd (active)
こういう風になる。
ついでに泣けるのがこのmbstring入れる時に出るメッセージ
Your php.ini contains a line that will prevent php5-mbstring
and other PHP extensions from working. To fix this,
edit /opt/local/etc/php5/php.ini and delete this line:

extension_dir = "./"
この行を消せってのは
extension_dir = "./"
のことを指している(笑)。

2011-01-18

MySQLで、ログイン用のメールアドレスなんかはバイナリー属性にしてテーブルを作る

なんかなー、デフォルトで大文字小文字区別しないってことが問題なんじゃないの?
って気はするけどなー。
普通にこういうテーブルを作る。
CREATE TABLE samples (
  id INT,
  email VARCHAR(255)
);

emailは大文字でも小文字でもヒットする。
バイナリー属性を付ける。
CREATE TABLE samples (
  id INT,
  email VARCHAR(255) binary
);
emailは大文字は大文字、小文字は小文字でヒットする。
show で見るとこんなになってる。

CREATE TABLE `samples` (
  `id` int(11) default NULL,
  `email` varchar(255) character set utf8 collate utf8_bin default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

ううむ。。。

2010-11-12

くるくる回るGIFアニメを用意して、submitボタンをクリックした時にくるくる回したい

はぁ~丸二日くらい悩んだかも。
不毛だな。
ま、とにかく html をこんな感じにしておく。
<input id="next_button" type="submit" value="つぎへ" />
<span id="loading" style="display:none;"><img src="img/loader.gif" /> 処理中</span>

submitボタンの後ろにGIFアニメ画像を置いておいて、隠しておいて、クリックされたら出してやろう、というねらいだ。

で、最初俺はこう書いていた
$('input#next_button').click(function(e) {
  e.preventDefault();
  $('#next_button').hide(); 
  $('#loading').show();
  $('form').submit();
});
クリックで、
サブミットボタンのデフォルトの動作を禁止して、
サブミットボタンを消し、
ローディング画像を出し、
そしてフォームをサブミット!

これはまあ、動くんだが、IEで見ると何故かGIFアニメのアニメーションが動かない。静止してるのだ。
ということで順番を入れ替えてみた。

$('input#next_button').click(function(e) {
  e.preventDefault();
  $('form').submit();
  $('#next_button').hide(); 
  $('#loading').show();
});
先にサブミット。
これだと動く。
謎。
とにかく、submit() が先だ、先!

2010-11-09

phpにGDが入ってない!!って時にどうすればいいか

まあ、うちではよくある出来事で。
もう毎回の事なんだからさあ~って気もしないでもないが、やり方を教わったのでメモ。

サーバーに入って、rootになったら、
# yum search php
と打つ。
するとだーっとリストが出る。
その中に
php-gd.i386 : gd グラフィックライブラリを使用するための PHP アプリケーション用モジュール
こんなのがある。
それをこうする。
# yum install php-gd.i386

途中でyesかnoか聞かれるので、yesすると
Installed:
  php-gd.i386 0:5.1.6-27.el5

Complete!
というように入る。
あとは、
# /etc/init.d/httpd restart
再起動する。

2010-11-04

アパッチのエラーログをちらちら見ながら作業する

何回やっても憶えられないので記す。
tail -f /var/log/httpd/error_log

このブログを検索

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バナー