canvasの練習

少し時間が取れるようになって趣味のコーディング再開した。 一年半ほどの浦島状態で、Javaアプレットが使えなくなったのが残念で仕方ない。

言うててもしょうがないのでcanvas練習開始。 既製のアプレットの書き換えもしたいんだけど、教科書(HTML5 Canvas)の例題をやってるうちに脱線。 以下備忘。

相変わらずブラウザごとの挙動に苦労しながら最初のデモが出来たんだけど、レンジを最大にするとほとんどの場合固まる。

「クソ-。シングルスレッドはこれだから!アプレット復活の方法無いかなー」って思ってたんだけど、使えないUI設置してるのが問題だと思って、クリックでボールを一つずつ増やすように変更。 これだと300個くらいまで無問題。

一気に何十回もfor回したら固まるのは当たり前か。こういうのをプログラミングの工夫っていうのか(棚上げ:自分のコーディング能力)。 …でもやっぱりアプレットではこんな苦労しなかったと思ってしまうw

diffColors

次は自宅サーバ再開してtomcat走らせて遊ぼう。twitterデータのビジュアライズもやりかけで止まったままだし。やっぱりJavaを触りたい。

アプレットが初期化されていません

独習Java」。ようやく13章アプレット。で、初めてのアプレットでつまずくw

書いてあるとおりのコードで、書いてあるとおり起動してエラー(NoClassdefFoundError)、なのにアプレットは立ち上がり「アプレットが初期化されてません」との表示。

例によってディレクトリ上がったり下がったり、色々して結局、パッケージ指定外して(デフォルトパッケージで)書き直したら無事起動。

エクリプスのコンソールから立ち上げると普通に動いたので、もしかしてと思って試したら行けた。なぜかは(いつも通り)分からない。

アプレット関連ではパッケージ指定しない方が良いのかな?でもフォルダ(=パッケージ)で管理してる方が良いんだけどな。

アプレットは全部コンソールから起動して学習するか。

コード指定

今日参考書の演習で打ったスクリプト。

<?php

$midnight_today=mktime(0,0,0);
print'<select name=”date”>’;
for($i=0;$i<7;$i+=1){
$time_stamp=strtotime(“+$i day”,$midnight_today);
$display_date=strftime(‘%y年%m月%d日(%a)’,$time_stamp);
print'<option value=”‘.$time_stamp.'”>’.$display_date.”</option>\n”;
}
print”\n</select><br/>”;

require’form_helpers.php’;
$midnight_today2=mktime(0,0,0);
$choices=array();
for($i=0;$i<7;$i+=1){
$time_stamp2=strtotime(“+$i day”,$midnight_today2);
$display_date2=strftime(‘%y年%m月%d日(%a)’,$time_stamp2);
$choices[$time_stamp2]=$display_date2;
}
input_select(‘date’,$_POST,$choices);
foreach($choices as $key => $value){
print”<br/>$key:::$value”;
}
?>

別ファイル該当部分

function input_select($element_name,$selected,$options,$multiple=0){
print'<select name=”‘.$element_name;
if($multiple){
print'[]” multiple=”multiple’;}
print'”>’;
$selected_option=array();
if(($multiple)&&($selected[$element_name])){
foreach($selected[$element_name] as $val){
$selected_options[$val]=true;
}
}else{
$selected_options[$selected[$element_name]]=true;
}
foreach($options as $option => $label){
print'<option value=”‘.htmlspecialchars($option,ENT_QUOTES, ‘UTF-8’).'”‘;
if(isset($selected_options[$option])){
print’ selected=”selected”‘;
}
print’>’.htmlspecialchars($label,ENT_QUOTES, ‘UTF-8′).'</option>’;
}
print'</select>’;
}
動作はこんな感じ。
上のselectが裸のやつ。下のselectはhtmlspecialcharsでサニタイズしてるやつ。PCに入れてるxamppでは下のselectが動作しない。

で、foreachで配列吐き出し。ちゃんと値は設定されてる。

  1. htmlspecialcharsはずして裸で出力してみたら大丈夫。ってことはコード変換の問題か。
  2. あれ?関数格納phpファイルはUTF-8だけど(前に作ったやつの流用だから)、今書いたスクリプトはSjisで保存してた。原因はこれか?
  3. 両方UTF-8に統一した→何もかもおかしくなった。
  4. 頭北ー!サーバにあげてtestだ。
  5. 最初のファイル(ただしUTF-8に統一)で全く問題なし。

原因はxamppの文字コード設定だった。前からphpの演習はこれで苦労してるんだよなー。

結構な時間をかけて色々な設定試してるんだけど、文字コード関係で躓くこと多し。学習の環境として導入してるのに、その環境の設定のために時間とられてたら馬鹿馬鹿しいな。

サーバのほうの文字コード設定は最初にちょっといじっただけで済んだ。情報も少ないし。xamppの方は設定について、情報多すぎて迷っちゃうんだよね。

設定に困って探し回ってたときに見た情報で、うろ覚えなんだけど、xampp日本向けパッケージはsjis前提でコンパイルされているので深いところでは完全にUTF-8対応にできないといった話があったような。本気で環境作るならApache、PHP、MySQLそれぞれ個別に導入すべし、とか。

ホントかどうか分からない。今の僕には理解力が足りない。とりあえず今はhtmlspecialcharsが動作してるってことでOKということにしておきます。つーかSjisなんてこの世から無くなればいいのに。

PHPの学習がまともなレベルまで進んだら、セキュリティ関係掘り下げないとまずいなー。で、もう一度このコード検証しよう。