jOpenSocialを試しつつjQuery事始めを目的としてmixiアプリを作成しました。
何を作ったかというと、うちで飼っている十姉妹のこいつのアテレコする、というとても個人的なアプリです。出来上がった画面がこちら。
f:id:naoto5959:20090504120904j:image
言いたいことも言えないこんな世の中で、心に秘めた叫びをこの小鳥に言わせようというアプリです。機能はこんな感じ。

  • 入力したメッセージを女子高生風のフォントにした画像にして小鳥の画像に重ねて表示
  • メッセージの画像と小鳥の画像を重ね合わせた画像をダウンロード
  • メッセージを音声に変換して再生

画像の重ね合わせイメージ

f:id:naoto5959:20090504141119p:image

アプリの概要図

今回のアプリの概要はこんな感じです。
f:id:naoto5959:20090504134518p:image

  1. javascriptライブラリを読み込む
  2. jOpenSocialを使いOpenSocialコンテナとやりとり
  3. 外部APIを使ってメッセージを画像(base64)に変換
  4. swfにメッセージと変換した画像(base64)を渡す
  5. 外部APIを使ってメッセージを音声に変換

javascriptライブラリに関して

jQueryとjOpenSocialは下記のサイトからダウンロード出来ます。

  • jQuery
  • jOpenSocial

それぞれのリファレンスはこちらになります。

  • jQuery 1.3.2日本語リファレンス
  • jOpenSocialドキュメント

さて、jOpenSocialはjQueryのpluginということで、まずはjQueryから学びます。
一通りの機能を本で学んでから、webサイトのリファレンスを参照するという流れで進めました。参考書籍は

  • jQueryプログラミング入門―Ajaxにも使えるJavaScriptライブラリ

参考サイトは前述の

  • jQuery 1.3.2日本語リファレンス

となります。大抵の機能はこの2つで理解できます。

次に、jQueryを使ってみて気になった点をあげていきます。

jQueryでprototype.jsでいうFunction.bindをしたい

opensocial applicationを作っていると、callback関数を指定する場面に頻繁に出くわします。そうした場面で指定するcallback関数のthisを変更したいことがあります。例えば、指定するcallback関数が特定のObjectに結びついていて、callback関数内でそのObjectにひもづく変数にアクセスしたいときなど。これに関しては下記の記事を参考にさせて頂きました。

Cerberus jQueryでprototype.jsのbind()

jQueryを読み込んだ後に以下のような拡張メソッドを定義して利用しました。

/**
 * jQueryでprototype.jsのFunction.bind()と同様の処理を行う拡張
 */
jQuery.scope = function(target,func){ return function() { return func.apply(target,arguments);}};

これでこんなことが出来るようになります。

var FinchEcho = function() {
  var storedKey = "eizokukaNoKey";
  var data = {};

  this.fetchStoredData = function() {
    $.opensocial.data.get(
      storedKey,
      "owner",
      $.scope(this, this.fetchStoredData_Result),
      false
    );
  };
  
  this.fetchStoredData_Result = function(res) {
    data = res;
    this.renderStoredData();
  };

  this.renderStoredData = function() {
    // なんたらかんたら
  };
};
var echo = FinchEcho();
echo.fetchStoredData();
jQueryでjson encodeをつかう

画像のダウンロード部分と音声出力の部分でFlashを使っているのですが、SWFへFlashVarsを渡す際にJSONでencodeしたObjectを渡しています。jQueryでjson encodeするにはjquery-jsonというjQueryのpluginを利用しました。
使い方はこんな感じです。

var flashvars = {
  param1:"hogehoge",
  param2:{
    "さらにオブジェクト"
  }
};
var json = $.toJSON(flashvars);

なお、swfobjectに渡す際にはURIエンコードして渡してあげないとIEで正常に値が渡せないので注意しましょう。

swfobject.embedSWF(
  "http://l.ead.me/echo/1/download.swf", "externalswf", "600", "50", "10.0.0",
  undefined,
  {
    json: encodeURIComponent(json) // URIエンコードしよう
  }, // flashvars
  {
     quality : high
  }, // params
  {
     id : "swf"
  } // attributes
);
jQueryでブラウザ判定

$.browserを使うだけで出来ました。どうやら1.3以降ではサポート外のようです。今回は、叫んだメッセージの画像の表示部分にdata schemeを利用しているのでIEでは元の画像を見にいく判定を付けるために使いました。data schemeのサポート判定が$.supportで出来れば、そちらに移行すべきですかね。

jQuery日本語リファレンス jQuery.browser

jOpenSocialを使いOpenSocialコンテナとやりとり

  • jOpenSocialドキュメント

を読めば使えると思います。標準のOpenSocial JavaScript APIを使ったことがあれば、このラクチンさ加減に衝撃を受けつつ、すぐに使いこなせるようになるかと思います。

気になった点をメモしておきます。

jOpenSocialでOwnerとViewerが一致するか調べる

mixiアプリではUserPrefが使えないので、Ownerのcanvasビューにおいて色々な設定を行うことが多いかと思います。その際に現在のOwnerとViewerが同じであるかの判定が必要となります。その際には$.opensocial.personを使います。Ownerの場合はsetting idで指定された要素を表示するには以下のようにします。便利ですね。

<div id="setting" style="display:none">
<form>
<input type="text" id="message" />
</form>
</div>
<script type="text/javascript">
var isOwner = false;
$.opensocial.person("OWNER", function(data) {
  if (data.isOwner() && data.isViewer()) {
    isOwner = true;
    $(#setting).show();
  }
});
</script>

外部APIを使ってメッセージを画像(base64)に変換

女子高生風のフォントは、

ふい字置き場

から「おひさまフォント」を使わせて頂きました。メッセージを女子高生風のフォントに変換するAPIはPHPとImageMagickを利用して作成しました。

validationとかを省略したソースはこんな感じ。

<?php
$size = $_REQUEST["size"];
$text = $_REQUEST["text"];
$raw = $_REQUEST["raw"];

$image = new Imagick();
$image->newImage(200, 350, "none");

$draw = new ImagickDraw();
$draw->setFont(OhisamaFontB11.ttf);
$draw->setFontSize($size);
$draw->setFillColor(#ffffff);
$draw->setTextEncoding(UTF-8);

$draw->annotation(0, $size, $text);

$image->drawImage($draw);
$image->setImageFormat(png);

if ($raw) {
    header(Content-type:image/png);
    echo $image;
} else {
    echo json_encode("data:image/png;base64," . base64_encode($image));
}

$draw->destroy();
$image->destroy();
?>

指定した文字列を画像を返す、または画像をbase64に変換して返す、という処理を行っています。data schemeに対応したブラウザでは、base64に変換した文字列をOpenSocialコンテナの永続化データに保存しておけば、毎回APIに変換してもらう必要がなくなります。ただし、data schemaに対応していないブラウザ(IEって知ってますか?)では毎回APIに変換してもらう必要があるため、この処理を行います。

swfにメッセージと変換した画像(base64)を渡す

今回作成したアプリではswfは

  • メッセージのダウンロード
  • メッセージの音声出力

に使います。まずはメッセージのダウンロードについて

メッセージのダウンロード

先に示した通り、今回のアプリでは画像を重ねて表示しているだけなので、それを保存するだけでは別々の画像となってしまいます。そこで、FLASHを使って、base64でエンコードされた画像と小鳥の画像を合成して出力してあげます。
そもそも画像を重ねて表示する部分でFLASH使えばいいんですが、今回は色々勉強用に無駄なことをしていることをご理解下さい。
base64でエンコードされた画像はFlashVarsを通して、受け取ります。JSONで渡しているのでデコードします。デコードは以下のように行います。JSON.encodeは、adobeのas3corelibを使っています。便利ですね.

var json:String = loaderInfo.parameters.json;
var param:Object = com.adobe.serialization.json.JSON.decode(decodeURIComponent(json));

base64でエンコードされた画像の読み込みはLoaderを使います。Base64 classも合わせて。

var _loaderMessage:Loader = new Loader();
_loaderMessage.loadBytes(new Base64(_encodedImage));
class Base64 extends ByteArray {
  private static const BASE64:Array = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,0,0,0,0,0];
  public function Base64(str:String) {
    var n:int, j:int;
    for(var i:int = 0; i < str.length && str.charAt(i) != "="; i++) {
      j = (j << 6) | BASE64[str.charCodeAt(i)];
      n += 6;
      while(n >= 8) {
        writeByte((j >> (n -= 8)) & 0xFF);
      }
    }
    position = 0;
  }
}

画像の合成では、BitmapDataのdrawとJPEGEncoderを使います。こんな感じ。JPEGEncoderもadobeのas3corelibです。もはや標準ライブラリ。

bitmapData.draw(_base); // _base(:Sprite)には重ね合わせた画像が入っている
var encoder:JPGEncoder = new com.adobe.images.JPGEncoder(80);
_byteArray = encoder.encode(bitmapData);

外部APIを使ってメッセージを音声に変換

これは、矢野さとるさんのAPIを利用しています。

文字音声変換API "TEXT2VOICE"

FLASHの実装は、以下の記事を参考にさせて頂きました。

alt 文字音声変換API「TEXT2VOICE」を使ってみる

まとめ

IEではdata schemeが利用出来ないので、フルFLASHで作った方が良かったのではないかという結論。でも色々勉強になったのでよしとします。
当mixiアプリを使ってみようという奇特な方は下記からどうぞ。

  • http://mixi.jp/view_appli.pl?id=2055

どんどんニトスキ挑戦します!

 

一番やってみたかった、このためにニトスキを買ってみたかったのです。

 

作り方は、クックパッドを参照しました。

 

①ニトスキは220度のオーブンで余熱。

②薄力粉60gは塩少々とふるっておく。

③別のボウルに室温に戻した卵1個と牛乳60mlとバニラエッセンス少々を混ぜておき、②と一緒にして混ぜ合わせる。

④①のニトスキにバター10gを溶かし③の液を入れて220度のオーブンで13〜15分で出来上がり。

 

 

どういう被写体が好みかっていうのは人それぞれどうしてもあるものだけど、その好みさえ取っ払ってしまえば、目に見えるものは大体カメラにも写る。

 

後はそれをどう切り取るかって事だけだ。

 

f:id:hibi-mae:20170616121556j:plain

 

いい撮影スポットないかな、なんて探してみると大抵感動が薄いのは見慣れた景色が多いから。

だから自分はどこかに撮りに行くというスタンスはあまりとらないんだけど、常にカメラはカバンの中に入っているので、撮りたいものに出くわした時に撮る。逆に日々撮り散らかしなんてタイトルでブログを更新しているくせに、一月撮らなかったなんて事だって無くはない。カバンに入っている重りはもはやスタンダードなので自分に課せた日々の重荷みたいなものだ。

 

f:id:hibi-mae:20170616121620j:plain

 

そんなスタンスだからこそ、偶然撮りたいものに出くわした時のテンションは半端ないものだ。

今日の写真は偶然通りかかり、グイグイ惹きつけられた離れの工場。

 

 

f:id:hibi-mae:20170616121640j:plain

 

 

 

f:id:hibi-mae:20170616121714j:plain

 

 

 

f:id:hibi-mae:20170616121721j:plain

 

何かを撮りに行くという点と点を結ぶ様な行動をとっていると、こういう場所は目に止まらない。

どこにでも存在している被写体に対してどう切り分けていけるか、それこそが自分の色になるんだと思う。

ねこ、キリンに乗って冒険に出かけます!!
うさちゃん!!もちろん一緒に来るよね!?

うさちゃん:「えっ!ねこと冒険!?お願い!背中のキーホルダー外して!!」

f:id:pinkstrawberryflavor:20161027225311j:image

今日から海賊です♪

うさちゃん:「降ろして〜!!!!」

f:id:pinkstrawberryflavor:20161027225329j:image

残念ながら沈没。。うさちゃん降りていいよ♪

うさちゃん:「お願い!今は降ろさないで!!」

f:id:pinkstrawberryflavor:20161027225349j:image

汽車なら安心だね♪

うさちゃん:「ねこ!運転席代わって!!俺運転するよ!!」

f:id:pinkstrawberryflavor:20161027225404j:image

ランキングに参加しています

はてブロを覗くついでに、一つだけ更新します
タイトルに「でも、まぁ。夏は嫌いかな。」とあるように

夏は大嫌いです。

理由

  • 熱い。
  • 虫がたかる。
  • 草が増える。
  • 猛暑により頭がどうにかなる。orなるやつがいる。

死ぬーー。

Qです。 ここ4,5日、滋賀県東近江地方はとても寒いです 室内と屋外の温度と湿度が分かる温湿度計 gomioki3.jpg 金曜日の13時の気温 この日は昼間も氷点下の真冬日でした でも室内は快適ですよ 部屋干ししているので加湿もばっちり さて、我が家の便利な温湿度計ですが、 かなり安くなってきましたね~

2カ所の温湿度測定が可能!簡易熱中症指標を表示!!【送料無料】シチズン コードレス温湿度計 ホ...

2カ所の温湿度測定が可能!簡易熱中症指標を表示!!【送料無料】シチズン コードレス温湿度計 ホ...
価格:6,384円(税込、送料込)

 送料込でこの値段ですからね~ コストパフォーマンスで考えると優秀です さて、この温湿度計は、カウンターの上に置いてあります gomioki2.jpg 撮影のために掃除をしなかったので、ごちゃごちゃ置いてありますね コルクボードは、コンセントからの配線を隠すために置いたようです コルクボードには、なんやら小物が飾ってありますが、100均でいろいろ買ってきたみたい。。。 コンセプトは不明です この壁の裏側にはキッチンがあって… gomioki1.jpg 特注品の「ゴミ箱置き場」が見えています 上にある棚とワンセットで、約4万円のオプションでした~。 高いですかね。 ただ、ゴミ箱置き場は非常に重宝していますよ ごみ箱を置く場所については、設計時点で考えておくことをお勧めします それから、最近話題の「生ごみをどうしているか…」 我が家では、上の写真の「作業用ごみ袋」と書いてある場所に、 小さなビニール袋が置いてあって、臭いが出るまでに撤去する、 という方式を採用しているようです。 三角コーナーは水垢の掃除が大変だし、シンクが狭くなるので嫁さんにはNGとのこと 他の人のブログを読んでいると、 キッチンにはいろんな流儀があるな~と感じます。 ま、使う本人が使いやすいのが一番ですね 当ブログを応援していただけるみなさま、 下記リンクのうちのどれか1つをクリックしていただけると嬉しいです にほんブログ村 住まいブログ 一戸建 一条工務店へ
にほんブログ村 にほんブログ村 芝生・芝生管理 にほんブログ村 一戸建 平屋住宅 人気ブログランキング

これまた・・

おじさんのモノマネのわりには似てる(笑)

 

メイクでここまでできるんですね〜

 

とは言うものの、

 

リアルアクションヒーローズ 天才?テリー伊藤 12インチアクションフィギュア

リアルアクションヒーローズ 天才?テリー伊藤 12インチアクションフィギュア

  • 出版社/メーカー: メディコムトイ
  • メディア:
  • この商品を含むブログを見る
 

 

やっぱり口の形っていうのは

メイクでもごまかせないようで。

 

たいていのモノマネメイクで

口は隠されています。

 

ということは、カッコイイとか

キレイとかいう要素に

 

口の形はけっこう影響するのかな?

 

 

テリー伊藤のモノマネメイク写真画像はこちら

f:id:AR30:20140306202952j:plain

 

 

『スッキリ‼』とテリーさん|ざわちんオフィシャルブログ Powered by Ameba

土曜日

2018/03/10

夕方、実家に御呼ばれしたのですが、手ぶらなのものなんなので、お土産にと砂銀(砂町銀座)へ中華揚を買いに行きました。

まあ、地元なので少し散策もしたりして他のですが、やっぱり生まれ育った所というのはいいものですね。

f:id:okaji:20130623180334j:plain

そんな感じで、こんな感じの空を見ながらノスタルジックな気分に浸ってました。

そんな週末の出来事。

では。

ストリートで演奏された曲をさらに習得


วงแห่ น้องจูน มิวสิก3

0:40-1:29部分

ピン音楽は大抵ストリートで演奏されます。

歩道も車道も関係ありません。どこでも爆音で演奏します。

2016年10月の今現在、タイ国王の死去で一般市民も服喪期間となっております。

このド派手な演奏はどうなったのでしょう?SNSでのライブ動画の数が減っているので控えられているのかもしれせん。

曲フレーズを弾こう

今回は1分弱の曲になります。

f:id:n-thai:20161020075446j:plain

 

三部構成となっています。

チューニングは1弦からGBGで演奏されています。

最後に

しんみりムードのタイですが、難しい人もいるかもしれませんが、以前のように元気で明るくド派手なタイに戻って欲しいですね。

ライブ情報

ヘブンアーティスト東京にピンの演奏で出演します。monaural-mini-plugというバンドです。

http://www.seikatubunka.metro.tokyo.jp/bunka/hasshin/heavenartist/files/0000000808/4p_heaven2016_omote_4C.pdf

10月23日(土)上野公園12時より(ウォーキングで演奏します、演奏時間未定)

10月24日(日)上野公園14時(児童遊園付近で30分程度演奏)16時(すり鉢山で30分程度演奏

 

にほんブログ村 音楽ブログ タイ音楽へ

 

ペンション ナティビダ (Pension Natividad) - ホテルズドットコム ジャパン | Hotels.com - Japan

 

ここは3泊予約して、1泊したあとに宿を変えました。

なぜか?

 

部屋でWi-Fiが繋がらなかったのです・・・。

ノマドしていてこれは致命的でした。価格・立地は良かったのですが。

Wi-Fi環境気にしない方ならオススメです。

部屋は清潔。バス・トイレは共用ということだったんですが、、部屋毎に割り当てられたバス・トイレがあるので、共用という言い方は間違いで、専用で使えます。

1泊2,000円ちょいで宿泊できますし、ドミトリーなら1,000円以下です。

f:id:shinpsonkun:20150810185034j:plain

タオルは備え付けではなく、レセプションで必要ならもらいます。

その際デポジット100ペソ。

安宿なのでシャンプー・歯ブラシなどのアメニティはないです。自分で用意しましょう。

ご飯は食べてないですが、キッチンからとても美味しそうな匂いがしていましたので、おそらく美味しいですww

f:id:shinpsonkun:20150810185248j:plain

Wi-Fiだけほんとうに残念。パブリックスペースでは写真の通り繋がります。

繋がりますが、速度は期待しないように。遅いです。

価格と立地が優先順位高い方にピッタリな宿でした。

ホテル予約は下記のエクスペディアで!

国内・海外ホテル最低価格保証

マニラまでの価格をチェック!

スカイスキャナー

 1泊したあとは安定のTune Hotel,現在の名前はRed Planetに移りました。

www.cambodia-guest-house.com

フィリピン 裏の歩き方

ランキングに参加しています。クリックをお願いします!

にほんブログ村 ベンチャーブログ 海外起業・海外独立へ
にほんブログ村


ゲストハウス ブログランキングへ