2010/04/01
かなり頭悩ましてますw このサイトのYootubeは、一般的なYoutube再生(swf再生)じゃなくて、 flvやmp4を直接ストリーミングしてます。 が・・・何か3月末から拒否されてるっぽい(T_T) 実はこのサイトのようにFlashからの外部アクセス(今回で言うYoutube)は、 セキュリティ的に無茶苦茶やっかいで、直接アクセスできません。 苦肉の策で、こんな感じでPHP経由(proxyプログラム)で取得してました。 ■フロー (1) swfからyoo-s.comのAPIへYoutube動画URLリクエスト http://www.youtube.com/watch?v=ビデオID (2) URLを解析し、ビデオIDを取得 (3) yoo-s.comからYoutubeに動画情報をリクエスト http://www.youtube.com/get_video_info?&video_id=ビデオID (4) テキストデータがかえってくるので、解析してtokenを取得 (5) ビデオIDとtokenを利用して、yoo-s.comからYoutubeへ動画リクエスト http://youtube.com/get_video.php?video_id=ビデオID&t=token (6) 303 See Otherが返る クライアント直接型専用アプリ(C#やAir等)なら、この時点で動画をダウンロードできる ここがやっかい。。。 (7) ヘッダを解析してLocationから真の動画URLを取得 例) http://v8.lscache8.c.youtube.com/videoplayback?ip=72.0.0.0&.......... (8) yoo-s.comからswfへ動画URLを返信 しかし、冒頭にも記した通り、最近(7)のURLがyoo-s.comでは拒否されてしまう。。。 ローカル環境ならOKってことは、やっぱIPで制御されてる可能性大。 100%拒否されたとは断定できないけど「token発行がyoo-s.com」「動画再生がswfクライアント」 ってのが問題かな? 結局、クライアントから直接リクエストしないとダメかも。 とは言えswfからは直接アクセス不能なので、swf←→JavaScriptになるのか? てかJavaScriptでも拒否されるかも知れん。。。 ちなみにAirアプリで作ったら、あっさりyoutubeから直接動画ダウンロードできたけど(^^;) うーん、誰か助けてw

  2010/03/19
iPhoneアプリはトーシロで、OSXアプリの講習会にも行った事あるけど、すっかり忘れてしまった。 「Cocoa/Objective-C」プログラム本を捨ててしまったので、基礎的な参考本がないw ってことで、ネットで調べたらこのページがわかりやすい。 iPhone App Docs Objective-Cは抜きにして、非常によくまとまっていると思う。 しかし「Interface Builder」は素晴らしいね。 アプリによっては、ほぼノンコーディングで作成できてしまうw 結局は「WebObjects」同様、プログラムをがりがりしないといけない&「Objective-C」の作法が壁だなぁ。 若ければ時間もあるし吸収力早いんだけど、年はとりたくないもんだ。。。 ■メモ ▽view作成時のイベント ・viewDidLoad:インスタンス化したときに呼ばれる ・viewWillAppear:View表示直前に呼ばれる ・viewDidAppear:View表示直後に呼ばれる ▽touchイベント - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event ▽AVFoundation.frameworkのパス /Developer/Platforms/iPhoneSimulator.platform/ Developer/SDKs/iPhoneSimulatior2.2sdk/System/Library/Framework

  2010/03/17
オブジェクトを中心で回転させるプログラムに完全にハマりました(T_T) とりあえず、このサイトのヘッダーメニューとBlog画面に実装しましています。 昔からベクトル大嫌い! でも、3Dやるには切っても切れないから勉強しないと、この先思いやられるなぁ。 てか、中心の回転はFlex4で簡単にできるようになるんだっけ?(^^;) とりあえず、サンプルコードを抜粋 [as3] var matrix:Matrix3D = new Matrix3D(); matrix.appendTranslation(-target.width/2, -target.height/2, 0); if (_params.rotationX > 0) { matrix.appendRotation(nRotationX, Vector3D.X_AXIS, new Vector3D(defaultX, defaultY)); } if (_params.rotationY > 0) { matrix.appendRotation(nRotationY, Vector3D.Y_AXIS, new Vector3D(defaultX, defaultY)); } matrix.appendTranslation(target.width/2, target.height/2, 0); target.transform.matrix3D = matrix; [/as3] オブジェクトを中心に回すには、基軸をオブジェクトの中心にずらさなくてはいけない。 肝は、pivotPointでした。 (1) appendTranslationでオブジェクトの幅、高さの半分平行移動 (2) appendRotationで各軸で回転させるが、第3引数のpivotPointで基軸を設定する (3) appendTranslationで(1)で平行移動した分を戻す

  2010/03/16
今日は全く仕事をせずに、Ustreamでセッションをずっと見てました(-_-) 会社では音が聴けなかったので、家でもう一回観ようと思います。 Ustream「Adobe FLASH PLATFORM CAMP Tokyo」 「Flash CS5」の宣伝てことで、デザイナーよりのFlasher向けのセッションでした。 抜粋 ■Flash CSS と Flex Builder4の新機能 一番観たいのを見逃したw あとで・・・。 ■Flash CS5のiPhoneアプリ開発 「Objective-C」は習得がとにかく難しい言語なので、Flasherさんが一番気になる技術ですよね。 前にFlexUGでデモをちょっと見たので、まぁこんなもんか?という感じ? OpenGLに変換する為のラッパークラスをかますのが肝。 あと、メモリ管理を視野に入れないと大変そう。 これからAppStoreが無尽蔵に増えそうだなw てか、Flexにつけてよ!>Adobe ■スカンクワークス(特命チーム) 個人的には、一番刺激を受けたセッション。 Papervision3Dの開発者Ralph Hauwertのデモがクールだった。 Pixcel Benderのデモは前に見ていたが、もしかしたらWebGL、OpenGLが 常識の3Dの世界に風穴あけちゃうのかな?ってくらいリアルタイムレンダリングが速い気がした。 PixelBender Raytracer ■サイドショーへようこそ Mario Klingemann氏のピクセルとベクトルとActionScriptを数学と科学で創造するアートワーク。 Twitterでは数学の芸術家と絶賛されてました! Galactoseデモ ■アート・オブ・プレイ Erik Natzke氏のデモはTwitterで評判が良かったようです。 PCアートって無機質っぽいけど、それをあまり感じさせない凄さ。 もちろん感性が一番重要なんだけど、MarioもErikもちゃんと数学の基礎ができている。 映像と数式がリンクしていて、まさにマトリックスの世界。 自分は幾何学がすげぇ苦手なんで、今悪戦苦闘(って程やってないけどw) 最終的に僕らは賢い人のライブラリを使うのが一番だと思うけど、物事の本質は知らないとね!

  2010/03/11
最近では、Ajaxでも3Dライブラリやサンプルを、みんな頑張って作ってるみたいだ。 個人が山ほど作ってるけど、どれを選択していいかわからないのが「Ajax」のダメなトコなんだよなぁ。 仕様が統一されてなくて、とにかくわかりにくい。。。 現状の3Dはまだまだ、Flash > Ajax + CSSだなぁ。 けど、HTMLある限りずっと付き合ってかなきゃいけないんだよねぇ(-_-) とりあえず、今日見つけただけのサンプルを抜粋 ■jQuery 3D Rotator あはwこのページの背景と同じっぽいw プロパティの設定の仕方はちと大変な気がするけど、HTMLだとしょうがないか? ちと、わかりにくいかなぁ? ■Making a 3D Engine in jQuery 「DisplayObject3D」とか「Camera3D」とかクラス名見る限り「Papervision3D」 を移植しようと思ってるのかな? ただ「Papervision3D」は、主力開発者が抜けて、すたれかけているような気がする。 何つってもCPUに負荷をかけるから重いしねぇ。                ■Flip HTML content in 3D 回転だけに特化してるので、書き方がシンプルでわかりやすい。 色んなことするのは難しそう。 ■Flip! シンプルでわかりやすそう。 コールバックもついてる。 ■jQuery faux-3D effect このサイトの作りかけ中の「Photo」みたいな動きw 少ないコードで実現してますが、このままだと応用がきかなそうだ。 「OpenGL」に対応してくると、AjaxもFlashも格段に作り方が違うんだろうけど。 てか、おいらも「OpenGL」プログラムをそろそろ覚えないと(-_-;)

  2010/03/03
iPhoneの「Ustream Broadcaster」使ってみたけど、すげぇ簡単にライブ配信できる。 自分のiPhoneで早速試してみた(^_^)                                  justinは完全に差をつけられた感じだなぁ。       Ustreamはかなり技術力あってSoftbankも出資したし、ストリーミングは「Ustream」一本で間違いないだろう。 って訳で、このサイトも「Ustream」対応しようかと。 ちなみに、CMSとかでHTML出力するブロガーなら、JSやFlashガジェットタグ貼り付けるだけっす。 このサイトみたくフルFlashや自作でガジェット作りたい人は、公式サイトに「Ustream API」を利用。 パッと見だけど、わかりやすくてよく出来てると思う。 ■Ustream APIデベロッパー登録 http://developer.ustream.tv/ 登録すると「API Key」がゲットできます。 ■Ustream APIドキュメント(英語) http://developer.ustream.tv/data_api/docs html,json,xml,phpのモードがあるけど、汎用性考えるとJSONっすね。 (PHPはsirializeで返ってくるけど、JSON使えればあんま意味ない気も) しかも「Flash Client API」まで公開されてる! ■Flash Client API ▽ドキュメント http://developer.ustream.tv/external/flash/ ▽SVN http://svn.ustream.tv/flash/rsls/ クロスドメイン制限してないのかな? 後々試してみます。 ■API例 ▽チャンネル一覧 http://api.ustream.tv/json/user/yohei/listAllVideos?key=API Key ■動作確認用のサンプル [as3] class UStreamService extends Service { public function getChannels() { $params->user = UstreamのユーザID; $params->channel = Ustreamチャンネル名; $url = $this->getChannelListURL($params); $result = file_get_contents($url); $results = json_decode($result); return $results } private function getChannelListURL($params, $mode="json") { $url = USTREAM_API_URL."/{$mode}/user/{$params->user}/listAllVideos?key=".USTREAM_API_KEY; return $url; } } [/as3] 仕様決まれば簡単にファイル分離できそうです。 本家サンプルではcurl使ってるけど、この程度ならfile_get_contentsで十分かな?

  2010/03/03
おぉ!GoogleMapAPIのFlex用ライブラリーがswc形式でGoogle本家にあがってます(^_^)/ これで、わざわざFlashとJavaScriptの連携しなくてもよさげ? 3分クッキングで作成してみた。 ■google_map.swf htmlTextは機能ダメダメだけど、imgタグでswfを直で読めるんだぁ・・・ (^_^)つ ペタッ まだクラスの中身を詳しく見てないけど、swf間で通信(LocalConnection等)を実装すれば色んなことできそうです。 ■Google Maps API for Flash - FlexBuilder ▽チュートリアル http://code.google.com/intl/ja/apis/maps/documentation/flash/tutorial-flexbuilder.html ▽ダウンロード http://maps.googleapis.com/maps/flash/release/sdk.zip ■Maps API キーの取得 ドメイン毎にMapsAPIキーを生成できます。 http://code.google.com/intl/ja/apis/maps/signup.html ドメイン毎に発行なので、開発環境と本番ではキーを別々にしなければいけません。 プログラムは、クラス実装さえわかれば難しいことはなさげです。 「ARK-Web」にわかりやすくまとめられています。 実践編ではFlexとJavaScript連携でやってますが、Flexオンリーでやった方が軽そうだけど、 HTML派に考慮しての事かと思います。 ■動作確認サンプル ▽ソース これだけで、あっさり表示されます。 [as3] import com.google.maps.controls.ZoomControl; import com.google.maps.controls.MapTypeControl; import com.google.maps.controls.PositionControl; import com.google.maps.LatLng; import com.google.maps.Map; import com.google.maps.MapEvent; import com.google.maps.MapType; private var map:Map; private var locateX:Number = 35.728912; private var locateY:Number = 139.7095082; private function onInitialize(event:Event):void { map = new Map(); map.key = GoogleMapキー; map.addEventListener(MapEvent.MAP_READY, onMapReady); mapContainer.addChild(map); } private function onResize(event:Event):void { map.setSize(new Point(mapContainer.width, mapContainer.height)); } private function onMapReady(event:Event):void { map.setCenter(new LatLng(locateX, locateY), 14, MapType.NORMAL_MAP_TYPE); map.addControl(new ZoomControl()); map.addControl(new PositionControl()); map.addControl(new MapTypeControl()); } [/as3] locateX、locateYの位置指定は、GoogleMapのパラメータを直接埋め込んでますが、 各パラメータをGoogleからシームレスにやり取りできるかですね。 只今、このサイトと連動できるよう作成中で、何だか面白くなってきました。

  2010/03/01
がちょーん!!FlashCSだけに「FlvPlayback」等の便利なVideoコンポーネントがあるw Flexにないコンポーネントってあるんだねぇ(^_^;) どうりで最近動画プレイヤーが出回ってると思ったら・・・。 ■FlashのVideoコンポーネント(Flexには標準で未実装) ビデオプレイヤーの再生・停止は勿論、シークやボリューム等もGUIだけで作れちゃうん。 これならデザイナーさんには重宝されますなぁ(^_^) とは言っても、外部ビデオファイル取得とか他とのマッシュアップとかの処理は、結局ガリガリかかないといけないが・・・。 しかし、こんな便利なもんあるなら俺もFlashで作ろうか?と。 けど「fl.video」パッケージを探せば何とかなるんじゃね?と調べたら、ありました! ■Adobe Flash Media Server productivity tool FMS用のツールなんだけど、Flexでも使えそうです。 Adobe本家から「Adobe Flash Media Server productivity tool」をダウンロードできます。 https://www.adobe.com/cfusion/entitlement/index.cfm?event=custom&sku=FS0000503&e=fms35 FMS用のツールで、他にもやら面白げなライブラリーがある。 「Dynamic Streaming Class」って何?何?これ??(^_^) もしかして動的にAS書き出せちゃうのか???(違うか。。。) とりあえず後回しで「FLVPlayback2.5」を使ってみる。                 サンプルでスキンもswfで用意されている。 欲を言えば、スキンはswfでなくてas + 素材で欲しかったなぁ。 FlashCSみたくカスタムコンポーネント化すれば、もっと便利かも ■サンプルソース [as3] private function playTopVideo():void { var video:FLVPlayback = new FLVPlayback(); var ui:UIComponent = new UIComponent(); view.topVideo.addChild(ui); ui.addChild( video ); video.width = 320; video.height = 240; video.source = "movie/empire.mp4"; video.skinBackgroundColor = 0x666666; video.skin = "swf/FLVPlaybackSkins/SkinUnderAll.swf"; video.scaleMode = VideoScaleMode.MAINTAIN_ASPECT_RATIO; video.skinAutoHide = false; } [/as3]

  2010/02/25
かなり煩雑なコードになってきたので、クラス化と言う名のリファクタリング。 意地でもPEARや他のライブラリは使わないぞw ■修正内容 VoiceService ver0.2 (1) MixiVoice、Twitterクラス化・ファイル整理

VoiceService | getVoices() | MixiVoice --> HTTPService Twitter --> HTTPService

(2) HTTPサービスクラス「HTTPService」作成 「HTTPRequestService」の命名の方が正しいかも!? (3) 同時投稿機能追加 とり合えず最低限の実装 ・Twitterは、Basic認証でなくてtokenにするのが今後の課題 ・Mixiは、htmlパースとログイン処理が課題 ■VoiceService(抜粋) ファイル分離して非常にわかりやすくなったv(^_^)v
    /**
     * mixi & Twitterボイス取得
     **/
    public function getVoices()
    {
        $mixi_voice = new MixiVoice();
        $voices['mixi'] = $mixi_voice->getVoices();

        $twitter = new Twitter();
        $voices['twitter'] = $twitter->getUserTimeline();

        $results = $this->_marge_voices($voices);
        dump($results);
        return $results;
    }

    /**
     * mixi & Twitterボイス同時投稿
     **/
    public function postVoice($values)
    {
        if ($values->message && $values->password == VOICE_PASSWORD) {
            $mixi_voice = new MixiVoice();
            $is_mixi = $mixi_voice->postMessage($values->message);

            $twitter = new Twitter();
            $is_twitter = $twitter->postMessage($values->message);

            return ($is_mixi && $is_twitter);
        }
    }
※「$this->_marge_voices($voices)」は、MixiVoiceとTwitterデータをマージしてJSON化してる ■MixiVoice(抜粋) 「HTTPService->request」を実装して、paramsをオブジェクトで渡すようにした。 とりあえず、こんなもんかな?
    /**
     * mixiボイス取得
     **/
    public function getVoices()
    {
        $this->login();

        $params->url = MIXI_ECHO_LIST_URL;
        $params->method = 'POST';

        $html = $this->request($params);
        $results = $this->parseVoice($html);
        return json_encode($results);
    }
■Twitter(抜粋) このクラス名だと、また膨大になりそうな予感だけど。。。 これもパラメータをオブジェクトで渡すようにした。
    /**
     * Twitter投稿
     **/
    public function postMessage($message)
    {
        if (!$message) return;

        $posts['status'] = $message;

        $params->posts = $posts;
        $params->url = TWITTER_UPDATE_JSON_URL;
        $params->basic->id = TWITTER_USER_NAME;
        $params->basic->password = TWITTER_PASS;

        $results = $this->curlRequest($params);
        return $results;
    }
■HTTPService(抜粋) これが肝のクラス。 なので、頭が整理できてなずサッパリ(T_T) cokkie処理やBasic認証が両立できなくて、とりあえず「curl」と「file_get_contents」の併用です。 ▽各メリット ・curl:細かいことができそうで速い ・file_get_contents:ソースが短くできそう 最終的にはcurlで統一するかな?
    /**
     * HTTPリクエスト(curl)
     **/
    public function curlRequest($params)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $params->url);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        //POST
        if ($params->posts) {
            $posts = http_build_query($params->posts, '', '&');
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
        }

        //cookies
        //TODO 
        //curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie");

        //BASIC認証
        if ($params->basic) {
            curl_setopt($ch, CURLOPT_USERPWD, "{$params->basic->id}:{$params->basic->password}");
            dump($params->basic);
        }
        $results = curl_exec($ch);
        curl_close($ch);
        return $results;
    }

    /**
     * HTTPリクエスト(file_get_contents)
     **/
    public function request($params) {
        $headers[] = 'Content-Type: application/x-www-form-urlencoded';

        if (is_array($params->posts)) {
            $content = http_build_query($params->posts, '', '&');
            $content_length = strlen($content);
            $headers[] = "Content-Length: {$content_length}";
            $requests['http']['content'] = $content;
        }

        //Basic認証
        if ($params->basic) {
            $basic = base64_encode("{$params->basic->id}:{$params->basic->password}");
            $header[] = "Authorization: Basic ".$basic;
        }

        //cokkie
        //TODO paramsかセッションにする?
        if ($this->cookie) {
            $headers[] = "Cookie: {$this->cookie}";
        }

        if ($params->method) {
            $method = $params->method;
        } else {
            $method = 'GET';
        }
        $requests['http']['method'] = $method;
        $requests['http']['header'] = implode("\r\n", $headers);

        $context = stream_context_create($requests);
        $contents = file_get_contents($params->url, false, $context);

        //cookie取得・設定
        if ($http_response_header) {
            $this->setCookieForHttpResponseHeader($http_response_header);
        }
        return $contents;
    }
※「$this->setCookieForHttpResponseHeader」は、HTTPヘッダーをパース

  2010/02/24
FlashのhtmlTextの機能、何とかならんかね~>Adobe せめて画像の回り込みぐらい(T_T) さて、Androido本を買ってみた(もち会社経費でw)。 「Google Androidプログラミング入門 (大型本)」 豆蔵社員が作ってて、本質的な基礎部分に触れていて結構わかりやすいと思う。 出版不況とは言えども、こう言う専門書籍とかは手に持ってみたい感じがする。 ざっと見た感じ、 (1) ファイル構成 (2) Actibity、イベント (3) Intentによるデータ管理 この辺の概念を抑えればとり合えずアプリは作れそうだ。 サンプルアプリ作ってみたけど、結構わかりやすいと思う。 とは言っても、コンポーネントやサービスが膨大っぽいし、実機を持ってないからなぁ・・・。 なんかAndroidの実機が欲しくなってきたこの頃(^^) ■個人的感想 ・Javaベースなので入りやすい →iPhone SDKみたく「Objective-C」覚えなくて良い ・思想がMVCっぽくて、階層がわかりやすい →人によって作り方が大きく変わることがない感じ  これは重要 ・XMLの定義は、FlexのMXMLと基本概念は同じ →UIベースで定義できるのでスピーディー  ただ、第一印象では機能的に物足りない感(機能を知らないだけかも知れんが) ・データバインディングが面倒くさい感  →ソースベースでしかできないのかな?  「WebObjects」や「iPhone SDK」のInterfaceBuilder機能が搭載されれば、かなりスピーディーになると思う ・「自動ビルド」に設定しておくと、ビルドエラーが多発  →原因調べないと・・・ ・イベント監視が面倒くさそう  →モバイルフォンだから仕方ないが・・・
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel7 リリース
v-html でHTML表示する
Laravel で Nuxt.js を使ってみる(Docker環境)
Laravel で Vue コンポーネントを使う
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移