Kyoto.js#14に行ってきた話

Kyoto.jsについて

みんな〜JS書いてる??

kyotojs.connpass.com

振り返り

結構みんなjsを書いてなかった。そもそも自分もk8sのyamlかtfを書いてる。

京都には鴨川があるのに、なんで水車が設置されて無くて、なんでドネルケバブが回転していないのか不思議だった。

発表資料

scrapbox.io

自分はCycle.jsを使うことが多くて、業務でもここ最近はCycle.jsしか使ってないんだけど

そこらへんで溜まった知見のSESパターンの話をした。

そもそもSESパターンは自分でつけた名前なのでググっても出てくるわけがないんだけど、

もともと前職にいる時に3人ぐらいのおっさんで「Actionをdispatchってただのreduceだし、もうちょっとsimpleにかけるじゃん」みたいなとこから始まって、

現職で「いやぁ〜それってendomorphismですわ〜〜」みたいな人の発言から、Endo<T>をよく使うようになって、Stream<Endo<State>>がクソ長くて

type $ES = Stream<Endo<State>>からSESになりました。

資料ではあんまうまく書けなかったので書いてないメリットなんだけど、

言語特性上だいたいのRx系はEventやんというのは置いといて。

人の意図が絡んだアプリケーションをあらわすコードとされるものの中では

「このタイミングでこうしてほしい」っていうEvent系のものと、「Streamが表しているのはXXXという状態なんですよね〜」みたいなBehavior系があって

このSESパターンにおいてはそれらが区別しやすくなるですわね

結局このタイミングでこうしてほしいっていうのは、結局状態変化を望んでいるのでSESになるし(ioの特性上ならないのもある)、 俺のアプリケーションっていうのはこういうStateだ(そのState外でうまく適応しておきますね[外ではstateを使って別のSESになる])という表現はStream<State>になる。

まぁどうやっても欺瞞感があるのはわかるけど、解釈を助けるためにパターンに落とし込む行為はリーダビリティを上げVNodeは流行った。

感想

もうちょっと現実的なところとか紹介したいけど、みんなCycle.js使ってないし(知っている人は結構いた)、Cycleの紹介とか入れると発表時間が足りなくなる。(5分オーバーした)

あとStreamの説明も割と雑にやってしまったが、説明し始めるとa few時間ぐらいかかりそうなので、また別の機会に。

なんかCycleとかPureScriptとかElmとかのFRP系のwebやってる人でmeet upしたいですね。

家にssh鍵を忘れるという概念

たまにssh鍵を家に忘れることがある。こういうものはsshしたいときに限って忘れる

仕組み

自分はYubikeyを使っている。

f:id:hiroqn:20170902205009j:plain

6月ごろにtype-cのやつを買った。(右のやつは1年以上持ち歩いているが結構丈夫)

YubikeyはYubico社が出している電子鍵が安全に保管できるデバイスで、複数機能があるので一概にこれと説明はできない

ここらへんに機能一覧はのっている

メジャーな機能は下の4つ

  • YubiOTP
  • FIDO U2F
  • PGP Card
  • PIV card

ざっくりした説明をすると

Yubi OTP

One Time Passwordの一種

OTPは現在時刻を利用したのものやカウンターを利用した物があるが、ハードウェアデバイスならではのカウンター+暗号化が入っているのでセキュアな雰囲気がある

otameshi61.hatenablog.com

ここに日本語で書かれた最高の資料があるので仕組みを知りたい人はこっちを読んだほうが良い

会社とかの中央集権的な集団のログインには便利である。

YubiCloudを使わない場合、秘密のパスフレーズをYubikeyに突っ込んだ状態でYubukey配る必要があるのでウェブサービスには不向き

例えば、社員が入社したときにYubikeyが配られて(持っている人は自分のを使う)入社手続きの際にyubikeyを穴に突っ込んでYubiOTPがセットアップされる仕組み

そんなのはかっこいい

上の例はラズパイとかを使えば、簡単にできそうだがラズパイにはtype-cの穴はないし、さり気なくboot用のsd cardを攻撃者に交換されるリスクもある。

FIDO U2F

物理デバイスを使った二段階認証の規格があってそれを満たしている。

この規格は「みんな!この規格でいくぞ!!」みたいな流れが薄いイメージだったが、最近はだいぶサポートされている感じがする。

自分は複数サービスで使っている。

GitHub - github/SoftU2F: Software U2F authenticator for macOS

githubもライブラリを公開しているので試したい

PGP Card

PGPの鍵をimportすることができる(内部で生成することも可能だったような)規格である。また、exportはできない。

自分は主にこの機能をよく使っているように思える。

このyubikeyをパクればpgpで署名したり復号できるようになるかといえばそうでもなく、使うときにPINを打つ必要がある

この機能を使う上でPINとadmin PIN を設定する必要があり

PINを打つことに3回失敗すればロックされ、admin pin打たないと使えなくなる。このadmin PINを打つことに3回失敗すれば永久にロックされる。

gpgの機能としてpgp鍵をつかってsshする方法があり、それを普段のssh鍵にしている。

PIV card

PIV(Personal Identity Verification)の略の通り、身分証明用のIC cardの規格である。

この規格はアメリカの政府職員とかが持っているcardとかに採用されている

一般的にicチップが付いたカードは OpenSC(open smart card)を使えばread/writeやその他のやり取りができる

PIV cardの規格の一つに鍵を内部で生成する事ができ、それを使ってsshすることができるがpiv cardの仕様上rsa2048以上を使うことができない

なので昔はこちらを使ってsshしていたが、最近は使っていない。

日本には四季やマイナンバーがあるが、マイナンバーでsshすることができてもおそらくマイナンバーはPIV cardの仕様をみたしてはいなさそうである。

PIV cardは上のPGP cardの仕様と同じようにPINの仕組みがあり鍵をexportすることができないという仕様を考えると、公開鍵で暗号化されたものをPIV card内で複合しているのはないかと思う、これに関してはあまり良くわからない。

macだと support.apple.com こういったサポートがあり、Yubico社が出しているドライバーを入れるとログインに使うこともできる。

最後に

macだけにすべての情報が入っているのは怖く感じるのでこういったデバイスを使うようにしているが、逆にこのデバイスを紛失したときに大変なことにならないような運用が大事である

一応、自分の場合はそんなに困らないように作っているつもりであるので、暇な時またそれについて書く。

VRに関して話したメモ

takanarisunと小一時間話した。

空間はどうあるべきか

VRは決められた箱の空間、100あるうちのどれだけ楽しめるか

VR空間上にわざわざ魔法陣をつくってまでゲームを成立させる必要がるのか

そもそも閉じた世界に更に閉じた世界を作ろうとしている?

TRPGと比べると、

口頭で作れる、空間はどこまでも広がる、各個人の想像をリアルな場で共有している

takanarisun体験の話

バイオハザードのVRを体験した結果、ゲーム中の体の動きの視点移動とリンクしていて”キャラになってる感”が強かった

前提としてゲームにおいて自己があってそのキャラを区別、明確に区別している

ところが、VRで区別できない感じがした

ゲームの中との区別がつかなくなった時、それは遊びなのか

ダメージを受けたり死んで初めてその世界がゲームかどうかわかると言うのは

小説のクラインの壺だな、という話をした

分類の話

ロジェ・カイヨワの4分類(ごっこ、運、闘争、めまい)から考えてみる。

バイオハザードは本来、ごっことめまいの性質を持つ

ただVRによってごっこ遊びではなくなるのではないか

プレイしている人が安心できないならロールプレイにならないのでは?

考えたこと

VRは視覚インターフェースが近づいただけとも言える。 現実世界を認知する手段を何に頼っているか、視覚に頼っている人はわからなくなる 視覚がない人は世界はどう見えているのだろうか。

リクルートを退職した

退職 is 離苦route

自分はこのブログで書かれているチームにいた。(ちなみに、このブログに書かれていることはすべて事実だ) いわゆる威圧されている側である

remember.fornothing.net

自分も疲れたのでやめた。普通に考えて、こういうことが起こる環境で働くのは厳しい。

リファラルで採用!」みたいな感じで人の紹介を依頼されても、上のように優秀な人間からやめていく環境を紹介できるわけがない。 そう思うとモチベーションは下がる。

どうすれば良かったを論じても結果論にしかならないので、学べたことを書くしかない。

心理的安全性

まず第一に心理的安全性を確保できないのは危険だ。 こんなこと当たり前のように思えるけど意外とできてないし、 そもそも肉体的な安全すら確保できてない企業も多そう。

KPTと呼ばれるKeep(続ける良いこと)Problem(置きてる問題)Try(今後改善する対応)を話し合うミーティングがあるが、 心理的安全性がない状態でKPTはやるだけ無駄だ。問題を問題と認知できない状態では、問題は出てこないし探せない。

チームを大きくしない

チームの人数が多ければ多いほど、人同士の問題が起きやすく解決しにくなる

あと人数が多いとミーティングに意味があるかどうかに関わらず無駄に感じる

マイナスを押し付けない

何か辛いことがあって、「辛い」という事実は積極的にチーム内で共有したら良いと思う(できる環境であれば) ただイライラしているのをそのままチーム内の人間に態度や言動で示すのは不毛だ。 怒鳴ることやイライラした態度を取ることがチーム内に価値をもたらすことはない

チームにならないならチーム開発しない

働く環境に興味がなく、一緒に働いている人に対して尊敬できない人と一緒に働くことは難しい

一番能力が低い人(特定の人のレビューしない人とか)によって開発速度が下げられる環境でチーム開発を続ける意味がない 特にエンジニアであればフリーランスという選択肢もある。 誰かと働くことに価値を認める人が誰かと働けばいい

離苦

そういえば入社前、投資家の人に「リクルートは3ヶ月で辞めろ」というアドバイスを貰っていたがなんだかんだ14ヶ月ぐらいいた。

投資家は先見の明がある

amzn.asia

ビデオゲームでの対人戦少考

1

ビデオゲームを介してプレイヤー同士が対戦する時、どのような意味のある遊びが起きるだろうか

”自動でゲームが進行していく”というルールは、実現することがビデオゲームにとっては簡単でアナログゲームでは難しい

2つ意味合いがあってプレイヤーが何もしなくても状況が変わってくということでもあるし、プレイに順番や切れ目がなく連続して行われるということでもある 

これらを備えたゲームの対人戦について考察してみる。

2

ところでこのルールは対戦において何をもたらすのか   プレイヤーは時間という制約を強く課される。全く操作しなければ負けるのは当然として、操作することの速さや判断の速さ、時間に制約されたものが強く勝敗に影響する。

ゼロコンマ何秒で刻々と変化する状況に合わせて、素早く判断し適切な操作をゲームが終わるまで続けなければ勝つことができない。

3

こう書いてみるとかなり複雑なことをしているように思えるが、おそらくビデオゲームをしている本人はそう感じていない

それはどんなに複雑な状態でも勝つための条件が非常にわかりやすいからだ。ゲームによってゴールは違うが、相手のHPを削るとか相手より早くゴールするとか基本的に常にわかりやすい形で明記されている。

そしてプレイヤーは勝つためにどうすればいいか考えてプレイする。このプレイという1つの行動は人間の能力の都合上、ゼロコンマ何秒に区切ることができないだろう

つまり、どんなにリアルタイムでゲームが進もうがプレイヤーは自分のリズムでプレイしてそれを楽しんでいる

4

最後にいままでプレイとして扱ってきた1つの行為を分解して考えてみる。 

このプレイというものはプレイヤーがゲームに勝とうとした結果選択する行為であるが、ビデオゲームの特性によってかなり異なるものとなる

2つに分けれるように思える

  • 操作技術や反射神経、相手の行動予測などを伴い非常に短い時間で行うもの。

  • 現在置かれている状態を認識し、勝つために次の動きを考え選択するという行為。その行為自体は難しくない。

前者の集まりが後者の選択肢になるのかもしれないし、ただそうならないゲームもあるだろう。

これらの違いはほとんど感覚なので、明確にわけれるものではないかもしれないが、今後もう少し分けてみたい

ただ、

戦略や戦術、作戦とかそういう言葉にしてしまうのは少し"遊び"が足りない

 

  

げーみふぃけーしょん 1

1

ゲーミフィケーションについて考えたい

2つほど感じることがある

1つはその言葉自体が指すゲームに関するもので、もう一つは用いられる姿勢に関してだ

今回は1つ目に関して考えてみる

2

ゲーミフィケーションはゲームをつくることとは当然違う

これはだいたいみんなが理解していることだろう

ある目的を達成する上でゲームのデザインを利用することをゲーミフィケーションと呼んでいるようだ

ここでゲームのデザインを使うと言ってもアナログゲームやディジタルゲームによって違うだろうし、

ゲームをデザインする上での技法ではなく、ゲーム(いわゆるディジタルゲーム)の真似をすることを指しているのかもしれない

3

ゲームについて考える上でルールズ・オブ・プレイを参考にし、その立ち位置で見てみると

ゲームが成立する上で必要なものとしてゲームに参加して遊んでみようとする気持ちがあげられる

これとルールによって意味のある遊びが生まれる

しかし、ゲーミフィケーションが用いられようとする対象はおそらく別の目的がある

そのような状態では遊びが生まれることがあっても、ゲームが成立を目指すことは難しいのではないだろうか

4

ゲーミフィケーションされていると呼ばれるものに触れたときに感じる差異はなんだろうか

あるものは面白く、あるものはつまらなく感じるのはどこから来ているのか

ゲームとして成立していない状態で、ゲームのゴールを目指す行為を前提としたシステム設計は少なくとも悪く感じられる

ゲームでなくとも”遊び”は行われる

ゲーミフィケーションとの中で行われるべきは"遊び"をユーザーが見出せることでゲームの実装ではないと思う

etc

あるシステムの中にゲームが見つけられることがあるかも知れない

shooting starというtwitter clientが昔存在していたが

それについて考えると

shooting starを使うという行為が魔法円を形成しており、レベルという定量化された指標に対してユーザーが競いその中に意味ある遊びが存在している

面白い例である

JesterとしてのUX

1

近年、雑に扱われているUXという言葉がある。特にICTサービスにおいて

とはいえUXが何であるかを一人で議論し始めるほどUXについて研究が進んでいるわけではないので、 国際規格としてのISOを踏まえつつ今回のUXという言葉としていきたい

ちなみに、ISOには

a person’s perceptions and responses that result from the use or anticipated use of a product, system or service

となっている

2

上の言葉がどれほど意味があるかわからないが、UXはソフトを使った(使おうとした)結果の人間の知覚と反応らしい

もしかしたら知覚ではなく認知という可能性もあるがこだわらずに知覚としておこう

知覚と反応、「殴られたら痛かったので身をすくめた」とか「寒かったので震えた」とか思考を介在することなく生まれたものだ

雑に言ってしまえばUXは興奮と勃起だ

3

よくこのアプリのUXが良いとか悪いとか雑談する

ただ、何故良くないとか、何故悪いとかの議論は無駄だ

自分の感情にあとから理由付けをしても、自分を納得させたいからしているように感じる

また、自分で考えた理由がバイアスになって次に生まれうる感情の邪魔をする

4

「数字が良い」ならば「UXが良い」

本当だろうか

この”数字”にユーザーの知覚と反応をはかろうとしたものではなくビジネス上のKPIを使っていては

いつまでたってもユーザーが感じていることを測ることもできない

そもそもユーザーがどういう感情を持って欲しいかも考えられておらず測る気がないのかもしれない

Human Centeredではなく Business Centered

ユーザーがそもそも必要としていないものを誤魔化して押し付ける行為をUX改善と呼んでいる限り

あなた専属のUXという名の道化師はユーザーを笑わせることはない