2013年2月27日水曜日

昨日、8年ぶりに中学校で授業をしました

昨日、附属中学校の1年生で数学の授業をさせてもらいました。空間図形の単元です。
AR(拡張現実感)を利用した自作ソフトを用いた実践です。
一週間後の遅延テストの結果が楽しみです。

自分としてはいつもの感じで授業することができたのですが、数えてみたら驚きました。
もう中学校現場から離れて、8年が経っていました。
これまでに小学校での授業はあったのですが、中学校ではなかったのでこんなことになっていたのです。

授業ということについて、対象がだれであろうと自分としてはあまり意識したことがないのですが、自分のフィールドに帰ってきた感じがして、中学生に授業するのは面白かったです。
十分に準備してできるというのも今の立場だからできるのだなぁと感謝しています。
これを機会に、いろいろとやれたらいいなぁと思いました。

2013年2月21日木曜日

getElementByid の処理が遅い

js-STARを改良していてはまったので、メモ。

多変量解析ではグリッド数が一万個などになってしまうことがあります。
200人に50項目なんてこはふつうにあるからね。
自分のテスト環境はChromeなので気にならなかったのですが、FireFoxだと激重との情報が来たので調べてみました。

ある10000回の処理

  • Chrome 2秒
  • Safari 2秒
  • FireFox 17秒(古いマシンだと40秒らしい)
  • IE 17秒
まず、繰り返している部分をなるべく減らすのが譲渡手段なので、正規表現を使って修正したが、全然速くならない。
そうなると、どこに時間が掛るのかを、一つ一つつぶしていく。
結局この1行に原因があるよう・・・。

document.getElementById(idName+(i+1)).value = dd[i];

dd配列のデータをID番号のついた部品に代入している。
つまり、一つ一つの値をグリッドに代入しているところ。

そもそもFireFoxが目的のIDがついた部品を見つけるのに時間が掛っているらしい・・・。
お手上げである\(◎o◎)/

Operaも独自路線をやめたからFireFoxもWebKitにしてほしい。IEも・・・。

こうなると、代入しないで計算という選択肢を設けるしかないかな。

2013年2月20日水曜日

「統計学が最強の学問である」を読んだ

東京への出張の移動時間に 統計学が最強の学問であるを読みました。
著者は生物統計学を専攻された方ということで、事例としては疫学などが多いのですが、教育関係者にもぜひ読んでもらいたいと思います。

Amazonの書評を読むと、「何が最強なのか意味不明?」といった辛口の書評もあるのですが、第1章、第2章あたりは引き込まれるように一気に読めます。
難しい数式で説明するのではなく、図を用いて直感的に説明しようと工夫されています。
ただ、下手に図式化すると余計わかりにくくなるというのも専門家からするとあるんだろうなぁとは思います。そういう彼らは、数式がイメージと一体化しているんだろうから・・・。おいおい、俺のイメージと違うじゃないかってことになりかねない・・・。

私自身、統計分析ソフトの作成に携わってかれこれ十数年になりますが、正直、統計学が最強の学問なのかはわかりません。
ただ感じているのは、統計学は最適な答えを見つけるためのツールであり、未来を予測するツールとして、誰もが使えるようになったらいいなぁということです。

学校評価アンケートを集計して肯定率が1%下がったといって改善策を講じようとしている学校が多いです。学校というところは、教師の良心や献身的な働きによるところが大きく、とにかく疑わしいことは全部何でも一生懸命やってしまおうとします。その結果、教師の多忙感は増すばかり。
学校評価の結果を地域や保護者に公開するようになったことも大きいです。今までの単純な集計方法では1%下がったのはそのまま提示されてしまい、「これくらいは誤差の範囲なんです」と説明できない。
さぼっていいということではありませんが、どんなことにも集中と選択が必要なんだと思うんです。
そのためのツールが【統計学】です。

著者は、統計学が近年急速に発達したのはICTの発展によるところが大きいと述べています。
紙と鉛筆から巨大計算機に、そしてパーソナルコンピュータへと道具が変化する中で、一部の専門家だけのものだった統計学が一般の人たちも使えるようになったことは素晴らしいことだと思います。
自分のやっていることがその一助になっているのであれば大変うれしいことです。


2013年2月17日日曜日

iGoogleの代わりにGoogleSitesが使えそう

自分用にカスタマイズできるiGoogleを使っています。
いろいろなガジェットを組み込めるので重宝しています。
「Google急上昇ワード」と「各種情報サイトやニュースサイトのRSS」を表示させています。
ブックマークと比較して、新規記事が登録されたのかやそれが自分に興味のあることなのかが一目でわかって便利です。

しかし、2013 年 11 月 1 日をもって廃止、モバイル バージョンは 2012 年 7 月 31 日に廃止されることが2012年7月にアナウンスされました。
いろいろなところで代替サービスなどが情報として出てきていていますが、やっぱりGoogleのようなシンプルさに欠ける感じがします。
それで、GoogleSitesで同じようなことができないかやってみました。
GoogleSitesは無料で簡単にウェブページを作成、共有できるサービスです。

iGoogleと同じようにガジェットを組み込めます。


結論としては結構使える!ということがわかりました。
iGoogle用ガジェットではうまく動作しないものもありましたが、いくつか探せば似たようなものがみつかります。
iGoogleのようにガジェットをD&Dしてレイアウトを変えたりはできませんが、一度作ってしまえばそれほど変更しない私としては問題ありません。

GoogleSitesのサイトレイアウトは、PC用とモバイル用があるので、モバイルで見た場合も自動的に見やすくしてくれるのでとてもよいです。

iGoogleは自分だけのものだったけれど、GoogleSitesのページは公開や共有されるので、メールや予定やToDOのガジェットが組み込めないと思うかもしれませんが、「共有しない」で使えば自分だけしかアクセスできないページとなります。

iGoogleユーザーの方はお試しください。

2013年2月11日月曜日

使い勝手のよさそうな音楽素材見つけました

学期末になると、スライドショーを作るお仕事が入ります(妻から・・・)。
そのとき、困るのがBGM音楽素材です。
ネットで探していて見つけました。
利用規約が面倒がなくてとてもよさそうです。

音楽素材/魔王魂

2013年2月6日水曜日

js-STAR 新機能開発版 a20130206を公開しました

多変量解析のRプログラムの修正などを行いました。
また、Rプログラム出力エリアをクリックした際に、文字列を自動全選択されるようにしました。
工夫した点は、ブラウザによって動作が異なる点です。
ChromeとSafariではクリックイベントで、IEとFireFoxとOperaではフォーカスイベントで動作するように分岐しています。
これで1回目のクリックで全選択、再クリックで選択解除になります。

HTMLのテキストエリア
<textarea onfocus="onoffSelect_focus(this);" onclick="onoffSelect_click(this);"></textarea>
view raw gistfile1.html hosted with ❤ by GitHub


JavaScriptの関数
function onoffSelect_focus(obj){
var userAgent = window.navigator.userAgent.toLowerCase();
if(userAgent.indexOf("msie") > -1) {
obj.focus();
obj.select();
}else if(userAgent.indexOf("firefox") > -1) {
obj.focus();
obj.select();
}else if(userAgent.indexOf("opera") > -1) {
obj.focus();
obj.select();
}
}
function onoffSelect_click(obj){
var userAgent = window.navigator.userAgent.toLowerCase();
if(userAgent.indexOf("chrome") > -1) {
obj.focus();
obj.select();
}else if(userAgent.indexOf("safari") > -1) {
obj.focus();
obj.select();
}
}
view raw focus.js hosted with ❤ by GitHub

2013年2月3日日曜日

「10000までの数」の一斉授業用ソフト

小学校2年生10000までの数を練習するためのプログラムをProcessingで作ってみました。
10000までの数がランダムに表示されます。一斉授業で大きな声で読ませる練習をすればよいでしょう。
ちょっと工夫したのは、0のある桁をどう表示させるかです。
パターンは次のように8通りあります。(×が0のあるところ)

  • ●●●●
  • ●×××
  • ●××●
  • ●×●×
  • ●●××
  • ●×●●
  • ●●×●
  • ●●●×

画面の中央あたりをクリックすると、この8通りをランダムに表示します。
数字もランダムですよ。

よく見ると薄く画面の左側にボタンが8つ表示されています。
これは8つのパターンと一致しています。
ここをクリックすると、そのパターンの問題だけが表示されます。
子どもたちの様子を見ながら出題パターンを変えることができます。

このソースは、iPad用です。
/*****************************************
* 10000までの数(iPad用)
*
* Hiroyuki Nakano
* 2013.2.3
*****************************************/
//フォントの設定
PFont font=createFont("FFScala", 32);
PFont font1=createFont("MS Gothic", 32);
//問題の種類
int Qmode = 0;
//ボタンの設定
RectButton[] rectBtn;
String rectBtnName[] = {"●●●●","●×××","●××●","●×●×","●●××","●×●●","●●×●","●●●×"};
//初期設定をする
void setup(){
size(screen.width, screen.height);
colorMode(RGB, 255);
//ボタンの定義
color buttoncolor = color(220);
color highlight = color(250);
rectBtn = new RectButton[rectBtnName.length];
for(int i=0;i<rectBtnName.length;i++){
rectBtn[i] = new RectButton(10, 50+85*i, 60, 75, rectBtnName[i], buttoncolor, highlight);
}
}
//描画を繰り返す
void draw(){
Question();
for(int i=0;i<rectBtnName.length;i++){
rectBtn[i].display();
}
noLoop();
}
//問題を表示する
void Question(){
int sen = 0;
int hyaku = 0;
int ju = 0;
int iti = 0;
String Qstr = "";
switch(Qmode){
case 0:
sen = int(random(1, 10));
hyaku =int(random(1, 10));
ju = int(random(1, 10));
iti = int(random(1, 10));
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 1:
sen = int(random(1, 10));
hyaku =0;
ju = 0;
iti = 0;
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 2:
sen = int(random(1, 10));
hyaku =0;
ju = 0;
iti = int(random(1, 10));
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 3:
sen = int(random(1, 10));
hyaku =0;
ju = int(random(1, 10));
iti = 0;
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 4:
sen = int(random(1, 10));
hyaku =int(random(1, 10));
ju = 0;
iti = 0;
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 5:
sen = int(random(1, 10));
hyaku = 0;
ju = int(random(1, 10));
iti = int(random(1, 10));
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 6:
sen = int(random(1, 10));
hyaku =int(random(1, 10));
ju = 0;
iti = int(random(1, 10));
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
case 7:
sen = int(random(1, 10));
hyaku =int(random(1, 10));
ju = int(random(1, 10));
iti = 0;
Qstr = str(sen) + str(hyaku) + str(ju) + str(iti);
break;
}
background(255, 255, 255);
fill(0, 0, 0);
textFont(font, 400);
textAlign(CENTER, CENTER);
text( Qstr, width / 2 + 50, height / 2);
}
//マウスクリック時の処理
void mousePressed(){
Qmode = int(random(0, 8));
for(int i=0;i<rectBtnName.length;i++){
if(rectBtn[i].pressed()) {
Qmode = i;
break;
}
}
loop();
}
class Button
{
int x, y;
int wsize, hsize;
String wstr;
color buttoncolor,textcolor;
boolean pressed = false;
boolean pressed() {
if (mouseX >= x && mouseX <= x+wsize &&
mouseY >= y && mouseY <= y+hsize) {
return true;
}
else {
return false;
}
}
}
class RectButton extends Button{
RectButton(int ix, int iy, int iwsize , int ihsize , String istr , color ibuttoncolor, color itextcolor)
{
x = ix;
y = iy;
wsize = iwsize;
hsize = ihsize;
wstr = istr;
buttoncolor = ibuttoncolor;
textcolor = itextcolor;
}
void display() {
noStroke();
fill(buttoncolor);
rect(x, y, wsize, hsize);
fill(textcolor);
textFont(font1, 12);
text(wstr, x + wsize / 2, y + hsize /2 );
}
}
view raw Q9999.pde hosted with ❤ by GitHub

1つのURLを複数ブラウザで開くためのバッチファイル

ホームページなどを作っていると、複数のブラウザで見た目がどうなるのかを確認したくなります。
もちろん、js-STARをプログラミングしているときは動作確認も重要です。
ちょっと前まで使っていたez-HTMLは、ブラウザを登録しておくと、編集しているファイルを一気に開いてくれる機能があって便利でした。
最近、開発環境をSublime Text 2に変更したのはそれ以上に便利な点が多いからなのですが、それでも一つ一つ開かなければならないのはやっぱり不便でした。

複数のURLを1つのブラウザで一気に開くソフトというのはあるのですが、1つのURLを複数ブラウザで開くソフトというのは探したけれどありませんでした。
なので、そういうソフトを作ってみようかとも思ったのですが、とりあえずバッチファイルでできるのではないかと思ってやってみました。
バッチファイルなんて10年以上触ったことがありませんでしたが、なんとかできました。
これで一気にブラウザで開くことができるようになりました。
ローカルファイルでもOKです。
(ただし、フォルダ名に半角スペースが入っている場合はダブルコーテーションで囲む必要があります)
めでたし・・・

set /P URL=URLを入力してください:
start "" "C:\Program Files\Internet Explorer\iexplore.exe " %URL%
start "" "C:\Program Files\Mozilla Firefox\firefox.exe " %URL%
start "" "C:\Program Files\Safari\Safari.exe " %URL%
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe " %URL%


<使い方>

  1. 「multiBrowser.bat」などの名前で保存します。
  2. ギアのアイコンファイルになります。
  3. ファイルをダブルクリックします。
  4. コマンドプロンプトが開きます。
  5. 「URLを入力してください」と聞かれるので入力します。
  6. コピーしていた文字列を貼り付けることもできます。
    (CTRL+Vは×です。右クリックで貼り付けを選びます)
  7. これで複数のブラウザが開きます。
ブラウザのインストール先はデフォルトです。
個別に変更されている方は、個人で修正してください。
なお、このバッチファイルを使ってトラブルがあっても当方は感知しませんのでありからず・・・。