ポジティブシャワーをやってみた
どうも僕です。先日チームで「ポジティブシャワー」というやつをやってみました。なかなか良かったので備忘がてらメモなど。
ルールというのは特にないと思いますが、やったこと。
・チームメンバー全員で集まる ・一人ずつメンバーの"良いところ"をカードに書く ・全員分かけたら本人に渡す ・受け取ったカードを読んでニヤニヤする
だいたい10人くらいで集まって全員分書いて1時間弱。最後にカードを読んでニヤニヤしているメンバーの顔は最高でした。
ここのところチームの空気があまり良くなく、メンバーの士気は下がり気味でした。みんな頑張っているけどなかなか目に見える成果が出なくて、なんとなくどんよりな毎日。なんとか好転させたいなぁと思っていたところに、同僚から「ポジティブシャワー」を教えてもらいました。
これをやったからといってチームがモチベーションマックスでイケイケになる訳ではないのですが、どんよりした空気が一掃されて、向上するきっかけになったんじゃないかと思っています。新生チームよりは、お互いの事が分かってきたくらいのチームでやると効果的ですね。
紙に書いて渡すというのがポイントで、後から何度も読み返せるのがとても良いです。それに言葉で伝えるのはこっぱずかしいですよね。(今回は100均で買った名刺大のカードを使いました)
意外と自分の思いもしないところを褒めてもらえたりして、僕も相当ニヤニヤしていたと思います。
他人の良いところを書くのはなかなか難しくて悩んでしまいますが、いろいろ気づかされることが多かったです。この人はチームでこういう長所を発揮しているんだなぁと実感したり、自分はこうやって見られているのかと分かったり。
すごい人たちはどんな困難な状況でもポジティブ変換してガンガン前に進みます。でも、そういうスキルは誰もが持っているものではありません。最近チームが元気無いなというときに、少しだけ時間をとって「ポジティブシャワー」をやってみるのは良いかもしれませんね。
NSNotificationCenterについて調べてみた
どうも僕です。
iOS開発では何かとお世話になりますNSNotificationCenterについてしっかり調べてみました。こなれてきたらこういう機会は大事です。
NSNotificationCenterってなに?
- NSNotificationCenter Class Reference
- Notification Centerを通じて通知を投げたり受け取ったりできる
- アプリ内のオブジェクトにブロードキャストで通知ができる。つまり、通知したらとりあえずみんなに聞こえるということ
- 相手を指定して通知するものではないため、クラス間の疎結合を保ったままメッセージのやり取りができる
Notification Centerを用意する
まずはNSNotificationCenterのインスタンスを取得します。
[NSNotificationCenter defaultCenter]
でアプリのデフォルトのNotification Centerが取得できます。ここに対して通知を送ったり、通知が届いているかを確認します。デフォルトのNotification Centerにはアプリの様々な通知が届きます。
もちろんalloc initして個別のインスタンスを作成してもOKです。
[NSNotificationCenter new]
通知をオブザーブして受け取る
通知を受け取るためには、Notification Centerにオブザーバを登録します。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:@"XXXNotificationName" object:nil];
上の例では、name
が@"XXXNotificationName" である通知があった場合に、self
のdidReceiveNotification:
が呼ばれます。object
には一般的に通知の送り主であるオブジェクトを指定します。送り主が一致するものだけを受け取る事ができます。
name
, object
がそれぞれnilの場合、引数に一致しない通知も受け取ることができます。アプリの通知をすべて受け取るためには、引数をnilでaddObserverします。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
下のログはname
をnilで受け取った通知の一部です。いろんな通知が届いていますね。どのようなNotificationが用意されているのかは、 UIApplication クラスや UIWindow クラスなどのリファレンスを見ると良いでしょう。キーボードが上がった下がったなどもNotification Center経由で取得できます。
2014-04-11 23:29:48.475 NotificationCenterTest[15537:60b] UIWindowDidBecomeVisibleNotification 2014-04-11 23:29:48.478 NotificationCenterTest[15537:60b] UIWindowDidBecomeKeyNotification 2014-04-11 23:29:48.479 NotificationCenterTest[15537:60b] UIApplicationDidFinishLaunchingNotification 2014-04-11 23:29:48.480 NotificationCenterTest[15537:60b] _UIApplicationDidRemoveDeactivationReasonNotification 2014-04-11 23:29:48.482 NotificationCenterTest[15537:60b] UIApplicationDidBecomeActiveNotification 2014-04-11 23:29:48.483 NotificationCenterTest[15537:60b] UIDeviceOrientationDidChangeNotification 2014-04-11 23:29:48.490 NotificationCenterTest[15537:60b] UIApplicationDidEndResumeAnimationNotification 2014-04-11 23:29:51.641 NotificationCenterTest[15537:60b] _UIApplicationSystemGestureStateChangedNotification 2014-04-11 23:29:51.645 NotificationCenterTest[15537:60b] _UIApplicationSystemGestureStateChangedNotification
通知はすべてのオブザーバで受信され、それぞれに実装された処理が実行されます。順番はどうやらaddObserverした順のようです。
通知を送る
Notification Centerに対して通知を送る場合は、NSNotificationクラスのオブジェクトを作成します。
NSNotification *notification = [NSNotification notificationWithName:@"XXXNotificationName" object:self]; [[NSNotificationCenter defaultCenter] postNotification:notification];
name
は衝突の可能性があるので、プレフィックスをつけるのがObjective-Cマナーです。存在するNotificationのnameを名乗っても別におこられたりはしません。
通知は基本的に同期処理で行われます。上の例で言えば、postNotificationの次の行が実行されるのはすべてのオブザーバでの処理が終わった後です。受信側で同じNotificationをpostすると無限ループします。
非同期に通知したい場合は、NSNotificationQueue クラスを利用します。
[[NSNotificationQueue defaultQueue] enqueueNotification:notification postingStyle:NSPostASAP];
postingStyle
にはNSPostASAP、NSPostWhenIdle、NSPostNow が指定できます。こちら が分かりやすいです。
通知の監視をやめる
通知はオブザーバが解放された後にも届きっぱなしになるので、適切にremoveしてやる必要があります。
[[NSNotificationCenter defaultCenter] removeObserver:self];
nameを指定して個別にremoveするメソッドも用意されています。
UIViewControllerで通知を受け取る様な場合は、画面遷移に合わせて適切にadd/removeしてあげるのが良いでしょう。
通知を受け取ってブロックを実行する
セレクタの代わりにブロックを指定して実行するメソッドも用意されています。
self.localeChangeObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"x" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { NSLog(@"%@", notification.name); }];
queue
に[NSOperationQueue mainQueue]
を指定した場合はメインスレッドで、nilの場合は通知の送り主と同じスレッドでブロックが実行されます。
オブザーバをremoveするためにはローカルの変数などに戻り値を保持しておく必要があるので注意です。
[[NSNotificationCenter defaultCenter] removeObserver:self.localeChangeObserver];
というわけでこれからもお世話になりますよろしくお願いします。
gitのaliasコマンドに引数を渡す方法
Qiitaに投稿しました。
gitのaliasコマンドに引数を渡す方法 http://qiita.com/yatemmma/items/22aa62e232776f4f330b
もうひとつ。
[git] ローカルでbranchをバックアップするalias http://qiita.com/yatemmma/items/c06434409d9231f5d87d
WordPressの投稿IDの開始値を変更する
ブログをリニューアルしようと思って新しくWordPress環境を作りました。
既存の記事を後々インポートできるように、新環境の記事は大きめのIDからスタートさせます。
ALTER TABLE xx_posts AUTO_INCREMENT = 1000;
xx_にはwp-config.phpで設定したtable_prefixが入ります。
WordPress › Support » Start post id numbering with three-digits? http://wordpress.org/support/topic/start-post-id-numbering-with-three-digits