忍者ブログ
個人HP After Cider の管理人、 ほねっとのブログです。 なのはプロジェクトとか大好きです。 八神はやてが大好きな管理人です。 コメント歓迎です!
[1] [2] [3] [4] [5] [6]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

近況報告です!

proto-
Takeo Paper Show 2010/感じるペーパーショウ

http://www.takeopapershow.com/


最近ずっとこれやってました。
毎年、東京駅正面の丸ビルで竹尾という紙の会社さんがあるのですが、
その竹尾さんが中心となって紙の展示会を行っています。

そこで展示されている、紙を作る「抄紙機(しょうしき)」の制作に
関わらせていただきました。

紙を作るパルプと呼ばれる原料と水から紙ができ、紙が再び水に還っていく様、さらにまた紙として再生される様を感じていただければとおもいます。

会場では説明&機械の見守り役として私かもう一人の制作メンバーが
立ってますので、お気軽に声をかけていただければ裏話までお話し
しますよ^q^

東京で4/15~4/18、大阪でも展示を行いまして5/27~5/29と、出張しての展示も行います。
会期は合わせて一週間程度で短いものですが、毎年数万人の方に来ていただいてる大規模イベントです。

水曜日に内覧会があり、昨日木曜日に一般公開が始まったのですが、
平日であるにもかかわらず、午前からずっとたくさんの方にいらして
いただけました。
土日は入場規制も行われそうな雰囲気ですので、ぜひお早めにいらしていただければと思います!


おまちしております~♪

ちなみにほねっとさん、本日金曜日は16時から見守り役を務めさせていただきます☆
 
PR
Twitterではやてちゃんぼっとをつくったよ

はやてクラスタのみなさんが最近はやてちゃんを愛でまくりで、
「はやてちゃんぼっとまだ?」という発言が多かったので作っ
てしまいました。

ぼっと(bot)とは…プログラムによって自動的に発言するキャラ
クターのこと

ということで、はやてちゃんぼっとのアドレスは
http://twitter.com/YagamiHayatebot

です、よろしくおねがいします☆
まだ発展途上なので暴走するかもしれないので甘く見てください><

 
ぼっとを作るよ

はやてにちなんで、8810秒でプログラミング!

C++で作って、タスク常駐プログラムにしたいな~と思ってVC++起動。
しかし!どうやってやるのかわからない!

8810秒の制限があるので、いちから調べる時間はなかったので、諦め。

じゃぁ・・・Flashしかないですよね!

ってことで、Flashでちゃきちゃきーっとコーディング。

発言のリストをXMLで作ろうと思ったんですが、なぜかXMLで躓いてしま
ったので、いまはコードに直うちです。

main.asはパスワード入力ボックスとスタートボタンがおいてあって、
もうひとつ発言をまとめたクラスがあります。

はやてちゃんぼっとの本体のコードをのっけてみましょう。
package 
{
 import com.hurlant.crypto.symmetric.CTRMode;
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.events.*;
 import flash.net.*;
 import flash.display.MovieClip;
 import HayateYagamiMessage;
 import flash.utils.*;
 import com.hurlant.crypto.*;
 import com.hurlant.util.*;
  
 /**
  * ...
  * @author honet
  */
 public class HayateYagami{
  private var _password:String;
  private var Message:HayateYagamiMessage;
  public function HayateYagami()
  { 
   Message = new HayateYagamiMessage();
  }
  private var tim:Timer;
  public function Post(e:Event):void {
   twit(Message.getMessage(int(Message.getMessageLength * Math.random())), _password);
   tim = new Timer(60 * 60 * 1000,1);
   tim.addEventListener(TimerEvent.TIMER, this.Post);
   tim.start();
  }
  public function get timeCurrent():int {
   return tim.currentCount;
  }
 
  public function passchanged(_string:String ):void {
   _password = _string;
  }
  
  public function twit(st:String,pass:String, email:String="YagamiHayatebot"):void {
   var loader:URLLoader = new URLLoader();
   trace("message=" + st);
   var date:Date = new Date();
   var urlReq:URLRequest = new URLRequest("http://twitter.com/statuses/update.xml?nocache="+date.getTime());
   var auth:* = Base64.encode(email + ":" + pass);
   var reqHead:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + auth);
   urlReq.requestHeaders.push(reqHead);
   urlReq.method = URLRequestMethod.POST;
   urlReq.contentType = "application/x-www-form-urlencoded";
   var uv:URLVariables = new URLVariables();
   uv.decode("status=" + st);
   trace("status=" + st + "pass=" + pass + "email=" + email);
   urlReq.data = uv;
   loader.addEventListener(ProgressEvent.PROGRESS, trace);
   loader.addEventListener(IOErrorEvent.IO_ERROR, trace);
   loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, trace);
   loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, trace);
   trace(urlReq.data);
   trace(urlReq.url);
   loader.load(urlReq);
  }
 }
}


・・・なんと見づらい!説明しづらいのです・・・

で、これができたので、Flashで走らせてみたのですがなんせ
常時プログラムが起動していて間違って終了させてしまうこともしばしば…

ということで、C++を再起動!C++でFlashを再生して、そのプログラムを
隠せばいいんですね。

最初、MFCからActiveXを操作して再生しようとしたのですが、うまくいかない。
1時間ぐらい格闘…

諦めかけていた時、@__parkさん(http://kataho.net/about.html)から助け舟!

「IEコンポーネントブラウザにしてしまうってのは?」

それだ!

ということで@__parkさんに手取り足取り教えてもらいながらIEコンポーネントを
表示するプログラムができました。(頂いたというのが正しいかも)

さらにウィンドウを表示させない設定にして完成!

タスク常駐アイコンも表示されなくなって予想以上の出来でした。

よかったよかった。

ということで、はやてちゃんぼっとをよろしくおねがいします!
 
前のエントリで書きました、TwiconPic、大きな問題点として対象となる絵を描画するまでに
時間が20秒程度かかるという点がありました。

原因として、

1.元になる絵の画素(約1万個)それぞれの色に近いアイコンを探す際に、画素1つ1つに
おいて、すべてのアイコン(約500個)に対して画素距離求めるため、計算が非常に時間が
かかる(約10秒)

2.アイコンをポリゴンに貼りつけてPapervision3Dで1つ1つ表示していったために、メモリ
の確保やポリゴン(約1万個)の描画に時間がかかる(約15秒)&画面スクロールや拡大に
時間がかかる

というのがありました。
このままではアイコンの読み込みが終わった後、アイコンで絵を描くまでに30秒近くプロセスを
占有してしまい、Flashどころかブラウザも止まってしまうのでいけません!

そこで、対処法をLarkさん(http://d.hatena.ne.jp/Lark_mp/)に相談したところ、1.について
以下の方法を適用してみました。

1.アイコン1つ1つには画像全体の画素のRGBそれぞれの平均値があります。それをRについて
バケツソートを行います。
2.バケツソートができたら、元画像の対象点の画素のRのバケツに入っているアイコンについて
最短距離を求めます。
3.最短距離が出たら対象点の画素のR±最短距離の範囲のバケツに入っているアイコンについて
Rに近いバケツからチェックして最短距離を更新していきます。
4.真の最短距離がでたらおしまい!

こうすることで、0≦R<256の範囲でこれまで計算していたのがたとえば100≦R≦110とかの短い
範囲で計算が終わったりできて高速化ができる寸法です!

言葉で説明しにくいー><

これをやることで、10秒かかっていた計算処理がソートの時間も込みで2秒弱に収まるようになりました。
よかったよかった!


そして、問題2.のほうですが、単にPapervision3Dをやめて普通のSpriteで描画すればいいだけなので
楽ちん!とおもったのですが、あれ?時間がかかる?

私が引っかかったところはメモリの確保時間の部分にありました。
アイコンの画像はすでに読み込んでいたので、
すでに読み込んだLoader ->  new BitmapData -> new Bitmap
という風にデータを作っていました。

しかし、これでやると15秒→12秒程度と、大して変わらない…

どういうことかなと考えてみると、BitmapDataはすでに作ってあるのでこれを新たに作る必要は
ないわけです。
ということで、すでに作っていたBitmapData -> new Bitmap
とすることにしました。すると3秒ぐらい!はやーい!

ということで素早い表示が可能になりまs・・・いや、これでもまだ不自然です。


次回はプロセスが独占することなく、描画スレッドをきちんと働かせて順次アイコンを表示するように
していこうと思います。あと、アイコンが綺麗に動くようにしたいです。


ではでは!
前回の記事でTwitterのアイコンの画像情報から空間展開してみました。
その情報をもとにしてちょっとしたものを作ってみました。

まずは下のかわいいイラストをご覧ください。





かわいいはやてちゃんですね、Check Point様のフリー素材をお借りしました。

で、このはやてちゃんとTwitterのアイコンがどう関係があるのか。



前回の実験から、Twitterのアイコンの色の偏りはユーザによってかなり異なることが
わかりました。ということは、ユーザとアイコンの色の偏りというのは固有の関係といえる
のかもしれません。

ユーザそれぞれの作ってきたフォロワーをユーザそれぞれのパレットとして
考えてみることにしました。


とか、前置きはこれくらいにして作ろうとしてるものの現状です!


hayatechan.jpg











そう、イラストをtwitterのアイコンで描画します!
遠目でわからないのでFlashの機能のズームをすると、

zoom.jpg











こんな感じになっているんですねー。

私のtwitterアカウント、いくつかあるのですが、それぞれで出来上がる絵が異なります。
黄色がすごく多いアカウントや、全体的にばらけているアカウント、それぞれ向き不向きがあって
おもしろいです。

今のところ、2つ問題があってネットに公開することができません。
1つが色の検索速度が遅い、もう1つがポリゴンの数が多すぎて描画が重くて遅いという問題です。

解決策はありそうなので、またひまなときにでも実装してみようと思います^^

korose.jpg











私のフォロワーは青とか緑が少ないのでこういう絵は苦手なんです><

ではでは!


忍者ブログ [PR]
カレンダー
07 2017/08 09
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
フリーエリア
最新CM
プロフィール
HN:
ほねっと
性別:
非公開
自己紹介:
ついったーはこちらです!
http://twitter.com/aftercider
バーコード
ブログ内検索
カウンター
アクセス解析