前回はjOpenSocialを使ったサンプルだったので、今回はopensocial-jqueryを使ってみます。といいつつ、せっかくなのでjOpenSocialとopensocial-jqueryとを比べながら色々試してみようと思います。(飽きるまでたまに書くかも)

mixiアプリでは今のところUserPrefが使えないので、UserPrefの代わりに永続化データを設定したりする画面に使うことが多いかと思います。そこで、opensocial-jqueryやら、jOpenSocialやらを用いてそういった画面を作ってみます。

まずは各ライブラリのドキュメント

  • jOpenSocialのドキュメント
  • opensocial-jqueryのドキュメント
  • jQuery日本語リファレンス

viewerがownerであるか確認する

例えば、あらかじめGadget XMLに以下のような設定用フォームがあるとします。

f:id:naoto5959:20090508214749p:image

今回はとても質素なフォームですが、jQueryを使えば色々なフォームの要素を楽に扱えると思います。

<div id="setting" style="display:none">
<fieldset>
  <legend>UserPrefっぽいフォーム</legend>
  <form>
    <dl>
    <dt><label for="user_setting1">user_setting1</label></dt>
    <dd><input type="text" id="user_setting1" name="user_setting1" /></dd>
    <dt><label for="user_setting2">user_setting2</label></dt>
    <dd><input type="text" id="user_setting2" name="user_setting2" /></dd>
    </dl>
    <input type="submit" value="設定" /><input type="reset" value="リセット" />
  </form>
</fieldset>
</div>

viewerがownerである場合、このフォームを表示する処理を記述してみましょう。どちらもViewerの情報を取得して、ownerかどうかをチェックする処理となります。

opensocial-jquery
$.getData(/people/@viewer/@self, {},
  function(people) {
    var person = people[0];  
    if (person.isOwner) {
      $(#setting).show();
    }
  }
);
jOpenSocial
$.opensocial.person("VIEWER",
  function(data) {
    if (data.isOwner()) {
      $(#setting).show();
  }
});

UserPrefの代わりに作ったのに、これではタダの空フォームが表示されるだけです。せっかくなので永続化データを取得してみましょう。

とはいえ、永続化データをどんなデータにするかを考えていません。まずはデータの設計を行います。今回は、フォームの値が2つありますので2つのキーを定義してあげればよさそうです。inputのidと同様に以下のキーを定義します。

  • user_setting1
  • user_setting2

永続化データを取得その1

opensocial-jquery
$.getData(/appdata/@viewer/@self, {},
  function(data) {
    $.each(data, function(userId, data) {
      $(#user_setting1).val(data.user_setting1);
      $(#user_setting2).val(data.user_setting2);
    });
  }
);
jOpenSocial

jOpenSocialでは一度に複数のキーを取得出来ないようなので、2回に分ける必要があります。
というのは誤りで、trunkのjOpenSocialを使うと出来ました。以下のスクリプトは2回に分けた場合。

$.opensocial.data.get(
  "user_setting1",
  "owner",
  function(data) {
    $(#user_setting1).val(data);
  },
  false
);

$.opensocial.data.get(
  "user_setting2",
  "owner",
  function(data) {
    $(#user_setting2).val(data);
  },
  false
);

1回で取得するには以下のように行うことが出来ました。

$.opensocial.data.get(
  ["user_setting1", "user_setting2"],
  "owner",
  function(data) {
    $(#user_setting1).val(data.user_setting1);
    $(#user_setting2).val(data.user_setting2);
  },
  false
);

もしくは、

$.opensocial.data.get(
  "*",
  "owner",
  function(data) {
    $(#user_setting1).val(data.user_setting1);
    $(#user_setting2).val(data.user_setting2);
  },
  false
);

ちょっと嫌ですね。これは永続化データの定義を変えるといいかも知れません。例えば以下のキーを定義します。

trunkのjOpenSocialでは複数のキーを取得出来るようなので、参考としてキーを2つに分けない方法として以下のキーを定義します。

  • user_setting

そして、値には

{
  user_setting1: "user_setting1のvalue",
  user_setting2: "user_setting2のvalue"
}

こうすると、先ほどの取得処理は以下のように変更できます。

永続化データを取得その2

opensocial-jquery
$.getData(/appdata/@viewer/@self, {},
  function(data) {
    $.each(data, function(userId, data) {
      $(#user_setting1).val(data.user_setting.user_setting1);
      $(#user_setting2).val(data.user_setting.user_setting2);
    });
  }
);
jOpenSocial
$.opensocial.data.get(
  "user_setting",
  "owner",
  function(data) {
    if (!data) return;
    $(#user_setting1).val(data.user_setting1);
    $(#user_setting2).val(data.user_setting2);
  },
  false
);

partuzaではこんな感じで値が入っています。
f:id:naoto5959:20090508215227p:image

この辺りの永続化データの持たせ方は、好みが分かれそうなところです。
とりあえず以下の説明では、user_settingキーを定義して、各キーを持ったObjectを永続化させた例を示します。
さて、お気づきかと思いますが、どちらの例でもデータが取得できません。なぜなら永続化データを保存していないからです。それでは永続化データを保存してみましょう。

永続化データを保存

opensocial-jquery
$.postData(/appdata/@viewer/@self, {
  user_setting: 
    {
      user_setting1: $(#user_setting1).val(),
      user_setting2: $(#user_setting2).val()
    },
  },
  function() {}
);
jOpenSocial
$.opensocial.data.set(
  "user_setting",
  {
    user_setting1: $(#user_setting1).val(),
    user_setting2: $(#user_setting2).val()
  },
  function() {}
);

これを[設定]ボタンをクリックした際に実行してあげれば、ちょっとしたユーザ設定の保存画面の完成です。

一旦まとめてみる

ここまでの処理をfunctionを使って、まとめるみると以下のようになります。ちょっと長いです。

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

var UserSettingSample = function() {
  var _isOwner = false;
  /**
   * isOwner
   * 現在のviewerがownerであるかどうかを示す
   */
  this.isOwner = function() {
    return _isOwner;
  };
  
  /**
   * initialize
   * 初回に実行するメソッド
   */
  this.initialize = function() {
    this.checkViewerIsOwner();
  };
  
  /**
   * 現在のviewerがownerであるかどうかを確認する
   */
  this.checkViewerIsOwner = function() {
    $.getData(/people/@viewer/@self, {}, $.scope(this, this.checkViewerIsOwner_Result));
  };
  
  this.checkViewerIsOwner_Result = function(people) {
    var person = people[0];  
    _isOwner = person.isOwner;
    if (this.isOwner()) {
      this.activateSetting();  
      this.fetchStoredData();
    }
  };
  
  /**
   * id:settingで囲まれたフォームを有効化する
   */
  this.activateSetting = function() {
    $("#setting").show();
    
    $("#setting input[type=submit]").bind("click", {that: this}, function(event) {
      event.preventDefault();
      event.data.that.putStoredData();
    });
  };
  
  /**
   * fetchStoredData
   * 永続化データを取得する
   */
  this.fetchStoredData = function() {
    $.getData(/appdata/@owner/@self, {}, $.scope(this, this.fetchStoredData_Result));
  };
  
  this.fetchStoredData_Result = function(data) {
    $.each(data, function(userId, data) {
      $(#user_setting1).val(data.user_setting.user_setting1);
      $(#user_setting2).val(data.user_setting.user_setting2);
    });
  };
  
  /**
   * putStoredData
   * 永続化データを保存する
   */
  this.putStoredData = function() {
    $.postData(/appdata/@viewer/@self, {
      user_setting: {
        user_setting1: $(#user_setting1).val(),
        user_setting2: $(#user_setting2).val()
      }
    }, function() {});
  };
};
jOpenSocial
/**
 * jOpenSocialバージョン
 */
/**
 * jQueryでprototype.jsのFunction.bind()と同様の処理を行う拡張
 */
jQuery.scope = function(target,func){ return function() { return func.apply(target,arguments);}};

var UserSettingSample = function() {
  var _isOwner = false;
  /**
   * isOwner
   * 現在のviewerがownerであるかどうかを示す
   */
  this.isOwner = function() {
    return _isOwner;
  };
  
  /**
   * initialize
   * 初回に実行するメソッド
   */
  this.initialize = function() {
    this.checkViewerIsOwner();
  };
  
  /**
   * 現在のviewerがownerであるかどうかを確認する
   */
  this.checkViewerIsOwner = function() {
    $.opensocial.person("VIEWER", $.scope(this, this.checkViewerIsOwner_Result));
  };
  
  this.checkViewerIsOwner_Result = function(data) {
    _isOwner = data.isOwner();
    if (this.isOwner()) {
      this.activateSetting();  
      this.fetchStoredData();
    }
  };
  
  /**
   * id:settingで囲まれたフォームを有効化する
   */
  this.activateSetting = function() {
    $("#setting").show();
    
    $("#setting input[type=submit]").bind("click", {that: this}, function(event) {
      event.preventDefault();
      event.data.that.putStoredData();
    });
  };
  
  /**
   * fetchStoredData
   * 永続化データを取得する
   */
  this.fetchStoredData = function() {
    $.opensocial.data.get(
      "user_setting",
      "owner",
      $.scope(this, this.fetchStoredData_Result),
      false
    );
  };
  
  this.fetchStoredData_Result = function(data) {
    console.info(data);
    if (!data) return;
    $(#user_setting1).val(data.user_setting1);
    $(#user_setting2).val(data.user_setting2);
  };
  
  /**
   * putStoredData
   * 永続化データを保存する
   */
  this.putStoredData = function() {
    
    $.opensocial.data.set(
      "user_setting",
      {
        user_setting1: $(#user_setting1).val(),
        user_setting2: $(#user_setting2).val()
      },
      $.scope(this, this.putStoredData_Result)
    );

  };
  
  this.putStoredData_Result = function(data) {
    
  };
  
};

いずれも

$(function() {
  var userSetting = UserSettingSample();
  userSetting.initialize();
}

というように実行すると先に示したような設定画面っぽい何かが表示されます。

submitボタンのハンドラについて

jOpenSocial、opensocial-jqueryではなくjQueryのお話なんですが、submitボタンのハンドラ設定の部分は他にもこんなやり方があります。

$.scopeを使う
$("#setting input[type=submit]").click($.scope(this, function(event) {
  event.preventDefault();
  this.putStoredData();
}));
var that = thisでスコープをアレする

ちょっと懐かしいやり方

var that = this;
$("#setting input[type=submit]").click(function(event) {
  event.preventDefault();
  that.putStoredData();
});

所感

今回の永続化の取得に関しては、複数のキーを簡単に取得出来るopensocial-jqueryのほうが好みだなぁと感じました。
今回の永続化の取得に関しては、最新版を使うとどちらも同じことが出来そうです。

ソースはこちら

  • opensocial-jquery
    • http://l.ead.me/opensocial-jquery/1/gadget.xml
    • http://l.ead.me/opensocial-jquery/1/js/opensocial-client-base.js
  • jOpenSocial
    • http://l.ead.me/jOpenSocial/1/gadget.xml
    • http://l.ead.me/jOpenSocial/1/js/opensocial-client-base.js

本日の名フレーズは 帝一の國 4巻より

 

「闘う相手が大きければ大きい程

   倒したい そう思うよ

    男の子だからね」

by 森園億人

 

男の子てw みたいな感じですけどそこは勘弁してくだされw

見た目草食系な森園パイセンがまさかの肉食系発言。

熱いねえ。

おれも陰キャだけど、内には熱い思い秘めてますから、なんか共感できるというか。

陰キャでも野心はすごいみたいな。

これを見てくれてる人の中にも陰キャな人がいるかもしれないけど、俺らでも一発逆転狙ってるからね。

陰キャラをなめないでくれたまえ。

いつかは俺たち陰キャ勢で、パリピどもに革命起こしたろ。

では、また次回。

 

    

 

 

(✿✪‿✪。)ノコンチャ♡

管理人です

 

剣術士クエストがんばってます。

f:id:PradaRichMan:20170607023748p:plainf:id:PradaRichMan:20170607024216p:plain

ナイトクエスト発生しましたw

f:id:PradaRichMan:20170607024604p:plain

早くこの装備したいな~・・・ナイトらしいデザインだな・・・wワクワクw

f:id:PradaRichMan:20170607024827p:plain

待望のナイトの証が手に入りました~ ( ^)o(^ )

f:id:PradaRichMan:20170607025444p:plain

これで、次の目指す目標がナイトLv50に・・・・やったぜ!

ということで

そろそろ落ちます・・・・w

See you

追記1

あと、マクロ組むのに参考にさせて頂いている、

こちらのサイトが便利でしたよ^^↓↓↓

 http://www52.atpages.jp/ff14macro/

 

追記2・・・

ホームページを作成したのでこちらも見てね^^

↓↓↓

http://yutaka-777.onamae.jp/

 

 

 

統合失調症という症状を理解しないで

または判っていても、世間体が悪いから

または、精神科に行くのを本人が嫌がるから

 

治療を受けさせないで、放っておくとどうなるでしょうか?

 

今日読んだ本に、例がでていました。

 

明治12年、「地上」という本を書いて

ベストセラーになった島田清次郎、という人のことです。

 

f:id:yume-oi:20160127214057j:plain

 

彼は小さい時から、頭が良かったが

祖父が相場に失敗して生活が苦しくなり

商業学校を退学する。

 

その後、清次郎は働きながら制作をし

「地上」が世に出て、時代の寵児になる。

 

が、続けて書いた作品と、彼の傲慢な態度で文壇に嫌われます。

そして、砂木海軍少将令嬢を誘拐した件により、社会的に葬られる。

 

大正13年、血まみれになって歩いている彼を挙動不審、ということで

警察が逮捕する。

 

そのまま精神病院に入院、ということになったが

病院での彼は、誰とも口をきかず、部屋の隅にすわっていたという。

そして、時々、自分の着物を引き裂いたり、大声でわめいていた。

 

最後は糞尿垂れ流しの状態で、臭気がすごかったという。

これが治療をしなかった場合の、統合失調症、慢性期の症状だという。

 

島田清次郎は結核にかかり30歳で死んだ。

 

若くして発症した、統合失調症は、50代、60代になると寛解する、というが

それは、ちゃんと治療をした場合である。

 

若いときに発症して、何の治療もしないで、そのままおけば慢性期の症状となり

人間としての人格も失われてしまう。

 

統合失調症は、昔と違い、治療薬がある。早く治療を始め

自分に合った薬を見付けて、穏やかに寛解へとすすむのが理想であると思う。

 

 

島田清次郎の例は、明治時代、統合失調症の薬が、まだなかった時代のことである、

 

月末報告

2018/07/03

先月の月末報告が出来ませんでした。今日人間DOCなので延期してました。今朝の数値を報告します。

体脂肪率 19.5

f:id:RyotA:20160918162243j:plain

柏木由紀がオシャレな髪型に

柏木由紀が投稿したツイートに載ってある髪型の写真がとてもオシャレ

f:id:reviewsandtips:20160824190951j:plain

Whether you and your little precious dog are travelling across town or you are planning to take him on a road-trip vacation, you need to be prepared. Hitting the road with your dog is the most exciting and joyful thing, but also it can become your nightmare. Last month, I had a similar trip with my baby Lucky. I planned everything, every single detail for the trip, I even imagined us drinking our morning coffees in the mountain cottage and after that running and goofing around. Well, this all became a reality, except one thing, driving in the car. I forgot his harness and belt, and I dont know what happened but after 10 minutes of driving he became so upset and stressed that I couldnt drive literally. Luckily I was still driving in the city, so a turned the car and went back home for my Luckys driving essentials.

 Animals in a car can get pretty stressed, and they can easily sustain injuries unless you have the right accessories to protect them.

 

To help you not make the same mistake like me, and make your trip more joyful, safer and less stressful, I have prepared for you a list of the best pet driving accessories. When it comes to buying pet accessories Sydney has lots of specialized stores that will ease your search and wander. Just make sure you buy from reliable one that has a plethora of high-quality pet products and accessories to offer you.

Pet Harnesses

I have always imagined me driving with my dog with his head and shoulders out of the car window, his tongue lolling and ears flapping of joy. The perfect image, right?! But no matter how much you and your pet love this driving freedom and joy, this is not the safest way for him to travel. Generally speaking, pet harnesses fit animals that are 4.5 kilograms or larger and almost all of them consist of a padded chest plate that can slip over the pets front legs and buckles to a standard seatbelt. The best thing is that your pet can sit comfortably in place during the whole car trip. However, you can invest also in an another type of harnesses that works also for dog walks and car trips.

 

f:id:reviewsandtips:20160824191032j:plain

Pet Barriers

In case your pet cant adapt to harness and he is clumsy and anxious (which is not my case), he may start to wander around your car, creating a distraction. Thus if he cant sit in one spot, you can give him more freedom to move (this is especially important when travelling on long distances) by investing in a pet barrier.

Pet barriers come in many varieties like wire gates, adjustable metal tubes, soft fabric mesh or even custom-made for your station wagon or SUV. Using a pet barrier will keep your pet from jumping into the front seat and distracting you.

Pet Emergency Travel Kit

Unexpected things can happen on trips like this, so just like taking the emergency kit for you, you will need to take or invest in a pet emergency kit as well. From nylon tote bags that come with a matchable collar and lead to the basic first aid supplies. Todays shops have a plethora of pet accessories and emergency kits that will aid your dog in any situation.

Think of this as a diaper bag for your baby and dont forget to take the essentials like a water dish, water, food, treats, pet waste bags, treats, antiseptic, tape, gauze, and the essential medications.

 

No matter whether you are going to short or long destinations, these essentials are a must. In case you still dont have them, do a thorough research for specialized pet accessories Sydney stores, and invest in the most quality ones.

結局エルドアンが勝ちました。不正があった、と反対派が嘆いているものの、その可能性も含めて今回の結果をある程度予想出来たのは私だけじゃないだろう。これからどうなっていくのやら。国民投票に勝った暁には騒がれてる死刑制度の導入だけでなく、トルコ国内で活動を展開している国際NGOの「監視」を強化する、対シリア紛争に対してより介入を強めていく、などとエルドアン大統領一派は言っていたので、他人事ではない。色々再調整が求められそう。

シャンルウルファは7対3で、大統領派が多かったです。

Jr新時代到来

2018/03/10

入籍前にちゃんとじいさんに許可もらってコンで報告する力也△

シンガポールにあるチャンギ国際空港のクリスフライヤー・ゴールドラウンジは第2ターミナルに1ヶ所、第3ターミナルに1ヶ所の合計2ヶ所ありますが、今回は第2ターミナルのクリスフライヤー・ゴールドラウンジのご紹介です。スターアライアンスゴールドメンバーが利用可能です。もちろんANAプラチナステイタス・SFC所有者も利用可能です。エコノミークラス利用時は前出のステイタスを持っていてもシルバークリス(ビジネスクラス)ラウンジは利用出来ず、クリスフライヤー・ゴールドラウンジの利用となります。

 

f:id:nonbirimile:20160826141730j:plain
場所は第2ターミナル、出国審査後(制限エリア内)の3階、地図で見ると一番左のシルバークリスラウンジ手前にあります。24時間オープンしています。

f:id:nonbirimile:20160826142142j:plain
入り口付近。お洒落なつくりです。

f:id:nonbirimile:20160826142717j:plain
シルバークリスラウンジ同様、こちらも落ち着いた雰囲気です。コンセントは日本規格OKのマルチ仕様になっています。

f:id:nonbirimile:20160826143908j:plain

f:id:nonbirimile:20160826143736j:plain

f:id:nonbirimile:20160826144426j:plain

f:id:nonbirimile:20160826144453j:plain
食事とドリンク類。シルバークリスラウンジと比べると、種類は多くありませんが満足出来るレベルだと思います。

まとめ

エコノミークラス搭乗時にスターアライアンスゴールドメンバーが利用出来るラウンジとしては、十分満足出来ると思います。24時間オープンしているので利用価値大ですが、唯一残念なのはシャワー設備がない事でしょうか。次回、シンガポール航空がメインとしている第3ターミナルにも訪れてみたいと思います。

f:id:nonbirimile:20160826145911j:plain

関連記事

nonbirimile.hateblo.jp