ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2016年4月17日日曜日

Slackがなかなか便利なので、ITリテラシーゼロのみんなにも教えてあげようの回

未だにIPメッセンジャー辺りの化石系ツールを利用している、古臭い体質の企業にお勤めの皆さん、こんにちは。
基本情弱でITといえばメールとウェブブラウザぐらいしか使えないおっさん達が権限のほとんどを握ってるから、
「セキュリティーが云々〜」
とか言われていつまでたっても不便を強いられるんだよね〜、うんうんわかるわかる。

というわけで今回は唐突の謎煽りからSlackを雑に紹介していこうかと思います。

Slackとは

チャットベースの組織向けコミュニケーションツール。
2013年8月にリリースされてからここ2年ぐらいで爆発的に普及している、らしい。
うちの会社でも一昨年末ぐらいから導入されて、去年スカイプから完全移行しました。

海外製のツールなので日本語皆無だけど、シンプルなUIなので英語嫌いの僕でも使っていくうちに案外慣れる。
そのシンプルで洗練されたUIがウケている面は大いにある。


スカイプと比べてどんなとこが優れてるの?

こことかここが簡潔にまとめられてるので、そのページ見てもらえればそれで済む話なんだけど、実感含めて利点を挙げていきます。


-チームごとの情報が閉鎖的にならない、パブリックさ

スラックはチャンネルと呼ばれる部屋を作ってその中でチーム内でのやり取りを行うのが基本になる(個人宛のチャットももちろんある)。
スカイプでいうとグループチャット的なもの。

これのパブリックさというのは、社内にどんなチャンネルがあるか確認することができ、また非参加者でもその中でのやり取りを閲覧することが可能な事を指している。

スカイプのグループチャットだと、参加者しか存在を知らないし当然情報も見れないので、スカイプ上からでは自チームの情報しかわからないのがまあまあネックだったりする。
社内で、現在進行形で、何が行われているか仕組み上見通せるのは、組織活動を行う上でメリットが多い。
「わからない」事が無駄な憶測から不利益やストレスを生む機会は少なくない。と思う。



-メンション機能

ツイッターでいうリプライみたいなあれ。誰々向けにチャットを飛ばす機能。
グループチャットはあんまり追ってないという人はそれなりにいて、その中でこの人には確実に見てもらいたいという時に通知してもらえるので便利。

スカイプでも個人宛にチャットできるじゃん、と思われるかもしれない。
が、グループチャット(チーム内)で共有された方が都合が良いけど、Aさんに通知したい、みたいなシチュエーションは結構あるのでその辺スカイプではカバーしきれない。



-情報のストックにある程度向いている

一度アップロードすればいつでも誰でもファイルにアクセスできる点(スカイプはアップロードした人がオフラインになるとDL不可能になっちゃう)、URLや画像を画面内に展開してくれる点、目的に合わせたチャンネルをいくつでも作れる点等、本来チャットツールに不向きな、情報の集積所としてもある程度活用できる。











画像は僕が個人利用してるアカウント(チーム)内のチャンネルの一つ。
購入した商品の写真と一緒に値段をログ的に保存しておいたら、後で相場を思い返す時とかに有用かな〜と思って上みたいなことをやってる(チャンネル毎に検索することが可能)。



-外部サービスとの連携が豊富

ブログのRSSを登録して特定のチャンネルに通知させたり、ツイッターアカウントを登録して誰かを監視したり、グーグルカレンダーやスプレッドシートと連携したり、とか色々できる。
会社だと、ジェンキンスと連携してビルド完了の通知をslackにやらせたりしてる。

各種サービスの中継点的な感じでスラックに集約できるのはかなり便利。




-自分だけの機能(bot)を低コストで自作可能

チャットで勤怠管理とかやってる企業もあるらしい。

僕も、特定のチャンネルにポストされる度に金額をスプレッドシートに記録&弟に支払わないといけない料理代を特定メッセージで提示してくれるイミフなbotを作ってみたりした。











※弟に料理を作らせる度に金渡してると面倒いので、チャットベースで記録と開示ができるようにしている(slackはスマホ版アプリもあるよ!)

僕の例だと、毎回暗算してメモ帳にでも保存しておけばいいだけの話なので、まあそんなに利便性は感じられないかもしれないけど(笑)、使い方次第で色々自動化できるので心をくすぐられるものがある。


※余談
GASとグーグルスプレッドシートの組み合わせは結構強力で、slackに限らず、簡易サーバ連携的なことが可能なので興味のある人は試してみると良いかも。
(そして使用感を俺に教えて)

Googleスプレッドシートと通信できるActionScript3.0のライブラリ「GAST」を公開
Google Drive Host PageとGoogle Apps Scriptで簡単な掲示板作った話
Google Apps Scriptの開発手法まとめ





まとめ

いかがでした?
学生間でmixiやLINEが流行るみたいに、企業内でも流行り廃りがあるのがちょっと面白いですよね〜
今はSlackがナウでトレンドらしいので(適当)、興味ある方は使ってみてくだしあ

2016年4月5日火曜日

UnityアセットのHOTweenでループ使おうとしたらなんかアホみたいなコードになった

最近HOTweenを使うことがちょいちょいあるので備忘録がてらメモ。ググっても全然情報出てこないしな…。
てかぶっちゃけこれそんな使いやすいわけでもない。
NGUIの付属ライブラリでいいよもう(?)

ちなみにTweenとは

Twitter用のクライアントアプリのことではないです。一応。
2点間のアニメーションを補間してくれる奴のことを指します。
他ではどうかしらないけど、Unity界隈ではツイーントゥイーン言いまくってて標準用語化してます。

例えば、ゲームでダイアログがポップアップするやつはスケールをTweenしているし、
キャラクターが徐々に透明になってフェードアウトしていくやつはアルファ値( Color)をTweenしていて、
画面外からスーッとUIが移動してくるやつは座標をTweenしています。
パッと消える・パッと現れる、という風な雑な表示にならないので、とても目に優しいです。

目に優しいというか、これが今のゲームの標準クオリティ・やってて当たり前みたいなとこがあるので、やらないと逆に?な評価をされかねないです。
至る所で一手間加えないといけない上に、補間の仕方をしくじると違和感丸出しになるんで地味に面倒いですが。

なので今後Tweenしていない上になんか表示が雑なUIのゲームがあったら、
「これUIアニメーションの補間が全然なってない。クソゲ。」
とドヤ顔で言いふらしてやりましょう(やめて下さい心が傷むので)。



類似ライブラリ一覧

そんなわけで頻繁に利用する機会のある機能なので、Unityで便利に使えるライブラリやらなんやらがアセットとしていくつか存在しています(こんなのを一から実装するのは学生か、なんでも自作じゃないと気が済まないキチガイだけです)。
以下適当に触れていきます。

【NGUI Tween】…大人気UIアセットにくっついてくるやつ。複雑なことはやりにくい印象はあるものの、コードを書かずともコンポーネントを貼り付けてちゃちゃっと簡単な補間を済ませることができるので便利。
定常ループとか生成時に一度きりの固定アニメーションとかやらせたいとき(Animatorセットするのがめんどい気分の時)にたまに使う。

【iTween】…多分一番人気のアセット。検索するとこればかり出てくる。Tweenやりたかったらこれでいいと思う。ちなみに使ったことないので特に触れない。

【DOTween】…HOTweenのver2的な立ち位置らしい。じゃあHOTweenいらないじゃん。なんなの。

【HOTween】…今回触れるアセット。「HOTween ループ」でググると、もしかして: ITween ループ、って出てくる。ホントに使ってるやついんのかこれ。



んじゃあ適当紹介終わったので早速実例を見ていきます。



うんこコード実演



Tweener tweener;
private void PlayTween(Vector3 begin, Vector3 end)
   {
       if(tweener != null)  tweener.Kill(); // 多重再生を防止

       transform.position = begin;
       ResetAnimation(); // 定常アニメーションをリセットする関数
       tweener = HOTween.To (transform, 1.0f, new TweenParms ()
                              .Prop ("position", end, false)
                              .Ease (EaseType.EaseOutStrong)
                              .OnComplete(() => { PlayTween(begin, end); })
                              .Delay(0.5f));
                      //       .Loops(-1, LoopType.Restart));
   }


以下解説。
・HOTweenクラスの静的メソッドであるTo()を呼び出すことによってTweenオブジェクトが生成され(GameObjectです)、補完が開始される。
・第一引数にはTweenをかけたい対象ならなんでも、第二引数は補間開始から終了までの時間(例だと1秒)、第三引数にパラメータを色々設定できる。
・Prop()は順に「プロパティ名」「補間終点値」「現在値に加算していくかどうか」といった感じ。この場合だと、「transform」の「position」プロパティの値を、1秒の間、beginからendに徐々へと近づけていくことになる。
・Ease()は補間の種類を選ぶ。EaseTypeとかいうenum値から色々お好みで。
・OnComplete()は補完終了時に呼ばれるコールバックを指定できる。上図だと再帰っぽく呼び出してやってループをアニメーションのループを実現している。
・Delay()は補完開始するまでの待機時間を指定できる。例だと0.5秒。
・(コメントアウトしてるけど)Loops()でループアニメーションが可能。第一引数に-1で永久ループ、第二引数でループの種類を指定。ちなみにこれデフォルト引数が1になっていて、そのままだと1再生のみ(1回ループ扱い)になる。
(この時点でクソ。なぜ-1をデフォルトにしなかったのか謎すぎる。)
※他にも色々パラメータ指定できる。けどよく知らないので割愛。


上記例はLoopsでループ指定できるのにも関わらず、わざわざコールバックで再度同じメソッドを呼び出してやることでループ処理を実装している。
なぜこんな面倒なことをやっているかというと、
①Delayが初回の補完開始時にしか反映されない。
 →毎回delayして欲しいのに二回目以降は待機してくれない。今思うと、Tweenerインスタンスのプロパティにもしかしたらdelay関連の変数を操作できるものがあるかもしれないけど、最初からパラメータ設定するときに指定できるようになってないHOTWeenはクソ。
②OnCompleteのコールバックがループ指定されてると呼ばれない。
 → そのせいで、ループの度にやらせたい処理(ResetAnimation()とか)が、コールバックに書いただけでは走らない。一応、OnStepComplete()なるものがあるので、こっちなら呼ばれるかも?いずれにせよわかりづらいしオプションで指定できるようになってないHOTWeenは以下略。OnCompleteへ渡すコールバックに、ループ中のものか判定するbool型引数持たせればいいだけじゃね?せめてサマリーで注意書きでも書いといてくれたらねえ。



いまいちピンと来ねえのは俺のスキルがアレだからですかそうですか

でもUnityの思想はゲーム開発の民主化じゃん?みんながみんなプログラム自信ニキって市場じゃないし、頻繁に使う機能なんだからできるだけわかりやすくして欲しいね、俺はそう思うよ。

ということで愚痴言って終わり。