スキップしてメイン コンテンツに移動

投稿

ラベル(WWW)が付いた投稿を表示しています

クッキークリッカーとプログラマ

先週ぐらいから クッキークリッカー(Cookie Clicker) というJavaScriptを使ったブラウザゲームが流行っている。クリックするだけのゲームと聞いて、最初はあまり興味を持てなかったのだが、自分の周りであまりにもやっている人が多いので少し遊んでみることにした。 クッキークリッカーを簡単に説明すると、まずはクリックすることでクッキーを作り、作ったクッキーを使ってクッキーの生産性を高めるためのアップグレードやアイテムを購入し、たまに出現するゴールデンクッキー(Golden Cookie)をクリックすることでさらに多量のクッキーが得られるので、それらを駆使してできるだけたくさんのクッキーを作るというゲームだ。 このようにとてもシンプルなゲームなのだが、最初はちまちまとしか作れなかったクッキーが徐々に増えていき、様々なアイテムやイベントを通すことで、終盤では毎秒数千億クッキーを作れるというところに人々を惹きつける魅力があるらしい。しかし、自分は「人間の代わりにプログラムを働かせることでどこまで効率が良くなるか」という目的のために自動化プログラムを作成したくなった。コンピュータは人間を楽にさせるために存在するべきだ。 このゲームはJavaScriptで作られており、そのコードや変数を修正すれば簡単にチートを行うことができる。しかし、自分はそれについては全く興味がない。元のシステムには全く手を入れずに人間が操作する部分のみをプログラムで最適化したいのだ。 まず、最初に考えついたのは自動クリックだ。これは様々なツールが世に溢れているのでそれを使っても良いのだが、プログラマだったら、このぐらいは自分で作りたい。そこで、Pythonと pymouse を使って自動クリックプログラムを作成した。これで、毎秒100~200クリックすることができるようになった。これ以上の速度にするとブラウザがついて行けずプチフリーズを頻繁に起こし逆に生産性が落ちてしまう。因みに画面上のエフェクトなどは設定で消しておくほうが良いだろう。 次に、ゴールデンクッキーへの対処だ。ゴールデンクッキーはランダムな間隔でブラウザ上のどこかに出現する。そのクッキーをクリックすると溜まっているクッキーの1割分の枚数が貰えたり、一定時間現在の7倍の効率でクッキーを焼けるようになったりする。...

Android端末をサーバにしてHTML5を使ったお絵かきBBSを作成する

最近、HTML5に触れる機会があり、その良さが何となく伝わってきたので、何かしら簡単なコードを書いてみたくなった。そこで、ちっちゃいけどリッチ、というギャップを楽しむためにAndroid端末を使うことにした。具体的には、Android端末を SL4A で ウェブサーバにして 、HTML5をインターフェイスにしたお絵かきBBSをPythonで書いてみた。 BBSでは絵とテキストを扱うことができて、それらはAndroid端末上でSQLiteのデータベースで管理される。利用者の利便を考えて、名前などはクッキーで保存する。3G回線や無線LANなどで接続することを考慮して、IPアドレスも取得できるようにした。また、書き込み時にサーバのAndroid端末が振動して書き込みがあったことを知らせてくれる。因みに、NTTドコモの3G回線で使うためには、グローバルIPが振られるmopera Uなどのサービスが必要で、spモードでは利用できない。 実際に作ってみたプログラムのスクリーンショットを冒頭に入れてみた。必要最低限の機能しかないが、それでも文章と画像を保存できるちゃんとした掲示板だ。草の根BBSのころを考えると隔世の感がある。 以下に今回作成したソースコードを載せておく。こんな短いコードでもちゃんと機能するのが不思議な感じだ。 image_bbs.py # -*- coding: utf-8 -*- import sys,os,cgi,sqlite3,datetime import socket,fcntl from wsgiref.simple_server import make_server import android droid=android.Android() LIMIT=10 # 最大表示記事数. DB_FILE='/sdcard/image_bbs.sqlite' P=8080 con=sqlite3.connect(DB_FILE) cur=con.cursor() cur.execute('CREATE TABLE IF NOT EXISTS bbs (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, user TEXT, datetime TEXT, ima...

GoogleのURL短縮サービスgoo.glのAPIをPythonで利用する

しばらく前から goo.gl のAPI (Google URL Shortener API)が使えるようになっていたことは知っていたけど、実際に使ったことなかったので試しに使ってみた。import文を含めなければ3行で短縮URLの作成・復元の自動判別を行うことができた。条件演算子などを使えば1行にまとめられる。簡単。 ただし、正規表現は適当だし、エラー処理はしてないので、ちゃんと使う場合はその辺の処理を行う必要あり。あと、本格的に使うのであれば APIキーを取得 すべき。また、 Google APIs Client Library for Python を 使う方法 もある。 http://handasse.blogspot.com/ を短縮URLに変換: % googl.py http://handasse.blogspot.com/ http://goo.gl/RiIiD http://goo.gl/RiIiD を元のURLに戻す: % googl.py http://goo.gl/RiIiD http://handasse.blogspot.com/ googl.py import sys,re from urllib2 import urlopen as U, Request as R from json import loads as J API,URL="https://www.googleapis.com/urlshortener/v1/url",sys.argv[1] if re.match('http://goo\.gl/.+',URL):print J(U(API+'?shortUrl=%s'%URL).read())['longUrl'] else:print J(U(R(API,'{"longUrl":"%s"}'%URL,{'Content-Type':'application/json'})).read())['id'] 追記 (2015/3/26): 現在、API Keyを利用しないとエラーが返ってくるようなので、以下のように修...

Android端末上に電子掲示板システムを構築する方法

最近になって日本においてもAndroid端末が続々と発表されて巷で賑わいを見せている。ドコモからは GALAXY S 、auからは IS03 、ソフトバンクからは Desire HD と立て続けに発売される。このほかにも年末までにタブレット端末を含めた複数のAndroid端末が発売されるようで結構なことだ。 Androidも盛り上がってきたし、Android端末を使って手軽で役に立つことができないか考えてみた。そこで今回、Android端末をウェブサーバにして、そこに電子掲示板システム(BBS)を構築してみた。これさえあれば不意にプライベートなBBSを使いたくなったときにいつでも利用することができる。たとえばライトニングトークやセミナーなどのようなイベントの参加者からその場でちょっとしたアンケートや感想を貰いたいときに便利ではないかと思う。ちょっとした話題作りにもなるかも。 電子掲示板システムの作成に必要なものはAndroid端末と SL4A /Pythonだけ。あとは今回作成した android_bbs.py を使えばいい。そして、SL4Aを使ってサーバを立ち上げてから、android_bbs.pyを起動すれば完了だ。SL4Aによるサーバの起動方法とアドレス取得については Pythonを使ってAndroid端末を5分でリモートカメラにする方法 で書いたのでそちらを参考にして欲しい。 今回の電子掲示板システムはPythonを使って即席で作ったこともあってエラー処理などを入れずに30行ちょいのシンプルな作りになっている。sqlite3モジュールによるSQLiteデータベースで記事を管理し、wsgiref.simple_serverモジュールを使ってウェブサーバ構築した。簡単だ。ただ、Android独自の機能は使っていないのでAndroid端末専用というわけではないけど。Android独自の機能を入れるとしたら、たとえばTwitterなどの投稿者の位置情報表示に対抗して、投稿者ではなくサーバの位置、さらに向きや速度も一緒に表示されるようにするとか。誰得な機能だけど。 以下にソースコードを示す。 android_bbs.py # -*- coding: utf-8 -*- import cgi,sqlite3,datetime from w...

Pythonを使ってAndroid端末を5分でリモートカメラにする方法

Android端末をリモートカメラにしてしまう方法「Spycam」 という記事経由で Turn your Android Phone Into a Remote Spy Camera with Ruby in 15 Minutes を知った。 SL4A のJRubyを使ってAndroid端末を15分で遠隔操作のスパイカメラにしてしまえるらしい。これは面白い。そこで、Rubyが15分ならPythonを使って5分でリモートカメラにしてしまおうと思い立った。 まず、Pythonでは標準モジュールのSimpleHTTPServerやwsgiref.simple_serverを使って簡単にWebサーバを構築することができる。そしてSL4Aを使えばAndroid端末をそのままサーバとして起動させることができる。これを組み合わせればできたも同然だ。 それで書いたのが以下のコードだ。10行そこそこでAndroid端末をWebサーバに仕立て上げ、Webブラウザ経由で写真を撮ることができる。こんなちっこい端末がWebサーバになるなんて世の中進歩したものだ。 remote_camera.py import android from wsgiref.simple_server import make_server droid=android.Android() pic='/sdcard/snapshot.jpg' def camera(env,res): if env['PATH_INFO']=='/': droid.cameraCapturePicture(pic) res('200 OK',[('Content-type','image/jpeg')]) return [file(pic).read()] httpd=make_server('', 9998 ,camera) httpd.serve_forever() 使い方は次の通り。まず、SL4Aを起動し、メニューボタンから"View"を選ぶとダイアログが出てくるので"Interpreters"を選択する。 ...

一行でテキストに含まれるURLをすべて短縮URLに変換するPythonスクリプト

テキストに含まれるURLをすべてbit.lyの短縮URLに変換するPythonワンライナーを書いた。使用しているモジュールはre、urllib、urllib2、simplejson。コードに一行追加するだけだし、Twitterなどのメッセージを処理するのに便利だと思う。 for link in sorted(re.findall(r"(http(?:s?)\:\/\/(?!bit\.ly[\/\ ])[^\/\ ]+\/?.*?)(?:[\ <>\"\{\}\|\\\^\[\]\`]|$)", msg), reverse=True): msg = (lambda x: re.sub(re.escape(x), (lambda y: str(simplejson.loads(urllib2.urlopen("http://api.bit.ly/shorten?version=2.0.1&longUrl=%s&login= BITLY_ID &apiKey= BITLY_API_KEY " % urllib.quote(y)).read())["results"][y]["shortUrl"]))(x), msg))(link) bit.lyのAPIキーは 別途取得 しておく必要がある。 msg = u"ここのブログのURLはhttp://handasse.blogspot.com/ です。記事のURLはhttp://handasse.blogspot.com/2010/05/urlurlpython.html です。" としてURLを含むメッセージを処理すると以下のように変換される。 print msg ここのブログのURLはhttp://bit.ly/PQa9F です。記事のURLはhttp://bit.ly/cVRVu6 です。 上記のコードを展開したものが以下のコード。簡単なエラー処理を追加してある。 def bitly(x): try: data = urllib2.urlopen("http://api.bit.ly/shorten?version=2....

Google App EngineとSafe Browsing APIを利用して短縮URLチェッカーを作ってみた

最近、Twitterやはてなブックマークなどを使うことが多くなり、字数制限付きのコメントを書くことが増えた。コメント中にURLを入れたいこともままあるのだが、長いURLだと字数をオーバーしてしまう。そのため短縮URLを使っているが、コメント内に直接短縮URLを入れるのがやっかいだった。そこで、 Google App Engine (GAE) を使ってシンプルで高速な短縮URL変換ツールを作成してみた。 しかし、短縮URLは悪意のあるサイトの判別が難しいという欠点がある。見た目で判断できないので開くのを躊躇してしまう。そこで、今回作成したツールでは、短縮URLに変換するだけではなく、それを元のURLに戻す機能も追加した。さらに、 Google Safe Browsing API を利用してフィッシングサイトなどの悪意あるサイトの判別も試みている。 短縮URLチェッカー 使い方はシンプルで、テキストボックスに変換したいURLを入力すればbit.lyの短縮URLがテキストボックス表示され、bit.lyの短縮URLを入力すればもとのURLが表示される。テキストボックスをクリックすれば表示されているURLが選択されるのでクリップボードへのコピーも簡単だ。テキストボックスの下には展開されたURLがリンク付きで表示されるが、もしフィッシングサイトだと疑われる場合は、以下のように警告してくれる。 さて、今回のコード作成だが、bit.lyによる短縮URLの変換は簡単だった。というのも 以前にPythonスクリプトで作った ことがあるからだ。それをそのままGAEに載せればいい。しかし、Safe Browsing APIによる悪意あるサイトの検出は思ったよりも面倒だった。まず、APIの使い方がよく分からない。使う前は任意のURLをAPIで確認するのかと思っていたのだが、そうではなく、MD5でハッシュ化したリストをダウンロードして、調べたいURLをハッシュ化してそれと照らし合わせなくてはならない。今回問題になったのはそのダウンロード容量で、フィッシングサイト用データが700KB程、マルウェア用データが10MBを超えていた。GAEでは一回のダウンロード容量の上限が1MBと決まっており、フィッシングサイト用データは何とかダウンロードできても、マルウェア用データは途中で切れ...

一つのGoogle App Engineアプリケーションで複数のWaveボットを作成する

Google App Engine (GAE) では現在10個までのアプリケーションを登録することができる。そして、GAEを利用してGoogle Waveのボットを作成することができる。しかし、多種多様な利用方法が存在するWaveボットをGAEアプリケーションとして登録していてはすぐに上限に達してしまうだろう。そこで、 一つのGAEアプリケーションで複数のWaveボットを作成するためのいくつかの方法 を利用することになる。サブドメインを利用する方法が一般的だろうか。 しばらく前からサブドメインを利用して複数のWaveボットを作成しようと思っていたのだが、ちょっと面倒に思えて手を付けていなかった。そうしたら、 technohippy 氏による appengine_multi_robot_runner というライブラリが公開され、それがとても便利そうだったので簡単なWaveボットを作成してみた。ただし、 Google Wave Robots API v2 が3月30日にアップデートされて実装の一部が変更されたことにより、appengine_multi_robot_runner.pyがそのままでは動作しなかったので該当箇所を修正した。それについては最後に記述しておく。 追記 (2010/4/15): 現在、 appengine_multi_robot_runner は最新版に更新されているので、後述の修正は必要無くなっている。 作成したのはインチキ日本語ボット(fake-japanese.robotic-wave@appspot.com)とインチキ英語ボット(fake-english.robotic-wave@appspot.com)の二つのWaveボットだ。インチキ日本語ボットでは、書き込んだ日本語を一度Googleにより英語に翻訳し、それを再度日本語に翻訳し直して表示する。インチキ英語ボットは、日本語を英語に翻訳したものを表示する。インチキと書いたが、特にでたらめにするために細工しているわけではない。現在の翻訳技術ではインチキっぽく見えてしまうというだけである。因みに、これらのボットのアイコン画像は Atnet Japan! を利用させてもらった。 どのように動作するか、以下の例文を実際に入力して動作を見てみよう。 「花便り」 「ここ数日は暖かな...

Google Waveを使わないと人生損する

「Google Waveを使わないと人生損する」…これはちょっと大げさかもしれないが、1年半前に書いたブログ記事「 Evernoteを使わないと人生損する 」で言及したEvernoteと同じぐらい、Google Waveが重要な技術になると感じたのは本当だ。当初、 Google Wave は自分にとって、 Google App Engine (GAE) などでプログラミングできる単なるおもちゃだった。しかしながら、今になってやっと、オンラインコラボレーションプラットフォームであるGoogle Waveの潜在能力の高さを知ることになった。 大量のメールに埋もれる情報と予定の立たないミーティング 最近、仕事上のメールのやりとりが頻繁ですぐに流されてしまうことが多く、大事な知らせを失念してしまったり、大量のメールから目的の情報を探し出さなくてはならなくなったりと、メールの扱いに手を焼いていた。さらに、直接顔を合わせるミーティングにおいても、この時期は皆忙しいようで、集まりたいときにすぐに集まれない状況が続き、何かと仕事が滞りがちになっていた。 そこで、昨年にアカウントを取得していたGoogle Waveに目を付けたのだ。今までGoogle Waveを仕事で利用しなかったのは、もともと GAEと連動させてWaveボットなどを開発する のが目的であり、コラボレーションツールとしてはあまり興味を持っていなかったからだ。それに、知人や同僚にもアカウントを持っている人がいなかった。 しかし、メールでのやりとりがひどく非効率に感じられ、必要なときにミーティングもできないというこの状況を打破すべく、Google Waveのアカウントを職場で配ってみることにした。そこでまずは、IT関連の最新技術に明るい同僚に利用してもらい、しばらく一緒に使ってみたのだが、特に問題となるような点もなく、使い勝手もそれほど悪くはなかったので、他のメンバーにもアカウントを配ることにした。 本当に新しいことは理解され難い Google Waveアカウントを配ったメンバーに早速使ってみてもらったところ、おおむね好評を得られて…というほど甘くはなく、やはり第一印象は「難しい」、「使いづらい」、「メールでいいんじゃないの」という意見だった。誰もGoogle Waveの名前すら聞いたことがな...

Google Wave Robots API v2でボットを書き直してみた

先日、 Google Wave の Robots APIバージョン2 がリリースされた。更新内容の概要は「 Google Wave Robot API v2のリリースエントリを翻訳しました 」が分かりやすい。そこで、以前に作成した 「てめーはおれを怒らせた」ボット をバージョン2のAPIで書き直してみることにした。しかし、すぐに修正できるだろうとナメていたら意外と時間が掛かってしまった。 初っ端でいきなり動かない。ほとんど チュートリアル と同じ程度に削っても動かない。エラーを頼りにAPIのソースコードなどを読んだりしているうちに、自分のプログラムの問題ではないんじゃないかと思い、動作確認していた環境をSandboxからPreviewに変更してみたら、問題なく動くようになった。ここでかなりの時間ロス。さらに、インターフェースも大きく変わっていて、新しいAPIでどのように実装するのか調べるだけでも結構時間を取られた。 書き直したソースコードは以下の通り。本当にこれで良いのか自信はないが、ちゃんと動作するようだ。因みに、ボットのアカウントは billowlet@appspot.com だ。Google WaveのContactsパネルから登録すれば使うことができる。 慣れていないので手こずってしまったが、以前のバージョンに比べて、できることは増えているし、APIの構成も分かりやすくなっている。それに、ちゃんと Google Wave Robot Python API v2 のドキュメントが整備されているのが嬉しいところ。何か面白いボットを作ってみたいな。 追記 (2010/3/15): Sandboxでも正常に動作するようになったみたい。 billowlet.py #!/usr/bin/env python # -*- coding: utf-8 -*- """billowlet.py by nox, 2010.3.6""" import re, urllib, urllib2, random from google.appengine.ext import db from waveapi import events from waveapi import robot from ...

Google Wave: 「てめーはおれを怒らせた」ボットを作ってみた

「てめーはおれを怒らせた」ボットといきなり言われても何のことだか分からないと思うけど、要はユーザの発言に含まれる特定の文字に反応して動作する Google Wave のボット billowlet@appspot.com を作成したのだ。 追記 (2010/3/7): Google Wave Robots API v2 がリリースされたので、 新しいAPIでボットを書き直してみた 。古いAPIは今後使用できなくなるようなので、今のうちに新しいAPIに移行した方が良いと思う。 先日、Google Waveの開発者用アカウントをGoogleからもらえたので早速何か作ってみることにした。どうせならGoogle App Engineを利用したかったので簡単に作れそうなボット(bot)を作成してみたわけだ。因みに元ネタの ジョジョの奇妙な冒険 とは言い回しが似ているというだけで内容とは関係ないので悪しからず。 このボットはユーザの発言内容に含まれる特定の文字に反応して動作し、ネコみたいな喋り方にさせられたり、英語や中国語で喋らされたり、笑いっぱなしにさせられたり、どもらされたりと、ユーザの発言がいろいろ変化する。因みに、「ごめんなさい」もしくは「ゆるして」と言うことで、動作を取り消すことができる。画像は実際の使用例だ。 ボットのアカウントは billowlet@appspot.com で、使い方はGoogle WaveのContactsパネル内にある+ボタンでこのアカウントを追加するだけだ。そして、このボットアカウントをWaveに参加させればよい。因みに、ボットに使われている仔猫のアイコンについては フリー素材ROKO の画像を利用させてもらった。 以下に「てめーはおれを怒らせた」ボットのデモのリンクを張っておくが、こちらは Wave Sandboxアカウント 所持者のみが利用できる。 「てめーはおれを怒らせた」ボット デモ 実際に使ってみて、このGoogle Waveはとても面白いWebアプリケーションだと思った。今回のアプリケーション作成でも将来性を強く感じることができたので、これから多くの人が使うことでどのように発展していくのか楽しみだ。 以下にGoogle App Engine上のソースコードを示しておく。ところで、stringモジ...

JavaScriptで素数を計算して動的に表示する

JavaScriptを使って素数を計算して、それを動的に表示してみた。今更という感じもするけど、10行そこそこでこのような動的な表示ができるというのは、とても便利だと思う。とは言え、普段はあまりJavaScriptを使ったHTMLは書いてないな。 までの素数 テキストボックスに数字を入力すると、その数までの素数を計算して表示する。最大入力桁を5桁にしたので、99,999までの素数を求めることができる。括弧内の数値は求めた素数の数を示す。 複数のブラウザ(Google Chrome, Firefox, IE8, Safari4)で確認してみたけど、最近はどのブラウザもJavaScriptが速い。今後、ますますJavaScript、特にAjaxなどは要の技術になっていくのだろうな。 以下にソースを示す。 <script type="text/javascript"><!-- function calcPrimes(data) { var primes = []; if (data.value >= 2) primes.push(2); for (i = 3; i <= data.value; i += 2) { for (j = 0; i > primes[j] * primes[j] && i % primes[j] != 0; j++); if (i < primes[j] * primes[j]) primes.push(i); } document.getElementById("primes").innerHTML = primes.length ? " (" + primes.length + "): " + primes.join(", ") : ""; } // --></script> <form><input type="text" size="5" maxlength="5" onk...

HTTP CookieとFlash Cookieとで同期を行う

前回 に引き続き、今回もCookie関連の記事だ。 ITmedia の ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という記事で、「ユーザーが削除したHTTP cookieを、Flash cookieを使って復活させているケース」があると書かれているが、技術的には簡単だ。 まず、HTMLのhead内にJavaScriptでdocument.cookieを設定・取得する関数を定義する。Flash (ActionScript 3.0)側では、flash.external.ExternalInterfaceを利用してHTTP Cookieを取得する。もし、取得できなければFlash Cookie (Local Shared Object, LSO)の取得を試みる。両方とも取得できない場合は、初めての利用と判断される。どちらか一方を取得できたのなら、もう一方に対して取得した値を渡す。これにより、どちらかが削除されたとしても再読み込みした際に、HTTP CookieとFlash Cookieとで同期され、削除されたデータは復元する。 異なるCookieの同期はデータの永続性を強固にする利点があるが、削除したつもりのデータが実は消えていないということも起こり得るわけで、セキュリティの面からするとあまり良くないかもしれない。これを防ぐためには、Cookieの制御に関する正しい知識を持つしかないだろう。 前回の記事 でも書いたが、Flash Cookieについては グローバルストレージ設定パネル の「今後表示しない」を選択することで禁止することができる。既に書き込まれているFlash Cookieは、 Webサイトの記憶領域設定パネル から、削除や禁止、ディスク容量の調整などが行える。また、HTTP Cookieについてはブラウザの設定で削除できる。 最後に、「 ActionScript 3.0でFlash Cookieを利用する 」で作成したプログラムを、HTTP CookieとFlash Cookieとで同期させるように変更してみたので、そのソースコードを以下に示しておく。赤字は前回からの修正箇所となる(クラス名などは除く)。使用する際は、HTMLのhead内に、 <script language="JavaScript...

ActionScript 3.0でFlash Cookieを利用する

ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という ITmedia の記事を読んで、実際どの程度のものかを理解するためにActionScript 3.0でFlash Cookieを利用してみた。因みに、ここで言う秘密CookieやFlash Cookieはローカル共有オブジェクト(Local Shared Object, LSO)と呼ばれるもので、Flash PlayerがユーザーのPCに保存するデータのことだ。 早速、ActionScript 3.0でLSOを利用したFlashコンテンツを作成してみた。作成するに当たって、 ActionScript 3.0コンポーネントリファレンスガイド の SharedObject を参考にした。 プログラムはコンテンツを読み込んだ回数をLSOに保存する。初めてコンテンツを読み込んだ場合は、「初めてお会いしますね」と表示され、2回目以降は「お会いするのは2回目ですね」のように表示される。また、LSOの保存領域が保存するデータよりも小さい場合は「ここは狭すぎます…」、保存が禁止されている場合は「私を拒絶するのですか?」と出力される。保存したデータを削除する場合は、エスケープキーを押すことで「さよなら…」と出て削除される。 LSOの制御方法だが、 グローバルストレージ設定パネル の「今後表示しない」を選択することでLSOを禁止することができる。また、ディスク容量を0KBにすると、禁止はされないが容量不足により書き込みができなくなる。既に書き込まれているLSOについては、 Webサイトの記憶領域設定パネル により、削除や禁止、ディスク容量の調整などが行える。 Flash Cookie、そこまで騒ぎ立てるほどのものではないと思うが、気になる人は設定で禁止なり削除なりすればよいと思う。コンテンツ制作者側からすれば便利なのは確か。 以下、ソースコード。 SharedObjectTest.as // SharedObjectTest by nox, 2009.8.14 package { import flash.display.Sprite; import flash.text.* import flash.events.*; import f...

Scratchで素数を求めてみた

「 小学生にプログラミングの楽しさを伝えてみた 」を読んで、 プログラミング言語Scratch(スクラッチ) にとても興味を覚えた。そこで、子供たちに使わせて、その様子でも見てみようかと思ったんだけど、使わせる前にまず自分で試すべきだと考え、簡単なプログラムを作ったところ、これがまた面白い。どういう面白さかというと、小さい頃に遊んだレゴブロックみたいな感じ。ブロックで巨大ロボットを作ったあの感覚。それに、プログラムの要素がタイルになっていて、それをピタピタと貼り付けるんだけど、これもかなり気持ちいい。 で、単なるお試しのつもりで100までの素数を求めるプログラムを作ったんだけど、前回のエントリ「 4ビットマイコンで素数を求めてみた 」との対比が面白くて、思わずブログ記事にしてしまった。一方は機械が透けて見えるアセンブリ言語によるLED表示で、もう一方はコンピュータと言うよりレゴブロック(?)に近いScratchによるYouTubeライクなアニメーション。同じ素数を求めるプログラムと言っても、ここまで違うと何だか妙な感じだ。 ネコのキャラクターをクリックすると開始。 ※音が出るので注意 このプロジェクトについてもっと知る ところで、素数を求めるプログラムを作った理由だけど、自分にとってそれが Hello worldプログラム のようなものだから。"Hello, world!"なんて画面に出しただけじゃその言語のことはほとんど分からないからね。因みに、Scratchのプログラムの方では、ちょっとだけ遊びを入れてみた。ナベアツプログラムを真似て、一の位が 9 の時だけネコがちょっとリアル(?)になる。 また、Scratchでは作成したプログラムをYouTubeのように簡単にウェブ上で共有できる。しかも、Scratch上からボタン一つという手軽さだ。さらに、そのプログラムをブログなどに貼り付けることもできる。ただ、Scratch上で日本語を表示するのは問題ないのだが、ウェブにアップロードしたものは文字化けをしてしまうようなのでこの点だけ注意して欲しい。あと、この記事に作成したプログラムを貼り付けておいた。実行するにはネコのキャラクターをクリックすればいい。 音が出るので注意 すること。 ところで、現時点での最新版であるScratc...

Google App Engine: 簡単にグラフ・チャートを作成する

ブログなどでちょっとしたグラフを表示させたい場合、 Google Chart API を使っていた。しかし、手作業で入力するのはかなり面倒だ。ウェブ上にはグラフやチャートを作成するサービスなどもあるが、登録が必要だったり、手順が面倒だったりと、個人的にはあまり手軽だと思えない。数値をコピー&ペーストしてクリック一つでグラフを作成したいのだ。そこで、使いたいサービスは自分で作ってしまえということで、 Google App Engine (GAE)とGoogle Chart APIを使って簡単にグラフ・チャートを作成するウェブアプリを作ってみた。 簡易グラフ・チャート作成 即席で作成したウェブアプリなので不備な点もあるが、取り敢えず自分で使う分にはこの程度で十分なのでGAEに登録しておいた。気が向いたら機能を拡張していくかもしれない。 以下に使い方を示す。 使い方 まず、以下のデータをテキストエリアに入れてみる。 1.2 2.2 3.5 5.6 2.8 次に、「作成」ボタンを押す。チャートの種類が「折れ線グラフX」になっていれば、入力データをもとに以下のようなグラフが描かれる。 グラフのX軸、Y軸の下限と上限、およびその目盛り分割は自動で行われる。もちろん、手動での設定もできるし、自動で設定された数値を修正することも可能だ。また、出力画像ファイルの大きさも、グラフの色(16進数6桁[RGB]で表示)も変更できる。タイトルを表示したければタイトル欄に入力すればよい。因みにタイトルを改行させるには | を入れる。さらに、下記のようなGoogle Chart APIによるURLも表示するようにした。このURLを画像URLとしてブログなどで利用すれば、上のグラフを表示させるのも簡単だ。 http://chart.apis.google.com/chart?chs=300x200&chd=t:1.2,2.2,3.5,5.6,2.8&chds=1,6&cht=lc&chco=4d89f9,c6d9fd&chxt=y&chxl=0:|1|2|3|4|5|6 現時点で利用できるグラフの種類は、「折れ線グラフX」、「折れ線グラフXY」、「スパークライン」、「積上横棒グラフ」、「積上縦棒...