もちゅるの日常

特に決まっていないざっくばらんなブログ

RxSwift Scheduler(スケジューラ)の一覧と使い方

RxSwiftを使っていると必ず出てくるScheduler(スケジューラー)ですが、どんな種類があるのか把握できずに使っていました。

このままだと実装の自由度が変わらずでもったいないので、一覧と使い方を少し調べてみることにしました。

なおここで提案している使い方が答えと思わず参考程度にすることをオススメします。

使い方は1つではないですもんね。

Scheduler(スケジューラ)とは?

そもそも分からない人に超絶ざっくり説明すると、Schedulerとはスレッド制御とまずは覚えておいて、のちのち慣れてきてから詳しく知る順番でいいと思います。

Scheduler(スケジューラ)一覧

  • MainScheduler
  • ConcurrentMainScheduler
  • SerialDispatchQueueScheduler
  • ConcurrentDispatchQueueScheduler
  • OperationQueueScheduler
  • CurrentThreadScheduler
  • ImmediateScheduler
  • HistoricalSchedulerTimeConverter
  • VirtualTimeScheduler

MainScheduler

メインスレッドで実行するSchedulerです。 observeOnに最適化されておりメインスレッドを指定します。 MainScheduler.instance を渡して使います。 スケジュールするメソッドがメインスレッド上であれば即時実行されます。 MainScheduler.asyncInstanceは後述するSerialDispatchQueueSchedulerを参照ください。

ConcurrentMainScheduler

メインスレッドで実行するSchedulerです。 subscribeOnに最適化されておりメインスレッドを指定します。 スケジュールするメソッドがメインスレッド上であれば即時実行されます。

SerialDispatchQueueScheduler

バックグラウンドで処理を順次実行するのに使います。 内部でシリアルキューを保持しており、並列キューを渡してもシリアル実行されます。

ConcurrentDispatchQueueScheduler

バックグラウンドで処理を並列実行するのに使います。 GCD のdispatch_queue_tQOSで指定します。

OperationQueueScheduler

NSOperationQueueを使った非同期実行をします。 同時実行数を制御できるのが便利なところ.

CurrentThreadScheduler

現在のスレッドを指定します。 処理を一度キューイングしてから実行します。

ImmediateScheduler

現在のスレッドを指定します。 処理をキューイングせず即時実行します。

HistoricalSchedulerTimeConverter

時間経過を制御できるSchedulerです。 n秒後に実行などのテストで便利かと思います。

VirtualTimeScheduler

時間経過をプログラムで制御するSchedulerです。 受け取った時間を何軸の時間に扱うかなどを制御を実装して使います。 テストとして使えますが、HistoricalSchedulerを使ったり、ライブラリ側がテストスケジューラを提供したりと、あまり使う機会はないかと思います。

まとめ

通常であればMainScheduler,ConcurrentDispatchQueueSchedulerをよく使いますが、 CurrentThreadSchedulerImmediateSchedulerを理解できていると実装が楽になるケースとかありそうですね。

へそ曲げた我が子から要求分析してママと子ども間のデッドロックを解消する

概要

この記事は 子育てエンジニア・クリエイター Advent Calendar 2017の15日目の記事になります。

adventar.org

記事テーマに悩みましたが、パパエンジニアの強みを育児に活かす方法について書こうかな。 敢えて堅苦しく強気な書き方してみたらガイドラインとかベストプラクティスみたいな文章になって、楽しく書きました。

実際に自分の家で起きるケースと、自分がやってる行動をベースに書いてあります。

炎上案件の状況

ママは毎日子ども達に例えば次のようなことを頑張っています

  • 冷めない内、保育園に送れないために早く席に座らせてご飯を食べさせる
  • 体を冷やさないためにすっぽんぽんでテレビを見る子どもをお風呂に入らせる
  • 湯冷めで風邪ひかないためにすっぽんぽんで頭乾かさないで歌ってたり戦いごっこしてる子どもに服を着させて頭を乾かす

子ども達とママは毎日が同じコンディションではありません

毎日の繰り返しと日によって子どもの機嫌が悪くて言うことを聞かない日もあります。 同じようにママの体調が良くない日もあります。 それら条件をすべて満たすと、ママは鬼となります。子どもたちは恐怖で不満を吐き出さず拗らせるか、余計機嫌が悪くなっている状態です。

パパの取るべきだった行動

人のせいにする前に自分がやるべきだったことを考える

まずパパはこの状況を引き起こしたのは、自分の武器である論理的思考により家庭のルーチン効率化を図らなかったことを反省することから入ります。 状況に対して、子ども達やママのせいにしてはいけません。 今ある状況はなるべきしてなったのです。なので、必要・必然・ベストな状況だと捉えて早いとこ自分を納得させましょう。

これからパパが取るべき行動

両者の要求(言い分)を聞き出し、客観的に論理的思考で両者に線を引く作業です。 大事なのは子どもが年齢が4〜5歳だろうと15歳だろうと問わずに扱うことです。

パパエンジニアの強みを確認する

ここで念のためエンジニアとしての強みを家庭版に落とし込んでみましょう。

エンジニアの強みは、論理的思考と非エンジニアへの聞き取りです。 これらを家庭版として落とし込んだ場合どういった感じに使えそうでしょうかね。

ここでの論理的思考とは、冷静に客観的視点から状況の原因分析を行うことですね。

ここでの非エンジニアへの聞き取りは、自分の感情・思考を分析や言葉として落とし込むのが苦手な子どもへの多彩な質問で子どもでも気づいていないことを引き出すことですね。

ママには労いを子どもには粋な計らいを

ママは感情により目的に対する行動がズレてることがある

ママから話を聞き出すまえに労いと感謝の言葉を伝えましょう。ママは大人なので何を考えているのかは容易に聞き出せると思います。 注意としては、聞き出した内容(考え)が本質を捉えているかどうかは別件ということでしょうか。

子どもへの聞き出しは多種多様多彩に質問と確認を繰り返す

次に子どもへの聞き出しは、

  • Y軸の視線を合わせましょう
  • パパは君の味方であるオーラを全開で接しましょう
  • 子どもの要求/要望は採択はせずとも受け入れて肯定・共感しましょう。
  • 善悪判断は大人が勝手に決めて子どもに伝えるのではなく、子どもに外堀を囲むように状況/情報を伝えて、それから「どう思う?どうすればいいと思う?」と聞いて本人に判断させましょう
  • 子どもの言ってることが矛盾してたり、言ってることがバラバラだったりしたら言い方や質問の言葉を変えたり、状況を1個1個確認してみましょう。
  • 1個1個確認すると全部肯定する場合、1個わざと違うことを「◯◯だったんだよね?」と聞いて確認すると便利です。
  • わざと違うことを聞いても肯定する場合、子どもがまだ言葉を使ってやりとりできないので、強くハグしてダメな行動と、その行動で誰が悲しむのか伝えてあげましょう。

両者から引き出した要求を元に両者に伝える

ママから聞き出した要求をそのまま子どもに伝えてはいけません。それが伝わらないからこの状況になっているからです。

嫌いな人から要望を聞いても中々腹落ちはしにくいもの

まずはママ好きという言葉を子どもの口から言わせましょう。

  1. 好きな食べ物何?
  2. パパ好き?
  3. じゃぁママ好き?
  4. (↑で嫌いと言った場合)嫌い?じゃぁママいなくなって、ずっと帰ってこなくてもう一緒にお風呂入ったり、寝れなくなってもいい?笑ったママや美味しいご飯作るママいなくなってもいい?

ダメな行動で何が起きるのかを本人の口から言わせる

濡れた頭を乾かさない場合であれば、「乾かさなかったらどうなる?」と聞いてみます。 ここで風邪をひくとか、地震や火事があったら逃げれないって言ったら、次にうつります。

ママがして欲しいことではなくママが心配していることを伝える

子どもは何でママがあれやりなさい、これやりなさい、早くしなさいと言ってるのか、知らないです。 なのでママが好きを言わせたら、そんなママは、君を心配していることを教えます。 先ほど風邪をひくと子どもが言ったのであれば、「風邪ひいて苦しい君を見るとママは泣きたいくらい悲しくて心配らしいよ。。知ってた?」と

ママには子どもの本質的な要求を伝える

子どもにあの手この手色んな角度から質問したり話を引き出していくと、実はあまり繋がりのない所で寂しいとかもっと遊びたいとか、以前ママに話を聞いてもらえなかったとか、以前ママが約束破って思い出したとか、出てきます。

つまり子どもダメな行動ってアラートみたいなもので、アラート自体が要求じゃなかったりします。

本質的な要求や不満を聞き出せたら、ママはそれを聞いて謝るなり、週末一緒に遊ぶ約束したりして Done です。

今後パパが取るべき行動

KPTで言うTry, 再発防止策、テストケース追加といったところでしょうか。 最初に書いたそもそもこの状況を引き起こした要因は自分にあると考えて、取り組むと自分でもやれることは意外と見つかりやすいです。

if 子どもがダメな行動をとった本質 == ママと遊ぶ時間が少なくて寂しい {
 var パパがやるべき行動 = パパ行動サービス.get( ママ.get時間のかかる家事一覧(), パパ.get家事スキル() )
 if パパがやるべき行動.isEmpty {
  パパがやるべき行動 = 家事スキルを上げる
 }
 パパ.action(パパがやるべき行動)
}

育児に参加しにくい環境/状況のエンジニアもいると思います。 でもそこで諦め/丸投げせず、自分の武器を使えないか考えるのも頭の体操みたいなものでいいと思います。 実際やると分かりますが、子どもに対して要求を聞き出すって難しいし、慣れると仕事で非エンジニアから聞き出すのが楽に感じます。

WHR-1166DHPで現在のチャンネルが-1なったら

Baffalo-A-XXXX が表示されなくなって、ルータ本体のポータルを見ていたら、現在のチャンネルが-1になっていました。

ネットで調べたところ、下記のページで自分と同じ症状の人がいたので、見てみたら色々とアドバイスをもらい試していました結局だめそうでした。

bbs.kakaku.com

ちなみに自分の場合は親機(WHR-1166DHP)を再起動(電源コード抜き差し)したら直りました。

同じ症状でも異なるようですね。

子ども用ハーネスを使って身近な頭の堅い友人を見つけて今度の付き合いを考えればいい

都内で子ども3人を育てています。

ハーネスは犬の散歩みたいと偏見持つ方や、手を繋げばいいと言う方がまだいるようですね。

犬の首輪+ロープもハーネスも車のシートベルト、自転車のチャイルドチェアのベルトも、ベビーカーのベルトも、ヘルメットの紐も同じ目的で、命を守るためです。 もっと言えば車の荷台に載せた荷物をロープで固定するのも同じ目的で、荷物が壊れるだけでなく、荷物が当たって危害を与えないためです。

手を繋げばいいというのは、子どもを育てたことがないか、その子どもが育てやすかっただけですね。 保育園で外出時に子どもを大きい台車みたいなのに乗せるのも、ハーネスも何ら目的は変わらないのに、なぜこっちばかり話題になるのか?

気にしない/距離をおく

おそらく説得しようとしても、理解してもらえないだろうし、その人が理解したところで次々と出てくると思うので、そういう人は言わせておけばいいと思います。 何か知らない人に言われたら「じゃぁシートベルトするなよ」と吐いて捨て置けばいいくらいです。 いちいち価値観の合わない人に接しなくていいです。身近なママ友とかにいれば、共感できる力の弱い方で、価値観も合わないので距離おけばいいです。

忘れてはならない大事なこと

一番大事なのは、大人しか関係のない外の目を気にして、子どもが最悪の事態になることです。 自分の意思の弱さ、間違った優先順位を一生後悔することになります。 自分の環境、自分の子供の性格を加味して、このままだと危ないかも?と思うのなら、必要なのです。

気になるなら犬の散歩っぽいポーズに見えなければいい

最初気になるなら、ハーネス+手をつなぐで、ハーネスを本当の保険という位置づけにすればいいんです。 犬っぽいと感じるのは、手でロープを持つからです。ロープを大人のベルトに締めれば印象は薄れます。

生き方を古い時代の人に邪魔されてはならない

少子化社会の障害となっているのは、違う時代に生きてきた大人達とその価値観を刷り込まれた人達です。 現代において昔同様の生き方では、うまくいかないです。 その時代にあった生き方として、便利なものを使い、使えるものは使っていくことで生き抜いていかないと、非効率で時間的に不可能か、何かを切り捨ててその分リスクを背負っていくことになると思います。 きっと昔の人達も同じ考えで、使えるものは使うという生き抜いてきたんだと思いますよ。

物事はほとんどが悪いことから始まる。なので自分らはそこから良いことに変えるのが大切

テレビ見てて久々に「ビビビッ!」って来て、そこから自分なりに解釈したのがタイトル文。

最近スケジュールに嵌ってます

状況

今、やりたいこと、やるべきことが多すぎて既にパンク状態です。

タスクのような一時的な作業ではなく、ルーチンのように毎日少しずつ繰り返す作業です。

スキマ時間はあるけど向いてない

通勤中はスキマ時間として余ってはいるのですが、机の前に座ってじっくり考えたり、

本+パソコンを使ってアウトプットも兼ねる作業だったりと、通勤中には向いていません。

リスニングや情報収集といった作業はできるのですが、それでは全てのルーチンを達成できず、偏ってしまうのです。

ToDoと見積りをノートにまとめてる

最近始めたのが、ノートに公私問わず考えたり思いついたToDoを書き留めてます。 そのときにそのToDoがどれぐらいで終わりそうか、15分単位で見積もりも横に書いてます。 あとは少しでも余った時間があれば、ToDoを見てはすぐに作業にとりかかって、日常のスキマ時間からルーチン組めないか模索中です。

チュートリアルにラスボスがいる感じ

新しいことにチャレンジするために、知らない人に違いを教えないといけないのが一番ハードルが高かったりする。

しかも興味ない上にその人の知識領域から出ないように違いを教えないと、すぐ飽きるし少し時間が経つと忘れて同じことを聞いてくる。

実はエンジニアに求められるスキルって説得力なのかな・・・

参考記事

simplearchitect.hatenablog.com

器の大きい男になりたい人へ。これ試してください。効果ありました。

f:id:motom552:20160614013718p:plain

対象者

彼女や妻に

  • 「イラッ」っとした人
  • 「ムッ」っとした人
  • 不満がある人
  • 悶々と考えてしまう人

このページを見る方は、器が小さいと言われた方、自分で気づいた方だと思うので、

男として器を試されやすい女性との付き合い関係に関した記事になります。

方法

やりたいことは簡単です。

問題を先送りしてください。

携帯のアラームやカレンダー、Webサービスを使って、数時間後にむっとしていることに名前を付けて登録してください。

名前は思い出せれば何でもいいです。分からない人は劇団四季が名づけそうな名前にでもしといてください。

ミュージカル分からない人は、「ゴジラ対俺」ってしといてください。

登録が終わったら、後で考えるように言い聞かせてください。何度も思考がムッとした内容に戻ると思いますが、

そのたびに「後で考えよう。それよりもコンビニで一番好きなアイスを買おう。」と言い聞かせてください。

そう、コンビニにアイスを買いに行ってください。

もし寒かったり、コンビニ行けなかったら部屋掃除や身の回りの整理整頓でもしといてください。

何が狙いか?

失恋と同じで 時間経過による記憶を曖昧にさせることです。

記憶が明確だから感情が起伏しやすいので、それを記憶を曖昧にさせることで頭に「?」を増やすことです。

興奮する映画を見終わったあとは、感傷に浸るように ぼけ〜 っと映画のシーンを思い出したり伏線回収したりしますが、 気がついたらその思考は終わってます。

失恋直後は頭がパニックになって、胸の奥がきゅ〜っと痛く、もうダメだとなり、ビルの窓から飛び降りようとする程ですが、

数年も経てばそんな症状はとっくになくなっており、十年も経てば無関心と近いような鼻で笑ってしまうようなものになりますよね。

イライラ不満は価値観の違いから

だけど価値観の違いで終わらせてる人って彼女を見下してる証拠になります。

自分に寄せて欲しい。寄せるべきだ。なぜ俺の考えを理解しない。なぜお前はそんな考えなの?おかしいでしょ?

どのセリフも自分は後ろにも前にも動いていないです。

自分は動かず彼女が動いて欲しい、動くだろう、動くべきだ。と言葉にはならなくとも思っているのでしょう。

男には譲れないものがある!

あるにはありますが、そんなにないので、譲れない部分はそのままにして、譲れる部分を彼女へ寄せることから始めてください。

その上で譲れない部分を伝えてください。

つまり、自分の価値観を動かせる人が器を大きくできる人です。

まぁ譲れない部分って意外と過去の話が関係してて、それを変えると人生否定されたって思っちゃうけど、それを変えた所で、死にはしないんですよね。

というか意外と平気なケースが多いような。

最近次女のハイテンション笑顔が人生の栄養です。

ネットで見かける記事で思うこと

全ての記事に当てはまることではないけれど。

有名ニュースアプリなどで掲載されると、その記事内容がてきとーで、ソースもまともじゃなくても、それが正だと誤ってしまうことがある。

特にそれが自分には大して興味がなかったり、分野外だったらなおさら。

北海道置き去りニュースの件

見つかって本当に良かったです。

探索に時間がかかり、天気も雪が降るとかあって、ここ最近の運転死亡事故の流れもあって、自分の中で最悪のケースかと思ってました。

しかし結果としては、子どもの力にとても驚きました。

まずは子どもは体調回復と、お父さんは親戚から叱られてください。

他山の石

私には子どもが二人とお腹に一人います。

とてもかわいく、毎日の成長がとても愛らしいです。

しかし躾はします。それは私が親にされたように、私にも信念をもって躾は行います。

下の子はまだ幼いので、単純に危ない場合やあまりにも不衛生な行動を繰り返す場合は行います。

指を扇風機やコンセント、熱い鍋に突っ込もうとしたら、腕をデコピンします。

その後すぐ後ろから見てて、同じことをしようとしたら、同じように腕をデコピンします。

それは大怪我する前に、すこし痛い思いをして危険を理解できたほうがいいと考えているからです。

上の子は言っていることが分かるようになってきたので、言葉で伝えます。

しかし何度も伝えてもダメで、かつやっちゃいけないことをした場合は、雷を落とします。

上の子が妻のお腹(妊娠中)に膝落としをしたときは、過去一番でした。

私は子どもを叱った後、少し時間を起きます。

妻がいる場合は、妻が子どもへ近づき話を聞き、言葉を伝えます。

それから子どもと話して、言葉を伝えます。

最後は親から受け継いだ方法で仲直りをします。

 躾は家庭によってバラバラだと思います。躾とは呼べませんが同様のことは家庭だけでなく学校でも行われていると思います。

「負けたら走って学校まで帰宅」とかありすぎるくらいです。

私の幼なじみは親父が怖すぎて、二人で馬鹿やったときは、家に帰るまで震えていました。

話は戻って

置き去りをダメか良しかと2択であればダメです。

しかし2択といった単純な話とは思えないです。

子どもが石を投げたとなれば、親はかなり怒ったはずです。

正直言葉だけで解決するというのは、状況によっては考えが甘いと思います。

石を投げて子どもの顔にあたって傷物になっても、親は膝立ちして、子どもの両肩を強く握り、強い言葉で叱るのでしょうか?

石が頭にあたって、意識失うほどダメージを与えても、親は膝立ちして、子どもの両肩を強く握り、強い言葉で叱るのでしょうか?

一番考えが分かれそうな状況は、石が誰にも当たらなかった場合でしょうか。

行動の選択に答えなんてあるのでしょうか?

私の場合は、石が当たりっこないけど、危ないな場合と、実際に石が人の近くまで飛んでびっくりさせた場合で分かれます。

とにかく何か起きてから、人が怪我してからでは遅いです。

そこよりも、自分の子どもを自分が躾るにあたって、同じ過ちを二度とさせないように一番効果的に伝えることだと思います。

 子どもへの躾に過酷な状況や体へのダメージにより覚えさせることを賛成しているわけではないです。

このニュースを知りある程度状況を知ったとき、自分も気をつけようと思いました。

叱ると怒るは隣り合わせなんだなと感じました。

 これ以上親子の信頼関係を探ったりしないで欲しいと思います。

お父さんの仕事先も心配だし、子どもの学校、お母さんの近隣との関係といった日常に支障をきたしてからでは遅いからです。

どれが1つでも支障をきたすと、子どもに影響を与えてしまいます。