proxied SharedObjectとは

そもそもproxied SharedObjectとはO'reillyのProgramming Flash Communication ServerP315に載っているテクニックのことです。(マニュアルにも載っているのでテクニックというほどでもないですが)
あるFMSアプリケーションから別のFMSアプリケーションのSharedObjectをあたかも自分のSharedObjectかのように扱えるようにするのがproxied SharedObjectの素敵なところです。
以下の図でいうと、chat/_definst_のSharedObjectをproxyして各room1〜15でも同じSharedObjectを共有できるイメージです。ロビーからルームを作成するようなアプリケーションにおいて、ロビーからルームに居るユーザ一覧や、ルームからロビー並びに他のルームにいるユーザ一覧を参照するよ、みたいなシチュエーションで使えそうです。
親側では普通にSharedObjectを作成。子側は以下のようにSharedObject作成。SharedObject.getメソッドの第三引数へ親applicationへのNetConnectionを渡している点がポイント。

var nc = new NetConnection();
nc.connect("親applicationのURI");
var so = SharedObject.get("親のapplicationで作成したSharedObject名", isPersistent, nc);

f:id:naoto5959:20081219140355p:image

red5におけるSharedObjectの扱い

red5ではscopeごとにSharedObjectを作成・参照・更新出来るので、サーバ上で別scopeのSharedObjectを参照・更新することが可能です。ただし、クライアントから現在接続しているscope以外のscopeのSharedObjectへ接続することが出来ないようです。接続する方法を知っている方がいらっしゃったら教えていただきたいです。切実です。
また、FMSのようなConnectionを指定したproxied SharedObjectはサポートされていません。しかし、前述したような親アプリケーションと子アプリケーションでSharedObjectをShare(変な表現ですね)したい場合、どうしたら良いのでしょう。

考えてみたこと

  • 親のscopeで作成したSharedObjectが更新されたら各子のscopeのSharedObjectを更新する
  • 各子のscopeで作成したSharedObejctが更新されたら親のscopeのSharedObjectを更新する

これで、似たようなことが出来るような気がします。

やってみた

appStartでapplication scopeのSharedObjectを作成する。Listenerとして、changeやdeleteイベントが発生したときに各room scopeのSharedObjectへ値を通知するAppScopeListenerを登録する。
roomStartではroom scopeのSharedObjectを作成する。Listenerとして、コンストラクタでapplication scopeのSharedObjectを読み込む処理、changeやdeleteイベント発生時にapplication scopeのSharedObjectへ値を通知するRoomScopeListenerを登録する。
以下、例。とりあえずこれで動きましたが、色々と抜けている点があるので今後メンテナンスします。

Applicationクラスの抜粋
public class Application extends ApplicationAdapter {
    public static final String SO_NAME = "chat";
    
    private static IScope _appScope;
    
    private ISharedObject _soApp;
    
    public boolean appStart(IScope app) {
        _appScope = app;
        createSharedObject(_appScope, "roomList", false);
        _soAppListener = new AppScopeSOListener(this);
        _soApp = getSharedObject(_appScope, "roomList", false);
        _soApp.addSharedObjectListener(new AppScopeSOListener(this));
    }

    public boolean roomStart(IScope room) {
        createSharedObject(room, "roomList", false);
        ISharedObject soLobby = getSharedObject(room, "roomList");
        soLobby.addSharedObjectListener(new RoomScopeSOListener(soLobby, _soApp));
        return super.roomStart(room);
    }
}
AppScopeSOListenerの抜粋
public class AppScopeSOListener
        implements ISharedObjectListener {
    private ApplicationAdapter _app;
    
    public AppScopeSOListener(ApplicationAdapter app) {
        _app = app;
    }
    
    public void onSharedObjectUpdate(ISharedObjectBase so, String key, Object newValue) { 
        Iterator itr = _app.getChildScopeNames();
        while (itr.hasNext()) {
            String scopeName = (String)itr.next();
            scopeName = scopeName.replace(":", "");//bughack!
            IScope scope = _app.getChildScope(scopeName);
            ISharedObject childSO = _app.getSharedObject(scope, Application.SO_NAME, false);
            if (childSO.getAttribute(key) != newValue) {
                childSO.beginUpdate();
                childSO.setAttribute(key, newValue);
                childSO.endUpdate();
            }
        }
    }
    
    public void onSharedObjectDelete(ISharedObjectBase so, String key) { 
        Iterator itr = _app.getChildScopeNames();
        while (itr.hasNext()) {
            String scopeName = (String)itr.next();
            scopeName = scopeName.replace(":", "");//bughack!
            IScope scope = _app.getChildScope(scopeName);
            ISharedObject childSO = _app.getSharedObject(scope, Application.SO_NAME, false);
            if (childSO.hasAttribute(key)) {
                childSO.beginUpdate();
                childSO.removeAttribute(key);
                childSO.endUpdate();
            }
        }
    }
}
RoomScopeSOListenerの抜粋
public class RoomScopeSOListener
        implements ISharedObjectListener {
    private ISharedObject _appSO;
    
    public RoomScopeSOListener(ISharedObject roomSO, ISharedObject appSO) {
        _appSO = appSO;
        Set <String> soKeySet = _appSO.getAttributeNames();
        Iterator itr = soKeySet.iterator();
        while (itr.hasNext()) {
            String soKey = (String)itr.next();
            roomSO.setAttribute(soKey, appSO.getAttribute(soKey));
        }
    }

    public void onSharedObjectUpdate(ISharedObjectBase so, String key, Object newValue) { 
        if (_appSO.getAttribute(key) != newValue) {//[bug]hack!
            _appSO.beginUpdate();
            _appSO.setAttribute(key, newValue);
            _appSO.endUpdate();
        }
    }

    public void onSharedObjectDelete(ISharedObjectBase so, String key) { 
        if (_appSO.hasAttribute(key)) {
            _appSO.removeAttribute(key);
        }    
    }
}

私に現れた統合失調症の症状は、最初は強い不安感だった。

とにかく怖くて怖くて仕方がない。

 

なぜ不安感が出てきたか? というと

マンション上階の騒音だった。

 

住んでから20年近く静かだった私の住んでいるマンションだったが

上階にある夫婦が越してきてから騒音の館になった。

 

子供のいる夫婦ではない。50代の夫婦とその娘である。

この夫婦がウルサイ、ウルサイ。

 

この夫婦、マンションで音が響く、という認識がなかったらしい。

ふすま、網戸、ドア、全部音を立てて閉める。ついでに足音がひどい。

 

「静かにして下さい」と言いに行ったが、一向に静かにならず

業を煮やした私は、上階から音がするたびに棒で天井を突くようになる。

 

その天井を突く、という行為が悪いことだ、という意識が自分にあるので

その良心と、音に対する怒りで恐怖感を持つようになった。

 

その恐怖心が尋常ではないので、同じマンションに住む知人に勧められるまま

某手かざし系宗教に入信してしまった。

 

で、その手かざしを続けて受けるうちに、何かでスイッチが入ったように

頭の中に幻聴が聞こえるようになってしまった。

 

頭の中に聞こえる声は

「ロウソクの火が消えた」「うるしばらがいない」

というのが一番多かった。

 

酷い時は、平安時代の女と思われる声が和歌のようなものを読み続ける。

延々と30分聞こえたこともある。

 

男の声で

「雪の中で死んでいるお前を見ていた」というのもあった。

 

しゃべる声は男が3種類、女が1種類だった。

その時点で私は絶対に自分に霊が憑いた、と思った。

 

某手かざし系宗教に邁進すれば、霊が落ちるか、と思って

宗教に励んだが、症状は重くなるばかりだった。

 

私に現れた統合失調症の症状は、まずはじめに強い恐怖心

次に幻聴だった。某宗教に入らなければ、幻聴は聞こえなかったかもしれない。

 

ただ、私に出た症状は、幻聴と恐怖心だけだったので

他の暮らしは普通にできた。人付き合いとか、金の計算とか。

 

某宗教を止めた今では、あの宗教の正体は一体何だったのか?

と思うばかりである。

 

 

 

 

 

 

 

 

毎年恒例狭山公園のお花見ピクニック♪

いつもこの坂のとこって場所決めてま〜す♪

f:id:pinkstrawberryflavor:20160407121144j:image

うさちゃん:「なんていい天気だ!!」

寒かったです!!!!

f:id:pinkstrawberryflavor:20160407121201j:image

お弁当〜☆*:.。. o(≧▽≦)o .。.:*☆

f:id:pinkstrawberryflavor:20160407121258j:image

ベランダで育てたキャベツの芯からできたキャベツ!!(笑)

うさちゃん:「早く食べよ!!!じゃないとヨダレドレッシングかけちゃいます!!」

f:id:pinkstrawberryflavor:20160407121316j:image

エビ挟んで食べました〜(≧∇≦)
採れたてキャベツ美味しすぎます!!

f:id:pinkstrawberryflavor:20160407121340j:image

パリパリの海苔がいいと海苔を別に持ってきた旦那さん。。

アルミホイルにご飯はべったりくっつくし。。。

うさちゃん:「ふっ(笑)」

f:id:pinkstrawberryflavor:20160407121434j:image

しかも海苔の枚数足りないとか。。。(笑)
うさちゃん:「枚数くらい数えようよ!」

f:id:pinkstrawberryflavor:20160407121458j:image

デザートも〜☆*:.。. o(≧▽≦)o .。.:*☆

f:id:pinkstrawberryflavor:20160407121626j:image

毎年恒例の大階段でのグリコ!!

f:id:pinkstrawberryflavor:20160407121546j:image

今年は旦那さんの勝利!!(♯`∧´)

うさちゃん:「海苔足りなかったくせに!!」

f:id:pinkstrawberryflavor:20160407121608j:image


1日1ポチしていただけるととっても嬉しいです♪

↓ ↓ ↓


人形・ぬいぐるみランキングへ

ブログランキングの一度したポチ、一週間後にはなくなっちゃうんです。。。

いつもポチ!ありがとうございます♪

ちょっとダークなネコちゃんラインスタンプ販売中♪

f:id:pinkstrawberryflavor:20150626231246j:image

もしっ!気に入っていただけましたら♪是非!使ってください(≧∇≦)
「ダークなピンクにゃん」
かわいさを最大限に利用するダークなねこちゃんスタンプ。おしゃれとお菓子とねずみのぬいぐるみが大好きな猫ちゃんで、りすのようなモフモフしっぽがトレードマーク。
ストアURL↓
http://line.me/S/sticker/1093762

徳川のおうち

2018/07/03

ぷらっとこだまで帰宅するために、おかげ横丁からバスに乗り、近鉄の特急で名古屋まで行きました。

 

さぁて、5時間くらい暇です。

じゃ!名古屋城いこうかな、ということになりました。

 

観光バスに乗りこんで、到着。

どどーんとしゃちほこ。

 

f:id:Tsuna268:20170209154216j:image

 

 

本丸御殿の屏風に感動いたしました。

お土産に金鍔かって、ホロホロいただきます。

つな缶 

 

 

月間占い

2018/04/09

http://the-conses.com

 

f:id:wasabihoroscope:20170213220347j:image

CONSESさんで

月間占いはじめてました。

(※真ん中へんくらいにあります)

 

ううん。。

どうしようかな。。

読みにくいな…笑

 

悩みますん。

がんばりますん。

 

 

 

 

広瀬麻知子さん関連ツイート(動画、画像)Part270 です。

 JR西日本は22日、昨年12月11日に発生した建設中の摩耶駅(神戸市灘区)で足場が倒壊した事故の原因を「施工計画書の作業手順によらず、メッシュシートの撤去を行わなかったこと」などと近畿運輸局に報告したと発表した。足場解体の進捗状況や天候などもあり、解体の手順を現場の判断で変更していたという。JR西日本は、足場解体時の危険性をグループ会社などと共有するほか、安全指導を強化するとしている。

 JR西日本が公表した報告内容によると、足場は解体前に、足場を覆うメッシュシートを外すのが通常の作業手順。しかし事故発生日は、前日の足場の解体作業が想定通り進まなかったことから、足場を固定する方法を変更したにも関わらず、メッシュシートを外していなかった。このため風に対する耐性が通常の足場よりも低下していたことが足場の倒壊につながった。一方、現場の責任者で足場の固定方法を変更するよう指示したJR西日本のグループ会社の社員は、施工計画の変更に相当すると認識していなかった。

 JR西日本は現場を担当するグループ会社に対し、「まずシートを外す!」などを盛り込んだ「足場撤去時の三原則」を策定。施工会社などにも共有し、安全を徹底する対策を立てた。JR西日本も工事現場での日々の打ち合わせで、安全対策の確認を厳格化するとしている。

 

f:id:koyoblog:20170802232655j:plain

 メインバザールに戻った。騒がしい、暑苦しい、むさ苦しい。いろんな連中がごった返している。歩きだすなり、太ったおばさんが私の袖をひっつかんだ。何かのマークの布切れをシャツにつける気だ。

「な、なんだよ!?」

おばさんは無言。表情も変えない。ただ安全ピンの先をじっと見つめ、シャツに突き立てようとする。

「ちょ、ちょっと待ってよ」

このマーク、もちろんいらない。でもおばさん、真剣な目つきでなおも安全ピンの先を見つめる。引っ張ってみた。おばさん、引っ張り返す。また引っ張ってみた。また引っ張り返す。道の真ん中の攻防が始まった。額に汗を滲ませ、口を真一文字に閉じたまま、シャツを掴んだ指先はますます力強くなり、その目はますます針先に集中した。

「伸びるでしょうが」

それでも、おばさんは針をつき立てた。なんて強引な。なんて強情な。たかが布切れ一枚じゃないか(私にも言える)。ぐいぐい引っ張り合っているうち、ついに、シャツの袖はびろんびろんになった。こっちも袖口を引っ掴んだ。

「こーのーやーろー」

力を振り絞って、むむむむっと思いっきり引っ張った。

‘すぱっ’

ついにほどけた。私は勢い余って一回転し、向かい合ったおばさんを驚嘆の目で見た。しかし、おばさんは、何も言わない、表情も変えない。布切れをめぐる争いの余韻などに浸っていない。ぷいっと背を向けて次のターゲットに向かっていった。

‘何なんだ。いったい’

ことの次第を見ていた白人のおじさんと目が合った。彼は静かに首を振り、そして静かに微笑した。

 次に現れたのはバングラディッシュから来たという少女だ。とってもバングラディッシュは貧乏だからお金をちょうだい、と箱をぶらさげている。悲しい顔をしてプリーズと懇願する。ちょっと心を動かされた。でも、着ているものはボロボロではないし本当にバングラディッシュから来たのか分からないから、何もあげない。事情があるのだろうけど、物乞いにはならないで欲しい。

 次に現れたのは髭面の若い奴だ。

「ハイ!コンノート・プレイスでお前を見たぜ。さっき銀行に入ってったろ。俺が目の前にいたの覚えてるか」

いきなり叫んだ。でっかい声だ。“この人は現金持ってます”って宣伝するこたないだろう。

「知らないよ」

相手にしないのが一番、一番。

「嘘だ。覚えてるはずだ」

「しーらーなーい」

足早に歩き去った。

メインバザールでは、わずか二、三百メートル歩くうちに、これくらいのことが起きる。

 

母乳を増やしたいな!と思って調べていると、最初に出てくる情報が『たんぽぽ茶』じゃないでしょうか?私も1人目の子を産むまでは知らなかったのですが、授乳中のママには有名ですよね^^

 

たんぽぽ茶は『たんぽぽコーヒー』の名で販売されている物もあります。

どちらも主原料はタンポポの根の部分です。

たんぽぽ茶は根や葉の部分を乾燥させから細かく刻みます。そしてお茶のように煎じていれたもの。たんぽぽコーヒーはの根の部分を炒めてから、フィルターを通してコーヒーのように入れた物です。どちらもコーヒー豆は使用していないので、もちろんノンカフェインですよ(*^^*) 

 

f:id:namakouso:20161231120414j:image 

 

ミルニックの成分、西洋タンポポエキスが母乳を増やす理由とは?

f:id:namakouso:20161231120437j:plain

たんぽぽ茶やタンポポコーヒーと一緒で、母乳サプリ「ミルニック」にも西洋タンポポが使われています♪

西洋たんぽぽにはビタミンと鉄分が豊富に含まれています。また特に根の部分はビタミンとカリウムが豊富なので、利尿作用や解毒作用が見込めます。昔から世界各地で伝統医薬の自然薬として長く使用されてきました。

母乳分泌の効果が高いため、今ではたんぽぽ茶やたんぽぽコーヒーとして多くのお母さんに愛用されているんです(*^^*)

 

母乳は血液から作られるので、ドロドロ血液からサラサラ血液にする必要がありますよね?その為に水分をたくさん摂取することが重要です。実際に私も最低でも1日2リットル、夏場は3リットル以上水分を摂るように言われました!その水分摂取にたんぽぽ茶やたんぽぽコーヒーを取り入れると非常に効率が良いという事ですね♪

 

ただ、授乳期間は長いのです。だからたんぽぽ茶の味が好きな人には良いですが、あまり好きじゃない人は飽きてしまう・・・(><)

さらにお茶を入れる手間や冷ます手間、洗い物が増えるなどの理由でめんどうくさい!と続かなくなってしまう人が多いんです。…って私の話ですが(笑)

 

f:id:namakouso:20170127012220j:plain

 

『味があまり好きじゃない』 『お茶やコーヒーを毎日毎日何回も入れるのがめんどう』そんな私とあなたにおすすめなのが母乳サプリのミルニックです。

ミルニックはスティックタイプになっていて1日1本飲むだけ!水でそのまま飲めるから手間いらず(*^▽^*)

しかもヨーグルトにかけたり、豆乳やスープに入れたりとアレンジも自由自在。

もちろんそのまま水でサッと飲んでもOK!

『飽きることがなく簡単』これこそが長く続く秘訣じゃないでしょうか?

 

 

ミルニックは1本で1日に必要なたんぽぽエキスを充分摂取できます。それでだけでなく他にも母乳を増やすためは欠かせないラズベリーリーフやフェンネルも豊富!

たんぽぽ茶やたんぽぽコーヒーよりも簡単なのに、摂取できる栄養素は増える♪ありがたい限りです。

 

ただ、完璧に思えるミルニックも飲まなければ意味がありません(笑)1日1回飲むのもムリ…という方は購入しないでくださいね。

私は『毎朝朝食の時に飲む!』と決めて忘れることなく習慣にすることに成功しましたよ^ ^

 

ただいま人数限定で割引きキャンペーン中!4.980円のところ初回は1.980円で申込可能です。

私が実際に飲んでみて感じた効果と感想ははこちら↓

milnic-kuchikomi-hyouka.hatenadiary.jp

 

岩木山

2018/03/10

2/11、青森県西目屋村から見た岩木山


f:id:kazu_ma634:20170410230316j:image:w400
f:id:kazu_ma634:20170410230317j:image:w400
朝日を受けて赤く焼ける岩木山