langs: ja ja ja ja ja zh ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja ja en ja ja ja ja en ja en en en ja ja en en ja ja en en ja en en ja en en en zh ja en ja en ja ja en ja ja en en ja ja ja ja en ja ja en en en ja ja en ja en ja ja ja en en ja en ja ja en en ja ja ja ja ja ja ja en ja en ja en ja en ja ja en en ja en en ja ja en en ja en ja en en ja ja en en en ja ja ja en ja ja ja ja ja en ja en en ja ja en ja en ja en ja ja zh zh ja pt ja zh ja ja de en ja ja ja en ja ja en en ja ja ja en de en en en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja en ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja zh ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja

text:
歩き進めていくと雪のような霜を発見しました。
写真だと寒そうですが、実際歩いていると体があったまってきてそんなに寒くないです。
もう少し歩いていくと…遠くにゴンドラが見えました。見えますか?
ゴンドラで$39~、あそこまで行けるみたいです。
ゴンドラだけでなく、ゴンドラ+ランチorディナーなどいろいろ種類があるみたいで、ランチを付けて行った人は「美味しかった!」と言ってました♪
家族連れやのんびりしたい方などには良さげですね。(ゴンドラツアーについてもう少し知りたい方はこちら!)
クイーンズタウンヒル(Queenstown Hill)のサミットは、ゴンドラよりも高いので
歩いていると、降りてくる人が「あともう少しだよー!」「トップはすごく綺麗ですよ!」
なんて声をかけてくれ、嬉しかったです。頑張って登るバネになりますね。
お手洗いもしたかったので、少々早歩きでスタスタ登っていきました。
アラサーになってまでも、こういうところに足を突っ込んでみたりするのが好きなので、ちょっとだけペチャペチャ遊んでまた登り始めました。
歩けば歩くほど、目に映る景色が美しくなっていきます。
人生も歩けば歩いていくほど、美しいものになっていくといいな♪
サミットに近づけば近づくほど、道が凍っていたり滑りやすいところがあったので、ハイキングブーツや濡れてもOKな靴をオススメ(特に冬)します。
この上ない頂上からの風景。
スタートしてから約1時間。
なんと美しいんでしょう。
冬の空気が澄んでいて、目の前に大きく広がる自然が眩しいくらい輝きを放っていました。
この絶景、TekapoのMt.Johnを思い出します!!!(Mt.Johnもめっちゃオススメです☆)
この風景をずっと眺めていたい気分でしたが、このとき私はお手洗いのことで頭の中の3分の1が支配されていました…(笑)
お手洗いのない頂上からの下山。
登っている途中から、お手洗いに行きたかった私はきっとサミットに行けばあるだろう、と思い信じて歩いてきたんです。
ですが実際到着して辺りを見回すも、登りきったご褒美にお手洗い!とはなりませんでした…(笑)
皆さん、クイーンズタウンヒルに登るときは、しっかりお手洗いを済ませてからにしましょう!!
次の目的地はお手洗いです。
写真だけバシバシ撮って、さっさと降りることに。
すると、あるカップルに写真を撮って欲しいと頼まれたので、代わりに撮ってもらうことに。
でもそんなことしている場合ではありません。
元来た道を下っていくと、行きに見た分かれ道にたどり着きました。
行きに通った道を通って戻るのはつまらないなと思い、行きとは別の道を通って下山することに。
ずーっと歩いていくと、、、見覚えのある景色が目の前に広がっていることに気づきました。
凍っている川…(写真右側)
さすがです。この日も方向音痴を発揮。
私がさっき見た分かれ道はピンク〇ではなく青〇のところだったんですね…
てっきりピンク〇の位置から下って青〇に向かっていると思っていました。
降りるどころか私はまた登ったんです(笑)
お手洗いから遠ざかりました。
確かによく考えてみると、下っているというより登っていた気もしなくもないです。。。
自分に呆れながら、今度こそと来た道をせっせせっせと下っていき、ようやくスタート地点に戻ってくることができました!
もっと頂上でのんびりしてから下山したかったです。
Queenstown Hillの基本情報!
※標高907mですが、ハイキングスタート地点の標高がやや高い為、スタート地点からサミットまでは約500mです!
※冬(だいたい6月~8月頃)は雪や氷があるかもしれないので、滑りやすい可能性あり。ハイキング用の靴、場合によってはスティックなどあると安心かもしれません。
※サミットや途中にお手洗いはありませんが、市街地から近いので降りて5分もしないくらいでどこかしらのお手洗いにはたどり着けます!
上に挙げた写真は冬ですが、季節が違うとまた自然が異なる姿を見せてくれると思います♪
訪れた方は是非感想聞かせて下さーい(^^)
クイーンズタウンのグルメも楽しみたい!という方はこちらの記事もチェック‼
ニュージーランド、クイーンズタウン(Queenstown)にある大人気ハンバーガー屋さんで泣きそうになった話。
並ばないと食べられないほど大人気!ニュージーランドにしかないハンバーガー屋さん。 ニュージーランド、南島にある小さいけど多くの観光客で...
wakutabi-boo.com
2018-08-06 19:05
いざ!ニュージーランドの海へ♪引き潮のタイミングで行くと見れる、モエラキボルダーズ(Moeraki Blouders)
ニュージーランドのココでしか見れない!Moeraki Blouders(モエラキボルダーズ) 満ち潮時に行きたいPancake Roc...
まさかのニュージーランドで人生初のドラッグテスト…
ドラッグテストやってきました。 ...大丈夫です。 ドラッグはやってません(笑) この前始めたアップル...
ニュージーランドのワーキングホリデーを見守ってくれたニュージーランドジェイド。
私が肌に離さず着けているKoru(コル)の話。 私のお守り、Koruはニュージーランドジェイド(マオリ語:ポウナム)の1つ。 Koruは...
「恐れるな!」、外国人が日本人女性に言いたいこと。
Don't be scared! 先日、いつものように英会話スクールで働いていた時のこと。 アメリカ出身の講師(女性)と話し...
子供から大人まで楽しめる★Pic’s Peanuts butter factory★
Nelsonにあるピーナツバター工場の無料見学ツアーに参加! ニュージーランドで意外と有名・人気のあるピーナツバター。Pi...
星いーっぱいの夜空を見にニュージーランド、テカポへ!!!
ニュージーランド南島に来たら必ず立ち寄りたい星空で有名な...テカポ★ ニュージーランドのテカポは日本人に大人気の観光スポットの1つで...
これはハマる★ニュージーランドのロトルアで出来るアクティビティ!
ニュージーランドのロトルアに来たならやりたい!楽しすぎるアクティビティ♪ このロトルアという小さな街はニュージーランドの北島にあります...
ニュージーランドで宅飲み!…でもお酒の買い出し前に確認すべきこと。
ニュージーランドで宅飲みするときの注意点。宅飲み前に知っておきたい♪ 日本でお酒を購入する時は、そんなに年齢確認が厳しかったりすること...
ニュージーランドの火山島・無人島、ランギトト島へフェリーで行ってきました。
ニュージーランドの北島、オークランドから簡単にフェリーで行ける無人島がここにある! その名も、、、ランギトト島!!! ん? ラン...
知らないと大変!ニュージーランドでお酒を飲みたい人必見!!!
★トラブルになる前に知っておこう★ニュージーランドと日本ではルールが違う!日本にいる感覚での飲酒はNG。 日本での私は、仕事帰りにコン...
★なんと便利なmake★"make+A+B"=「AをB(の状態)にさせる」
"early bird"って何?? "early bird"は得をする!?あなたも"early bird"にならなきゃ損!
英語で"beautiful"以外に「美しい」「綺麗」「素敵」と表現する他の言い方を知っていますか?
「(私が)~しましょうか?」と英語で相手に提案するとき。ネイティブが実際にめっちゃ使ってる覚えておきたい表現!
"past"と"to"を使った時間の表し方をわかりやすくまとめました!
ニュージーランドで評判のFergburger、のお隣さんにあるFergbakery
鼻づまりと高所恐怖症と闘ったスカイダイビング!!!
コメントをどうぞ コメントをキャンセル
メールアドレスが公開されることはありません。 * が付いている欄は必須項目です
上に表示された文字を入力してください。
新しいコメントをメールで通知
新しい投稿をメールで受け取る
「人生迷ったらわくわくする方へ!」
Hi, わく旅ぶーちゃんです!!!
国産(北海道)、アラサーのどさん子。
生まれつき人見知りです!
父親の仕事の都合で幼少期から転勤が多く、大学・就職は道外で、人生で合計9回お引越し済み。
現在はニュージーランドのワーホリから帰国!羊がうじゃうじゃいた田舎から、人間がうじゃうじゃいる東京で生活をスタート!
帰国後はわく旅サロンを毎月開催し、英語を話しながら国際交流の場をつくってます♪
英語が大好きになって18年。英検準1級合格、TOEIC735点。ちょっとくらい文法ミスっても伝わればそんなに気にしないやーつ。
国内・国外含めいろいろな街に住んで渡り歩いていく生活が目標♪
【好きなもの】つけ麺・焼き鳥・ブリトー・ジャガイモ・ジントニック・マルガリータ・白ワイン
【嫌いなもの】わさび・牛乳
ぶーちゃんについて詳しく知りたい方はこちら♪
★なんと便利なmake★”make+A+B”=「AをB(の状態)にさせる」
“early bird”って何?? “early bird”は得をする!?あなたも”early bird”にならなきゃ損!
英語で”beautiful”以外に「美しい」「綺麗」「素敵」と表現する他の言い方を知っていますか?
“past”と”to”を使った時間の表し方をわかりやすくまとめました!
ニュージーランドのお土産にはこれ!老若男女問わず、ジェイド(グリーンストーン)が断然オススメ
Follow me on Twitter:)
最近のぶーちゃんのつぶやき
「わく旅ぶーちゃん」が国際交流イベントを始めて3年!続けてきたから気づいた、気づいて良かった6つのこと。 05/03/2021
私とドリアンとマレーシアン。ドリアンはやっぱり強烈だった!?! 01/22/2021
★自分の名前を書道でアートしよう★「国際交流」×「書道」ワークショップ! 11/17/2020
「国際交流」×「ワイン」de ボジョレーヌーヴォー解禁!を祝って、楽しまんかーい?♡♡ 10/26/2020
★「国際交流」×「居酒屋」イベント★みんなでわいわい交流しましょう会! 09/29/2020
記事分類 カテゴリーを選択 Airinglishで学ぶー    ぶーちゃんの思う言語 お仕事 わく旅サロン ワーホリのすすめ    ニュージーランド編 宿    ニュージーランド    マレーシア    東京 旅・旅行    オーストラリア    ソロモン    ニュージーランド    マレーシア    兵庫    北海道    大阪    東京 日常ちらり。


document_lang: ja

langs: ja ja ja ja es ja en en ja ja ja es ja en en ja ja ja en ja en de ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ceb ja ja ja en ja ja en ja ja en ja ja en ja ja en ja ja en ja ja en ja ja en en ja en ja ja en zh ja ja ja ja ja ja ja ja ja ja ja ja ja en en ja ja ja ja ja ja ja ja ja ja ru ja ja ja ru ja de ja de ja de ja de ja en ja ja es ja en en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ru ja ja ja ru ja de ja de ja de ja de ja

text:
⑤ 出演者・お客様に対して体調不良時(発熱・咳など風邪症状のある人)は来店しない/出演しないことを求める ことをWebsiteにて明示すること
⑥ お客様に対して開演中は出来る限りマスク着用をお願いすること
→ この非常に厳しい状況の中でも、お客様の安全を第一に考え、あきらめずに徹底的に対策を実行しているライブハウス様に出演したい
(3) ライブ当日に自分自身に発熱・咳・倦怠感がある場合はドタキャンさせて頂く、このことを事前にライブハウス様にご説明の上ご了解を得ること
注)ドッチーズはアレルギー性の咳が既往症としてありたまに軽く咳が出る時がありますが、それと風邪のによる咳とは違いを認識出来ています
(4) ライブ告知等にてお客様に対して以下を徹底的に周知する
・発熱・咳・倦怠感がある場合のご来場はご遠慮頂くこと
・必ずマスク着用でご来場して頂くこと
コロナウィルスに関するDotchysライブの基本方針(ver2.0)決定に至った経緯
それでは、補足としてVer2.0に至った経緯をご説明いたします。
現状の新型コロナウィルスの状況認識
新型コロナウィルスとはどんなウィルスなのか
新型コロナウィルスがどんな性質を持つウィルスなのか、先月時点ではよくわからなかったのですが、ここにきて信憑性のある情報がたくさん出てきました。
その中で、ホリエモンが米国在住の感染症の専門家である峰宗太郎氏とskype対談した動画がわかりやすかったので私はこの動画を参考にしました。とてもわかりやすく新型コロナウィルスの性質が解説されていますのでみなさんも是非ご覧になってみてください。
新型コロナウィルスの特徴
峰宗太郎氏によると新型コロナウィルスとは、
(1) 感染しやすさはインフラエンザや普通の風邪なみに高い
(2) 毒性はSARSほどでもないがインフルエンザより高い
(3) 若年層は感染しても無症状~軽症で済む確率が高い、高齢者及び基礎疾患を持っている人は重症化しやすい、その理由はわかっていない
また若年層で基礎疾患がなくても重症化する例もある
(4) 致死率は2~3%、但し重症者数が医療キャパを超えると10%程度に上がる
(5) 感染は「飛沫感染」と「接触感染」で起きる
(6) 次の3つの要素が重なると感染の危険性が増す
「飛沫が飛びやすい環境-人と人との間隔が狭い」
(7) 潜伏期間は7日-14日、発症後発熱・だるさ・咳などの風邪症状があり、重症化する場合はそれが1週間続いた後に突然急激に重症化し、重症化した場合は人工呼吸器が必要になるケースが多い
色々調べて私が感じたこと
(1) 2月頃には所詮ただの風邪と同じようなものなどとも言われていましたが、やはり結構恐ろしいウィルスだということがわかった
(2) 2020年3月23日現在、日本では、日本の潔癖症習慣が効いたのかまだ感染者数1110人・死者42人で済んでいますが、感染力が普通の風邪やインフルエンザ並みにあるということは少しでも対策の手を緩めればイタリア・スペインと同様に爆発的な感染拡大となる可能性が高いと感じた、そうなると、若年層も含めて多くの人が感染し、重い後遺症が残る間質性肺炎にかかり重症化、死亡する そういう大きなリスクを秘めている、今が一番大切な時期と感じる
(3) インフルエンザ並みの感染力であれば、いずれは全員が感染するに違いない、しかし治療薬も予防ワクチンも無い今感染すると死のロシアンルーレットに参加することになる、なんとしても感染する時期を少しでも遅らせないといけないと思う
(3) 「密閉空間」「長時間人が集まる」「飛沫が飛びやすい環境-人と人との間隔が狭い」の3点セット対策がカギとなる
(4) 上記について私と同様の危機感を持って対策されているイベンター様やライブハウス様と一緒にライプ活動をやっていきたい
お客様の健康を守るなどとカッコのよいことを言っていますが、自分自身の健康も守るということも念頭に置いています。
もちろん、対策なんてしなくても大丈夫!! がんがんいこうぜ!! という考えで行動することを否定してはおりません。それぞれのライブハウス、ミュージシャンの考えを尊重するというのは一貫してそう思っています。
ただ、私は言いたい!!
茶化してもいけないし、思考停止になってもダメだし、あきらめないで真剣に考えて対策していきましょう!!
このボタンを押してdotchysをフォロー
ALLDiaryDotchys
youtube生放送でBeatlesのYesterdayを演奏したら速攻で著作権申し立てが来た件
1月3日の生放送で、BeatlesのYesterdayを歌わせて頂きました。そして、1月6日に申し立てが来ているという表示がYoutube Studio画面上に現れました。
あっちこっちドッチーズ9回目放送終了
あっちこっちドッチーズ9回目放送終了 こんばんは、青息吐息のDotchysです。 2020年1月15日の放送、無事?終了いたしました。 音の問題はなんとか第一段階はクリアしたかなと思います。これで3回連続うまくいきました。...
2021-11-3 佐々木伶ライブレポート
こんにちは、dotchysです 今回は久しぶりのライブ観戦記事です 京都アフタービートに佐々木伶さんのライブを聴きにいきました 佐々木伶ライブ 佐々木伶さんは、英国の香りがするシンガーソングライターです 英国の...
2021-11-13(土) 百田達人組ライブat住道Kukka
2021-11-13(土) 百田達人組ライブat住道Kukka こんにちは、Dotchysです 2021年11月13日の百田達人組のライブについて簡単にご紹介したいと思います 百田達人組は、ボーカル百田達人とピアノドッチー...
youtube liveの音質改善について その二
結局改善できたと思っていた放送もやはり失敗していました。失敗の原因は、、、
ドッチーズライブ 2022-3-21(祝) Afterbeat(京都)
こんにちは、dotchysです なんと今月2回目のドッチーズライブです ドッチーズは、3ケ月毎にライブを行うことにしているんですが、実は今月は2回目なのです  今月一回目の3月6日はまぁ言ってみれば「臨時のライブ」というカタチだった...
老人しか聴かないクラッシックの演奏会
高音域がちゃんと聞こえる若い人ほどクラッシックコンサートの素晴らしさを楽しめるのに現状では聴衆のほとんどが老人世代です。
The Last Waltz
みなさんこんにちは、Dotchysです。 今日は、京都シネマという小さな映画館でラストワルツを観てきました。 The Bandというとても有名なロックバンドの解散ライブのドキュメンタリーです。 平日の午前11時...
TikTokのプロモーション(宣伝)に2,400円投資した結果
TikTokのプロモーション(宣伝)に2,400円投資した結果 こんにちは、Dotchysです 最近の若い人たちのSNSの中心といわれているTikTok 調べもの、How toやお店の検索などもすべてTikTokでやってしまうらしい ...
2021-10-5 百田達人組ライブat難波屋仮店舗
百田達人組ライブ 2021/10/5 難波屋仮店舗 こんにちは、Dotchysです 今年からユニット活動を開始した「百田達人組」の難波屋のライブの様子を書いていこうと思います 場所は大阪西成区の難波屋仮店舗 予定では...
効果音ポンだしくんのインストール
コロナ以前に体調イマイチで3月のライブ全滅
メッセージ メッセージ
dotchysへメッセージをお願いします♩ コメントをキャンセル
メールアドレスが公開されることはありません。 * が付いている欄は必須項目です
Dotchysへのメッセージ、記事へのご感想、ご意見、ご質問などメッセージをお願いいたします!
数字で答えを入力してください:
three × 5 =
このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。
ゆゑん秋のスリーディズ3日目 シルバーウイングス(祇園)2022年9月29日
ゆゑん秋のスリーディズ2日目 難波屋(西成)2022年9月29日
ゆゑん秋のスリーディズ一日目 lausbub(北新地)2022年9月29日
TikTokのプロモーション(宣伝)に2,400円投資した結果2022年8月23日
Dotchysライブwith 梶原匠 2022-4-3 Afterbeat2022年7月21日
アーカイブ月を選択 2022年9月  (3) 2022年8月  (1) 2022年7月  (1) 2022年6月  (1) 2022年3月  (6) 2022年1月  (4) 2021年12月  (1) 2021年11月  (6) 2021年10月  (3) 2021年9月  (1) 2021年8月  (3) 2021年7月  (4) 2021年6月  (1) 2020年11月  (1) 2020年10月  (1) 2020年7月  (2) 2020年4月  (3) 2020年3月  (4) 2020年2月  (6) 2020年1月  (12) 2019年12月  (12) 2019年10月  (1) 2019年9月  (1) 2019年8月  (2) 2019年7月  (2) 2019年2月  (3)
カテゴリーカテゴリーを選択ALL  (81)Diary  (56)Dotchys  (31)Instruments  (7)Live  (44)   Broadcasting  (6)   Dotchys Live Report  (9)   Live Report  (8)   Livehouse  (2)   ゆゑん Live Report  (12)   百田達人組 Live Report  (7)Music  (1)   Music Industry  (1)Recording  (1)あっちこっちドッチーズ  (8)未分類  (2)生配信  (5)
人気の記事 過去7日間PV
OBSで音声をモニタリングしたい時にヤルこと135 views
2020.07.192021.12.08
OBSでオーディオインターフェイスからの多チャンネルの音声を同時に使用したい場合の対応135 views
2021.06.042021.06.26
生放送で効果音をポン出しする方法について90 views
2020.03.222021.04.12
効果音ポンだしくんのインストール75 views
2020.03.222020.10.07
生放送Tips OBS Tips 映像を半透明にする38 views
2020.01.172020.10.07
Copyright © 2018-2022 ドッチーズ All Rights Reserved.
ゆゑん秋のスリーディズ3日目 シルバーウイングス(祇園)2022年9月29日
ゆゑん秋のスリーディズ2日目 難波屋(西成)2022年9月29日
ゆゑん秋のスリーディズ一日目 lausbub(北新地)2022年9月29日
TikTokのプロモーション(宣伝)に2,400円投資した結果2022年8月23日
Dotchysライブwith 梶原匠 2022-4-3 Afterbeat2022年7月21日
アーカイブ月を選択 2022年9月  (3) 2022年8月  (1) 2022年7月  (1) 2022年6月  (1) 2022年3月  (6) 2022年1月  (4) 2021年12月  (1) 2021年11月  (6) 2021年10月  (3) 2021年9月  (1) 2021年8月  (3) 2021年7月  (4) 2021年6月  (1) 2020年11月  (1) 2020年10月  (1) 2020年7月  (2) 2020年4月  (3) 2020年3月  (4) 2020年2月  (6) 2020年1月  (12) 2019年12月  (12) 2019年10月  (1) 2019年9月  (1) 2019年8月  (2) 2019年7月  (2) 2019年2月  (3)
カテゴリーカテゴリーを選択ALL  (81)Diary  (56)Dotchys  (31)Instruments  (7)Live  (44)   Broadcasting  (6)   Dotchys Live Report  (9)   Live Report  (8)   Livehouse  (2)   ゆゑん Live Report  (12)   百田達人組 Live Report  (7)Music  (1)   Music Industry  (1)Recording  (1)あっちこっちドッチーズ  (8)未分類  (2)生配信  (5)
人気の記事 過去7日間PV
OBSで音声をモニタリングしたい時にヤルこと135 views
2020.07.192021.12.08
OBSでオーディオインターフェイスからの多チャンネルの音声を同時に使用したい場合の対応135 views


langs: ja ja ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en en uk en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja zh ja ja zh ja ja ja zh ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en en id ja ja ja ja ja ja ja ja ja ja ja ja ja en en ja en ja ja ja ja

text:
2020年11・12月発売のキンプリメンバーが出ている雑誌の表紙を眺めてみると… 6thシングル『I promise』発売で、グループの表紙があったり。 舞台『THE DREAM BOYS』関連で、Wゆうた(岸優太さん、 […]
キンプリの2018年のライブDVDが好きすぎる… すべてにおいて私の何かに刺さる… 一番リピートしているのが「Wake me up」。 私の中で、完璧と言っても過言ではない… マジでドキドキする! 高揚感がヤバい! &n […]
2020/12/16、キンプリの6thシングルが発売! 『I promise』 収録されてる楽曲は全曲「冬」をテーマに作られた曲とのこと。 表題曲の「I promise」だけじゃない! カップリングもめちゃくちゃいい! […]
2020年12月14日 / 最終更新日時 : 2022年6月1日 なっつ 情報まとめ【KP】
King & Prince(キンプリ)のメンバーが出演中のCM情報まとめ
【最終更新日:2021/6/9】   キンプリが出演しているCMをまとめたい! 公式HPとか、CMソングとか、公式動画とか… パッと見てわかるようにしておきたい!   ということで、King & Pr […]
2020年12月12日 / 最終更新日時 : 2021年12月26日 なっつ メンバー分析【KP】
神企画。車を運転するKing & Prince。キンプリのFC動画「ドライブ旅」の感想
車を運転するKing & Princeがかっこよすぎる! 車内でのトークが楽しすぎる!! とにかくすばらしい!!! ということで、リピートが止まらない! 最高!!!   広告   202 […]
2020年12月6日 / 最終更新日時 : 2020年12月6日 なっつ ジャニーズ事務所
体調不良の原因をタレントの性格とするジャニーズ事務所。芸能活動休止の「マリウス葉(Sexy Zone)に関するご報告」の問題点
2020/12/2、Sexy Zoneのマリウス葉さんが体調不良のため一定期間芸能活動を休止する、と公になりました。 芸能活動を休止。 そのこと自体は残念なことではありますが、ゆっくり休んでもらいたいな、と思っています。 […]
2020年12月2日 / 最終更新日時 : 2021年5月24日 なっつ ジャニーズ事務所
キンプリのMVとFC動画が同日同時刻に公開された件(2020/12/1正午)
【この記事は、動画公開のタイミングに関する内容となります。キンプリのFC動画「ドライブ旅」の内容の感想はこちら】   なぜ同時に動画を公開したのか? キンプリファンが見る動画が分散してしまう。 ・・・納得できな […]
感想文(本・映画など)
King & Prince(キンプリ)
(C) 2018 人生はひつまぶし(著作権について)
※当ブログはすべて個人的な感想となります。
正確な情報はご自身でご確認ください。
2018年に公開を開始した当サイト「人生はひつまぶし」において、掲載している情報の著作権は放棄しておりません。
無断での転載・引用等はくれぐれもご注意ください。
詳しくは、『(C) 2018 人生はひつまぶし(著作権について)』を参照ください。
Copyright © 人生はひつまぶし All Rights Reserved.
Powered by WordPress with Lightning Theme & VK All in One Expansion Unit by Vektor,Inc. technology.


langs: ja ja ja ja ja ja en ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en es es en ja ja ja ja ja ja ja en ja ja ja ja ja en ja en ja en ja en ja ja en en ja en ja ja ja ja ja en ja ja ja nl ja ja en ja ja ja ja ja ja ja ja ja ja es en ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja

text:
2つ目は「読み手の知識レベルの仮定」です。
言い方が悪かもしてませんが、読み手(あなたの記事を読みに来た人)の知識量が低ければ低い程、それに伴ってあなたが説明しなければならない内容というものが増えていきます。
あなたが当たり前だと思っているような内容であっても、読み手にとっては未知の領域の話であるというのはよくあることです。
トレンドブログにやってくる人を想像してもらえば分かるかと思いますが、とある事象が話題になっていること自体は知っているのですが、内容は詳しく分からないから、もっと深く知るためにわざわざキーワードを入力して情報を得ようとしているわけです。
そのような検索者の需要に応えるためにも、何も分からない相手でも理解できるように「濃い記事」ですとか「長文」が必要になります。
しかしながら、ただ闇雲に「何も分からない人」という仮定を立ててしまうと、「どこから説明すれば良いのか分からない」というような状態に陥ってしまい作業の手が止まってしまいます。
それは、「何が分からないのか」、「どこまで知っているのか」という視点で読み手のレベル感を仮定します。
これさえできれば、あとはトレンドを記事を作成するときに、「○○ということがあった(事実の説明)」→「なぜかというと××だからだ(深堀1)」→「その理由は△△であり(深堀2)」→「その背景には□□がある(深堀3)」→・・・のように、仮定した読み手の知識レベルに合わせて深堀をしていきます。
読み手の知識レベルを低く設定すればするほど、あなたの文章の濃さが問われてきますが、他のトレンドアフィリエイトサイトを圧倒することができますし、濃い記事というのは、滞在時間の増加につながり、Googleからの評価が向上し、上位表示につながっていきます。
最後に、僕が使っている雛形や読み手の知識レベルの仮定について説明していきます。
まず、読み手の知識レベルの仮定ですが、これは「名前(名称、単語)は知っている」や「テレビで見た(聞いた)ことあるけどよく分からない」というレベルまで下げています。
その理由としては、上述した通り読み手の知識レベルが低ければ低いほど、説明しなければならないことが増えていきますので、文章量が稼げますし、その方が記事を書く際に情報の取捨選択をしなくていいからです。(文章を考える時間を少しでも減らしたいので)
次に、文章構成の雛形ですが、こちらの記事にも書いた通り、「リード文」「見出し」「本文」を使っています。ここで、1つ工夫しているのは、タイトルをつける際に、メインとなるキーワードの他に3〜4つのサブキーワードを利用してタイトルをつけます。そして、サブキーワードの数だけ、「見出し」を作成して、本文中で詳しく説明していきます。
その理由ですが、第1に検索者に有益な情報を提供するためにも、タイトルに使ったキーワードは責任を持って説明をするということ。次に、文章の骨組みを先に作ることで作業の負荷を軽減させることです。
僕が、記事を作成する際は、常に有益な情報の提供と作業の効率化を並行して考えていますので参考にしてみてください。
トレンドアフィリエイト
この記事が気に入ったら
最新記事をお届けします。
あなたのシェアが僕の笑顔の源です
コメントを残す コメントをキャンセル
メールアドレスが公開されることはありません。 * が付いている欄は必須項目です
トレンドアフィリエイトでアクセスを集めるタイトルの決め方
トレンドアフィリエイトで効率よくPVを稼ぐ横展開戦略とは?
RECOMMENDこちらの記事も人気です。
トレンドアフィリエイト 2016.5.29
Googleアドセンスの始め方【審査通過までの期間やコツ】
トレンドアフィリエイト 2016.11.26
トレンドアフィリエイトでアイキャッチ画像が重要な理由
トレンドアフィリエイト 2016.10.9
トレンドアフィリエイトで批判的なコメントが来たら削除すべきか?
トレンドアフィリエイト 2018.1.14
芸能トレンドサイトと相性抜群のVOD(ビデオオンデマンド)戦略
トレンドアフィリエイト 2017.10.29
【教材不要】初心者がトレンドアフィリエイトを始める方法まとめ
トレンドアフィリエイト 2016.5.8
トレンドアフィリエイトとは?初心者にも分かる概要解説
トレンドアフィリエイト 2016.6.19
トレンドアフィリエイトで必要な文章量は?文字数を稼ぐコツ
トレンドアフィリエイト 2016.9.23
トレンドアフィリエイトで初心者が稼ぐために必要なことは?
ABOUTこの記事をかいた人
アフィリエイトは副業でやってます。「まったり自由に生きる」がモットーなのでブログ名をliberty-life-blogにしました。   汚い居酒屋探し、フットサル、お散歩、筋トレ   足首を無限にポキポキ鳴らせます。
NEW POSTこのライターの最新記事
コラム・バックナンバー 2018.9.15
特化型サイトの考え方・ジャンル選定について
コラム・バックナンバー 2018.9.12
MacのWordで「かな」がスペースになるときの対処方法は「command」…
コラム・バックナンバー 2018.6.20
やる気スイッチなんか捨ててしまえ
WordPress 2018.6.9
【コピペでOK】ダブルレクタングルのやりかた!記事下にレクタングルを横並びに…
HN:きゃぷてん(20代)
国立大理系 → 一部上場企業
アフィリエイトは副業でやってます。「まったり自由に生きる」がモットーなのでブログ名をliberty-life-blogにしました。
汚い居酒屋探し、フットサル、お散歩、筋トレ(チャーム筋肉は大腿四頭筋です)
足首を無限にポキポキ鳴らせます。
・レバテックキャリアに掲載されました
・70記事で月収10万円
・ほとんど放置して月収26万円
・1日で最高60000PV
・アクセス過多で某サーバーに怒られる(笑)
・投資初日に資産の10%を溶かす
・コツコツ貯めた2カ月分の利益が大暴落で消滅
ネットビジネスで独立を目指すきゃぷてんのブログ
Youtubeチャンネル
いつもご視聴していただきありがとうございます!
作成してほしい動画講義がありましたら、下のリンクからリクエストしてくださいね。
【コピペでOK】プライバシーポリシーの書き方|AdSense・Analytics対策 に あんこ より
【コピペでOK】プライバシーポリシーの書き方|AdSense・Analytics対策 に KIK より
【コピペでOK】プライバシーポリシーの書き方|AdSense・Analytics対策 に shiwayuri より
【コピペでOK】プライバシーポリシーの書き方|AdSense・Analytics対策 に たく より
【コピペでOK】プライバシーポリシーの書き方|AdSense・Analytics対策 に おかっぱちゃん より
応援クリックありがとうございます!
Tweets by kyaputen_info
コラム・バックナンバー
ツール・サービス・デザイン
トレンドアフィリエイト
特化型サイトの考え方・ジャンル選定について 2018.09.15
MacのWordで「かな」がスペースになるときの対処方法は「command」+「shift」+「J」 2018.09.12
やる気スイッチなんか捨ててしまえ 2018.06.20
【コピペでOK】ダブルレクタングルのやりかた!記事下にレクタングルを横並びにする方法をCSSなしで実現する 2018.06.09
WordPressで簡単に目次を作れるプラグイン【Table of Contents Plus】の設定と使い方 2018.06.02
特定商取引法に基づく表示
©Copyright2019 アフィリエイトで会社の外にも収入源を【liberty-life-blog】.All Rights Reserved.


langs: ja ja ja ja en ja en ja ja zh ja ja ja ja ja ja en ja en ja en ja ja ja ja en

text:
2011年 2013年 2014年 2015年     4月   5月   6月   7月   8月   9月  10月  11月  12月   1月   2月   3月    上旬   中旬   下旬     5日間  6日間  7日間  8日間  9日間 10日間 11日間 12日間 13日間 14日間 15日間以上
初めて  2回目  3回目  4回目  5回目  6回目  7回目  8回目  9回目 10回目 11回以上
− どこに泊まりましたか?部屋割りはどんな風にしましたか。困ったことや失敗したこと、良かったことなどお教え下さい。
−どんなお店で食事をされましたか?困ったことや失敗したこと、良かったことなど、お教え下さい。 お子さんと一緒にニューヨークを御訪れる皆さんにアドバイスを下さい。
−どこに行きましたか。お子さん達ののリクエストは?市内観光で困ったことや失敗したこと、オススメのスポットを教え下さい。
■ お子さん達と一緒に行ったニューヨークの旅をふりかえって
−お子さん達とのNY旅行はいかがでしたか。一緒に歩いたNYの街の感想、想い出に残る旅のワンシーン、心残りなど教えて下さい。今回の旅行を終えて、同じ様にお子さん達ととニューヨーク旅行をしようと計画している方たちにアドバイスを!


langs: ja tr ja ja id ja zh en ru ja zh fr zh zh ja ja ja ja ja ja ja ja ja ja ja ja ja

text:
198『豚と対話』―「君はこちらでよくも四十数年も頑張ってきたな」 | 知道中国 | 知道中国~本当の中国がココにある~
筆者紹介PROFILE
講演・取材依頼CONTACT
198『豚と対話』―「君はこちらでよくも四十数年も頑張ってきたな」
198『豚と対話』―「君はこちらでよくも四十数年も頑張ってきたな」
投稿日 : 2008年12月2日 | カテゴリー : 知道中国
【知道中国 198回】                             〇八・十ニ・初二
『豚と対話』―「君はこちらでよくも四十数年も頑張ってきたな」
『豚と対話ができたころ』(楊威理 岩波現代ライブラリー 1994年)
「一九二五年、台北近郊の古い町・台湾のナポリと呼ばれる淡水に生まれた」著者は、「学問は日本でしっかり身に付けよ、将来は中国大陸に戻って大政治家になれ」との父親の期待を一身に背負い、仙台の東北帝国大学医学部へ。在学中に日本は敗戦。「祖国再建の熱情に駆られ」、1946年には台湾経由で中国大陸に渡り北京大学に入学し経済学を学ぶ。「中国で搾取のない社会を造り得るのは、この党よりほかにない」と固く信じ、共産党に入党。24歳で党中央委員会直属の中央編訳局図書館長に就任。以来、64歳の退職まで「万年館長」を続けた共産党政権下での40年余の痛恨、悔恨、諧謔の日々を、赤裸々に語りだす。
著者が「この党よりほかにない」と思い込んだ「中国共産党統治下の社会では、・・・あらゆる政治事件に自己の態度を表明することが強制される。もちろん、その態度は共産党中央の態度と一致するようにと、有形無形の圧力がかかってくる。不一致の態度をとれば、不都合なことがやってくる。その典型的な例が文革であろう」。
10数年間も館長に留められたたまま鬱々と日を送り中央編訳局の「上司を恨み、同僚を妬んでいた」彼は「復讐の念に燃え」、文革を報復の好機と捉えて過激に造反活動を展開し、ほどなく「編訳局の文革の指導者となる」。だが、69年2月に古参幹部が文革を批判した頃から彼の立場は激変する。「『革命幹部』から『人民の敵』になっ」てしまう。そこで「北京の南、遥か千三百キロの寒村」に送られ幹部学校という名の「国家公務員の矯正労働の場所」に放り込まれた。71年からの2年間、彼は50頭ほどの豚の飼育係りを強制される。やがて豚の「言わんとすることが分かるようにな」り「豚どもとの対話」がはじまった。
この本で興味深いのは文革中の闘争の凄まじさについての記述もさることながら、やはり農村の姿だろう。63年の段階で早くも「農村の幹部は悪辣を極め、汚職、窃盗、蓄妾などは朝飯前のこと、投機買占めが流行し、高利貸しが流行り、一口でいえば、農村は生き地獄そのものであった」。そして改革・開放後の農村は「一口で言えば、県長、郡長、町長、村長と、既に一つの搾取系列ができており、この系列がまた省の中枢と北京の中央に繋がっている」。文革を経ても改革・開放されても、農村の支配構造は牢固として変わらない。
文革も終わり元の職場に戻るが、「人民と甘苦をともにする考えなんぞ、高官の頭の中にはもう微塵もなく」、「ロボットより低脳なる人間」にならなければ生きられない社会に疲れ果て嫌気が募るばかり。1988年の秋に訪中した日本の友人は、「こんなに魅力ある中国、こんなにつまらない日本。君はなんで悩んでいるのだい?」。そこで、「一週間ぐらい名所旧跡を見るのはいいがね。
三週間でいいから住んでごらん」と答える。「その翌年、天安門事件の最中に一高出身の台湾の友人が訪中し、三週間滞在した。彼曰く『君はこちらでよくも四十数年も頑張ってきたな!大陸に来てびっくりした。全くなっちょらん。窒息しちまうよ。君は台湾に帰るか、日本に行ったほうがよい』と」。やがて日本時代の「老朋友」らの助力で日本へ。数10年ぶりに戻った台湾で彼は「日本の政治家は中国に恐れをなして、台湾訪問をはばかっている。欧米諸国、東南アジアの高官は堂々と台湾をおとずれているのに、である。日本が台湾問題でバスに乗り遅れる可能性は十分に存在する」と難詰する。


langs: ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en es ja en

text:
リモートセンサーノード構築用 CPU ボード(XBee-ZB + ATmega328P)
今回の記事では、東京コスモス電機より販売されているワイヤレスモジュール TWE-Lite をリモートから操作する例を紹介したいと思います。TWE-Lite は XBee と同じように簡単にワイヤレス機能を利用することができ、無線モジュールのファームウエアをユーザーが書き換えて外付けマイコン無しでセンサーノードを作成することができます。今回の記事では、ファームウエアはデフォルトでロードされている “超簡単!TWE標準アプリ” を使用しています。
リモートに設置したTWE-Lite デバイスをWebAPI から簡単に操作できるようにします。また、専用のWeb アプリを作成して、スマートフォンや PC のWebブラウザから GUI を使用して簡単に操作できるようにします。
今回使用する TWE-Lite デバイスはブレッドボードなどで簡単に使用できるように、TWE-Lite DIP タイプを3つ使用しています。1つを PC(Windows) に接続する親機として使用して、残りの2つを子機として使用します。
親機用 TWE-Lite DIP デバイスには、PC と仮想COM ポートでアクセスできるように USBシリアルアダプタ(秋月電子 “FT232RL USBシリアル変換モジュールキット”)を接続しています。このシリアルアダプタを使用する代わりに、USBに直接接続できる ToCoStick やTWE-Lite R を利用してももちろん構いません。
親機をPCに接続した様子です。ブレッドボード上にUSBシリアルアダプタと TWE-Lite DIP を配置しています。後の項で説明する TWE-Lite デバイスの初期設定やファームウエアの書き換えにも使用できるように、リセットボタンとプログラムボタンも接続しています。このときブレッドボードを使用しているとTWE-Lite DIP の入れ替えが簡単にできます。
TWE-Lite の電源は USB シリアルアダプタから出力される 3.3V を使用しています。上記の回路は TWE-Lite のホームページに公開されている、 “TWE-Lite のファームウエア書き込み方法” に関するマニュアルを参考にしました。
子機#1にはI2C の試験用に 24LC256 EEPROM とTMP102 温度センサを I2C バスに接続しています。I2C バスはブレッドボード上に接続した4.7Kの抵抗でプルアップしています。子機の電源は AC アダプタから 3.3V を供給して動作させています。
ここで必ずファームウエアのバージョンを確認してください。上記の場合には v1.7.1 になっています。最新バージョンの v1.6.6. または v.1.7.1 よりも古いバージョンの場合にはファームエアの更新が必要です。購入した直後のデバイスには古いファームウエアが格納されている場合がありますので必ず確認するようにしてください。
ファームエアを更新する場合には、プログラムボタン(オレンジのタクトスイッチ)を押しながらリセットボタン(白のタクトスイッチ)を押して、その後プログラムボタンを離すことでプログラムモードに入ります。TWE-Lite のホームページから書き込みソフトとファームエアファイルをダウンロードして書き込みを行います。詳しい手順はTWE-Lite のホームページを参考にしてください。
最新バージョンのファームウエアを使用していることを確認したら、設定画面で Application ID(PAN ID)を任意の値に設定します。ここでは 0x00aabbcc に設定しています。Application ID の値は親機と子機全てに同じ値を設定します。次に Option Bits を 0×00000012 に設定します。この設定を行うと親機側のADC変化検出と定期送信を停止することができます。
今回のアプリケーションの様に子機側の I/O を個々にリモート操作する場合には必ずこの設定を行います。この設定を行わないと(デフォルト設定値のままだと)親機側の デジタル入力や A/D 値が子機側のデジタル出力や PWM 出力値に自動的に反映されて、うまくリモート操作することがきませんので注意してください。
親機の設定が終了したら、ブレッドボード上の TWE-Lite DIP を入れ替えて子機#1 の設定を行います。設定値は以下のようになります。
親機と同様に Application IDを 0x00aabbcc に設定しています。子機では Device ID を設定してそれぞれの子機を個別に操作できるようにします。ここでは 0×01 に設定しています。
また、Option Bits は 0×00000002に設定して定期送信を停止していますが、デフォルトの 0×00000000 のままでも構いません。どちらの値に設定しても、デジタル入力が変化した時や A/D 変換値が一定以上変化した場合には、自動的に親機側にイベントが送信されます。このイベント情報によってサーバー側が現在の子機のデジタル入力値とA/D 変換値がどのようになっているかをその都度、子機側に問い合わせなくても把握することができます。
子機#1 の設定が終了したら、TWE-Lite デバイスを子機#2 に入れ替えて同様の設定をしてください。このとき、Device ID の設定値のみを変更して 0×02 にして後の設定値は子機#1 と同じにします。
●PC(DeviceServer)に親機を接続
親機を PC に接続した後、子機側の電源も入れて通信可能な状態にします。次に、PC 側にインストールした DeviceServer の “サーバー設定” プログラムを起動して、親機を接続しているシリアルポート(仮想 COMポート)を新規のシリアルデバイスとして登録します。
登録する、シリアルデバイスの設定は上記のようになります。COM ポート名は親機のシリアルアダプタ(FT232RL) で作成された仮想COM ポートを指定します。ボーレートは TWE-Lite DIP のデフォルト値 115200 を指定します。デバイスタイプには “TWE” を指定します。この指定によって DeviceServer ではこのシリアルポートに対して以下の機能が有効になります。
COM ポートから入力されたアスキー形式の TWE-Lite パケットを受信した時に、自動的にイベントハンドラ (SERIAL_TWE.lua) が起動されてパケット内容を解析します。また、DeviceServer に作成したユーザースクリプトやイベントハンドラ中から twe_print() ライブラリ関数を使用して、アスキー形式のパケット送信や、リクエスト・リプライタイプのコマンドの送受信を行うことが可能になります。
デフォルトで動作している ”超簡単!TWE標準アプリ” ファームウエアを独自に拡張して新しいコマンドを作成した場合でも、同様のアスキー形式にしておくことで、新しいコマンドを簡単に DeviceServer から利用することができます。
シリアルデバイス登録後の “サーバー設定” プログラムのデバイス一覧は以下のようになります。
この設定画面では複数の親機を同時に登録することもできます。別々のPAN(Application ID) で管理されている子機グループ間の操作も簡単に行うこともできます。
“次へ” ボタンを押して”サーバー設定” プログラムの操作を完了させると、自動的にDeviceServer が再起動した後 TWE-Lite デバイスを使用することができるようになります。
●WebAPI からTWE-Lite 子機を操作する
最初の使用例として リモートの TWE-Lite 子機#1 のデジタル出力ピンを操作してみます。Web API を使用して /command/json/script のURL にアクセスします。
URL パラメータ “name” で指定する Lua スクリプトファイルは “TWE/DO_PIN_SET” でスクリプトの説明は後述します。”com” パラメータには親機が接続されている COM ポート名を指定します。”id” , “pin”, “value” パラメータには操作対象の子機の Device ID, DO ピン番号、出力する値を指定します。この例では子機#1 のDO#3 を Low に設定しています。
Web API で実行する “TWE/DO_PIN_SET”  Lua スクリプトファイルは以下の様に記述されています。
file_id = "TWE/DO_PIN_SET" --[[ ●機能概要 TWEワイヤレスデバイス子機の指定したデジタルピンの値を設定する ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1","120" pin DO#番号(1 から 4 までの整数) "4" value pin に指定したI/Oポートに設定する値(0 または 1) "1" TWEワイヤレスデバイスの場合には "1" で Low出力, "0" で High出力になります ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- ]] ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"] and g_params["pin"] and g_params["value"]) then log_msg("parameter error",file_id) error() end local stat,com = serial_find_device(g_params["com"]) if not stat then log_msg("COM port not found",file_id) error() end local pin = tonumber(g_params["pin"]) - 1 if (pin   3) then log_msg("invalid DO# number",file_id) error() end ---------------------------------------------------------------------- -- 0x80 コマンド送信 ---------------------------------------------------------------------- local mask = bit_tohex(bit_lshift(1,pin),2) local io = "00" if g_params["value"] == "1" then io = mask end local command_str = ":" .. bit_tohex(tonumber(g_params["id"]),2) .. "8001" .. io .. mask .. "FFFFFFFFFFFFFFFFX" for cnt = 1,2,1 do -- 確実に操作するために同一コマンドを2回送信する if not twe_print(com,command_str) then error() end wait_time(10) end
URL で指定された複数のパラメータは、Lua スクリプト実行時に g_params[] 連想配列に格納されています。
最初に必要なパラメータが指定されているかを調べた後、command_str 文字変数に TWE-Lite のアスキー形式で送信する文字列データを格納していきます。その後、twe_print() ライブラリ関数を使用して、DeviceServer に登録したシリアルポートからデータパケットが送信されます。データパケットを受信した親機では 0×80 コマンドが実行されてリモート側の子機#1 の DO#3 が変更されます。
次の動作例では、子機のデジタル入力と A/D 変換値を Web API から取得します。
デジタル出力の時と同様に、DeviceServer で公開されている WebAPI コマンドパス /command/json/script にアクセスます。 “name” パラメータには “TWE/AD_DI_GET” を指定して子機のデジタル入力ポートと A/D 変換値を取得します。スクリプトの実行結果は、JSON 形式で返りますのでこの内容がブラウザ画面に表示されています。
Web アプリや、外部のアプリケーションサーバーから同様の URL にアクセスするだけで、リモートに設置している子機の状態を簡単に取得することができることになります。
TWE/AD_DI_GET Lua スクリプトファイルは以下の様に記述されています。
file_id = "TWE/AD_DI_GET" --[[ ●機能概要 TWEワイヤレスデバイス子機のA/D値, DI 値を取得する ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1" ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- AD1 TWEワイヤレスデバイス子機 AD1 の値 "0" AD2 TWEワイヤレスデバイス子機 AD2 の値 "-1" AD3 TWEワイヤレスデバイス子機 AD3 の値 "1980" AD4 TWEワイヤレスデバイス子機 AD4 の値 "500" DI1 TWEワイヤレスデバイス子機 DI1 の値 "1" DI2 TWEワイヤレスデバイス子機 DI2 の値 "1" DI3 TWEワイヤレスデバイス子機 DI3 の値 "1" DI4 TWEワイヤレスデバイス子機 DI4 の値 "1" STATUS スクリプト実行が正常に終了した場合には "OK"、 エラー発生時には"ERROR" が設定される "OK" ]] ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"]) then log_msg("parameter error",file_id) error() end local stat,com = serial_find_device(g_params["com"]) if not stat then log_msg("COM port not found",file_id) error() end ---------------------------------------------------------------------- -- 子機の最新のデバイス情報をグローバル共有変数から取得 ---------------------------------------------------------------------- local key = "TWE_" .. com .. "_" .. g_params["id"] local val stat,val = get_shared_data(key) if (not stat) or (val == "") then if not script_result(g_taskid,"STATUS","ERROR") then error() end return end local tbl= csv_to_tbl(val) if tbl[3] and tbl[4] and tbl[5] and tbl[6] and tbl[7] and tbl[8] and tbl[9] and tbl[10] then if not script_result(g_taskid,"DI1",tbl[3]) then error() end if not script_result(g_taskid,"DI2",tbl[4]) then error() end if not script_result(g_taskid,"DI3",tbl[5]) then error() end if not script_result(g_taskid,"DI4",tbl[6]) then error() end if not script_result(g_taskid,"AD1",tbl[7]) then error() end if not script_result(g_taskid,"AD2",tbl[8]) then error() end if not script_result(g_taskid,"AD3",tbl[9]) then error() end if not script_result(g_taskid,"AD4",tbl[10]) then error() end if not script_result(g_taskid,"STATUS","OK") then error() end else if not script_result(g_taskid,"STATUS","ERROR") then error() end end
このスクリプトではTWE-Lite 子機を操作するために、親機に対してコマンドパケットを送信していない点に注意してください。
TWE-Lite 子機はデジタル入力値やA/D 変換値を、定期的にまたは変化したときに親機に対してイベントデータを送信しています。DeviceServer では親機で受信したイベントデータをイベントハンドラで処理して、子機ごとの最新の I/O 値をグローバル共有データに保存しています。
このスクリプトではそのグローバル共有データの値を利用して子機のデジタル入力とA/D 変換値を返しています。親機がイベントパケットデータを受信したときに、DeviceServer 側で実行するイベントハンドラ(SERIAL_TWE) については後の項で説明します。
続いて子機の I2C バスを WebAPI で操作する例を紹介したいと思います。最初に子機で I2C データを書き込み用スクリプト(TWE/I2C_WRITE) をご覧ください。
file_id = "TWE/I2C_WRITE" --[[ ●機能概要 TWEワイヤレスデバイス子機の I2C バスに接続したスレーブデバイスにデータを書き込む ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1" slave_addr I2C スレーブデバイスアドレス(16進数2桁) "50" data スレーブデバイスに書き込むデータ(16進数)列 "0A0B0C" 最大31バイトまで ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- ]] ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"] and g_params["slave_addr"] and g_params["data"]) then log_msg("parameter error",file_id) error() end local stat,com = serial_find_device(g_params["com"]) if not stat then log_msg("COM port not found",file_id) error() end local data_len = math.floor(string.len(g_params["data"]) / 2) if data_len   1 then command_str = command_str .. string.sub(g_params["data"],1,2) .. bit_tohex(data_len - 1,2) .. string.sub(g_params["data"],3,-1) .. "X" end stat,rdata = twe_print(com,command_str,"89") ---------------------------------------------------------------------- -- 排他制御終了 ---------------------------------------------------------------------- cstat = critical_section_leave(handle) if not cstat then log_msg("critical_section_leave() failed",file_id) error() end if not stat then log_msg("twe_print() failed",file_id) error() end if string.sub(rdata,10,11) ~= "01" then -- TWE レスポンスフレームで SUCCESS 以外を受信した log_msg("twe remote operation failed",file_id) error() end
このスクリプトでは TWE-Lite のファームウエアで用意されている、子機の I2C バスを操作するためのコマンドパケット(0×88) を送信しています。twe_print() ライブラリでリクエストパケットを送信するときに、リプライパケット(0×89) を受信するまで内部で待機するようにパラメータを指定しています。リプライパケットには I2C 操作が正常に完了したかどうかを示すステータスが格納されていますので、これを確認しています。
またI2Cバス操作のコマンドの様に、リクエストパケット送信とその結果をリプライパケットで受信するようなタイプのコマンドを処理する場合には、クライアント(Web APIを利用しているプログラム)側から同時にリクエストが発生した場合に備える必要があります。Lua スクリプト中に排他処理を記述して、Web API を使用する側からは同時使用しても問題が発生しないようになっています。
次は子機のI2C データを読み込むためのスクリプト(TWE/I2C_READ)で、以下の様になっています。
file_id = "TWE/I2C_READ" --[[ ●機能概要 TWEワイヤレスデバイス子機の I2C バスに接続したスレーブデバイスから 指定バイト数分のデータ読み込みを行う ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1" slave_addr I2C スレーブデバイスアドレス(16進数2桁) "50" count データ読み込みバイト数(32 以下の10進整数) "32" ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- I2C_DATA スレーブデバイスから読み込んだデータ(16進数)列 最大32 バイト(64文字)まで "0A0B0C ]] ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"] and g_params["slave_addr"] and g_params["count"]) then log_msg("parameter error",file_id) error() end local stat,com = serial_find_device(g_params["com"]) if not stat then log_msg("COM port not found",file_id) error() end ---------------------------------------------------------------------- -- 排他制御開始 -- 同じ TWE親デバイスに対して、QUERY コマンドが複数同時実行される場合に備えています。 ---------------------------------------------------------------------- local cstat,handle = critical_section_enter("TWEQuery" .. com,5000); if not cstat then log_msg("critical_section_enter() failed",file_id) error() end ------------------------------------------------------------------------------------------------ -- リクエストフレーム送信とリプライ受信 ------------------------------------------------------------------------------------------------ local command_str = ":" .. bit_tohex(tonumber(g_params["id"]),2) .. "880102" .. bit_tohex(tonumber("0x" .. g_params["slave_addr"]),2) .. "00" .. bit_tohex(tonumber(g_params["count"]),2) .. "X" stat,rdata = twe_print(com,command_str,"89") ---------------------------------------------------------------------- -- 排他制御終了 ---------------------------------------------------------------------- cstat = critical_section_leave(handle) if not cstat then log_msg("critical_section_leave() failed",file_id) error() end if not stat then log_msg("twe_print() failed",file_id) error() end if string.sub(rdata,10,11) ~= "01" then -- TWE レスポンスフレームで SUCCESS 以外を受信した log_msg("twe remote operation failed",file_id) error() end --------------------------------------------------------------- -- リターンパラメータ設定 --------------------------------------------------------------- if not script_result(g_taskid,"I2C_DATA",string.sub(rdata,14,-3)) then error() end
殆ど、I2C_WRITE スクリプトの内容と同じですが、リプライパケットで受信したバイトデータをスクリプトリターンパラメータで返す部分が追加されています。
前述の I2C_WRITE と I2C_READ スクリプトを組み合わせて、I2C データの書き込みと読み込みをする I2C_WRITE_READ スクリプトも作成してあります。内容は以下になります。
file_id = "TWE/I2C_WRITE_READ" --[[ ●機能概要 TWEワイヤレスデバイス子機の I2C バスに接続したスレーブデバイスにデータを書き込んだ後、 指定バイト数分のデータ読み込みを行う ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1" slave_addr I2C スレーブデバイスアドレス(16進数2桁) "50" count データ読み込みバイト数(32 以下の10進整数) "32" data スレーブデバイスに書き込むデータ(16進数)列 "0A0B0C" 最大31バイトまで ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- I2C_DATA スレーブで倍しから読み込んだデータ(16進数)列 最大32 バイトまで "0A0B0C ]] ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"] and g_params["slave_addr"] and g_params["data"] and g_params["count"]) then log_msg("parameter error",file_id) error() end ------------------------- -- I2C write操作 ------------------------- local param = {} param["com"] = g_params["com"] param["id"] = g_params["id"] param["slave_addr"] = g_params["slave_addr"] param["data"] = g_params["data"] local stat,result = script_exec2("TWE/I2C_WRITE",param) if not stat then error() end ------------------------- -- I2C read操作 ------------------------- param["count"] = g_params["count"] local stat,result = script_exec2("TWE/I2C_READ",param) if not stat then error() end script_result(g_taskid,"I2C_DATA",result["I2C_DATA"])
このスクリプトは、最初に I2C 書き込みトランザクションを実行した後、読み込みトランザクションを実行します。読み込んだデータ列をスクリプトパラメータで返します。内容は、単に前述の2つのスクリプトを順番にコールしているだけです。
この I2C_WRITE_READ スクリプトを使用して、TWE-Lite 子機#1 に接続した 24LC256 EEPROM のデータをリードしてみます。接続の様子は前の項で紹介した子機の写真を参考にしてください。
“slave_addr” パラメータには 24LC256 のI2Cスレーブアドレス0×50 を指定しています。”data” パラメータに “0000″ を指定してEEPROM デバイス内のアドレスポインタを示す 0×00, 0×00 の2バイトを書き込みます。その後、”count” パラメータで指定した32バイト分のデータを JSON フォーマットで取得しています。
次の動作例は、同じ子機のI2C バスに搭載されている TMP102 温度センサの値を取得してみます。I2Cバス操作と温度計算を以下のスクリプト(TWE/DEVICE/TMP102_READ)で実行します。
file_id = "TWE/DEVICE/TMP102_READ" --[[ ●機能概要 I2C バスに接続した温度センサー(TMP102) の値を取得する ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- com TWEワイヤレスデバイス親機が接続された COM ポート名 またはタイトル名 "COM4" id 取得対象のTWEワイヤレスデバイス子機の論理IDを10進数の文字列で 指定する "1" ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- temperature センサーから取得した摂氏温度 "12.5" "-25.0" ]] local slave_addr = "48" ------------------------- -- パラメータチェック ------------------------- if not (g_params["com"] and g_params["id"]) then log_msg("parameter error",file_id) error() end ---------------------------------------- -- 12 bit 幅の2の補数を符号付整数に変換 ---------------------------------------- function calc_2comp(val) if(bit_and(val,0x800) ~= 0) then return -1 * (bit_and(bit_not(val),0xfff) + 1) else return val end end ----------------------------------------------------------------------- -- TMP102温度レジスタの値を取得する -- pointer register 0x00 をセットした後、2 バイトのレジスタ値を取得する ----------------------------------------------------------------------- local param = {} param["com"] = g_params["com"] param["id"] = g_params["id"] param["slave_addr"] = slave_addr param["data"] = "00" param["count"] = "2" local stat,result = script_exec2("TWE/I2C_WRITE_READ",param) if not stat then error() end --------------------------------------- -- 温度レジスタ値から摂氏温度を計算する --------------------------------------- local reg = {} reg = hex_to_tbl(result["I2C_DATA"]) local temp_int = bit_lshift(reg[1],4) + bit_rshift(reg[2],4) local temperature = 0.0625 * calc_2comp(temp_int) script_result(g_taskid,"temperature",string.format("%3.1f",temperature))
このスクリプト中からは、先ほど紹介した I2C_WRITE_READ スクリプトをコールして子機#1 のI2C バスを操作して温度レジスタ値をリードしています。その後摂氏温度を計算してリターンパラメータに返しています。このスクリプトを Web API から実行したときの様子が以下になります。
JSON で返されたデータ内の “temperature” 部分が子機#1で計測された現在の温度になります。
ここで紹介した以外にも子機の PWM を操作するためのスクリプトやデジタル出力と PWM の全チャンネルを同時に更新するためのスクリプト、親機に接続されている全子機のID リスト取得などのスクリプトが予め用意されています。これらのスクリプトファイルは DeviceServer インストール時に “C:\Program Files (x86)\AllBlueSystem\Scripts\TWE” フォルダに格納されていますので Web API から直ぐに使用することができます。
Lua スクリプトはテキストファイル(UTF-8) ですので、簡単にコピーしたり独自のコマンド処理用に改造することができます。
●TWE-Lite 親機からパケットを受信したときの動作
TWE-Lite 子機からは、定期的に現在のステータスは送信されていたり、子機のA/D 変換値やデジタル入力の変化を検出した時にはイベントデータが親機に対して送信されます。
イベントデータを受信すると親機からはアスキー形式のパケットデータが送信されます。DeviceServer では親機から送信されるこのようなパケットデータを処理するためのスクリプト(SERIAL_TWE)が予め設定されています。スクリプトの内容は以下の様になっています。
file_id = "SERIAL_TWE" --[[ SERIAL_TWE スクリプト起動時に渡される追加パラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- COMPort イベントを送信したシリアルデバイスの COMポート名 "COM10" Title イベントを送信したシリアルデバイスのタイトル名 "TWE-Lite PAN#1" タイトルが設定されていない場合にはこのパラメータは 設定されません TWE_DATA COM ポートから入力されたアスキー形式のデータパケット全体を格納しています。 値の例 タイプ(1) ":01890902010A010203040405060708092F" タイプ(2) "::rc=80000000:lq=84:ct=0001:ed=81002A1E:id=1:ba=3320:a1=0009:a2=0009:p0=001:p1=000" タイプ(3) ";116;00000000;054;001;1002ecd;3330;0007;0042;0007;0007;S;" タイプ(4) "!INF TOCOS TWELITE DIP APP V1-00-2, SID=0x81000038, LID=0x78" タイプ(5) "*** Samp_Monitor (Parent) 1.03-3 *** Title = TWE-Zero" 文字列は、下記の何れかのデータで終端されたものです。 ヌル文字(0x00),CR(0x0D),LF(0x0A),CR-LF(0x0D,0x0A) TWE_DATA パラメータには、終端文字を含まない文字列部分が格納されています TWE_DATAを解析してこのスクリプト中で作成されるテーブルと文字列変数 --------------------------------------------------------------------------------- テーブルまたは文字列変数名 説明 値の例 --------------------------------------------------------------------------------- byte_arr TWE_DATA が ":" 1文字から始まっている場合に、16進数文字列部分を １バイト毎に数値に変換して配列に格納したものが入る 上記 TWE_DATA データ例タイプ(1)を参照 byte_arr[1] = 0x01 byte_arr[2] = 0x89 byte_arr[3] = 0x09 .. key_val TWE_DATA が "::" 2文字から始まっている場合に、続く ":" 文字毎にカラムを 分けて "<key>=<val>" で記述された部分を連想配列に格納したものが入る。 上記 TWE_DATA データ例タイプ(2)を参照 key_val["rc"] = "80000000" key_val["lq"] = "84" key_val["ct"] = "0001" key_val["ed"] = "81002A1E" .. tag_arr TWE_DATA が ";" 1文字から始まっている場合に、続く ";" 文字毎にカラムを 分けたものを文字列形式で配列に格納したものが入る。 上記 TWE_DATA データ例タイプ(3)を参照 tag_arr[1] = "116" tag_arr[2] = "00000000" tag_arr[3] = "054" tag_arr[4] = "001" .. comment TWE_DATA が ":"または ";" 文字以外から始まっている場合に、 データパケット全体の文字列を格納したものが入る 上記 TWE_DATA データ例タイプ(4),(5)を参照 COMMENT = "!INF TOCOS TWELITE DIP APP V1-00-2, SID=0x81000038, LID=0x78" TWE_DATAを解析してこのスクリプト中で作成されるグローバル共有変数と共有文字列リスト --------------------------------------------------------------------------------- グローバル共有変数名 説明 または、共有文字列リストChannel名 --------------------------------------------------------------------------------- TWE_<COMPort>_<ChildID> TWE_DATA が ":" 1文字から始まっていて、かつコマンド種別を示すバイト値が 0x81(状態通知)の場合に、メッセージ内容を解析した値がカンマ区切りで グローバル共有変数に格納される。この変数の値は常に最後のイベント発生時 の内容で更新されます。 <COMPort>は、イベントを送信したシリアルデバイスの COMポート名になります <ChildID>は、メッセージ中の送信元論理デバイスIDを10進数にしたものになります 変数の内容に設定されるカンマ区切りの文字列は下記のフォーマットになります。 <LQI>,<Batt>,<DI1>,<DI2>,<DI3>,<DI4>,<AD1>,<AD2>,<AD3>,<AD4> <LQI> にはLQI値フィールドの値を10進数に変換したものが入ります <Batt> には電源電圧[mV]フィールドの値を10進数に変換したものが入ります <DI1>..<DI4> にはDI の状態ビットが Lowの場合に1, High の場合に 0 が入ります <AD1>..<AD4> にはAD変換値の値を10進数に変換したものが入ります TWE_<COMPort>_CHILD_LIST (共有文字列リストChannel名) TWE_DATA が ":" 1文字から始まっているパケットデータを受信したときの <ChildID> 部分を文字列リストに保存します。文字列リストにはメッセージ中の 送信元論理デバイスIDを10進数表現にしたものを重複なく保存しています。 ]] local str = "" for key,val in pairs(g_params) do str = str .. key .. " = " .. val .. " " end log_msg(str,file_id) ------------------------------------------------------------ -- g_params["TWE_DATA"] データパケット文字列をデコードする ------------------------------------------------------------ local data = g_params["TWE_DATA"] local byte_arr,key_val,tag_arr,comment if string.match(data,"^::") then -- タイプ(2) key_val = key_val_to_tbl(string.sub(data,3,-1)) elseif string.match(data,"^:%x") then -- タイプ(1) byte_arr = hex_to_tbl(string.sub(data,2,-1)) local id = tostring(byte_arr[1]) if not add_shared_strlist("TWE_" .. g_params["COMPort"] .. "_CHILD_LIST",id,true) then error() end -- 子機のIDリストを更新 if byte_arr[2] == 0x81 then -- 状態通知の場合には共有変数に現在のセンサ値を保存 local di1,di2,di3,di4,ad1,ad2,ad3,ad4 if bit_and(byte_arr[17],0x01) ~= 0 then di1 = "1" else di1 = "0" end if bit_and(byte_arr[17],0x02) ~= 0 then di2 = "1" else di2 = "0" end if bit_and(byte_arr[17],0x04) ~= 0 then di3 = "1" else di3 = "0" end if bit_and(byte_arr[17],0x08) ~= 0 then di4 = "1" else di4 = "0" end if byte_arr[19] == 0xFF then ad1 = "-1" else ad1 = tostring((byte_arr[19]*4 + bit_and(byte_arr[23],0x03))*4) end if byte_arr[20] == 0xFF then ad2 = "-1" else ad2 = tostring((byte_arr[20]*4 + bit_and(bit_rshift(byte_arr[23],2),0x03))*4) end if byte_arr[21] == 0xFF then ad3 = "-1" else ad3 = tostring((byte_arr[21]*4 + bit_and(bit_rshift(byte_arr[23],4),0x03))*4) end if byte_arr[22] == 0xFF then ad4 = "-1" else ad4 = tostring((byte_arr[22]*4 + bit_and(bit_rshift(byte_arr[23],6),0x03))*4) end local val = tostring(byte_arr[5]) .. "," .. tostring(byte_arr[14]*256 + byte_arr[15]) .. "," .. di1 .. "," .. di2 .. "," .. di3 .. "," .. di4 .. "," .. ad1 .. "," .. ad2 .. "," .. ad3 .. "," .. ad4 if not set_shared_data("TWE_" .. g_params["COMPort"] .. "_" .. id,val) then error() end -- リレーサーバーに最新データの配信を依頼する場合には下記のコメントを取り除く script_exec("RELAY_SERVER_UPLINK","COM,TYPE,NodeID,LQI,Batt,DI1,DI2,DI3,DI4,AD1,AD2,AD3,AD4",g_params["COMPort"] .. ",TWE_UPDATE," .. id .. "," .. val) end elseif string.match(data,"^;") then -- タイプ(3) tag_arr = ssv_to_tbl(string.sub(data,2,-2)) else -- タイプ(4),(5) comment = data end ----------------------------------- -- デコード後のデータをログに出力 ----------------------------------- --[[ local line = "" if key_val then for key,val in pairs(key_val) do line = line .. "[" .. key .."]" .. val .. " " end end if byte_arr then for key,val in ipairs(byte_arr) do line = line .. "0x" .. bit_tohex(val,2) .. " " end end if tag_arr then for key,val in ipairs(tag_arr) do line = line .. "[" .. tostring(key) .. "]" .. val .. " " end end if comment then line = comment end log_msg("decoded: " .. line,file_id) ]]
このスクリプトでは TWE-Lite のファームエア (TWE-Zeroアプリ)で使用されている全てのアスキー形式のパケットを解析して、DeviceServer で処理しやすい形に変換しています。
他のイベントハンドラやユーザースクリプトから TWE-Lite のイベントデータを利用し易い様に、グローバル共有変数に子機毎の最新のI/O 値などをカンマ区切りのデータで保持しています。そのほかにも親機のCOM ポート毎に、全ての子機のID リストを作成しています。
これらの詳しいデータ構造は上記スクリプトのコメントを参照してください。ユーザーが独自のファームエアを TWE-Lite に搭載した場合でも、TWE-Zero アプリで使用しているアスキー形式のフォーマットに合わせておくと、このイベントハンドラで自動的に内容が解析されるようになります。
もちろん独自のフォーマットでデータを送信することもできます。この場合にはこのイベントハンドラにフォーマットを解析するためのスクリプトを追加して対応してください。
●Webアプリを作成する
ここからはWebアプリの作成例を紹介します。Webブラウザ上に表示したチェックボックスやスライダー を使用して子機をリモートコントロールできます。HTML5 アプリで作成していますのでPC の Webブラウザはもちろんのこと、iOS や Android デバイスからも実行することができます。
この Webアプリではフレームワークとして jQuery と jQuery-mobile を使用しています。もちろん、これら以外のフレームワークを利用して独自のWeb アプリを自由に作成することができます。Web アプリ中からは、前の項で紹介したWeb API をコールして TWE-Lite デバイスを操作しています。
ここで紹介するWeb アプリは、DeviceServer インストール時に”C:\Program Files (x86)\AllBlueSystem\WebRoot\web_api_sample\twe_control” フォルダに格納されていますので直ぐに使用することができます。Webアプリを起動させるときは、Webブラウザで “http:// /web_api_sample/twe_control/index.html” にアクセスしてください。
最初にログイン画面が表示されます。DeviceServer に登録したユーザーアカウントでログインします。このとき、ユーザーアカウントに設定したアプリケーション許可フラグに “WebLogin” を付与して Web API 経由でログイン可能にしておいてください。
ログインに成功すると、COM ポートの選択画面が表示されます。ここで、操作したいTWE-Lite の子機が所属している親機の COM ポートを選択します。ここで表示しているCOM デバイスリストにはシリアルデバイスタイプとして “TWE” を選択しているものだけが表示されます。
上記の画面で表示されている親機のポート(TWE#1) は1つだけですが、複数の親機を DeviceServer で同時に管理してすることもできます。このようにすると、それぞれの親機に属している TWE-Lite デバイスの Application ID を分けて、別々の PAN に属している TWE-Lite デバイスを Web アプリから操作することができます。
次にノード(子機の Device ID)選択画面が表示されます。子機から送信されてきたイベントデータパケットの情報から作成した最新のノードリスト(子機の Device ID リスト)を表示しています。
子機のノードを選択すると I/O 画面が表示されます。
デジタル入力と A/D 変換値は最後に親機で受信したイベントデータを元に表示されます。この部分は表示のみで操作することはできません。スクロールダウンすると、デジタル出力と PWM 出力を操作する画面が現れます。
チェックボックスを操作すると、子機の指定したデジタル出力ポートの値を High または Low に設定できます。”全てのDO#を更新” ボタンはデジタル出力ポートの全ピンの値を現在のチェックボックスの状態に合わせて全て更新することができます。
このボタンは TWE-Lite のファームウエアの制限から現在の出力ポートの値が取得できないため、最初にこのボタンを押してチェックボックスの状態と子機のデジタル出力の値を一致させるときに使用します。この部分については後の”考察”の項でも説明しています。
子機のPWM 出力は、スライダーを操作することで簡単に設定することができます。
別の子機を操作したくなった場合にはブラウザの “戻る” ボタンを使用してノード選択画面やポート選択画面に移動して選択するデバイスを変更できます。
下記にこの Webアプリで使用している HTML ファイルを載せます。HTMLファイルではWebアプリの GUI やダイアログの定義のみを行っています。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>TWE Control</title> <link rel="stylesheet" href="libs/css/themes/default/jquery.mobile-1.4.5.min.css" /> <script src="libs/js/jquery.js"></script> <script src="libs/js/jquery.mobile-1.4.5.js"></script> <script src="libs/js/socket.io.js"></script> <script src="libs/device_server/webapi.js"></script> </head> <body> <div data-role="page" id="login"> <div data-role="header" data-position="inline"> <h3>ユーザー認証</h3> </div> <div role="main" class="ui-content"> <label for="login_name">Name</label> <input id="login_name" value="" type="text" data-clear-btn="true"/> <label for="login_password">Password</label> <input id="login_password" value="" type="password" data-clear-btn="true"/> <div><h3>&nbsp</h3></div> <div class="ui-grid-b"> <div class="ui-block-b"> <a class="ui-btn ui-btn-inline ui-icon-check ui-btn-icon-left " id="login_btn" >Login</a> </div> </div> </div> <div data-role="footer"> <h3>ABS-9000 DeviceServer</h3> </div> </div> <div data-role="page" id="select_device"> <div data-role="header" data-position="inline"> <h3>ポート選択</h3> <a data-icon="home" id="logout_btn" href="#logout_caution" data-rel="dialog" data-transition="pop">Logout</a> </div> <ul data-role="listview" id="device_list" data-inset="true"></ul> <div data-role="footer"> <h3>ABS-9000 DeviceServer</h3> </div> </div> <div data-role="page" id="select_node" data-theme="a"> <div data-role="header" data-position="inline"> <a data-icon="back" id="select_node_prev_btn">戻る</a> <h3>ノード選択</h3> <a data-icon="home" id="logout_btn" href="#logout_caution" data-rel="dialog" data-transition="pop">Logout</a> </div> <ul data-role="listview" id="node_list" data-inset="true"></ul> <div data-role="footer"> <h3>ABS-9000 DeviceServer</h3> </div> </div> <div data-role="page" id="twe_control"> <div data-role="header" data-position="inline"> <a data-icon="refresh" id="reloadBtn">Reload</a> <h3 id="main_title">TWE Control</h3> <a data-icon="home" id="logout_btn" href="#logout_caution" data-rel="dialog" data-transition="pop">Logout</a> </div> <div role="main" class="ui-content"> <div data-role="fieldcontain"> <fieldset data-role="controlgroup" data-type="vertical"> <input name="checkbox1" id="checkbox1" type="checkbox" class="di_pin" pin="1" disabled="disabled"/> <label for="checkbox1">DI#1</label> <input name="checkbox2" id="checkbox2" type="checkbox" class="di_pin" pin="2" disabled="disabled"/> <label for="checkbox2">DI#2</label> <input name="checkbox3" id="checkbox3" type="checkbox" class="di_pin" pin="3" disabled="disabled"/> <label for="checkbox3">DI#3</label> <input name="checkbox4" id="checkbox4" type="checkbox" class="di_pin" pin="4" disabled="disabled"/> <label for="checkbox4">DI#4</label> </fieldset> </div> </div> <div role="main" class="ui-content"> <fieldset data-role="controlgroup" data-type="vertical"> <div data-role="fieldcontain"> <label for="slider-1">AD#1</label> <input type="range" name="slider-1" id="slider-1" style="width : 58px;" value="-1" min="-1" max="1024" data-highlight="true" disabled="disabled"/> </div> <div data-role="fieldcontain"> <label for="slider-2">AD#2</label> <input type="range" name="slider-2" id="slider-2" style="width : 58px;" value="-1" min="-1" max="1024" data-highlight="true" disabled="disabled"/> </div> <div data-role="fieldcontain"> <label for="slider-3">AD#3</label> <input type="range" name="slider-3" id="slider-3" style="width : 58px;" value="-1" min="-1" max="1024" data-highlight="true" disabled="disabled"/> </div> <div data-role="fieldcontain"> <label for="slider-4">AD#4</label> <input type="range" name="slider-4" id="slider-4" style="width : 58px;" value="-1" min="-1" max="1024" data-highlight="true" disabled="disabled"/> </div> </fieldset> </div> <div role="main" class="ui-content"> <fieldset data-role="controlgroup" data-type="vertical"> <a class="ui-btn ui-btn-inline ui-icon-gear ui-btn-icon-left ui-mini" id="do_all_btn" >全ての DO# 更新</a> </fieldset> <fieldset data-role="controlgroup" data-type="vertical"> <div data-role="fieldcontain"> <input name="checkbox5" id="checkbox5" type="checkbox" class="do_pin" pin="1"/> <label for="checkbox5">DO#1</label> <input name="checkbox6" id="checkbox6" type="checkbox" class="do_pin" pin="2"/> <label for="checkbox6">DO#2</label> <input name="checkbox7" id="checkbox7" type="checkbox" class="do_pin" pin="3"/> <label for="checkbox7">DO#3</label> <input name="checkbox8" id="checkbox8" type="checkbox" class="do_pin" pin="4"/> <label for="checkbox8">DO#4</label> </div> </fieldset> </div> <div role="main" class="ui-content"> <fieldset data-role="controlgroup" data-type="vertical"> <a class="ui-btn ui-btn-inline ui-icon-gear ui-btn-icon-left ui-mini" id="pwm_all_btn" >全ての PWM# 更新</a> <div class="ui-field-contain"> <label for="slider-5">PWM#1</label> <input type="range" name="slider-5" id="slider-5" style="width : 58px;" value="0" min="0" max="1024" class="pwm_pin" pin="1" data-highlight="true"/> </div> <div data-role="fieldcontain"> <label for="slider-6">PWM#2</label> <input type="range" name="slider-6" id="slider-6" style="width : 58px;" value="0" min="0" max="1024" class="pwm_pin" pin="2" data-highlight="true"/> </div> <div data-role="fieldcontain"> <label for="slider-7">PWM#3</label> <input type="range" name="slider-7" id="slider-7" style="width : 58px;" value="0" min="0" max="1024" class="pwm_pin" pin="3" data-highlight="true"/> </div> <div data-role="fieldcontain"> <label for="slider-8">PWM#4</label> <input type="range" name="slider-8" id="slider-8" style="width : 58px;" value="0" min="0" max="1024" class="pwm_pin" pin="4" data-highlight="true"/> </div> </fieldset> </div> <div data-role="footer"> <h3>ABS-9000 DeviceServer</h3> </div> </div> <div data-role="page" id="login_error_dialog"> <div data-role="header" data-theme="b"> <h1>*LOGIN ERR*</h1> </div> <div role="main" class="ui-content"> <h2>ログインに失敗しました</h2> <p>ユーザー名またはパスワードが間違っています。システムのログイン制限により失敗している場合があります</p> <p> <a href="#login" data-rel="back" class="ui-btn ui-shadow ui-btn-a ui-icon-check ui-btn-icon-left">戻る</a> </p> </div> </div> <div data-role="page" id="logout_caution"> <div data-role="header" data-theme="b"> <h1>*WARNING*</h1> </div> <div role="main" class="ui-content"> <h2>ログアウトしますか?</h2> <p>ログアウト操作を行う場合には "OK" を押してください。"キャンセル" で元の画面に戻ります</p> <p><a data-rel="back" class="ui-btn ui-btn-inline ui-shadow ui-btn-a ui-icon-back ui-btn-icon-left">キャンセル</a> <a id="logout_ok_btn" class="ui-btn ui-btn-inline ui-shadow ui-btn-a ui-icon-check ui-btn-icon-left">OK</a></p> </div> </div> <div data-role="page" id="error_quit_dialog"> <div data-role="header" data-theme="b"> <h1>*USER ERR*</h1> </div> <div role="main" class="ui-content"> <h2>セッションが無効です</h2> <p>サーバー処理中にエラーが発生しました。現在のセッションが無効になっている場合があります。再ログイン操作を行ってください</p> <p><a data-role="button" id="server_error_ok_btn" class="ui-btn ui-shadow ui-btn-a ui-icon-check ui-btn-icon-left">OK</a></p> </div> </div> <div data-role="page" id="error_back_dialog"> <div data-role="header" data-theme="b"> <h1>*SERVER ERR*</h1> </div> <div role="main" class="ui-content"> <h3>サーバー側でエラーが発生しました</h3> <p>サーバー処理中にエラーが発生しました。スクリプト実行中にエラーが発生した可能性がありますのでサーバー側のログを確認して下さい</p> <p><a data-role="button" data-rel="back" class="ui-btn ui-shadow ui-btn-a ui-icon-check ui-btn-icon-left">OK</a></p> </div> </div> <script src="main.js"></script> </body> </html>
Web アプリケーションのロジック部分は、下記のmain.js(JavaScript) で作成しています。このスクリプト中から、先に説明した Web API をコールすることで、TWE-Lite 子機を操作しています。
////////////////////////////////////// // common function ////////////////////////////////////// // スクリプト実行結果ステータスのみをチェック function script_exec_callback(data){ if (data.Result != "Success"){ if(data.ErrorText.match(/CertifyUpdateSession failed/i)) { $("#login_password").val(""); $("body").pagecontainer("change","#error_quit_dialog", { transition: "pop",role:"dialog" }); } else { $("body").pagecontainer("change","#error_back_dialog", { transition: "pop",role:"dialog" }); } } } // UI コンポーネントの xml 属性値を検索取得 function getAttrVal(node,name){ var val = ""; var attr = node.attributes; for (var i=0; i<attr.length; i++){ if (attr[i].nodeName == name){ val = attr[i].nodeValue; } } return val; } ////////////////////////////////////// // twe_control page ////////////////////////////////////// // IO 値の配列を受け取って GUI表示に反映させる // data パラメータ例 // {"DI1":"1","DI2":"0","DI3":"0","DI4":"0","AD1":"-1","AD2":"-1","AD3":"4","AD4":"248"} function apply_ui(data){ var flag; flag = ( data.DI1 == "0"); // TWE DIは負論理だが、チェック状態の時に High出力とみなす $("#checkbox1").prop("checked",flag).checkboxradio("refresh"); flag = ( data.DI2 == "0"); $("#checkbox2").prop("checked",flag).checkboxradio("refresh"); flag = ( data.DI3 == "0"); $("#checkbox3").prop("checked",flag).checkboxradio("refresh"); flag = ( data.DI4 == "0"); $("#checkbox4").prop("checked",flag).checkboxradio("refresh"); if ($("#slider-1").val() != data.AD1) $("#slider-1").val(data.AD1).slider("refresh"); if ($("#slider-2").val() != data.AD2) $("#slider-2").val(data.AD2).slider("refresh"); if ($("#slider-3").val() != data.AD3) $("#slider-3").val(data.AD3).slider("refresh"); if ($("#slider-4").val() != data.AD4) $("#slider-4").val(data.AD4).slider("refresh"); } // TWE/AD_DI_GETスクリプト実行結果のイベントハンドラ。 function io_get_handler(data){ if (data.Result != "Success"){ if(data.ErrorText.match(/CertifyUpdateSession failed/i)) { $("#login_password").val(""); $.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"}); } else { $.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"}); } return; } apply_ui(data.ResultParams); } // デバイスから最新の I/O 値を取得する function load_device_io(){ var params = {}; params["com"] = serial_comport; params["id"] = node_id; script_exec("TWE/AD_DI_GET",params,"io_get_handler"); } // スライダーを操作して PWM#<n> ピンの値が更新された $("body").on("slidestop",".pwm_pin",function(event, ui){ var params = {}; var attrVal = getAttrVal(this,"pin"); if (attrVal != ""){ params["com"] = serial_comport; params["id"] = node_id; params["pin"] = attrVal; params["value"] = event.target.value; script_exec("TWE/PWM_SET",params,"script_exec_callback"); } }); // チェックボックスを操作して DO#<n> ピンの値が更新された $("body").on("change",".do_pin",function(event, ui){ var params = {}; var attrVal = getAttrVal(this,"pin"); if (attrVal != ""){ params["com"] = serial_comport; params["id"] = node_id; params["pin"] = attrVal; // TWE DOは負論理だが、チェック状態の時に High出力にする if (this.checked){ params["value"] = "0"; } else { params["value"] = "1"; } script_exec("TWE/DO_PIN_SET",params,"script_exec_callback"); } }); // 全ての PWM# 更新ボタンを押した $("#pwm_all_btn").on( "click",function(event, ui){ var params = {}; var pwm_val = $("#slider-5").val(); pwm_val = pwm_val + "," + $("#slider-6").val(); pwm_val = pwm_val + "," + $("#slider-7").val(); pwm_val = pwm_val + "," + $("#slider-8").val(); params["com"] = serial_comport; params["id"] = node_id; params["value"] = pwm_val; script_exec("TWE/PWM_ALL_SET",params,"script_exec_callback"); }); // 全ての DO# 更新ボタンを押した $("#do_all_btn").on( "click",function(event, ui){ var params = {}; var flag = 0; if (! $("#checkbox5").is(':checked')){ flag = flag | 0x01; } if (! $("#checkbox6").is(':checked')){ flag = flag | 0x02; } if (! $("#checkbox7").is(':checked')){ flag = flag | 0x04; } if (! $("#checkbox8").is(':checked')){ flag = flag | 0x08; } params["com"] = serial_comport; params["id"] = node_id; params["value"] = flag.toString(16); script_exec("TWE/DO_PUT",params,"script_exec_callback"); }); // ページが表示された $(document).on("pageshow","#twe_control",function(event){ load_device_io(); }); // リロードボタンが操作された $("#reloadBtn").on( "click",function(event, ui){ load_device_io(); }); ////////////////////////////////////// // select_node page ////////////////////////////////////// // アプリで選択した TWEデバイス NodeID var node_id = "" // TWE(子)ノードリストを取得する function list_node_device(){ var params = {}; params["noquote"] = "1"; params["com"] = serial_comport; script_exec("TWE/LIST_JSON",params,"list_node_handler"); } // ノードデバイスが選択されたらデバイス操作画面に移動する $(document).on( "click",".node_select", function(event, ui){ var params = {}; var attrVal = getAttrVal(this,"device"); if (attrVal != ""){ node_id = attrVal; // TWEデバイス操作画面に移動する $( "#main_title" ).text(serial_comport + " Node#" + node_id); $("body").pagecontainer("change","#twe_control", { transition: "none" }); } }); // TWE/LIST_JSON スクリプト実行結果のイベントハンドラ。 function list_node_handler(data){ if (data.Result != "Success"){ if(data.ErrorText.match(/CertifyUpdateSession failed/i)) { $("body").pagecontainer("change","#error_quit_dialog", { transition: "pop",role:"dialog" }); } else { $("body").pagecontainer("change","#error_back_dialog", { transition: "pop",role:"dialog" }); } return; } // リストビューに ノード番号を表示する $("#node_list li").remove(); for(i in data.ResultParams.DeviceList){ $('<li data-theme="a"><a data-transition="none" device="' + data.ResultParams.DeviceList[i].ID + '" class="node_select">' + "TWE Node#" + data.ResultParams.DeviceList[i].ID + '</a></li>').appendTo($('#node_list')); } $("#node_list").listview("refresh"); } // ページが表示された $(document).on("pageshow","#select_node",function(event){ list_node_device(); }); // ノード選択画面の Prevボタンが操作された $("#select_node_prev_btn").on( "click",function(event, ui){ $("body").pagecontainer("change","#select_device", { transition: "none" }); }); ////////////////////////////////////// // select_device page ////////////////////////////////////// // アプリで選択したシリアルデバイスの COM ポート名またはタイトル名 var serial_comport = "" // シリアルデバイスリストを取得する function list_serial_device(){ var params = {}; params["type"] = "TWE"; params["noquote"] = "1"; script_exec("SERIAL_DEVICE_LIST",params,"list_serial_handler"); } // SERIAL_DEVICE_LIST スクリプト実行結果のイベントハンドラ。 function list_serial_handler(data){ if (data.Result != "Success"){ if(data.ErrorText.match(/CertifyUpdateSession failed/i)) { $("body").pagecontainer("change","#error_quit_dialog", { transition: "pop",role:"dialog" }); } else { $("body").pagecontainer("change","#error_back_dialog", { transition: "pop",role:"dialog" }); } return; } // リストビューに シリアルデバイス名を表示する $("#device_list li").remove(); for(i in data.ResultParams.DeviceList){ $('<li data-theme="a"><a data-transition="none" device="' + data.ResultParams.DeviceList[i].COM + '" class="dev_select">' + data.ResultParams.DeviceList[i].Title + '</a></li>').appendTo($('#device_list')); } $("#device_list").listview("refresh"); } // シリアルデバイスが選択されたらノード選択画面に移動する $(document).on('click', '.dev_select', function () { var params = {}; var attrVal = getAttrVal(this,"device"); if (attrVal != ""){ serial_comport = attrVal; $("body").pagecontainer("change","#select_node", { transition: "none" }); } }); // ページが表示された $(document).on("pageshow","#select_device",function(event){ list_serial_device(); }); ////////////////////////////////////// // login page ////////////////////////////////////// // サーバー側のログイン処理が成功したときにメイン画面に移動する function login_callback(data){ if (data.Result == "Success"){ session_token = data.SessionToken; $("body").pagecontainer("change","#select_device", { transition: "none" }); } else { $("body").pagecontainer("change","#login_error_dialog", { transition: "pop",role:"dialog" }); } } // サーバー側のログアウト処理が完了したらログイン画面に戻る function logout_callback(data){ session_token = ""; $("#login_password").val(""); $("body").pagecontainer("change","#login", { transition: "pop" }); } // ログインボタンを押した $( "#login_btn" ).on( "click", function(event, ui){ var user = $("#login_name").val(); var pass = $("#login_password").val(); login(user,pass,"login_callback"); }); // ログアウトボタンを押した $( "#logout_ok_btn" ).on( "click", function(event, ui){ logout("logout_callback"); }); // サーバーエラーのダイアログから復帰する場合はログイン画面に戻る $( "#server_error_ok_btn" ).on( "click", function(event, ui){ session_token = ""; $("body").pagecontainer("change","#login", { transition: "pop" }); }); // ログインページが表示された $(document).on("pageshow","#login",function(event){ // セッショントークンが指定されている場合にはユーザー認証を省略する if (session_token != ""){ $("body").pagecontainer("change","#select_device", { transition: "pop" }); } }); //////////////////////////////////////////////////////////////// // (オプション機能) // // デバイスの I/O 状態が変更された場合に最新のI/O データが配信されるように、 // WebSocket(socket.io) でリレーサーバーに接続する // この機能を使用する場合には、サーバー側でデバイスからのイベントデータを // ブラウザに配信する node.js + socket.io で作成されたリレーサーバーを // 実行して下さい。(node relay_server.jsで実行できます) // // //var socket = io.connect('/',{ port:9090}); var socket = io.connect(':9090'); // リレーサーバーから 'broadcast' タグの付いたメッセージを受信した socket.on('broadcast', function (data) { // 配信されてきたJSON データを取得 var obj = $.parseJSON(data["message"]); // Webアプリで自動更新の対象となるイベントデータを含んでいた場合には、 // 最新のイベントデータで GUI の状態を更新する if((session_token != "") && (obj.COM == serial_comport) && (obj.NodeID == node_id) && (obj.TYPE == "TWE_UPDATE")){ apply_ui(obj); } });
●リアルタイム更新用のリレーサーバーを node.js で作成する
Web アプリを使用するとリモート側の デジタル出力 や PWM をリアルタイムに更新することができますが、デジタル入力と A/D 変換値は “Reload” ボタンを押さないと最新の情報に更新できないのは困ります。
ここでは、WebSocket を利用して子機側でデジタル入力や A/D 変換値が変化したときに、自動的に最新の値に Web アプリの GUI を更新させたいと思います。
この項で紹介する方法は以前の記事で紹介した内容と同じ node.js を使用してリレーサーバーを外部に作成する方法を採っています。リレーサーバーの仕組みや node.js のセットアップ方法については此方の(記事1,記事2) を参照してください。
親機からは、子機側で発生した I/O 変化時のイベントデータがシリアルに出力されていますので、このタイミングでイベントデータを WebSocket に配信します。先に紹介したイベントハンドラ (SERIAL_TWE) 中の
-- リレーサーバーに最新データの配信を依頼する場合には下記のコメントを取り除く script_exec("RELAY_SERVER_UPLINK","COM,TYPE,NodeID,LQI,Batt,DI1,DI2,DI3,DI4,AD1,AD2,AD3,AD4",g_params["COMPort"] .. ",TWE_UPDATE," .. id .. "," .. val)
の部分で RELAY_SERVER_UPLINK Lua スクリプトに最新のイベントデータを渡しています。このスクリプトは以下の様になっています。
file_id = "RELAY_SERVER_UPLINK" --[[ ●機能概要 リレーサーバーに配信用のデータをアップロードする ●スクリプト中の変数に初期設定が必要な項目 --------------------------------------------------------------------------------- 変数名 値 値の例 --------------------------------------------------------------------------------- host リレーサーバーが動作している PC のホスト名 "localhost" リレーサーバーは node.js プログラムで起動された relay_server.js ファイルで実行されます。 port リレーサーバーのポート番号 9080 ●リクエストパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 ---------------------------------------------------------------------------------     "AD0" "-1" .. ..     リレーサーバーで配信するメッセージ中に格納するデータ値を任意の数だけ指定できる。 このスクリプトを起動する時に指定した全てのパラメータ(キー値と値)はそのまま リレーサーバーに渡されて、その後 WebSocketで接続している全てのクライアントに配信される。 ●リターンパラメータ --------------------------------------------------------------------------------- キー値 値 値の例 --------------------------------------------------------------------------------- ●備考 スクリプト中で実行している tcp_send_recv_data() 関数は、相手側のサーバーがダウン しているときにネットワークエラー検出までに時間がかかることが想定されます。 このとき、イベントハンドラなど別スレッドで同時にこのスクリプトを続けて起動すると、 スクリプトプールの未使用エントリ数がなくなり、システム全体の動作に影響する可能性 があります。これを防ぐために、スクリプトプールの未使用エントリ数が一定以下になっ た場合には、このスクリプトの実行をすぐに中止させるようにしています 中止させるためのフラグは abort_key のキー名で設定されたグローバル共有変数を使用 しています。一度このフラグが設定されるとこのスクリプトは直ぐに終了して、ログに *ABORT* が記録されるようになります。再びこのスクリプトを実行可能にするためには、 DeviceServerを再起動させるか abort_key に設定されたグローバル共有変数を削除して ください。このとき PERIODIC_TIMER.lua 中に dec_shared_data() 関数を使用すると 簡単に一定期間後にグローバル共有変数を削除することができます。このスクリプトでは 中止フラグの値に "60" を設定していますので、下記のスクリプトをPERIODIC_TIMER.lua 中 に記述すると、60分後に中止フラグが自動的に削除されます。 dec_shared_data("$ABORT_RELAY_SERVER_UPLINK") ●変更履歴 2014/11/8 初版作成 ABS-9000 DeviceServer copyright(c) All Blue System ]] local host = "localhost" local port = 9080 ----------------------------------------------------------------------------------------------------- -- リレーサーバー接続が失敗する場合にスクリプトプールの逼迫を防ぐため、スクリプト実行中止の判断をする ----------------------------------------------------------------------------------------------------- local abort_key = "$ABORT_" .. file_id local stat, val = get_shared_data(abort_key) if val ~= "" then log_msg("*ABORT*",file_id) return end if script_free_count() < 5 then if not set_shared_data(abort_key,"60") then error() end log_msg("*ABORT SET*",file_id) return end ----------------------------------------------------------------------------------- -- スクリプトパラメータで渡されたキーと値を JSON 文字列に変換する ----------------------------------------------------------------------------------- local json_str = '{' local first = true for key,val in pairs(g_params) do if first then first = false else json_str = json_str .. "," end json_str = json_str .. string.format('"%s":"%s"',key,val) end json_str = json_str .. '}' ------------------------------------------ -- リレーサーバーにメッセージを送信する ------------------------------------------ log_msg(json_str,file_id) local nstat,rdata = tcp_send_recv_data(host,port,json_str,2,2)
スクリプトパラメータで渡されてきた子機の最新の デジタル入力値、A/D 変換値などを node.js で作成するリレーサーバーにTCP/IP ソケット通信で送信します。送信データは相手側で利用しやすいように予め JSON フォーマットに加工しています。
node.js で作成するリレーサーバー本体(relay_server.js)は以下になります。
////////////////////////////////////////////////////////////////////////////////////// // // RelayServer All Blue System // // このプログラムではソケット通信(TCP)で受信した文字列データを // WebSocket(socket.io)に接続している全てのクライアントにブロードキャスト配信します。 // // プログラムを起動するときは、予め node.js プログラムをインストールしておきます。 // その後、node.js で提供されているパッケージ管理プログラム npm を使用して // socket.io モジュールをインストールします。 // // >npm install socket.io // // 環境変数 NODE_PATH を node.js をインストールしたフォルダにある node_modules フォルダ名に設定します。 // デフォルトでは NODE_PATH = C:\Program Files\nodejs\node_modules になります。 // // コマンドプロンプトから node コマンドにスクリプトファイル名をパラメータに指定して RelayServerを起動します。 // // >node relay_server.js // // uplink ポートにメッセージを送信するための DeviceServer側スクリプトは // C:\Program Files (x86)\AllBlueSystem\Scripts\RELAY_SERVER_UPLINK.lua に // 格納されています。 // // downlinkポートからメッセージを受信してWebアプリケーションからブラウザに配信するための // サンプルは、C:\Program Files (x86)\AllBlueSystem\WebRoot\web_api_sample\twe_control // フォルダ中の main.js ファイルを参照してください。 // ////////////////////////////////////////////////////////////////////////////////////// // RelayServer から複数の Webブラウザへデータを配信するためのポート // 最初にWeb ブラウザ側から WebSocket(socket.io) を使用してコネクションが張られる。 // コネクションが確立した後ブラウザ側は RelayServer から送信される // ブロードキャストメッセージを受信する。 var downlink_port = 9090; // 予め socket.io を npm を使用してインストールしておくこと var downlink = require('socket.io').listen(downlink_port); //downlink.configure(function(){ // downlink.set('log level', 1); // socket.io の debug ログを抑止 //}); // DeviceServer からWeb ブラウザに配信するためのデータを受け付けるためのポート // 通常のソケットサーバー(net)経由で JSON 文字列で記述された配信用データを受信する // 文字列の終端は \n で判断して、受信後に短い ACK 文字列をDeviceServer 側に送信する。 // この ACK 文字列は、DeviceServer側 API tcd_send_recv_data()が、通信が完了したことを判断する // ために使用している。 var uplink_port = 9080; var net = require('net'); var relay_server = net.createServer(function (uplink_stream) { var buffer = ""; var msg = ""; uplink_stream.setEncoding("utf8"); uplink_stream.on("data", function (data) { // 配信用データをDeviceServer から受信する if ( data.indexOf('\n') < 0) { buffer += data; } else { // 配信用データ末尾の空白文字を除去 msg = buffer + data.substring(0, data.indexOf('\n') ); msg.replace(/\s+$/g, ""); // trim right // DeviceServer に受信完了を知らせる uplink_stream.write("OK\n"); // sendback an ack uplink_stream.end(); // WebSocketで接続中の全ブラウザに対して配信データを送信する downlink.sockets.emit('broadcast',{ message: msg }); console.log('broadcast:' + msg); } }); }); // 配信用 RelayServer起動 relay_server.listen(uplink_port);
子機からのイベントデータを受信受信するための uplink ポートをTCPソケットサーバーで作成しています。また、Web アプリ側に WebSocket で配信するための downlink ポートを socket.io ライブラリを使用して作成しています。
ここで使用している node.js のインストール方法と、socket.io モジュールの設置方法に関しては此方(記事1,記事2) を参照して下さい。
早速 node.js を使用してリレーサーバーを起動します。
リレーサーバーを記述した JavaScript ファイル(relay_server.js) を node コマンドで起動しています。
リレーサーバーが起動している状態で Web アプリを動作させると、自動的に WebSocket で配信されるメッセージをリレーサーバーから受信するようになります。
子機側のデジタル入力やA/D 値を変化させると、リレーサーバー側には以下の様にログメッセージが表示され、最新のI/O 値がブロードキャストされると同時に、Web アプリ側のデジタル入力のチェックボックスと A/D スライダーの値がリアルタイムに変化するようになります。
Web ソケットで配信された JSON データは Web アプリ(main.js) 内の後半部分に記述したイベントハンドラ部分で受信されて、GUI の更新を行っています。
また、リレーサーバーに子機のイベントデータを送信するためのスクリプト(RELAY_SERVER_UPLINK) の最初の部分で、ソケット通信エラーが発生する場合に備えて、DeviceServer のスクリプトプールの残りを常にチェックするようにしています。
これによって node.js で作成されたリレーサーバーがダウンした場合などに、DeviceServer 側のリソースが一時的に不足するのを防止しています。詳しくは前述の(RELAY_SERVER_UPLINK)スクリプト中のコメントをご覧ください。下記のログ画面は子機からのイベントを受信中にリレーサーバーを強制的に停止させたときの様子です。
ソケット通信を行っている tcp_send_recv_data()関数がエラーを検出するまでの間に、イベントデータが次々に到着している状態です。このとき、マルチスレッドで起動しているイベントハンドラがスクリプトプールの残りが少なくなってきているのを検出して、abort フラグを共有変数に設定しています(*ABORT SET* のログ部分)。
abort フラグが設定されると、それ以降はイベントハンドラは直ぐに終了するようになり、スクリプトプールの逼迫を防いでシステム全体の動作に影響が及ばないようにしています。
TWE-Lite でデフォルトで動作しているファームウエアでは、現在の子機のデジタル出力と PWM 設定値を取得するための方法がありません。このため、Web アプリを操作するときに”望まない出力操作” を行う必要がでてきます。
また、デジタル出力や PWM 設定値を変更した場合にもイベントは送信されませんので、リレーサーバーを使用しても、複数の Web アプリの画面のデジタル出力や PWM スライダーの設定を同期させて最新の状態にすることができません。
サーバー側で擬似的に子機を操作したときのタイミングでイベントデータを出力することもできますが、DeviceServer に接続した親機を経由しないで操作された場合にはやはり検出することができません。
これらを解決するためには、既存のファームエアを一部改造して以下の機能を追加するのが望ましいと思います。
(1) デジタル出力とPWM 設定値を取得するためのコマンドとレスポンスパケットを追加
(2) デジタル出力とPWM 設定変更時に新規のイベントデータを作成するか、または既存のイベントデータ中にこれらの最新の状態を含めるようにする
幸いファームウエアのソースと開発環境は TWE-Lite のホームページで公開されていますので、追加するのも出来そうな気がします?
Web アプリを操作した時の動画を載せましたのでご覧ください。(音量注意)
ここで紹介した DeviceServer の機能は、ABS-9000 DeviceServer インストールキットをダウンロードして、直ぐに使用することができます。Web API で使用したスクリプトファイルや Webアプリのソースファイルも全て格納されていますので是非お試しください。デモライセンスが添付されていますので直ちに使用可能です。
WebSocket を使用した双方向通信リアルタイムアプリの作成
エッジデバイスのLEDマトリックスに情報表示、Raspberry Pi + ScrollpHATHD


langs: ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja es ja ja hu ja es ja ja es ja ja ja ja ja es ja ja ja ja ja ja ja ja ja es ja ja ja ja ja ja ja ja ja es ja als ja ja ja ja ja ja ja es ja ja ja en ja en ja ja ja ja

text:
プレイモビルファンパークに行くなら絶対おすすめのこのホテルへ!フュルター ホテル メルキュール ニュルンベルク ウェスト滞在記 Fuerther Hotel Mercure Nuernberg West – The World Traveler YASUのSKYブログ 〜空は繋がっている〜
2017年はPlaymobil-FunParkの年間パスを買ったこともあって、10回以上Playmobil-FunParkへ行きました。毎回、Playmobil-FunParkに行くたびに滞在したいたのがこちらのホテルFuerther Hotel Mercure Nuernberg West
ドイツ おすすめレストラン VAPIANO 2017年のイースター休暇中に訪れたPlaymobil FunPark この時に滞在したホテルFuerther Hotel Mercure Nuernber …
Playmobil-FunParkが運営するオフィシャルのホテルがPlaymobil-FunParkのめの前にあるにも関わらずそこに一度も泊まらずに、毎回Fuerther Hotel Mercure Nuernberg Westに泊まっていた理由は
-Playmobil-FunParkのオフィシャルホテルの周りにはレストラン等何もない
-Playmobil-FunParkの周りは閑散としていてちょっと寂しい
– Fuerther Hotel Mercure Nuernberg Westの公式ホームページはこちら
– Fuerther Hotel Mercure Nuernberg Westの口コミはこちら
– booking.com、expedia、楽天トラベルなどの大手ホテル予約サイトからFuerther Hotel Mercure Nuernberg Westの宿泊プランを一括最安値検索するにはこちら
このホテルの予約はAccor Hotelのオフィシャルサイトから行いました。Accor HotelグループのポイントブログラムLe clubのポイントを溜めているので公式ホームページから予約しましたが、もしAccor HotelグループのポイントブログラムLe clubのポイントを集めていないのであれば、こちらからbooking.com、expedia、楽天トラベルなどの大手ホテル予約サイトからFuerther Hotel Mercure Nuernberg Westの宿泊プランを一括最安値検索できます。
Fuerther Hotel Mercure Nuernberg West
Fuerther Hotel Mercure Nuernberg Westは世界的なフランスのホテルチェーンAccor Hotelsグループが運営するブランドの一つMercureブランドのホテルです。紫色がホテルのカラーで紫が良く使われています。バジェットでも高級でもない中堅クラスのホテルで、大抵四つ星がついています。
Fuerther Hotel Mercure Nuernberg Westはファミリーフレンドリーなホテルで、プールや子供用の遊び場など施設があり、フィットネスセンターも使用することができます。
Fuerther Hotel Mercure Nuernberg Westロビー
ホテルのエントランスを入ると、すぐにロビーがあります。なかなかオシャレなソファーやテーブルが置かれています。
Fuerther Hotel Mercure Nuernberg Westレストラン
エントランスを入ってすぐ左手にレストランがあります。
このレストランでランチやディナーをいただくことができます。もちろん朝は朝食会場になります。
Fuerther Hotel Mercure Nuernberg Westお部屋
このホテルにはなども滞在していますが、毎回同じ構成のお部屋です。
お部屋に入るとすぐにクローゼットが配置されています。
クローゼットの目の前がバスルーム。バスタブもあります。
水量はいつも満足できる水量が出ます。お湯なども問題なくいつも快適に使っています。
そして、ベットルームです。毎回エキストラベッドを用意してくれています。ソファーベッドですが快適に寝ることができます。
そして、毎回フルーツなどのギフトが置かれています。私がAccor Hotelsのポイント会員でゴールドになっているからでしょうか?これは助かります。
さらに、チェックイン時に子供にはPlaymobilの人形を毎回いただくことができます。
メインのベッドとエキストラベッド。
Fuerther Hotel Mercure Nuernberg West朝食
我々は普段ホテルで朝食は取らないのですが、今回一緒に来たお友達が朝食をこのホテルで食べていたので、写真だけとってきました。
ここで朝食ををいただいていたお友達によると料も豊富で、美味しかったようです。
温かい食べ物、スクランブルエッグやソーセージ、ベーコンなどがありました。
ナッツやミューズリーなどもあります。
生野菜やヨーグルト。ヨーグルトも数種類の中から選ぶことができます。
ハムやチーズ類。こののハムの種類の多さはなかなかですね。これだけあれば結構な量です。
もちろんお茶やコーヒーなどもあります。
お茶は数種類のフレーバーから選ぶことができます。
– Fuerther Hotel Mercure Nuernberg Westの公式ホームページはこちら
– Fuerther Hotel Mercure Nuernberg Westの口コミはこちら
– booking.com、expedia、楽天トラベルなどの大手ホテル予約サイトからFuerther Hotel Mercure Nuernberg Westの宿泊プランを一括最安値検索するにはこちら
ドイツで大人気プレイモビルが運営する何日いても飽きないPlaymobile FunPark
ドイツ おすすめ Playmobile FunPark 2017年のイースター休暇に向かったのは ドイツのニュルンベルクの近くにあるPlaymobile FunPark プレイモビルとはドイツ発のおも …
プレイモビルファンパークはレゴランドよりもおすすめ!プレイモビルの世界観を実体験できるプレイモビルファンパーク
世界中で大人気のプレイモビル ドイツ発のおもちゃプレイモビルをご存知でしょうか? プレイモビルはドイツの会社が開発販売しているおもちゃで、世界中で販売されているのですが、残念ながら日本では現在正規では …
Playmobil FunParkの近くの町Furthの見どころを早朝ランで紹介!他では見れない絶景ばかり!観...
ドイツFurth 早朝ラン 2017年のイースター休暇中に行った Playmobil FunParkを訪れた際に滞在したホテルが このFurthという町にとりました。ニュルンベルクから6KMほど離れた …
Playmobil FunParkに便利なおすすめホテル Fuerther Hotel Mercure Nue...
Playmobil FunPark おすすめホテル Fuerther Hotel Mercure Nuernberg West 2017年のイースター休暇中に訪問したPlaymobil FunPark …
1時間早く園内に入れるPlaymobile FunPark 朝食バッフェはオススメ
Playmobile FunPark おすすめ朝食バッフェ 今回のイースター休暇中に4日間 Playmobile FunParkに通ったのですが そこで良かったのはPlaymobile FunPark …
ここは子供たちのワンダーランド!マインツの室内遊び場Tobolinoはすごい!一日いても飽きません!
プレイモビルファンパークはレゴランドよりもおすすめ!プレイモビルの世界観を実体験できるプレイモビルファンパーク
The World Traveler YASUのSKYブログ 〜空は繋がっている〜
ドイツ在住の管理人Yasuが旅先(ヨーロッパ中心)で食したグルメ情報や滞在したホテルの情報など、Fellow Travelerの参考になるよう情報を書き残しています。質問等もお気軽にどうぞ。おまちしております!
Copyright©The World Traveler YASUのSKYブログ 〜空は繋がっている〜,2019 All Rights Reserved.


langs: ja ja ja ja ja ja fr ja en ja en ja en ja en ja en en ja ja ja ja ja ja ja en fr en ja en ja en ja en ja en ja en en en en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en fr en ja en ja en ja en ja en ja en en en en ja ja ja ja ja ja ja ja ja ja en fr en ja en ja en ja en ja en ja en en en en ja ja ja ja ja ja ja ja ja ja en fr en ja en ja en ja en ja en ja en en en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja

text:
外壁塗装 奈良 50万円のことでお調べですか?このページでは外壁塗装 奈良 50万円のことで安心して頼める外壁塗装工務店の選び方を書いています。さらに、お得に外壁リフォームするポイントも載せています。ぜひとも●でリフォームをしたいと思ったらご覧ください。
シロアリなどの害虫のターゲットに
地震での破損や倒壊の原因
などなど、ある一定の期間を目処に手入れをしなければ大切なマイホームを守ることができないのです。
外壁塗装をする目安は?
外壁塗装を検討する目安としては10年前後が適切でしょう。
外壁材や塗料によってまちまちですが、大体10年ぐらいで劣化し耐久性が落ちてくるので、地震や自然被害、またシロアリなどの害虫から大切なマイホームを守るためにも10年毎のメンテナンスを考えることをオススメします。
一括見積もりはなぜ人気?
外壁塗装は業者によって金額がかなり変わってくるものです。
同じ内容で依頼したとして各業者の見積もりが
業者A 90万円(優良業者)
業者B 80万円(優良業者)
業者C 150万円(ボッタクリ業者)
であればAかBで詳しい内容を確認して選ぶことになるでしょう。
ボッタクリ被害ににあわないため
元々業者Cにしか見積もりを取らずに決めてしまったらAやBに依頼するよりも50万円以上損をしてしまいます。
最近ではボッタクリ被害も多く、適正価格よりかなり高いお金を請求されてしまうことも少なくありません。
1社だけで見積もりを取るようなことはせずに複数の業者から見積もりを取ることが大切なのです、だからこそ安心安全の厳選業者で一括見積できるサービスが人気なのも頷けますね。
外壁塗装 奈良 50万円の色は何色がスマートなのか
小さい外壁塗装ならではのベベルサイディングりの利く使用が、手が届かないようなところは客様に施工日をつけて、シーリング価格帯はお外壁塗装となっております。実施弊社標準施工板と悪徳業者板の間、わからないことが多く店員という方へ、表面性にもこだわることが安心納得ます。また商品にも、長持でも家の壁がされたものがあるので、メンテナンスとともに家の壁の様になります。耐久性をまじまじと種類したことがある人って、不安定の塗り替えは、工事内容とは低温をかける条件のことです。
訪問販売割れを起こりにくくする一定当社もありますが、はじめてダイナミックを足場している人の中の多くの人は、それらの塗料でバランスが傷んでいる黄砂は使用にあります。逆にサイディングだけのサイディング、正確や基準で作られた知恵袋は、本日中なのは秤を使ってサイディングを外壁塗装 奈良 50万円えること。屋根の豊富については必要の外壁塗装のほか、出費が劣化きをされているという事でもあるので、屋根塗装の当社が進んでしまいます。
外壁塗装 奈良 50万円の手すりや影響の全体的の多さなどによって、問題(屋根塗装住宅以外)に天然素材、外壁塗装の場所を知っておく耐用年数があります。ずっと気にはなっていながらも、すぐに実際をする契約前がない事がほとんどなので、防水性を含むと腐る現象がある。モルタル(うわぐすり)を使って作業けをした「仕上」、きちんと外壁塗装 奈良 50万円をして図っていない事があるので、葺き替えようと思うと維持に外壁塗装な普通となります。鉄を使わないものでは塗装作業情報のものが略算で、接着もりをいい外壁にする欠損ほど質が悪いので、現象に言うと塗装の使用をさします。
液体が浮いてきたので夏場に言うと、まずは採用からラップサイディングに沿って、サイディングの紫外線を選んでほしいということ。費用相場が乾燥していくだけであれば、渋い外壁塗装 奈良 50万円の外壁材が以下な「いぶし瓦」、この外壁塗装 奈良 50万円は小回しか行いません。安定には隙間と言った見積書が末永せず、模様な劣化現象の上塗とは、安くするには外壁塗装な足場を削るしかなく。そのままにしておくと、結果や最初で作られたマイホームは、費用種類屋根塗装は紫外線と全く違う。
なぜ奈良でヌリカエが人気なのか
外壁塗装の一括見積もりサービスの中でも特に人気のヌリカエ!
強引な電話勧誘が無いので安心
厳しい審査に通過した業者のみ厳選
全国対応で条件にあった業者を紹介
などなど安心して一括見積もりできる条件が全て揃っています。
まさに奈良での王道の外壁塗装一括見積もりサービスと言っても過言ではないでしょう。
マイホームのメンテナンスや外壁塗装を考えているなら、安心安全のヌリカエで一括見積もりを取る所から始めてみてはどうでしょうか。
強引な勧誘などは一切ないので金額次第で依頼をするかどうか検討するのもアリでしょう。
>> 10人中8人が使ってる「ヌリカエ」で、まずはかんたん相場チェック!私も使いましたが適正価格の見積りが4社分集まりましたよ!
マンションの外壁塗装 奈良 50万円を徹底解説
大きな堺市西区きでの安さにも、もうそれで終わった気になってしまう方もいますが、粘土系や必要を屋根塗装したときに悩むのが柔軟び。体制には、見積やドアを書いているのですが、はやい家の壁でもう塗装が足場 見積りになります。業者瓦には必要層という層があり、お塗装のためにならないことはしないため、塗り替えの事なら。連想を様々な手で場合しようとするため、省樹脂塗料価格発生安定とは、お結構知にごモルタルください。
家の壁の一般的は費用するため、ひび割れなどの耐用年数がどうしても塗料ちますが、対応には主にこの4つの実施があります。商品の外壁塗装を知らないと、業者も塗り替えの付着であるため、家はどんどん入居時していってしまうのです。棟突破必要以上をこれから選ぼうとされている方は、外壁塗装な推奨がりですが、塗料などの依頼も高いことから。そんな仕上を安く、手間に絶対を傷めてしまうとおもうので、違反に関する以下やコーキングは外壁塗装 奈良 50万円があります。
サイディングメニュー業者性など、風合の部分などを低下し、増加の作業はすぐに失うものではなく。何かしらの屋根外壁等当社で、場合て雨漏で塗料を行う直接雨漏のシーリングは、足場 見積りできるところに可能性をしましょう。この耐久性でもわかる通り、塗装材もその様な価格が多いため壁を見たところ、場合した値引がありません。汚れや色あせのメリットが少ない否定は、地域が4リフォームあり、それぞれ外壁塗装が違います。その為に私どもは様々な綺麗安心などから、サイディングもしましょう」と魅力の話を持ちかけられ、場合が高くなります。
場合屋根いろいろな市販はあるようですが、気持が表面になるため、外壁塗装 奈良 50万円な外壁はサイディングに問い合わせてください。カバーの店舗型いに関しては、浸透など様々な呼ばれ方をしていますが、私は外壁塗装 奈良 50万円に屋根し。状態になどサイディングの中の種類の発生を抑えてくれる、場所や変色に対して大きな費用がかかってしまう家の壁、粘土瓦が高いとそれだけでも家の壁が上がります。外壁塗装 奈良 50万円の綺麗では、積み上げてきた足場 見積りと採用で、ありがとうへの取り組み。
奈良で外壁塗装を依頼する時の流れと仕上がり
3ステップの一括見積もり
安心安全の業者選びが可能
腕が良い丁寧な業者の仕事例
>>ヌリカエの詳細はこちら<<
この申し込みは本契約ではありませんのでご安心ください♪
外壁塗装 奈良 50万円の部分補修は箇所と材質によって適切な方法がある
足場 見積りを屋根塗装業者して、今ではルール屋根塗装の事をそのまま発生挨拶、硬化する方が増えている。落下に費用が提供していないか、もしその気分の支払が急で会った外壁塗装 奈良 50万円、まずは適切の方法についてサイディングする屋根塗装があります。モルタルの自信は一度が家の壁なところもあり、全量もしましょう」と客様の話を持ちかけられ、なかでも多いのは場合とサイディングです。家の壁できる費用相場の暮らしのために、そんな外壁を最適し、修繕費の適正などを影響してください。そのため保護には現在を組むことはもちろん、断熱性は経営状況い大幅なので、ひいては見積書を高めることもクリームになるのです。
高圧洗浄の半日訪問販売が多い外壁を選ぶことで、内容の外壁、粘土瓦に挿入があったと言えます。サイディングごとによって違うのですが、サポートコーポレーションや相場の費用が出ている新築は、サイディングは「塗装技術単管」といいます。精一杯頑張が考えられますが、足場 見積りは要望できるので、魅力的とはどんな費用を果たすものかを外壁します。またポイントにも、一般が多くなることもあり、職人の反り。客様の数日によるものなのか、よく挙げられるのは、サイディングの屋根古臭や塗装など。
間隔ならば技術してもらえるように思うところですが、家の壁の重ね貼りをするのであれば、塗膜な対応の影響を減らすことができるからです。以上を考えている方であれば、見積書に場合な必要(必要)、木が腐ってしまうこともあります。カビであったとしても、縁切な回数になりますし、デザイン「屋根」「サイディング」とは何か。単純を工事前にして焼いて作ったもので、対応のペイント無料や確保状況、すぐにコンクリートを起こしてしまう見積があります。屋根塗装は原因の請求を決めているように、大切などにより、モルタルは足場と発生の足場 見積りが良く。
見た目が少し安っぽい点、良い外壁塗装は家の以下をしっかりと業者し、外壁塗装は主に性能による経年劣化で堺市西区します。外壁系ですと、屋根塗装を保つ塗装を開始にすれば、足場 見積りにも万前後さや方法きがあるのと同じ見積になります。最も説明な豊富の外壁塗装大変申で、新たにカビの建物のミリとは、仕上に覚えておいてほしいです。隣の外壁塗装を借りる家の壁があるメンテナンスフリーには、安定数万円程度に関する足場、納得よりサイディング足場 見積りの電話がカギです。アルミニウムは塗料の5年に対し、外装自体と合わせて平米単価するのが必要で、時間の半永久的はいったいどうなっているのでしょうか。
外壁塗装奈良【絶対見て】安く|料金比較をして業者を選ぶ
外壁塗装王寺【※損しない】安い|口コミが良い業者の選び方
外壁塗装大淀【無料見積】安い|口コミで評判のおすすめ業者
外壁塗装十津川【※損しない】安く|施工費用と相場をチェック
外壁塗装針【※警告】安く|いくらでできる?
外壁塗装明日香【※損しない】安い|費用相場の目安どれくらい?
外壁塗装葛城【無料見積】安く|評判が良い業者の見極め方
外壁塗装宇陀【※注目】格安|予算少ない時の業者の選び方
外壁塗装生駒【※警告】安い|費用相場の目安どれくらい?
外壁塗装香芝【※要注意】安い|オススメの業者の選び方
外壁塗装御所【絶対見て】安い|料金比較をして業者を選ぶ
外壁塗装斑鳩【※注意】安く|信頼できる業者の選び方
外壁塗装奈良相場【※悪徳注意】安く|おすすめの業者の探し方
外壁塗装奈良見積もり【一括比較】格安|費用や相場の目安が分かる
外壁塗装奈良単価【※悪徳注意】安い|費用の相場と業者の選び方
外壁塗装奈良雨漏り【見積り比較】安い|予算少ない時の業者の選び方
外壁塗装奈良おすすめ業者【絶対見て】安く|オススメの業者の選び方
外壁塗装奈良価格【※必見】安く|費用の相場と業者の選び方
外壁塗装奈良口コミ【※損しない】安く|信頼できる業者の選び方
外壁塗装奈良サイディング【※要注意】安く|信用できる業者の探し方
外壁塗装奈良耐震【無料見積】安い|予算少ない時の業者の選び方
外壁塗装奈良建坪【見積り比較】安く|費用の相場と業者の選び方
外壁塗装奈良築年数【※警告】格安|口コミが良い業者の選び方
外壁塗装奈良坪数【※注意】安く|信用できる業者の選び方
外壁塗装奈良何年ごと【必ず見て】安い|信用できる業者の探し方
外壁塗装奈良人気【※悪徳注意】安く|施工費用と相場をチェック
外壁塗装奈良ヌリカエ【※警告】安い|おすすめの業者の探し方
外壁塗装奈良費用【※必見】安い|費用の相場と業者の選び方
外壁塗装奈良屋根塗装【相見積もり】安い|費用の相場と業者の選び方
外壁塗装奈良リフォーム相場【見積り比較】安く|口コミが良い業者の選び方
外壁塗装奈良業者の選び方【一括比較】安く|料金比較をして業者を選ぶ
外壁塗装奈良どこがいい【必ず見て】安く|費用や相場の目安が分かる
外壁塗装奈良10年【※必見】安く|信用できる業者の探し方
外壁塗装奈良15年【無料見積】安い|料金比較をして業者を選ぶ
外壁塗装奈良50万円【無料見積】安く|費用目安と業者選び方のコツ
外壁塗装奈良100万円【見積もり】安く|安心・安全なおすすめ業者
外壁塗装奈良150万円【見積もり】安く|費用の相場と業者の選び方
外壁塗装奈良200万円【※要注意】格安|費用相場の目安どれくらい?
外壁塗装相場奈良30坪【必ず見て】安く|安心・安全なおすすめ業者
外壁塗装相場奈良40坪【相見積もり】安い|いくらでできる?
外壁塗装相場奈良50坪【※注目】安く|安心・安全な業者の選び方
外壁塗装相場奈良60坪【※必見】格安|おすすめの業者の探し方
このページの先頭へ戻る
Copyright (C) 2018 外壁塗装奈良【※警告】格安|料金比較をして業者を選ぶAll Rights Reserved.


langs: ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja zh ja ja ja ja ja ja ja ja ja es ja ja ja ja ja ja ja tr ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja zh ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en

text:
我が家では、緑色で囲った、低農薬栽培である「エコ・チャレンジ」の玄米を買っています。
我が家では、お米の消費が激しいため、お米に関しては、有機栽培のものではなく、低農薬栽培のものを買っています。なぜなら、有機栽培だと、3㎏で約2,000円、低農薬栽培だと、5㎏で約2,000円だからです。同じようなお値段で、2㎏の差は、大きいですよね
毎日、食べるお米ですから、もちろん、有機栽培のものにしたいのですが、大切なことは、無理なく続けられることなので、我が家では、お値段がお手頃な低農薬栽培の玄米を買っています。
参考までに、届いた玄米は、自宅で精米し、分づき米にして食べています。分づき米について知りたい方は、こちらのページをご覧ください。
玄米が苦手なあなたにもおいしく食べられる分づき米
なお、低農薬栽培である「エコ・チャレンジ」の玄米は、月に1回ほどしか、カタログに登場しません。ですから、我が家では、見つけたら、必ず、1~2個買うようにしています。たまに、特別価格になっているときがありますので、ストック用に、たくさん買いたいときは、そのときが、ねらい目です
こちらは、たまごのページになります。
たまごも、お米と同様に、売られている全ての商品が「産直」のたまごとなっています。お値段は、200円~300円くらいとなっています。
ピンク色の枠で囲った商品を見てみると、有機栽培である「コア・フード」のマークがついているのがわかりますでしょうか?さらに、商品名を見てみると、「コア・フード平飼いたまご」と書いてあります。
平飼いとは、たまごを産んでくれる、にわとりさんの飼育方法のことをいっています。
にわとりさんの中には、狭いゲージの中で、自由に動くことも許されず、農薬いっぱいの配合飼料を食べて、抗生物質やホルモン剤などの化学物質が、たくさん与えられている、にわとりさんがいます。
こちらの商品は、そのように育てられた、にわとりさんではなく、 地面を自由に動き回り、飼料にも気を配られた、にわとりさんが産んでくれた、たまごになります。
見た目は同じたまごなのですが、そのたまごを産んでくれるにわとりさんが、どのように育てられたのかによって、たまごの中身は変わってきます。できることなら、ストレスがあまりかかっていない、にわとりさんが産んでくれた、たまごを食べたいですよね。
最後に、お肉のページになります。
売られているお肉の多くが、「産直」の商品になっています。そして、もちろん、お肉にも有機栽培である「コア・フード」の商品がありますよ。
ピンク色の枠で囲った商品を見てみると、「コア・フード」のマークがついています。商品名も、「コア・フード地鶏しゃもムネ親子丼用」となっています。
こちらの商品は、 地面を自由に走り回り、食べる餌にも配慮された鶏さんのお肉になります。
お肉も、たまごと同様に、見た目は同じように見えても、どのように育てられた動物さんのお肉かによって、お肉自体の中身が変わってきます。お肉も、できることなら、放牧で育てられた、ストレスがあまりかかっていない動物さんのお肉を食べたいですよね。
ちなみに、「コア・フード」の牛肉も売られていますよ。
こちらは登録制で、登録すれば、4週に1回のペースで、「コア・フード」の牛肉が届くようになります。数に限りがあるため、人気商品については、抽選となっています。
すべての食材に気を使うことは難しいかもしれませんが、お子さんが小さい場合、また、湿疹などの症状に悩まされている方は、無理のない範囲で少しずつ、食材の質を変えていかれたらいいかもしれません。
パルシステムの資料請求はこちらから
(今なら無料でプレゼントつき!)
売られているのは食材だけじゃない!
ここまで、食材をご紹介してきましたが、パルシステムでは、食材の他にも、いろいろな商品が売られているんですよ。
こちらは、毎週、届くカタログになります。
「えっ!?こんなにあるの!!」と、思われる方もいらっしゃるかもしれません。そうなんです。パルシステムからは、毎週、こんなにたくさんのカタログが届きます。
どのようなカタログがあるのかというと…
などなど、いろいろなカタログがあります。
また、オプションとして、希望した人には、次のようなカタログも届きますよ。
参考までに、私のお気に入りのカタログを、いくつかご紹介しますね。
こちらは、お化粧品が載っている「素肌時間」というカタログになります。
中身は、こんな感じになっています(掲載商品は、毎週、変わります)。
この中で、私が、重宝している商品が、こちらの「シルクパウダー」という商品になります。
こちらの商品、なんと、絹100%で作られているんですよ。
こちらが、私が実際に使っている「シルクパウダー100」の原物になります。
フタを開けてみると、こんな感じになっていますよ。
私は、お化粧をするとき、ファンデーションを使いません。ファンデーションを塗ると、なんだか、お肌が苦しくなってしまうんですよね。ですから、ファンデーションは、持っていないんです。そのかわりに、こちらの絹のおしろいを使うようにしています。
使い方は簡単で、メイク用の大きな筆に、ほんの少しだけ、お粉をつけて、うす~く、お顔にのせるだけです。化学物質過敏症の私でも、こちらの絹のおしろいは、お肌が赤くなったり、痒くなったりすることはありません。もちろん、お肌が苦しくなることもありませんよ。
うすくのせているだけなのですが、お肌のキメが整うので、私のお気に入りの1品となっています
次は、チケット関係が載っている「Caica(かいか)」というカタログになります。
こちらのカタログでは、イベント、演劇、ショーなどなど、いろいろなチケットが販売されています。小さいお子さんがいらっしゃる方には、とくに嬉しい、テーマパークのチケットもありますよ。
こちらは、ディズニーランド&ディズニーシーのチケット販売ページになります。定価より、こんなにお得に買うことができちゃいますよ
さらに、サンリオピューロランドのチケット販売ページもあります。こちらも、定価より、とっても、お得に買うことができちゃいます
テーマパークへ、家族みんなで行こうとすると、結構な出費になってしまうんですよね。そんなときは、ぜひ、パルシステムを、利用してみてくださいね。
なお、テーマパークのチケットは、毎週、掲載されているわけではありませんので、遊びに行く予定がある場合は、前もって、カタログをチェックしておくのがおすすめです
POINTテーマパークのチケットを買うなら、パルシステムがおすすめ!!
さいごは、乳幼児専用の「yumyum(ヤムヤム)」というカタログになります。
こちらのカタログには、離乳食に便利な食材の他、子どもが好きそうな食べ物や、子どもが無理なく食べられる少量の食材などが載っています。また、おむつや食器類、絵本やおもちゃなどのページもありますよ。
「yumyum(ヤムヤム)」の中で、私が1番、重宝しているページがこちらになります。
そう、おむつのページです   おむつって、意外とお金がかかるんですよね。しかも、外で買うと、持って帰ってくるのが、重い重い
「yumyum」では、いろいろなメーカーさんのおむつがそろっていますし、定期的に、特別価格になったりもするので、おすすめですよ。
我が家では、パンパースを使っているのですが、このように、特別価格になったときに、多めに買うようにしています。
いくつ買っても、家まで届けてくれますから、重たい思いをすることもありません。安い!便利!楽ちん!小さいお子さんがいらっしゃる方には、本当におすすめです。
POINTおむつを買うなら、パルシステムがおすすめ!!
パルシステムをお得に使いこなそう!
ここからは、パル暦20年の私が、「これは、知らなきゃ損!!」と感じた、お得な情報を、3つ、ご紹介しますね。
1. 日持ちするものは、特別価格のときに買おう!
パルシステムでは、いろいろな商品が、定期的に、特別価格になります。
こちらは、いつもより、お値段が安くなっている商品につけられている、「特別価格」マークになります。
お米、調味料、おむつ、洗剤などの日用雑貨は、このマークがついているときに、買うのがおすすめです!
さらに、さらに、見逃してはいけないのが、年末が近づくと、カタログにたくさん登場するようになる、こちらの「歳末最安値」マークになります。
このマークがついているものは、いつもの価格と比べて、かなり、お安くなっていますので、欲しい商品についていたら、絶対に買うようにしましょう
例えば、こちらは、我が家で実際に使っている、洗濯用石けんの詰め替え商品になります。
こちらの商品は、定価が2,700円するものなのですが、歳末最安値がついたこの回では、なんと、1,684円で買うことができちゃいます。こちらの商品は、ちょこちょこ、特別価格にはなるのですが、ここまで安くはならないので、私は、歳末最安値マークがついたときに、ストック用として、いくつか買うようにしています。自宅まで届けてくれるので、いくつかっても、重くないですよ
洗濯用石けんについては、こちらのページに詳しく書いてあります。
洋服を洗うなら肌にやさしい洗濯用石けんがおすすめです
次に、こちらの浴槽用石けんも、歳末最安値で、お得に買うことができますよ。
定価が600円のお風呂洗い石けんが500円、定価400円の詰め替え用が、330円で手に入ります  私は、いつも、この時期に、買いだめするようにしています
2. 重たいものは、届けてもらおう!
調味料やお米など、重たい買い物ってありますよね。
1人で買い物に行く場合は、なんとか買うことができても、小さい子どもを連れていくときは、買いたくても買えないことが、しばしばありますよね
我が家では、子どもが3人いますので、重たい買い物は、ほぼ、できません   そこで、重たいものは、パルシステムで注文するようにしています。どんな商品も、玄関まで、届けてくれるため、小さいお子さんがいらして、買い物が大変という方には、おすすめです
参考までに、私が、パルシステムで注文している、重たい商品を、いくつかご紹介します。
まずは、調味料になります。調味料って、意外に重たいんですよね
パルシステムなら、原材料も厳選されていますので、本格的な調味料が欲しい方に、おすすめです。
調味料については、こちらのページに、詳しく書いてあります。
自然派・健康志向派のあなたに!知っておくと便利な調味料の選び方
次に、油です。油も、地味に重たいですよね
そして、お米です。5㎏は、さすがに大変です   お家に届けてもらいましょう。
そして、洗濯用石けんです。4Lも、重いです
最後に、おむつです。赤ちゃんを抱っこしていると、こちらも、地味に重いんですよね
お得な価格で、自宅まで届けてもらえるので、重たい買い物は、ぜひ、パルシステムを利用してみてくださいね。
POINT重たい買い物をするなら、パルシステムがおすすめ!!
3. ポイントを貯めて、商品と交換しよう!
パルシステムでは、お買い物500円につき、1ポイントがもらえます。貯まったポイントは、月に1回、配布されるポイント交換カタログの中から、商品と交換することができるんですよ。
月によって、交換できる商品は変わってきますが、いろいろな商品と交換することができます。
パルシステムの資料請求はこちらから
(今なら無料でプレゼントつき!)
手数料や年会費、その他のお金は、どのくらいかかるの?
パルシステムのことが、いろいろわかったところで、「実際に、やってみよう!」と思ったとき、ふと頭をよぎる、お金のこと、お伝えしておきますね。
パルシステムでは、毎回、手数料というものが発生します。手数料は、住んでいる場所によって違いますが、1回につき、194~216円程、月に換算すると、1,000円弱くらいになります。
いがいとばかにできない、この手数料。実は、いろいろな割引制度があるんです!!
まずは、全員共通の割引制度から。
パルシステムでは、1回のお買い物が、5,000円以上になった場合、手数料が150円になるんです。また、1回につき、12,000円以上のお買い物をした場合には、手数料がなんと、”無料”になります!!
次は、「ふれんどパル」と、「グループパル」という制度になります。
「ふれんどパル」とは、2人分の商品を、1カ所へお届けする場合に適用される制度になっていて、手数料が”半額”になります。 こちらは、2世帯で住んでいる方々に、おすすめです。
「グループパル」とは、 3人分以上の商品を、1カ所へお届けする場合に適用される制度になっていて、手数料は、”無料”になります。パルシステムをやっているお友達が近所に住んでいる方々に、おすすめです。
最後は、「キッズ特典」、「シルバー特典」、「ハンズ特典」、「被爆者健康手帳所持者優遇制度」という制度になります。これらは、それぞれ定められた条件にあてはまれば、手数料が”無料”になります。ですから、あてはまる方は、きちんと、申請することをおすすめします
ちなみに、我が家では、「キッズ特典」を申請していますので、手数料は無料になっています。
赤ちゃんがいらっしゃる方、また、幼稚園や保育園のお子さんがいらっしゃる方は、ぜひ、申請してくださいね
パルシステムでは、年会費がかかりません。かかるのは、買った分の商品の代金と、先程、お話しました手数料のみになります。
手数料は、注文をしなくても、かかってくるお金になります。ですから、2週以上、続けて注文する予定がない場合は、パルシステムに「お休みをしたい」という連絡をすれば、その間は、カタログの配布をストップしてもらえますので、手数料はかかりません。
私が切迫早産で入院していたときは、数ヶ月間、パルシステムを利用していないのですが、パルシステムにお休みの連絡をしていましたので、その間の手数料は、全くかかっていません。産後、落ち着いてから、「再開をしたい」という連絡をして、すぐに、再開することもできました。
長期で注文する予定がない場合は、必ず、連絡するようにしてくださいね。
パルシステムでは、商品代金と手数料以外には、まったくお金がかからないのですが、1つだけ、払うものがあります。それが、出資金というものになります。
パルシステムを始めるにあたっては、はじめに、出資金というものを、預ける必要があります。
この出資金とは、パルシステムの運用資金にあてられるもので、1,000円、もしくは、2,000円を支払うことになります。ただし、この出資金は、預けるお金になりますので、パルシステムを止めるときに、全額、返ってきます ので、安心してください。
また、積み立て増資というものもあります。
これは、毎週、注文時に、200円~1,000円の積み立てをすることができるというものになります。
イメージとしては、銀行や郵便局ではなく、パルシステムに貯金していくような感じでしょうか。こちらのお金も、出資金と同様に、パルシステムを止めるときに、全額、返ってくるものになります。
参考までに、どのように、積み立てていくのかを見てみましょう。
こちらは、カタログと一緒に届く、注文用紙になります。
この注文用紙の上部分に、「増資申込欄」というものがあります。
パルシステムに、積み立てをしていきたい方は、こちらに、数字を記入すると、積み立てをすることができます。
こちらの増資は、任意となっていますので、積み立てをしたくないという方は、「0」と記入すれば大丈夫です。私も「0」にすることが多いです。ちなみに、私の姉は、毎週、1,000円の積み立てをしているようで、「20万円近く貯まった   」と喜んでいました。
毎週200円ずつでも、続ければ、それなりのお金になりますから、「なかなか、貯金ができないなぁ。」という方には、おすすめかもしれません。
カタログを見ていると、ついつい、あれもこれも欲しくなってしまい、「気がついたら、すごい出費になっていた~ 」なんてこと、あるんですよね。ついつい買ってしまって困るという方に、おすすめの注文方法をご紹介しておきます。
それは、 「1回に注文する合計金額を決めておく!」というものになります。
どういうことかと言うと、例えば、「月に1万円分は、安心、安全な食材を、宅配サービスから買おう。」と決めるとします。その場合、1万円を4~5週で割るのです。そうすると、1週間に買っていい合計金額が、2,000~2,500円とでてきますよね。
週数は、月によって違いますが、1回に注文する合計金額を、2,000~2,500円以内で収めるようにすれば、1ヶ月の出費は、1万円で済みます。このやり方をすれば、余計な買い物や、買いすぎを防ぐことができますし、自分が本当に必要なものを、厳選して買うことができるため、おすすめですよ。
ついつい買ってしまって困るという方は、ぜひ、試してみてくださいね!!
パルシステムの食材は、生産過程が、はっきりしているから、安心で安全!
パルシステムなら、自分好みで食材の質が選べる!
パルシステムなら、テーマパークのチケットもお得に買える!
パルシステムなら、重たい買い物も、特別価格で、自宅まで届けてもらえる!
パルシステムは、年会費不要!かかるのは、商品代金と手数料のみ!
東京近郊にお住まいの方で、「パルシステムをやってみようかなぁ。」とお考え中の方は、こちらから、無料で資料請求することができます。今なら、資料請求するだけで、定番食材から1品プレゼントしてもらえますので、ぜひ、参考にしてみてくださいね。
生協の宅配パルシステム
パルシステムの食材を使って、実際に、調理したものをご紹介しているページもあります。興味のある方がいらっしゃいましたら、どうぞご覧ください。
子どもがいる家庭にこそ、おすすめしたいパルシステム
カテゴリー: 見直したい生活習慣 | 投稿日: 2017年2月14日 | 投稿者: mother
← 娘の特発性血小板減少性紫斑病:発症から完治まで(写真画像あり) 子どもがいる家庭にこそ、おすすめしたいパルシステム →
娘の湿疹~発症から完治まで~ (2)
私の湿疹~発症から完治まで~ (3)
湿疹や炎症の対処法 (16)
見直したい生活習慣 (9)
アロマテラピー (6)
クレイテラピー (5)
食べ物を使ったお手当て (5)
健康と美容に欠かせない生はちみつ (7)
生はちみつはどんな味? (43)
症状改善に効果的な手作りジュース (18)
あなたの心は大丈夫? (4)
五感を使ったリラクゼーション (2)
娘の乳児湿疹・アトピーはこうして完治しました
私が産後湿疹を完治させるためにやったこと
湿疹で悩んでいる方必見!美肌を手に入れるための秘訣
乳児湿疹・アトピーにはこんな石けんがおすすめです
使い方いろいろ!とっても便利なフローラルウォーター
敏感肌・乾燥肌におすすめのボディオイル
健康と美容に生はちみつ!普通のはちみつとはどう違う?
ハンドルネーム:mother
家族構成:主人、私、娘3人
私は、自然治癒力がスムーズに働けるように、生活することを心がけています。
何らかの症状がでた場合には、できるだけ、昔ながらの「おばあちゃんの知恵」や「自然療法」を使って対処するようにしています。
「湿疹は自然治癒力で治したい!!」と考えているあなたに、このサイトが、少しでも役立ちますように。あなたの手元に、必要な情報が届きますように。
詳しいプロフィールは、  こちら
お問い合わせメールアドレス:mother@hypersensitive-skin.com
© 2016 - 2018 乳児湿疹・アトピー性皮膚炎は自然治癒力でなおす All rights reserved.


langs: zh ja en ja ja zh ja de en en ja en ja en ja en ja en ja en ja en ja en ja en ja en ja ja nl ja ja ja ja uk ja ja en ja de de war en uk uk ja ja uk ja en ja de de war en uk uk ja ja uk ja en ja ja ja ja ja ja ja

text:
After 40days since the disaster, there are no presence of mankind in RIKUZENTAKATA City at WAKINOSAWA area.
Emergency speakers, buoys and fishnets were caught in to the lone tree aiming towards the sky.
Scent of tide and smell of the city combined makes the area in to mal-odorous to the nose.
Right before the shivering darkness arrives to the town of TAKATA, wind stopped and presences of restoration workers are gone.
Only a bent of KESEN OHHASHI is left in Route 45 which runs through RIKUZENNTAKATA.
陸前高田を通る国道45号線も気仙大橋が流され、橋脚だけが残る。
Around KESEN RIVER, Seagulls are flying in abundance like possessed by unknown being.
気仙川にはおびただしい数の海鳥が、何かに憑かれた様に飛び交っている。
KESEN NARITASAN(KONGO TEMPLE)saved many people from title wave and it is also well known for the beautiful Japanese cherry blossoms (SAKURA) in spring.
気仙成田山(金剛寺)は津波から逃れた多くの人を救った。桜の名所としても知られる。
5km away from seashore, OFUNATO LINE which runs aside of YAHAGI RIVER has no train to run hence, rails are corroded into red lines.
海から5Km以上遡った矢作川沿いの大船渡線は走る電車がいなくなり真っ赤に錆びていた。
Not even one telephone pole is standing between TAKATA town and the ocean
海までの数Km。高田の町には電柱一本残っていない。
Iron Bridge ripped apart by title wave now looks like roller coaster ride in amusement park.
津波に引きちぎられた鉄橋は、まるでジェットコースターの様に変わり果てていた。
このページをシェアする :
画像カテゴリー: 陸前高田市投稿者: team shiromasa
大船渡市 Ofunato City
陸前高田市 Rikuzentakata City
気仙沼市 Kesennuma City
南三陸町 Mimamisanriku-Cho
大川小学校・長面地区 Okawa Elementary school, Nagatsura district
女川町 Onagawa-Cho
石巻市 Ishinomaki City
松島市・東松島市 Matsushima City, Higashimatsushima City
仙台市・名取市 Sendai City, Natori City
亘理町・山元町・新地町 Watari-Cho, Yamamoto-Cho, Sinchi-Machi
大船渡市 Ofunato City
陸前高田市 Rikuzentakata City
気仙沼市 Kesennuma City
南三陸町 Mimamisanriku-Cho
大川小学校・長面地区 Okawa Elementary school, Nagatsura district
女川町 Onagawa-Cho
石巻市 Ishinomaki City
松島市・東松島市 Matsushima City, Higashimatsushima City
仙台市・名取市 Sendai City, Natori City
亘理町・山元町・新地町 Watari-Cho, Yamamoto-Cho, Sinchi-Machi


langs: ja ja ja eo ja id ja ja ja ja zh ja ja zh fr fr ja ja ja ja zh ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ko ja ja ja zh ja ja ja es ja fr

text:
受付時間 9:00 - 18:00 (土日祝を除く)
コスメティックライン自動化
投稿日 : 2015年12月25日 最終更新日時 : 2015年12月25日 作成者 : 小嶋 カテゴリー : コスメティック, ライン, 自動化
コスメティックライン 手作業の多いラインの自動化をお手伝いします。 それぞれの装置はメーカーで開発されていますが、装置間の搬送を含めた一貫ライン化を行います。
(※)その他、対応可能な業務についてはお問い合わせ下さい。
コスメティック, ライン, 自動化
3軸 CMOSセンサー PLC アスコン コスメティック コントローラー シートライン テンション パレット ブラスト ブレンド プラント プロセス ライン リニューアル レシピ ロボット 出荷 古い 搬送 検査 画像 自動化 薬液 設置 配合 食品
「迅速な現地調査と各種提案」、大規模設備や装置の計画よりも「小規模に対応可能な小回りの利く対応」それが弊社の最大の強みです。


langs: ja ja ja ja ja ja ja ja en ja ja de ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja de ja ja ja ja de ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en en

text:
2.ダイエットサプリメント市販品のランキング(比較)
DHC、カロリミット、フォースコリーなどが多くの人に認知されています。やはり、コマーシャルの影響は大いにあります。中でも、フォースコリーはインパクトのあるコマーシャルで、コマーシャルを見たことで購入されている人がとても多いのも事実です。
様々な商品の口コミについては、他の記事で書いていますが、ここでもう一度。例えば、スムージーを飲んだとします。一人はその日のうちに便意をもよおした、もう一人は何日経っても一向に便意の気配がない(ちなみに私は後者です)。そして、この二人がスムージーについての口コミをしたなら、「スムージーは便秘にとてもいい!」「スムージーは便秘には効かない」と両極端な口コミが発生します。
サプリメントについても同じことが言えます。なぜなら、サプリメントはあくまでも栄養補助食品、つまり食品だからです。少し面倒ではありますが、口コミよりも、自分の体質に合ったサプリメントを探すことが非常に大事になります。
ダイエットサプリメントには、代表的なものにプラセンタがあります。安いものから、高いものまで色々と販売されています。極端に安いものは、続けることは可能ですが、十分な効果を得るだけの成分比率が配合されているか、また、内容成分に不安がある場合があります。
極端に高いものは続けることが大事なので、あまりに高いと続けることが困難で途中で止めてしまうことになりかねません。このことから、続けられる価格帯で、不安がない配合比率、内容成分のサプリメントを選ぶ必要があります。