ワッフル名言、珍言集

twitter上で動くAS3のインタプリタBot作った! - 妄想宝箱

AS3botを出してからまだ1週間もたってませんが、いろんな人に遊んでもらってます。
私、ハッピー。
まだまだおかしな所とかあるので、そこは随時改良していこうかと思います。


さて、みんなwaffflでどんな遊び方をしてるというかというと、
ワッフルの正体を突き止めようとしたり、無限ループさせてワッフル落とそうとしたり、
バグを見つけようとしたり、ワッフルに変な発言をさせたり・・・・。


さすがFlasher。ということで、面白いコメントを一部抜粋して紹介していこうかと。
コピペして使えばいいんじゃない?
botの名前がwafflwafflからwaffflに変わりました。なので、コピペして使う場合は、waffflに変えて使ってください。

@mogera @wafflwaffl var a:Array=["アイコ","マケ","カチ"];var h:int=0;var r:int=Math.random()*3;trace(a[(r-h+3)%3]);

結果
じゃんけん。

bkzen @wafflwaffl try {throw function():void{trace("hige");}}catch (f: Function){f();}

結果
前の発言をリピートする魔法のスクリプト☆ (というかバグ)
AS3のコンパイラ自体がエラー落ちしちゃってよく分からない動作をする。

esuk @wafflwaffl trace('@wafflwaffl trace("@wafflwaffl")')

結果
ワッフルが自分自身のリプライに反応するかのテスト。
自分自身にはリプライしないようにちゃんと設定してあるので、一回だけtraceするだけです。

esuk @wafflwaffl (function(a:String):void{trace('['+a+']:');for(var i:int=0;i<3;i++)trace(['[否定]','[承認]'][int(Math.random()*2)])})('帰る')

結果
帰ってよいかどうかワッフルに判定してもらう。
'帰る'の所を別の言葉に代えれば、他の判定もしてもらえます。
このときは承認2、否定1で、ワッフルに承認されてましたw

@coppieee @wafflwaffl (function (i:int):void{trace(i);arguments.callee(i+1);})(0)

結果
無名関数と再起。
ちなみに無限ループになっても、一定時間たつと強制終了させるようになっています。
FlashのようにScriptTimeoutError例外は発生しません。

@paq89 @wafflwaffl /*あれ?どこか間違えてる*/import flash.display.Sprite;new Sprite();

結果
コンパイルエラー。Spriteクラスねーよって言われる。
ワッフルは、Tamarinというやつを使っていて、そいつはコンソールで動きます。
なので、Spriteなどのクラスは持っていません。
基本、トップレベルのクラスしか宣言していません。(拡張すれば増やせるよ)

@keno42 @wafflwaffl for(var x:int;x++<100;){trace((x%3?"":"Fizz")+(x%5?"":"Buzz")||x)};

結果
FizzBuzz問題
これより短い解答求む!


@keno42 @wafflwaffl trace(0/0+"・・・だと・・・");

結果
吹いたw

@paq89 @wafflwaffl trace("でも、本当の気持ちは"+[0][1])

結果
深いw

Flash制作に欠かせない3つのツール - coppieee編

Flash制作に欠かせない3つのツール・まとめ編 | _level0 - KAYAC Front Engineer Blog
に遅れて便乗。

FlashDevelop

これがないと始まらない。最強エディタ。
ノートでもサクサク動くし、何よりコード補完が素晴らしい。
JavaC#もFlashDevelopで開発できたらな〜。
http://flashdevelop.jp/に参加したものはいいが、何もして無い。なんかしないと。

wonderfl

モチベーションは重要。
すごい人のすごい作品を見るだけで、やる気がぐんぐんあがってくるぜ!
あと、知らないライブラリとかwonderfl経由で知ったりして、勉強になる。
最近wonderflしてないなー。

twitter

twitter上にアクティブなFlashユーザが結構いるので最新のFlash情報を知るならtwitter
四六時中馬鹿な話で盛り上がってます。
あと、プログラミングの疑問点をつぶやけば、大抵の場合、誰かが答えてくれるのでGoogleより役に立つことも。
ActionScript Interpreter Bot もよろしく!


というか最近ActionScriptでコードがりがり書いて無いな。

twitter上で動くAS3のインタプリタBot作った!

twitterでもActionScriptしたいよね!
ということで、AS3をコンパイルして、実行するBotを作ったよ!

@wafffl

使い方は簡単。twitter

@wafffl trace("hello.")

@wafffl の後にAS3を書きこむだけ。
1分後ぐらいに

@yourId hello.

と、リプライしてくれるはず!!


一人でテストするときや、話し合いの時など、好きなときに使ってください。

オプション

便利なオプションが付きました。
@waffflの前に付ける事によって、そのオプションが有効になります。

rp(reply)オプション

このオプションを付けると、waffflは@yourId(あなたのtwitter ID)付きでリプライします。
オプションをなにもつけない場合もこのrpオプションになります。

rp @wafffl trace("hello.")

@yourId hello.

tw(tweet)オプション

このオプションを付けるとwaffflは最初の@yourId無しでポストします。
waffflが独り言を言っているような感じになります。
元の発言が誰なのかわかるようにするため、最後に(via @yourId)を追加します。

tw @wafffl trace("わっふる!")

わっふる!(via @yourId)

cmt(comment)オプション

このオプションを付けるとwaffflはそのコメントに対して反応しません。
waffflに対してコメントしたい場合に使用してください。

cmt @wafffl 落ちてない?

(wafffl反応なし)

作成に使用したもの

ScalaとかTamarinとかascとかいろいろ使ってる。
(後で書く。)

いろいろ

まだ、いろいろ不完全なので、バグったり、停止したりすると思う。
なにか意見とか要望とかあれば、@coppieeeまで。
名前とか、画像とか募集中です。

更新履歴

10/14 公開開始するも、即効で落ちた
10/14 aspreter → wafflwafflに名前変更
10/14 日本語対応
10/20 cmt,rp,tw オプション対応
10/20 wafflwaffl → waffflに名前変更

Scalaでパターンマッチ

ScalaすげーよScala
Scalaのケースクラス便利そう。


ということでパターンマッチの練習。
「5+2*3」をCaseクラス使って再現してみた。

package exprmatch
object Main {
  def main(args: Array[String]) :Unit = {
    val v = Add(Number(5),Mult(Number(2),Number(3)))
    println(v.eval)
  }
}
abstract class Expr
{
    def eval : Double = this match{
      case Number(v) => v
      case Add(l,r) => l.Eval + r.Eval
      case Mult(l,r) => l.Eval * r.Eval
    }
}
case class Number(v : Double) extends Expr
case class Add(l : Expr, r : Expr ) extends Expr
case class Mult(l :Expr, r :Expr )extends Expr

・・・なにこの短さ。
特にメソッドのないクラスなら一行で宣言できるから、Javaみたいに「型作るのめんどくせー」ということにはならないね!

NetBeansでScala

EclipseScala書いてたんだけど、現段階のScala2.7用のEclipseプラグインでは、
エラーで落ちたり、コード補完が利かなかったり、かなりストレスが溜まる。


Eclipse自重しろよ、ムキー!と、Twitterで叫んでた所、@takedasoftさんから

@coppieee 今日聞いた話ですが、eclipseはscala2.8にあわせて開発進んでいて、scala2.7用へのバックポートはしていないそうです。自分はNetBeans6.7+Scala2.7.x使ってますが結構いいですよ。他はVim派が多いようです。


http://twitter.com/takedasoft/status/4395914016


とのコメントをいただいた。
NetBeans触ったこと無かったし、せっかくだからそっちでやってみるか!

NetBeansScalaする方法

Windwos XPでのやりかたですよ。

  1. ScalaのサイトからScalaランタイムをダウンロードして、解凍。
  2. 「%SCALA_HOME%」という環境変数を追加。値はScalaを解凍した場所。
  3. Pathに「%SCALA_HOME%\bin\」を追加。
  4. NetBeans 6.7 をインストール。Java SEでおk。
  5. NetBeansプラグインをダウンロードして、適当な場所に解凍。
  6. NetBeans開いて、「ツール」→「プラグイン」→「ダウンロード済み」→「プラグインの追加」で解凍したやつの中を全部選択してインストール。
  7. 「ファイル」→「新規プロジェクト」でScalaが増えてるので、てきとーにHelloWorld。

Scalaランタイムは、スペースの入っていないパスに置かないとうまくいかなっぽい。つまり「C:\Program Files\」の下とかじゃダメ。
Scalaコンパイル中によく分からないエラーが出るって人は、たぶんパスの設定がうまくいってないと思うからそこら辺再度確認して直せばうまくいくかと。

Pipesすげー

Pipesってなに?

最近wonderflでよく見かけるようになったYahoo!Pipesという文字。
はて、Pipesってなんじゃらほい?


Pipesを使った作品一覧


作品を見る限り、RSSを解析してくれるサービス?
よく分からんが、おいしそうだ。

せっかくなので調べてみた

ググるとすぐに出た。
Yahoo! Pipesを知るためのエントリ詰め合わせ - ナマアシタノム
2007年頃にすでに流行ってたらしいね。


用は、サイトのRSSをフィルタリングしたり、くっつけたり、ソートするような操作を、GUIで出来る。
そして、ごにょごにょして作ったRSSを公開したりも出来る。


例をあげよう。
http://pipes.yahoo.com/irons/timelineviewer

Twitterで他の人のタイムラインがどんな感じか見たいときは無いだろうか?
それを実現したのが、Twitter Timeline Viewer。
Twitter IDに見たい人のIDを入れれはすぐさま、その人のタイムラインを生成してくれる。


これが、プログラミングせずにGUI操作だけで作れちゃうんだぜ!?

せっかくなので作った

coppieee_botは今の所、wonderflRSSTwitterFeed経由でポストしてるだけ。


wonderflだけPOSTしてもつまらないから、FlasherのブログもPOSTするか!
で、出来たのが
http://pipes.yahoo.com/pipes/pipe.info?_id=7ceb5cb68263b590f02e7bf6f6a41c06


RSSをまとめて繋げてるだけなんだけど、TwitterFeedで複数管理するよりものすごい楽。TwitterFeed重いしね。
あとは、作ったRSSをTwitterFeedに登録しておけば完成。
しばらくしたらcoppieee_botが新しいBlogのポストをしてくれると思うよ。


今回登録したブログは私がてきとーに選んだものなので、「勝手に俺のブログの更新を発言してんじゃねーよ」とか、「このブログも登録してよ」とか、「coppieee_botの発言数が多くてウザイ」とかの苦情は@coppieeeまで。

twitterで花火!


Twitterで打ち上げたいコメントを、

#hanabi [( ゚д゚ )]


のように #hanabi [コメント]って書けば打ち上げリストに追加されるよ!
[]は必須だから絶対付けてね!




Tweet hanabi!のボタンを押せばテンプレが表示される。


どんな花火が打ち上げられるか確認したい場合は花火一覧で。

技術的な話

この花火、CHECKMATEwonderfl build flash online | 面白法人カヤックをFork(コピー)して作りました。

使ってるものといえば、Twitter APIと、XMLと、正規表現ぐらい。別にどれもそこまで複雑な処理はしていない。
ソースコードこちら

AAで花火

で、これを面白くしたらどうしたらいいかと考えたんだけど、キャラクターの花火とかあったから、それを表現したらいいんじゃねと思ってテキストを打ち上げようってことになった。


表示の仕方は、ソースを見てくれたら分かるけど、
ただ、文字をTextFieldに入れて、そのTextFieldをBitmapDataに変換、一ドットずつ見てそれを一つの火の粉にしてるだけ。

打ち上げるコメントを取得

さて、下準備が出来たから次は打ち上げるコメントを取得しないといけない。


始めはwonderflのコメント欄から取得しようと考えたんだけど、やってみたらセキュリティエラー。
やる前に気が付いとけよ!お前!


wonderflがダメならtwitterから取得だ!
ということになった。まぁ結果的にはこっちの方がよかったな。


twitter API自体は昔、wonderfl build flash online | 面白法人カヤックで作ってたので、そこのソースを拝借。
twitter APIの説明は[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)に乗っている。ログインとかしない限りそこまで難しくない。
まぁ、今回はただ、「http://search.twitter.com/search.atom?q=%23hanabi」にアクセスするだけだけどね。


そして取得できる情報はXMLなので、XMLのコメントの部分を取ってきて、正規表現を使って、[]に囲まれたものだけを取得。
この正規表現に苦戦したんだが、twitter上の皆さんに聞いて何とかなりました。ホントありがとうございます。
結局たくまけい: ActionScriptでrubyのString#scanもどきを使わせてもらいました。


後は取得したコメントからランダムに選んで、打ち上げる。


Tweet Hanabi!ボタンをつける

ついでに、Tweetしやすくするために下に「Tweet Hanabi!」ボタンを設置。
ボタンに使ったライブラリはhttp://www.bit-101.com/blog/?p=1217


Twitter API使ってアクセスしてる。
http://twitter.com/home/?status=」+コメント
で、コメント付きでTwitterに飛べるようになってる。

あー楽しかった

最近思うのが、いい作品を作るには技術よりアイディアだろと考えるようになってきました。
今回のだって、ただTwitterと花火とテキストをくっつけただけ。
時間を駆ければ手の込んだ作品は出来るだろうが、私はそれよりちっちゃな作品をいくつも作った方が効率がいいような気がする。
私自身見た目のいい、エフェクトとか、3Dとかバリバリの作品は作れないからね!
今回のだって、1日で作った。


俺はもっとみんなから「すげー」といわれるものを作り続けるぜ!