プログラミン をさわってみた

プログラミン
子供のためのプログラミング学習サイト「プログラミン」を8歳の娘と遊んでみた。
http://www.mext.go.jp/programin/

画像を割り当てたオブジェクトに対し、左右の移動や画像変換、拡大縮小など「プログラミン」と名付けられた動作を順序よく並べて付与し、アニメーションやゲームを作るプログラミングツール。
ただ直列に並べるだけでなく、「ズットン」と名付けられた無限ループパーツや、「イッペンニン」という名の並列化ツールもあり、なかなか複雑なフローも組み上げることができるばかりか、音声を出力する「オンプン」、キーボード入力を受け付ける「キーボン」、果てにはオブジェクト同士の衝突を検知する「ブツカッタン」というイベントハンドラまで準備されている懲りよう。

私が中学校の授業で教わった教育用言語LOGOを思い出すくらい、簡単にプログラミングを体験することができるよう工夫されている。例えば、予めオブジェクト画像や音声、背景画なども豊富に準備されているため、純粋に「プログラミング」に集中できる環境が用意されていたり、各動作用パーツも前述のとおり名前がついた「不思議な生き物」という擬人表現でアイコン化されているため「命令を覚える」というストレスを軽減するよう工夫されている。

プログラミングを学ぶにあたり最も重要なことは、
与えられた時間内にどれだけ「創る喜び」が感じられるか
だと思っていて、それには「完成までの時間の早さ」が何よりも大事な要素となると思っている。それはさらに落とし込むと、

  • 表現したいことをプログラムに落とし込む中でロジック以外に気を取られて集中が途切れないことや
  • 組み立て→実行→組み立て・・・というトライ&エラーを繰り返す作業が素早く簡単に行えること

などに左右される。
この「プログラミン」は一見子供向けの単純な仕掛けのようだが、それら全てに細かく気が配られていることが感じられる。

娘と一緒に創ってみたものがこちら「いもむしのフゴフ」。さすがに8歳の娘がノートのトラックポイントを使えるはずもなく、実は私が実装したものだが、娘の指示を指摘せずあえて間違えさせたりしながら実装したので、ある程度は「試行錯誤」を楽しんでくれたようだ。

今の時代なら、たぶん小学生くらいでも、これと時間与えて放っといたら自分で学んでガシガシ組んでくれそう。けど、ウチの子は、女の子だし、あんまりプログラマーになって欲しいとか思わないんよね、嫌という訳じゃないんだけど、こう、イメージが湧かないというか、あーどうしよ、変にハマり過ぎちゃったりしたら。

Posted in 日記 | コメントは受け付けていません。

yondor(よんどるβ)をリリースしました

自分が欲しいから自分のために作る第4弾。
よんどる
今よんでるページをtwitterへ1クリックでポストするためのツール「yondor(よんどる)」をプロトタイプβとしてリリース。
(むしろα版と呼ぶの方が近いかもしれないレベルだけど、公開しちゃったのでβ版)

どうしてもソーシャルブックマークだと、他のユーザーとのシェアを意識するための感想や、きちんと整理しておくためのタグを考える必要があり、
気軽にポストするにはどうしても心理的コストがかかる(私の場合)。
しかし、URL短縮サービスを使っても、実は高機能過ぎて1クリックではポストできないケースばかり。

だったら、何も考えずに「とりあえずクリップ」しておくためのサービスがあってもいいんじゃないか。ちょうど、ブログを書く前段階や、それより粒度の小さい話題として、思考の断片をtwitterにポストするようにね。

タグや感想なんかなくても、あなたが見てきたページの履歴には、
きっと個性的であり、そこには他の人にはない独自のアンテナがある。
そして、それはあとできっと誰かの役に立つ(と信じたい)。

などと思う(後付け)こともあったり、ちょうど、同企画第3弾で、webdesignStatioを作ってから、特定の分野の記事ページを今までに15,000ページ程収集し解析してきて(そして今も10分毎に増え続けている)、これは自動的に収集されたウェブデザインに関係する記事から、私の独自の選択の視点(趣向)を教え込んで運用している背景がありーの。

そんなこんなで整理すると

  • 1クリックでtwitterにポストするツールが欲しかった
  • 関心のあるページを収集しておけば、その人の関心事をコンピュータ上にモデル化できんじゃないかと
  • +twitterAPI(oAuth)を使ってみたかった
  • +Codeigniterを使ってみたかった
  • +なんか作りたかった

という上記複合的な理由で作ったのが今回のツール。

正直なところoAuthとCodeigniterでお勉強がてらなので、完成度よりも技術習得が主であったことは、公開後の今となっては隠しておきたい。
1クリックでのポストはまだしも、見てるページをどんどん登録して個人的な関心事を他人のサーバーに教え込もうなどという奇特な方は少ないと思うが、せっかく作ったので、誰に向けてのアピールかも分からないが、リリースをつぶやいちゃったので後悔公開。

前回同様、動作は完全無保証なうえ、いきなりデザインを変えようが、貧弱な自宅サーバーでの運用なので止まるし止める。突然の閉鎖も十分にあり得る、などはご了承いただいたうえで、それでも構わない、使いたいという方のお役に立てるのであればこれ幸い。
なお、1クリックで投稿できるってのは、twitterにログインしっぱなしで、twitterのoAuth認証有効期限が現在のように長め(無期限らしい)に設定されている場合に限った話。
前述以外の条件では、oAuthによるアプリケーション認証画面が表示され「許可する」ボタンを、もう1クリックしないといけないということを事前了解いただきたい。

問題のご指摘(特にMacブラウザからのBookmarkletが最終動作確認できていない、など)等ございましたら@ohbatchまで。

Posted in 当サイトについて | コメントは受け付けていません。

ベイジアンフィルタをPHPから利用する

ここ2ヶ月ほどずっと仕事から帰ってきて、ベイジアンフィルタの組み込みばかりやっていた。せっかく動くようになったので、技術面でのつまづき等についても残しておきたいと思う。

PHPでベイジアンフィルタ (棚からパルチャギ)」で紹介されて「PHP Naive Bayesian Filter(XHTML.net)」を参考に、というかライブラリもブログの記事もほとんどそのまま利用させていただいた。解説どおりにMySQLにデータベースを作成し、「Yahoo!日本語形態素解析」を噛ませる。上記サイトでは、トークンの切り出しメソッドをオーバーライドされていたが、それすらも面倒だったのでそのまま直接メソッドの内容を書き換えるが、ほぼそのまま利用させていただいたので、ソースも省略、詰まったところやさらに手を加えたところを中心に記すことにする。

ありがたいことに、思ったよりスムースに早い段階で動作が確認できたのだが、早速文書を大量に流し込んでフィルタを実行してみると、なぜかものの見事に、全ての記事が「スパム」に判定される。どんな内容でも「spamである確率1、hamである確率0」ってことはないだろうと、メソッド「categorize」の最深ブロックにデバッグ出力を組み込んでみる。

echo $category.’ ‘.$token.’ ‘.$word['count'].’ ‘.$proba.’ ‘.$scores[$category].”\n”;

これで、判定しようしている文書に出現した単語を元にスパム/ハムである確率が変化していく様子がみてとれる。追いかけていくと、どうもアルゴリズムの特性上、事前学習させる「スパム」「ハム」それぞれの文書量(単語量)の偏りが、フィルタリングの精度に大きく影響してしまうらしい。今回の場合、「ハムとして学習された文書量がスパムのそれと比べ多過ぎ」といったところのようだ。
学習した結果の単語量は、テーブル「nb_categories」のフィールド「word_count」にそれぞれ記録されるので、どのカテゴリ(今回はスパム・ハムの2カテゴリ)においても限りなく同等の単語量となるよう学習が必要のようだ。

もうひとつ、同様にメソッド「categorize」の最後にリスケール(rescale)というカテゴリごとの適合度を正規化する関数を通しているようなのだが、動かしてみるとどうもここで丸め誤差が大きい(ほぼ 0 or 1 の二値化に近い数値が返る)。なので、いっそのこと取っ払って出力された適合度に応じた動きはアプリケーションに任せる方針とする。

//return $this->_rescale($scores); //やめ
return $scores; //イキ

最終的にはアプリケーション側で以下のようにハム・スパムの適合度の比を求め、あとは平方根をかけまくって簡易リスケールしてる。結果が1未満なら概ねスパムと判断できそうだ。(ただし適合度の比で判定ができるのは、カテゴリが2通りの場合に限られる)

$scores['ham']/$scores['spam']
Posted in 未分類 | コメントは受け付けていません。