2009.09.21
category
tag
comments

YCAMのセミトラ展に行ってきた

DSC_7820

待ちに待ったセミトラ展pexaさんとrhythm23さんの3人で行ってきた。11時過ぎにYCAMについて内覧会に参加。セミトラの田中さんが作品の解説をしながらのツアー。贅沢!

DSC_7827

紙に印刷されたtFont。ブレた撮影パターン。

DSC_7831

会場のいろんな所に無造作に貼ってあるステッカー。会場に入るとき1人に1枚配られる。

DSC_7841

展示用サイトへのログイン時に入力するテキストが並ぶタイプセッティング(組版)

DSC_7850

フォントの劣化プロセスを一覧視できるカリフォルニア・ジョブ・ケース(組版箱)

DSC_7863

オープニングトークはthaの勇吾さんと阿部さん。最近の仕事の話やセミトラさんとの関係について。

DSC_7864

無印のCM

DSC_7869

展示でのセミトラメンバーの役割について。

DSC_7871

ちらっとだけ見せてくれたthaの進行中のお仕事。SCRの作品をフレームインテリアとして売り出すみたい。

DSC_7878

今回の展示の入力インターフェイスの1つ。劣化するフォントを操作するレコード。

DSC_7887

6台のレコードからそれぞれサイン波の音と、スクラッチすることで画面の文字がスクロールしたり、ノイズが走ったり。

DSC_7910

DJのように操ったレコードに同期して文字の形状が変化する。

DSC_7892

だんだんと劣化してきたフォント。

DSC_7894

時間の流れとともにフォントが変化していく。

DSC_7925

セミトラさんらしい、細かい演出。文字盤がかわいい。

展示後のレセプションにも参加できたので軽くお酒飲みながら、お話を聞かせて頂きました。たくさんの著名な方にお会いできて本当に行けてよかったなー。何かと収穫の多いイベントでした。ありがとうございました!

東京勢以外にもいつもお世話になっているstrightline後藤さんにも初めてお会いすることが出来ました。嫁が大分なので里帰りの際はぜひご飯とか行きましょうー。

rhythm23さんのコネがあったので、一般参加よりも踏み込んで楽しめました。ありがとうございます!

2009.09.19
category
tag
comments

FELISSIMO / Wonderland for girls! Syrup. in Estonia

syrup_spoon1

syrup_spoon2

syrup_spoon3

フェリシモさんと雑誌spoon.のコラボ企画、Wonderland for girls!のFlashをお手伝いさせて頂きました。エストニアで撮影された秋のイチオシコーディネートを紹介するサイトです。森ガールのゆるふわな雰囲気をサイトでも演出するためにゆったりモーションをつけました。

CREDIT
AD: Masahiro Murayama(launch inc.)
De: Chiho Satake(launch inc.)
Fl: Shinichi Shimomura(5ive)

Pr: launch inc.
Cl: FELISSIMO

http://www.felissimo.info/syrup/spoon/

2009.09.15
category
tag
comments

Manifesto / Manifesto | 大人の為のコスチュームジュエリー

manifesto1

manifesto2

manifesto3

福岡で活躍するコスチュームデザイナー、苑田さんのジュエリーサイトを制作しました。Manifestoのジュエリーは各県でお取り扱いしていますので最寄りのショップからご確認ください。Manifestoのコンセプトは「繊細でいてタフ、上品でいてグラマラス、誠実でいてユーモア」という2面性を表現しているので、WebサイトもHTMLとFlashエリアをセンターで分けて両方の特性を生かすような設計になりました。HTMLもFlashもWordPressから更新出来るようになっています。

今回はデザインをnenrikiさんにお願いしました。お疲れ様でした!

CREDIT
CD+D+Fl+HT+Sy: Shinichi Shimomura(5ive)
De: Yuki Tanaka(nenriki)
Cl: Manifesto

http://manifesto-jewelry.jp/

2009.09.14
category
comments

ASだけでJSを動作させる

ExternalInterfaceを使うとJavaScriptと連携できるんだけど、HTMLにJSを書くのはめんどくさいしJSファイルをサーバーにアップするのも手間なのでASだけでJSを動作させるテスト。Flashサイトで良く使いそうなJSをまとめてクラスにしてみた。staticメソッドにしてあるので、インポートした後はnewせずにクラス名から直接呼び出せる。とりあえず10種類用意したので、随時追加していこうかなー。

上記のデモのHTML見てもらえば分かるけど、このFlashから指示してるJSの記述は一切していない。なのでswfファイルだけサーバーにアップすればJSも動く。HTMLにJSのリンクタグとか仕込まなくてもいいのでちょっとだけ楽できるよと。ドキュメントクラスからの使い方はこんな感じ。

private function onClick(e:MouseEvent):void
{
	var browser:String = JsUtils.getBrowser();
	switch(e.currentTarget.name)
	{
		//-----[ポップアップを開く]
		case "btn1":
			var url:String = "http://www.google.co.jp/";

			//-----[safariのみ_blankで対応]
			if (browser != null && browser.indexOf("Safari") >= 0)	navigateToURL(new URLRequest(url), "_blank");
			else JsUtils.windowOpen(url, 400, 400, 0, 0, true, false, "yes");
			break;
		//-----[ウインドウを揺らす]
		case "btn2":
			JsUtils.windowShake();
			break;
		//-----[アラートを表示]
		case "btn3":
			JsUtils.alert(browser);
			break;
		//-----[現在のURLを取得]
		case "btn4":
			JsUtils.alert(JsUtils.getLocation());
			break;
		//-----[ウインドウの移動]
		case "btn5":
			JsUtils.windowMove(0, 0);
			break;
		//-----[ウインドウのリサイズ]
		case "btn6":
			JsUtils.windowResize(400, 400);
			break;
		//-----[クッキーを保存]
		case "btn7":
			JsUtils.setCookie("cookiename", "hogehoge", 7);
			break;
		//-----[クッキーを取得]
		case "btn8":
			JsUtils.alert(JsUtils.getCookie("cookiename"));
			break;
		//-----[タイトルの変更]
		case "btn9":
			JsUtils.setTitle("fugafuga");
			break;
		//-----[タイトルの取得]
		case "btn10":
			JsUtils.alert(JsUtils.getTitle());
			break;
	}
}

やってる事は大したこと無くて、ExternalInterface.call()の中で関数を文字列としてコールしてるだけ。Flash側からは文字列でも、JSに渡された瞬間に関数になって実行さるイメージなのかな。リファラーも取れるので、GoogleやYahooからどんなキーワード検索で飛んできたのかもFlash側に渡してやれる。LPOみたいにFlash内のレイアウトや配置をキーワードに合わせて動的に変更したりも出来るだろうから、色々使い道はあるかも。

JsUtilsクラスはこちらからどうぞ。

2009.09.09
category
comments

写真に青いレイヤーを乗算してみる

こないだ本屋で見た上野樹里が表紙の雑誌「Levi’s book ROCKS」がえらいかっこ良かったのでFlashで真似てみる。透明度0.9くらいの青いベタ塗りを写真の上に引いて、ブレンドモードを乗算にして写真の彩度とコントラストを少々弄るとそれっぽくなった。

うーん、何かに使えないかなー。

2009.09.08
category
comments

サーバータイムを使ったミリ秒対応のカウントダウン

ティザーサイト等で良く使われる「オープンまであと何日」みたいなカウントダウンを作ってみる。Flashだけで作るとローカルタイムに依存するので、ユーザーに時計を進められるとネタばれすることも。たまに見かけるけど。上のデモはアクセスした日から常に1ヶ月先をカウントダウンします。残りゼロになっても、何も起きませんよ。

サーバーから時間を取得した後にFlash側で経過時間を足して、目的の時間から差分を取ることでどのPCから見てもカウントダウンの時刻を同期することができる。

カウンタークラスにしてみた。ドキュメントクラスでは下記のように使います。

package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import info.five.net.Counter;
	import info.five.events.CountEvent;

	/**
	 * ...
	 * @author 5ive
	 */
	public class Main extends Sprite
	{
		public function Main():void
		{
			var d:Date = new Date();
			var ctr:Counter = new Counter(d.fullYear, d.month + 2, d.date);
			ctr.getServerTime("servertime.php");
			ctr.addEventListener(Counter.CHANGE, onChange);
			ctr.addEventListener(Counter.FINISH, onFinish);
		}

		private function onFinish(e:CountEvent):void
		{
			trace("finish!");
		}

		private function onChange(e:CountEvent):void
		{
			countText.text = e.day + "d  " + e.hour + "h  " + e.minute + "m  " + e.second + "s  " + e.milisecond + "ms";
		}
	}
}

new Counter()の引数でカウントさせたい未来の日付と時間を渡す。getServerTime()メソッドでPHPへのパスを渡す。後はCHANGEとFINISHイベントをリスナーに登録して時間が流れるのを待つだけ。

Counter.as

package info.five.net
{
	import flash.display.Sprite;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLVariables;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.EventDispatcher;
	import flash.utils.getTimer;

	import info.five.events.CountEvent;

	/**
	 * ...
	 * @author 5ive
	 */
	public class Counter extends EventDispatcher
	{
		public static const CHANGE:String = "change";
		public static const FINISH:String = "finish";
		private var _loader:URLLoader;
		private var _serverTime:Number;
		private var _swfTime:Number;
		private var _futureDate:Date;
		private var _sp:Sprite;

		public function Counter(year:uint, month:uint, day:uint, hour:uint = 0, monuites:uint = 0, second:uint = 0, milisecond:uint = 0):void
		{
			_sp = new Sprite();
			_futureDate = new Date(year, month - 1, day, hour, monuites, second, milisecond);
		}

		//------------------------------
		//   サーバーへの問い合わせ
		//------------------------------
		public function getServerTime(url:String):void
		{
			//-----[キャッシュ対策]
			var date:Date = new Date();
			url += "?t=" + date.getTime();

			//-----[サーバーの時間取得]
			_loader = new URLLoader();
			_loader.addEventListener(Event.COMPLETE, onComplete);
			_loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
			_loader.load(new URLRequest(url));
		}

		//------------------------------
		//   IOErrorEvent
		//------------------------------
		private function onError(e:IOErrorEvent):void
		{
			trace("error=" + e.text);
		}

		//------------------------------
		//   サーバーの時間取得
		//------------------------------
		private function onComplete(e:Event):void
		{
			var urlVariables:URLVariables = new URLVariables(_loader.data);
			_serverTime = Number(urlVariables.returnValue);
			_swfTime = getTimer();

			//-----[URLLoaderの削除]
			_loader.removeEventListener(Event.COMPLETE, onComplete);
			_loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
			_loader.data = null;
			_loader = null;

			//-----[タイマーの開始]
			if (_futureDate.getTime() < _serverTime)
			{
				trace("[error]:カウントする日付が過去を指定しています。");
			}
			else
			{
				if (_sp != null) _sp.addEventListener(Event.ENTER_FRAME, onTicks);
			}
		}

		//------------------------------
		//   タイマーの更新
		//------------------------------
		private function onTicks(e:Event):void
		{
			var passage:Number = _serverTime + (getTimer() - _swfTime);
			var diff:Number = _futureDate.getTime() - passage;
			var day:* = Math.floor(diff / (24 * 60 * 60 * 1000));
			var total:* = Math.floor(diff / (60 * 60 * 1000));
			var hour:* = total - (day * 24);
			var minute:* = Math.floor(diff / (60 * 1000)) - (total * 60);
			var second:* = Math.ceil(diff / 1000) - ((minute * 60) + (total * 60 * 60)) - 1;
			var milisecond:String = diff.toString().substr(diff.toString().length - 3, 3);

			//-----[2桁で表示]
			day = String(day + 100).substr(1, 2);
			hour = String(hour + 100).substr(1, 2);
			minute = String(minute + 100).substr(1, 2);
			second = String(second + 100).substr(1, 2);

			//-----[イベントクラスに値を格納]
			var ce:CountEvent = new CountEvent(CountEvent.CHANGE);

			if (diff > 100)
			{
				ce.day = day;
				ce.hour = hour;
				ce.minute = minute;
				ce.second = second;
				ce.milisecond = milisecond;
				dispatchEvent(ce);
			}
			else
			{
				ce.day = "00";
				ce.hour = "00";
				ce.minute = "00";
				ce.second = "00";
				ce.milisecond = "000";
				dispatchEvent(ce);

				dispatchEvent(new CountEvent(CountEvent.FINISH));
				kill();
			}
		}

		//------------------------------
		//   データの破棄
		//------------------------------
		public function kill():void
		{
			_sp.removeEventListener(Event.ENTER_FRAME, onTicks);
			_sp = null;
		}
	}
}

Counterクラスではサーバータイムを取得した瞬間にENTER_FRAMEを発動。そこからFlash内での経過ミリ秒を加算していき、目的の時間との差分を計算してCountEventクラスに各時間を格納させる。そのイベントをドキュメントクラスに返して時間を取得させる。

CountEvent.as

package info.five.events
{
	import flash.events.Event;

	public class CountEvent extends Event
	{
		public static const CHANGE:String = "change";
		public static const FINISH:String = "finish";
		public var day:String;
		public var hour:String;
		public var minute:String;
		public var second:String;
		public var milisecond:String;

		//------------------------------
		//   コンストラクタ
		//------------------------------
		public function CountEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false):void
		{
			super(type, bubbles, cancelable);
		}

		//------------------------------
		//   クローン
		//------------------------------
		public override function clone():Event
		{
			return new CountEvent(type, bubbles, cancelable);
		}
	}
}

CountEventクラスには「day」、「hour」、「minute」、「second」、「milisecond」プロパティが用意されているので、ドキュメントクラス側で必要に応じて取得して表示させて下さい。

serverttime.php

<?php
 $stamp = microtime();
 $ary = split(" ", $stamp);
 echo "returnValue=".(string)$ary[1].(string)(int)($ary[0] * 1000);
?>

最後にサーバーに置くPHP。Flash側のgetTimer()のミリ秒と、PHP側のmicrotime()のミリ秒で桁が違うので、桁合わせのためにちょっとだけごにょごにょしてます。microtime()でミリ秒を取得すると小数点付きで分割して計算されるので、一度文字列にしてFlash側に合わせるように変換かけてます。

2009.09.07
category
tag
comments

サンセットライブ2009に行ってきた

IMG_0364

最終日の日曜にサンセットに行ってきた。昼前から高速バスに乗って、会場に着いたのが13時過ぎくらい。最初に見たのが板尾創路!名作「砂渡し爺」が聞けたし、めっちゃ面白かった。銀杏BOYZの峯田もスペシャルゲストとして一緒に来てた。最後に「最近つらいことがあったけど、今日ここに来て良かったです」と言ってたのがものすごい刺さった。

後はバンバンバザールとか曽我部恵一バンドとか。EGO WRAPPIN’も見たかったけど諸事情で帰らないと行けなくなったので19時で撤収。3家族で行けたので更に楽しかったな。みんなお疲れ様でした!

2009.09.02
category
tag
comments

YCAMのセミトラ展ツアーのお知らせ

こんにちわ、5iveトラベル代理店です。

9/19(土)に山口県のYCAMである「セミトラ インスタレーション展」のトークイベントにみんなで行きませんか?団体割引でちょっとだけ安く行けるので8名以上で集まって行ければいいなと思っています。詳細をATNDに明記してますので、興味のある方は参加表明をお願いします!

ATND: YCAM セミトラ インスタレーション展ツアー

追記2009.9.8: 一部予定を変更しました!

2009.09.01
category
comments

WordPressでfeedを配信しないようにする方法

WordPressでフィードを配信したくない時にコアファイル弄るとすぐ出来るんだけど、アップグレードした時にメンテが面倒になるのでこの方法はできればやりたくない。調べてたら使っているテーマフォルダにfunctions.phpをアップする事で無事解決できた。

functions.php

<?php
	remove_action('wp_head', 'rsd_link');
	remove_action('wp_head', 'feed_links_extra', 3);
?>

WPのヘッダーにwp_head()を入れている場合に、上記の記述でメインのフィードとページ等のコメントフィードへのリンクを削除することができる。

page 1 / 11