CloudFunctionのアクセス制限メモ

特にアクセス制限を設けず、設定の権限でallUserが「Cloud Functions 起動元」の権限を持つと外部から無制限にアクセスすることができる。
想定外の実行をされたくない場合はロールを設定する。
ただしロールを決めると認証を1時間おきにやらないといけなくてめんどくさい
そのため、同VPC内のみにアクセス制限をかけて、allUserに「Cloud Functions 起動元」の権限をもたせるなどのやり方がある

windowsのvimからwslのファイルを使う上で困ったこと

windowsのvim上からwsl内のファイルを編集したい。

■背景
gulpでのビルドが非常に遅く、原因を調べていたところ、
win上のファイルをwsl上のgulpで更新した場合、ファイル形式の変換が走るためめちゃくちゃ遅くなる現象があった。
基本はwsl内のファイルはwsl内のvimから実施するべきだが、win上のvimでないと利用できないプラグイン等があるため、wsl上のファイルを編集したい

■事前知識
wslからwinのファイルを操作する場合は /mnt/c/hogehogeにアクセスすればいい。
逆にwinからwsl上のファイルにアクセスする場合は \\wsl$にアクセスすればいい。

■問題と解決策
nerdTreeで\\wsl$配下のファイルが取得できない。
→vimfilerなら取得できたのでそちらに移行した。

【ポケモンユナイト】ゲーム上手くない奴がソロでマスターになるには【ソロマスター】

先日、ポケモンユナイトでソロにてマスターランクに到達した。(到達時世界ランキング191位)
僕は決してリアルタイムで進行するゲームは上手くなく、どちらかと言えば平均以下だ。
これは謙遜でもなんでもなく一緒に遊んだことがある人ならわかると思うがマジで下手くそに部類される人間なのだ。
真面目に勝つためのプレイをしてスプラはAいけるか行けないかくらい。
ましてやMOBA系はほぼ未経験、一緒にやってくれる友達はβテストで満足してしまった。(僕は未プレイ)

では何故そんな僕がソロでマスターランクにまでこれたのか?
考え方ややってきた事を紹介しよう。

もくじ
・勝率51%を目指せ。プレイ時間でカバーしよう。
・味方が弱い!?仲間運ゲー?萎えないためのマインド
・仲間のバリューを最大化する
・強いキャラを使う。使うキャラをゲームの最初に交換する。
・アイテムレベルを上げる。
・最後まで諦めない。アクティブポイントを意識しよう。
・リスクはとらない

■勝率51%を目指せ。プレイ時間でカバーしよう。
マスターになれる人はどんな人だろう?
強い人?うまい人?課金した人?
どれもあっているが、間違ってもいる。
マスターランクになれる人は正確には
「一定以上の勝率を出すことができ、規定の試合数をこなした人」だ。
このゲームは勝てば1増えて、負けると1減るポイントが一定数貯まるとランクアップする。

では、”一定以上の勝率”とは何か?
その基準となるのは切り上げて51%だ。
※実際にはプレイヤーに有利に働くアクティブポイントの存在から50%、または50%を若干下回っていてもマスターに到達できるが、一旦はアクティブポイントについては考慮しないものとする。

ビギナーランクまでは負けてもポイントが下がらないので、スーパーからが本番だ。
スーパー4クラス、ハイパー以降は5クラス、各クラス3ポイントと、計57ポイント分勝ち越せばマスターに上がることができる。
勝率が100%の人であればビギナー+57試合でマスターになることができ、勝率51%の人はその50倍の試合をこなせばマスターに上がることができる。
ちなみに勝率60%ある場合は100%の人に比べて5倍の試合数をこなすだけで良い。
実際にはアクティブポイントの存在によってこの試合数よりは遥かに少ない数でマスターにあがることができる。

メインのカビゴンが56%、ほぼ同じ数使ったサブのワタシラガが52%、どちらも取られたときに使う他の面々が20%程度の勝率で平均勝率が53%しかないが、マスターにあがれた。
今マスターに上がっている人は勝率70-75、低くても60%だ。

では何故勝率がそこまで高くない僕がマスターになったのか?
僕のマスター到達時点での試合数が420試合だからだ。(強い人は大体250試合以下)
サービス開始から6日でマスターに上がったが、1日およそ70試合回している。僕がマスターになれた理由はそこに尽きる。
あなたのトレーナーカードをみてほしい。ゲーム慣れしている人は僕よりも勝率が高いと思うが、結構やっている人と比べても試合数は僕の方が多いだろう。(記事掲載時点)

マスター以降はレーティングとなるため、同じようにはいかないが、マスターに到達するだけであれば、強い人がなれるものではないと理解いただけたと思う。
さらにこのゲームはなぜか2ランク下の人とも普通にマッチングするため、エキスパート10人の中で平均戦果を出す必要がない。エキスパート帯はエキスパート帯としかマッチングしないのであれば僕は勝ち越せなかったと思う。

勝率55%の人よりも勝率60%の方が強いが、試合数を倍以上こなせば勝率55%の方が先にマスターに到達する。
強い人間がマスターになるのでなく、”勝率に見合った試合数を先にこなした人”がマスターになるのだ。
勝率60%の固定を組める時間の倍の時間勝率55%のソロを回すことができるのであれば、マスター到達はほぼ同時になる。

とはいえ、勝率が高ければ試合数も少なく済むためどうやって上手くないなりに勝率をあげるか以下にまとめる。

■味方が弱い!?仲間運ゲー?萎えないためのマインド
とんでもない動きをして敗因を作っているように見える味方にあたることがある。
ソロは味方運ゲーと言われる事もあるが、ちょっと待ってほしい。

このゲーム、というかランダムマッチ系のゲーム全てにおいて共通していえることがある。
実は”ゲームを破壊するような弱い人”が味方にくる確率より、敵に行く確率の方が高いのだ。
なぜなら、敵は5人いるが、味方は4人のため、単純に抽選枠が少ないからだ。

勝率を80%目指したい人は仲間に引っ張られて勝率をあげられないかもしれない。
しかし、マスターを目指す上でとればいい勝率は51%だ。
そして目指すのは勝利でなく勝率なので、(実際にそうかどうかはおいておいても)ある特定の味方で負けたとしても、
同レベルの人が敵に行って勝つ確率の方が高い。
勝率51%+αを目指す場合は長期的にみて味方がルールをわかっていなくて負けたとしても、関係がないのだ。

とはいいつつ、僕はプレイしているときはとても配信できないような言動と小学生並みの語彙力でプレイしているが、それはそれである。
一定の勝率を出しつつ、試合数を稼ぐことが大事なので萎えない心が大事なので、誰にも聞こえない・見えない所でこっそりキレ散らかそう。

■仲間のバリューを最大化する
5対5のゲームなので、1人が試合に貢献できる総量はたかがしれている。
もちろん、圧倒できる強さやゲームの上手さがあれば試合に蹂躙して圧倒できるかもしれない。
ただし、この記事の趣旨はそんな蹂躙する強さを持たない人がどのようにマスターに行くか?だ。
最低限の知識やタブーを覚える事は必要だが、それ以上に大切なことがある。
それは仲間のバリューを最大化することだ。
相手の5人の平均戦力と、コチラの4人の平均戦力はランダムマッチの性質上ほとんど同じといえる。
勝率51%を目指すのであれば、各々のバリューをしっかりとだしてもらうことで、自分がたとえ平均以下の実力でも勝率51%を超えることは容易だ。
なぜなら、仲間のバリュー最大化ができていない人が多いので、最大化していない相手の試合は勝ち越すことができるからだ。

仲間のバリュー最大化を簡単にできる方法が2つある。

・好きなモンスターを選ばせる。
・意思の疎通をとり、クイックチャットを活用する

以上2つだ。

まず、「好きなモンスターを選ばせる」について。
こういったキャラクターを選ぶゲームは少なからず、”○○専門”と言った人が必ずいる。
1キャラだけ熱心に練習している人たちだ。
特にこのゲームはアイテムレベルの存在から、普段プレイしていないモンスターを使うときに不利になりやすい。
なので、最低2キャラ、できれば3キャラは使えるようにして、仲間に好きなモンスターを選んでもらった後に自分は選ぼう。
これをやれるかどうかで、相手が専門被りした試合は勝ち越せるので勝率51%を超えることが容易になる。

そしておすすめは中央レーン以外でタイプが異なるモンスターを使えるようにすることだ。

なぜなら中央レーンは勝利に直結しやすいから。
ゲームがうまい人なら絶対にアタッカーや中央レーンをやることがおすすめだ。
しかし、この記事はゲームが上手くない人へ向けたものなので、中央レーンは選んではならない。
勝率70%を目指すなら間違いなく中央レーンを練習したほうがいい。
逆にいえば自分が中央レーンになった場合、相手の中央レーンに勝ち越せないと勝率が大きく下がるため
そのため中央レーン以外をやったほうがいい。自分でプレイしなければ敵の中央レーンより味方の中央レーンがうまい確率はほぼ50%になる。
勝率51%を目指す場合は”勝利に直結しないポジションで平均戦果を出す”そして、”仲間のバリューを最大化させる”だけでいい。

次に「意思の疎通を取り、クイックチャットを活用する」について。
簡単にいえば仲間に指示を出すということ。
マイナスボタンでマップを開くと、”拠点の防衛”であったり、クイックチャットで撤退の意思表示ができる。
クイックチャットをいったところで意味のない味方も頻繁に遭遇するかもしれないが、その味方の事は考えなくていい。
なぜなら敵にいったところで同じような行動をするからだ。
だが、”クイックチャットをくれれば気づく・動ける・撤退できる”といった層は決して少なくない。
そんな味方がきたときにちゃんとクイックチャットを打てるチームと打てないチーム、勝てるチームはどちらだろうか。
ちょっと自分一人が良いプレイをする以上にクイックチャットをすることは価値のある行動といえる。

今の環境でのおすすめクイックチャットは
・前に出すぎた味方に対して”撤退”を打つ
・カジリガメが湧く45秒前に”下レーンに移動を打つ”、20-30秒前に”集合”を打つ
この2つを意識するだけで平均以下の実力でも勝率51%を出すことは容易だ。なぜならやらない人が多いから。

全てに言えることだが、”他人を変える事は難しい。一番簡単に変えることができるのは自分の行動と環境”である。
自分一人の行動改善によって勝率を数%上げるより、環境を変えることで味方の行動改善し勝率を上げるほうが容易と思う。

■強いキャラを使う。使うキャラをゲームの最初に交換する。
2-3キャラ使うとして何を使えばいいだろう?
それは強いと言われているキャラを使うことだ。
もちろん、[モチベーションを維持するために好きなモンスターを使う]といった観点も大事だ。
なぜなら[プレイしなくなったらマスターにはなれない]から。モチベーションを維持できる範囲で強いモンスターを持ちキャラにしよう。
また、1-2キャラまでは人に譲るため、ポジションがかぶらないほうがいい。
例えば、カビゴンメインの、サブヤドランにすると、ヤドランを使うときはカビゴンが必ずチームにいるため、バランスが悪い。
また、上レーン用キャラであれば、サブは下レーン用キャラが良い。(なぜなら、上レーンを譲るということは余る湧く上1下2になるから。)
今のおすすめはディフェンス+サポート。アタッカーは中央レーンにいかされがちなので、アタッカーを使う場合は上下レーンを先に宣言して中央レーンに行かない宣言をしよう。

また、このゲームのキャラクター選択画面は”ライセンス取得順”で並んでいる。(早いもの勝ちの仕様も微妙だけど、この仕様が微妙さに拍車をかける)
そのため、メインかサブキャラが可能な限り少ない操作で選べる場所に配置されている必要がある。
まずメインキャラにカーソルがあってる状態にし、同じライセンスを最初にとった人は”何もモンスターを選んでいない”ような表示になる。
その状態でいることはチェックマークが付くまで持ちキャラからカーソルが外れるのを待っている状態だ。
サブキャラが誰も使っていないようなら、メインは譲ってあげよう。
サブキャラが誰かに取られている場合は空気を読まずにメインをそのまま選択する。なぜなら自分が使えないキャラを使うより、○○専門勢のサブの方がまともな確率が高いから。
逆に自分のメインが先に選択されている場合は、急いでサブキャラを選択しにいく。
そしてメインもサブも全部取られている場合はアタッカーキャラクター以外はクイックチャットをうつといい
「サポート型のポケモンで戦うよ!」「ディフェンス型のポケモンで戦うよ!」である。どちらも2回くらい言えば、複数キャラ使える人が譲ってくれる可能性が高い。
それでも譲ってもらえない場合は適当なモンスターを使おう。その試合は負けても良い。
なんにしても、たくさん持ちキャラを持たないのであれば、自分の持ちキャラが最初にカーソルがあっていることは非常に大事だ。

■アイテムレベルを上げる。
このゲーム、アイテムレベルが20あるかないかでかなりの違いがでる。
そのため、利用するアイテムは全て最低でも20、可能なら30を目指そう。
特に課金を気にしないのであればまずはジェム購入して、アイテムきょうかキットをひたすら交換したほうがいい。
課金した人が勝つゲームではないが、課金すれば勝率があがるので、51%を目指す上では課金してしまうのが手っ取り早い。
というかゲームが上手くない自覚があってマスターに行きたいのであれば課金しよう。「そんなに変わらないよー」ってレベル以上の差はある。
上限も比較的安いため、あなたがマックスまで課金すればチームの平均道具レベルは相手より上になる。

■最後まで諦めない。アクティブポイントを意識しよう。
このゲームは今の環境だと亀を2-3匹倒すゲームである。
しかし、亀を倒したチームが勝つわけではなく、レベル差3以上あってもサンダーで逆転したりと逆転することも多い。
そのため、本当に詰むまで最後まで諦めてはいけない。
ただ、もうまず無理な試合のとき、針の穴の勝利を目指したり、降参したりするよりもやることがある。
アクティブポイントの獲得(ゴール)だ。

アクティブポイントとはゲーム参加で10点、連勝や獲得したゴールポイント数によって試合後にもらえるポイントのこと。
例えばエキスパート帯では、
・100ポイント以上ある場合は100ポイントを失いランクダウンをしない。(実質1敗がなくなる)
・400ポイント貯まると400ポイント消費し、1勝したことになる。
このポイントは非常に大事で、勝ったら1増えて負けたら1減るゲームだとポイントの総量はほとんど変わらない。
しかしこの制度によってポイントの総量はめちゃくちゃ増えている。
これが勝率50%をちょっと切っていてもマスターになれる所以だ。

ではアクティブポイントの獲得とはなにか?
アクティブポイントはゲーム中に獲得したゴールの点数によって、最後の5ポイント~のポイントがもらえる。
50ポイント、100ポイント、200ポイント・・・がその基準だ。
そのため、勝ち確の場面や負け確の場面では放棄せずにしっかりとポイントを入れて上記点数を超えるように意識するといい。
特にラストスパート中は得点が2倍になるので、50点にぎりぎり届いていない場合は特攻してでもポイントを入れよう。
※だたしその行動によって試合結果が変わるようなことがあってはならない
50点いれていない試合を入れるように、100点入れてない試合を入れるように意識を変えるとどうなるか?
なんと20試合で1敗がなくなる分のポイントがたまるのだ。
これは本当に大きくて、勝率1%あげるよりも簡単に勝率1%以上の価値がでる。
もうだめな試合でも諦めずに勝ちを目指すこと、そしてどうあがいても勝てない試合はポイントをとることを意識する。

■リスクはとらない
対戦ゲームにおいて全てにいえることだが、勝因を作る事よりも敗因を作らない事を意識したほうがいい。
常にリスクには敏感になる。ファインプレーよりもクソプレイをしないことを心がける。
ワンチャンかける(ハイリスクハイリターン)はもうそうしないと負けるときだけでいい。どっちが勝つか分からない状態でリスクをとってはいけない。

やってはいけないことを知ることが大事なので、そのあたりは僕ではなくうまい人のガイドを参考にすると良い。

temtemのLairs攻略と雑感

シパングアップデートみなさんは楽しんでいますか?

僕はとても楽しんでいます。

昨日、3回くらいLairsで遊んできたので、気づいた事とか個人的な意見をまとめておこうと思います。
これはアーリーアクセスのゲームver0.7.0に基づいた記事のため、今後変更される可能性があります。

また、攻略情報みてやったわけじゃないので間違いとかあるかもしれない。

■どんなコンテンツ?
Lairsは複数箇所にあり、現在挑戦出来るダンジョンは1つ
毎週クリア報酬を獲得でき、そこでしか手に入らないテムテムがいる
参加人数は3-5人。randomマッチはないのでローカルチャット募集かTwitter募集などに参加する必要あり
アイテム・テムは持ち込み不可。ダンジョン内で入手したもので戦う。

■ビルド方針
チームは基本的に宝箱からの入手か、敵と戦闘後にランダム入手か、テムテム取得ポイント(序盤のみ)から入手する。
個性はおそらくランダムで、技はタマゴ技、わざマシンなど含めて覚えるすべてから選択が可能
技は弱点をつけるようにするため、色々タイプを用意したほうがよさそう。
また、ランクマッチをやっていると忘れがちだが、「TVsが適当振りの個体」となるため、普段は特殊技しか使わないテムテムでも物理技が候補になりうる。(トゥーロックの竜巻など)
基本はクリア時には6匹にしておきたい。5匹でもクリアできるとは思うが、ダイヤの数がやばくない限りは6匹を目指す。
7匹を超えた場合は入れ替えるテムを自分で選ぶ事になる。
道中楽にすすめるテムテム(例えば高火力であったり、回復持ちであったり)は大事だが、長期的に意識しておくことがある。

ボスをどう倒すか?だ。
ボスは炎緑タイプで弱点が毒のみ。毒特攻を持っている(もっていないときもある?相手の能力は固定ではない模様)ので、毒も辛い。
セルニーフは道中は強いが、炎と草弱点はボスでは活躍しにくいと思う。
またボスは状態異常が入らないので、疲弊や睡眠は効果がない。
ただし、ステータス変化は効果があるので、ライカーンやムシュックなどで攻撃ダウンを入れると楽になる。
注意することはゲージを割るたびにリセットされるので、ゲージ割るたびに入れる必要があること。
1回入れるだけでだいぶ楽になる。2回目以降、どんどん効果は薄くなるので、乱発すればいいわけではない。

そのため、ボスに有効なデバフや耐性、攻撃手段を持っている事が大事。

ただほとんどの場合、もらえるテムテムは固定なので運では?と思われるかもしれない。
もらえるテムテムはある程度操作することができる。

敵を倒した際に入手出来るテムテムは「その敵が使っていたテムテムからランダム」だ。
特に序盤の敵の数が少ない時は何がもらえるか分かりやすい。
なので、すごい序盤でも欲しいテムがいない場合はテムではなく、宝石をもらっておくほうが良い。
またどうしてもボスが倒せなさそうなときはテムを7-8匹目を取得して入れ替えても良い。

とはいえ数は正義なので序盤ではやめに6匹にしたいところ。

■買い物方針
敵を倒したときにもらえるお金で買い物ができる。
この資産はメンバー全員で共通だ。
買い物で気をつけていることは以下
・全滅するくらいなら多く買い物しておいたほうがいい。全滅は重い。
・チームが弱い人はとにかく買い物したほうがいい
・蘇生や全回復はボスクリア時に1つ以上もって終わるくらいの気持ちでいい。(それでも足りなくなる)
・買い物中でもリアルタイムでお金は増えるので、チームが弱いときは「他の人がすすめるのを待ってお金が入ってから買う」と良い。
・クリアが難しい(チーム状況やプレイヤースキルの問題どちらの場合でも)人は遅れて進めて増えたお金でアイテムを買うといい
・マップを開くとその先で発生するイベントがすべてわかるので、「連戦がある場合は多めにアイテムを購入する」と良い。特に3連戦はアイテムないと無理。
・ボスはチームが強くないとアイテムありきなので、「そもそもある程度は購入が必要」
・共有資産なので使うの気が引ける人は稼いだ額の6-7割くらいは使う気持ちでいいと思う。全滅は重い。
・マップをみて、「仲間全員が最後のショップより先」にいる場合は全額自分で購入していい。残す意味はない。
・炎ダメージ減がボスにめっちゃ強いので買いたい。

あとボスまでが遠足のゲームなので非常に悲しい事実なのですが、
・野良でボスに挑戦できるダイヤがたまるなら最後のショップはかなり多めに買ったほうがいい。
・ボスより前の戦闘では仲間の資産が減るとクリアできなくなる可能性があるが、ボスに挑戦した後は個人ゲームなので、クリア率には関係しない。
→というか買わないと買われるので戦争。クソゲーかな?
→とはいえ協力ゲームなので節度持ってやりたいですね。

■進行ペース方針
基本進められるなら可能な限り早いほうがいい。
全滅しそうな場合などで、買い物の価値を最大化したいなら待ってもいい。
早いほうがいいメリットは以下
・仲間にバフやお金を多く配れる。遅い人が楽になる
・ボスに挑戦する権利は「ダイヤを18個集めてクリアすること」ではない。
→ 「ダイヤが18個あるとき、自分が最後の地点で試合開始ボタンを押す」ことだ。
→ どういうことかというと、18個溜まった段階で出発しないでいて、誰かが死んで復活すると「14個になって出発できなくなる」。クソゲーかな?
→ そのため、18になったらすぐボスに挑戦するべきなので進行ははやければ早いほど自分が得。(出発すると部屋から抜けた扱いになるが、ボスに挑戦できる段階で仲間の手助けはもう出来ないので早く抜けても迷惑にはならない)
→ 連絡取り合える同士でプレイしているときはこの仕様を注意し、復活するときは声かけたほうがいい。(最後のチームギア調整中に数減って出撃できないとか目もあてられない)

■退出方針
相当頑張れば3回、おおよその場合2回まで全滅出来る。それ以上の全滅はボスには挑戦できないと思っていい。
→ボスのことを考えると全滅1回調整で残りバフ選んだほうがいい気もする。そのへんはチーム内で相談。
何回死んだら退出するかは相談しておいた方がいい。なんにせよ、全滅は重い。
ボス挑戦権が獲得できないのに他の人を待たせて試合続行するのは一声かけたほうがいい。
→ 自分が勝てば18個貯まるなら、それを伝えたほうが良いと思う。

■トレード方針
ランダムでなにか差し出すともらえるやつ。
バフやリバイブが大量にもらえたり、ダイヤがもらえることがある。
ダイヤの数がやばい時は狙うのはあり。HP50%払って効果するやつはだいたいめちゃくちゃ美味しいので、トレードするタイミングがマップをみてあるなら中回復を多めに買っておくといいかも。

■戦闘方針
負けないこと
次に戦闘があるなら被弾を極力さけること
バフは引き継がれるので、(全回復取ると消える)生命力吸収使ってから倒すとかは強い
被弾量をへらすことが大事、リバイタライズがいる場合は回復ループして終わると節約出来る(時間はかかる)

■初心者へ
初めての挑戦に向けて、事前調査でこの記事を読んでいるかもしれない。
とても大事なことだと思うけれど、「数回やってアイテム購入のさじ加減覚えないとクリアは大変」と思われる。
また、普段レート戦とかしない人はテムの型とかわからなくて大変だと思います。(しかも図鑑登録してないと自分のテムのタイプみえなくてつらい)
なので、まずはプレイすることが大事!プレイ自体は3-4人でもできるので(クリアは5人が圧倒的に楽)練習や様子見募集とかするといいかも。
参加するときは事前に「未プレイ」で大丈夫か確認したほうが良いです。この人口でだめって言われることそうそうないと思いますけど、
調べていても初見クリア結構たいへんなので、気遣い大事。

■楽しい?
一人か2-3人でやれるならもっとやりたかった。(ローグライク大好きマン)
毎回違うチーム楽しいし、リソース考えながら進めていく、「ランクマにはない考えるプレイ」が楽しかった。
ランクマがストーリーのバトル1試合を濃くしたものなら、これはストーリー全体を濃くしたものだ。
5人だし時間の価値観違う人同士でやるのは苦手な人には合わないかも。

助けるよりも足手まといにならない事を意識しないといけないルールなのでしんどい。リソース管理が仲間とシェアだけでなく、テムエキスの瓶1回とか欲しかった。

一人の全滅が重く難易度は高め。そのくせタイプ偏るとマジできつい回がある。
でも特別ルール系としては良い作りだと思うので、バトルフロンティアに個人的には期待。
人を集める事が苦じゃないならおすすめ出来るけど、改善の余地ありな部分はみえてる(特にダイヤ減ると出撃できなくなるとか、最後アイテムいっぱい買ったやつが得するとか)

しばらくは週1で遊ぼうと思う。

hapi.jsフレームワークのエラー解消法

node js関連のフレームワーク勉強中。

'use strict';

const Hapi = require('hapi');

const server = new Hapi.Server();
server.connection({ port: 3000, host: 'localhost' });

server.route({
    method: 'GET',
    path: '/',
    handler: function (request, h) {
        reply('Hello, ' + encodeURIComponent(h.params.name));
    }
});

server.start((err) => {

    if (err) {
        throw err;
    }
    console.log(`Server running at: ${server.info.uri}`);
});

公式が配布しているhello worldを動かすと下記エラーが出る

TypeError: server.connection is not a function
    at Object. (/home/ユーザー名/temp/server.js:6:8)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

下記部分を書き換え

server.connection({ port: 3000, host: 'localhost' });

const server = new Hapi.Server({ port: 3000, host: 'localhost' });

理由としてはhapi v17.0.0から単一サーバーの複数接続のサポートが削除されたため。

さて、これで実行すると下記エラーが出る。

Debug: internal, implementation, error 
    TypeError: reply is not a function
    at handler (/home/ユーザー名/temp/server.js:11:9)
    at module.exports.internals.Manager.execute (/home/ユーザー名/temp/node_modules/hapi/lib/toolkit.js:31:106)
    at Object.internals.handler (/home/ユーザー名/temp/node_modules/hapi/lib/handler.js:46:48)
    at exports.execute (/home/ユーザー名/temp/node_modules/hapi/lib/handler.js:31:36)
    at Request._lifecycle (/home/ユーザー名/temp/node_modules/hapi/lib/request.js:312:68)
    at process._tickCallback (internal/process/next_tick.js:68:7)

これはHapiのバージョン17でAPIが大幅に変更されたかららしい。(https://hapijs.com/api/17.1.0)
仕様変更したら変更前のソース実行時にエラーメッセージ出すとかしてほしいね?

    handler: function (request, h) {
        reply('Hello, ' + encodeURIComponent(h.params.name));
    }

上記を下記に書き換える。

    handler: function(request) {
            return 'Hello, ' + encodeURIComponent(request.params.name);
    }

そして以下が完成形のHello worldソース

'user strict';
  
var Hapi = require('hapi');
const server = new Hapi.Server({ port: 3000, host: 'localhost' });
server.route({
    method: 'GET',
    path: '/{name}',
    handler: function(request) {
        return 'Hello, ' + encodeURIComponent(request.params.name);
    }
});
server.start(function() {
    console.log('Server running at:', server.info.uri);
});

動作確認

node server.js

実行したまま、別画面を開き、実行したサーバー内部から下記コマンドを実行

pc:~$ url -X GET localhost:3000/shibamata
Hello, shibamata

shibamataは適宜変更すればその文字が返る。

日本語の情報少なすぎませんかね?

Hello worldから躓いて解決策分からないと辛いので、誰かの助けになれば。

google検索するときに変換候補を選ぶ事ができない

知人のPCで起きた問題を解決したのでメモ。

【症状】
google検索のトップページで文字入力し、ある程度まで入力してから変換候補を選んでも、
画面下のブックマークを選択してしまったり、候補が選ばれずにひらがなの入力が完了するだけになる。
サジェストが選べない。

また、シークレットモードではこの事象は発生せず、正常に候補を選択することができる。
ひらがな入力を完了させてからなら候補を選ぶことができる。

【原因】
最新のMicrosoft IMEがクソ

【解決策】
MicrosoftIMEの設定で以前のバージョンを利用するにチェックを入れる。

LINE API(LIFF)+AWS でハンズオンしてきた

とても良かった(小並感)

AWSの資格を取得したものの、ちゃんと何か作ったことないなーとか、
他の資格とるには経験足りないなーと思ったのが参加のきっかけ。

簡単操作でやった感が出るとてもいいハンズオンだった。

ほぼ永続的にハンズオン教材や動画を残しておいてくれるそうなので、試してみたい人はぜひ。

AWSのアカウント作ったー LINEグループ作れるよーくらいで以下のようなアプリが作れちゃいます。

ボードだして、イラスト書くとそのままラインにおくれちゃう!

実際のコーディング部分はほぼなくて、値の設定くらい。
どっちかっていうと、LIFFの作り方やAWSでどう環境構築するか?みたいな部分をもりもり試せた。
ほぼ無料枠内のみで完結して、後始末手順もしっかりあり、当日はAWS社員やLINE社員の手厚い介護を受けながら試せる。

これ無料でいいのか!?

AWSで触ったサービスはS3、Lambda、APIGateway、CLOUD9、chaliceとかかな。
CLOUD9なるオンラインエディタとchaliceは初めて聞いたけど、デプロイ簡単過ぎるし、ローカルへの環境構築がいらなくてハンズオンとの相性は最高だった。

LINEのミニアプリ(LINEの中で動くアプリのようなもの)の説明や、
サーバーレスでどのようにサービスを作るかみたいな座学もあり、本当に充実していた。
また参加したいなー。

当日のハンズオン資料は下記にあるので、興味ある方はぜひ試してみてください。
LINE APIでAWS上でアプリを作ろう! 2020年版
LINE API × TECH API VOL. 2 POWERED BY AWS

ちなみに他の人に使ってもらうのは下記の丸でかこった部分を押してDeveloperからpublicに変更すればいいです。
※自己責任で。

【本日の格言】
オンプレはブサイク
※個人の見解であり、所属する団体とはry

2020年:AWSソリューションアーキテクト-アソシエイト合格体験記と書籍紹介

2019/12末、長期休暇に入るにあたり、時間取れるし何かやるかなーと思いたち、
前々から取ろうと思っていたAWSソリューションアーキテクト-アソシエイトを勉強して取得してきました。

1中旬に取得したので、だいたい2週間ちょっとくらい。
その間にどんな勉強したかを忘れないうちに書いておきます。
合格体験記とか勉強法は記事がたくさんあると思うので、
実際に利用した勉強サービスや書籍を紹介したいと思います。

■スペック
AWS未経験
インフラほぼ未経験
アプリエンジニア数年

■今回購入したもの
AWS認定アソシエイト3資格対策(書籍)
この一冊で合格!AWS認定テキスト&問題集(書籍)
一夜漬けAWS認定ソリューションアーキテクトアソシエイト(書籍)
AmazonWebServices 基礎からのネットワーク&サーバー構築(書籍)
AWS WEB問題集で学習しよう(WEBサービス)
公式模擬試験(WEB)

■無料で利用したもの
blackbelt
公式のよくある質問
公式のサンプル問題

■AWS認定アソシエイト3資格対策(書籍)
おすすめ度:★★★☆☆
勉強時間:1週読む(1.5日)
AWS認定試験でソリューションアーキテクトの本が乱立する中、DeveloperとSysOpsも抑えた1冊
3資格コンプリート目指す人が読む分にはいいかなーと思いつつも、それぞれの資格の境界線が曖昧であることや
いざソリューションアーキテクトを受かった後にDeveloper勉強しようにもいまいち使い勝手が悪く、
初動にざっくりやるにはいいけれど、試験前日に読む書籍ではなかったなあという印象でした。

■この一冊で合格!AWS認定テキスト&問題集(書籍)
おすすめ度:★★★★☆
勉強時間:2週読む、付属の問題をすべて完璧にする(2日)
問題集が欲しかったために購入したが、問題はそんなに多くない。
内容としては既に古いものもあったが、内容も図解がわかりやすく概ね満足した。
模擬試験の難易度が他の書籍に比べて高く、本番以上だった。
ただし、本番にでない形式の問題があるなど、出題形式に慣れたい場合は不向き?
この一冊で!とあるが、各種レビューサイトにもかかれているが、この一冊だけで合格は結構しんどいと思う。
というか、1冊だけで合格がしんどい資格だと思います。
おすすめは2~3冊購入して情報の網羅性を高めることと、2~3冊で重複する内容は出やすいものなので、複数冊買う方がいいんじゃないかなと思います。

■一夜漬けAWS認定ソリューションアーキテクトアソシエイト(書籍)
おすすめ度:★★★★★
勉強時間:3週読む、付属の問題をすべて完璧にする(4日)
2020年発売の書籍。情報も新しい。一番のおすすめ。
章構成が実際の出題カテゴリとリンクしていて、公式の模擬試験で点数が悪かった場所を重点的に勉強も可能
ページ上部にポイントとなる概要、その下に解説という形式をとっているため、試験前日にポイントを読む→分からなければ解説を読む
といった勉強がとてもしやすかった。
また、問題の出題形式についての具体的な解説やこのサービスの問題はこういったことが聞かれるといった内容がかかれている(実際にでた)
受かるために必要な情報が凝縮された一冊でした。
模擬問題の解説がめちゃくちゃよくて、他の問題集は正解の理由が書いてあるだけで、
誤答に対して、なぜそれがだめなのか?について丁寧に記載されている点が本当によい。
今から受ける人がいれば絶対にお勧めしたい一冊です。

■AmazonWebServices 基礎からのネットワーク&サーバー構築(書籍)
おすすめ度:★★★★☆
勉強時間:1週読みながらハンズオン(2日)
AWS試験を受かるには手を動かすことだ!といった話を聞くことも多く、まず触ってみるかーと吟味して選んだ一冊。
勉強後にちゃんと終了させれば無料枠で出来る内容しか記載されておらず、やろうと思えば1日かからずできる量であることがよかった。
結論として、短期間で受験するなら実際に触る時間を机上で勉強した方が時間効率はいいように感じた。
しかし、この書籍のハンズオンはネットワーク未経験だった自分にサブネットやTCP/IPの内容をわかりやすく書いてくれたおかげで後の勉強がやりやすくなったことや
1冊勉強を終えたという達成感、NAT関連の問題にはまず間違えずに即答出来るようになり、自信がついたことなど、
短時間のハンズオンでありながらメンタル面でとてもプラスになった。
ただし、利用するソフトウェアのversionのかみ合わせが悪く、本の通りにやるだけだと動くところまでいかず、トラブルシューティングに時間がかかって計2日かかってしまった。
ちょっとそこだけは残念だなーと思いつつ、書籍だから仕方ないと割り切った。
もし買ってつまった方は以下の記事を読んでもらいたい
awsでWordPressが500エラー時の対処法

■AWS WEB問題集で学習しよう(WEBサービス)
おすすめ度:★★☆☆☆
勉強時間:2日?
スマホからも利用できる問題集。4500円くらい。
勉強法や合格体験記を読んでいるとよく話題にあがるサイト。
問題数は多く、移動中ができるのは魅力だがそれだけのサイト。
AWSの知識を増やすにはいいけれど、出題の仕方や実際の試験で問われるベクトルと異なる問題も多数あり、
ping-tなどの資格問題サイトを経験した後だと間違えた問題を一覧でみるとか、問題にフラグをつけるといった機能がなく
ただただ使いにくかった。
時間に余裕があるときに壁打ちを繰り返すにはいいかもしれないけれど、
スマホからできることのメリットを生かせないなら、値段と比較してしまうと個人的にはあまりおすすめできない。

■公式模擬試験
おすすめ度:★★★★☆
勉強時間:半日以下
問題数は少ないけど、良質な問題
難易度は低めなので油断しないように。
ただ、答えもらえないのがただただマイナス。

■blackbelt
おすすめ度:★★★☆☆
勉強時間:2日
公式の情報動画、無料。
最新の情報がでるが、厳密な情報も多いが、情報過多でノイズになりがち。
分からないサービスを理解するにはかなり良かった。
問題解きつかれた頭で受け身で勉強もできる。
問題点は物量がすごいことと、ITの知識がちょっとないと内容が難しいことがある点。

■公式のよくある質問
おすすめ度:★★★★☆
勉強時間:1日
公式のサービス別よくある質問。
ここから出る問題も少なくない。ただ物量があるため、頻出サービスの苦手分野だけ読むほうがいいかも。
理解度の低いサービスの理解度は一気に上がる。

■公式のサンプル問題
おすすめ度:★★★★☆
勉強時間:30分
簡単すぎる問題。ただすぐ終わるし無料なのでとりあえずやっとけ感はあります。

【おまけ】ネットで出ている情報で古かったもの・誰かに教えてほしかったもの
・2018年3月くらいから新試験が開始されていて、8月頃に旧試験が終了した。
・2020年3月頃から更に新試験が出る。難易度はあがりそう、現試験もいつかは終わる
・資格の有効期間が2年から3年に延長された
・プロフェッショナル試験は前提のアソシエイト試験をもっていなくてもよくなった
・遠隔カメラで監視されて英語でチャットみたいな話も聞くけど、そんなことはなかった。会場によるかもしれないけど最近の受験記事できかない。

awsでWordPressが500エラー時の対処法

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版を読みながらAWSをいじっていた時躓いたので
同じ状況の人のためにメモ。

■状態
CHAPTER8 DBを用いたブログシステムの構築 の項目内
8-4 WordPresssを設定する において
サーバーに接続しようとした際、500エラーが返却されてページが表示されない。

■原因
最新のWordPressが求めるPHPのバージョン条件を満たしていない

書籍出てから結構立つし、しゃーないよねって話。

以下、上記書籍の手順通りに作成している場合の原因確認方法と解決方法を記載する。

■確認方法(直し方知りたいだけの人はここは飛ばす)
まずPHPのエラーは以下のコマンドで確認できる。

sudo less /var/log/httpd/error_log | tail -20

すると以下のようなエラーがでているはずだ。

[Sat Jan 04 19:53:14 2020] [error] [client *****] PHP Parse error:  syntax error, unexpected '.', expecting '&' or T_VARIABLE in /var/www/html/wp-includes/functions.php on line 1064

これは、WordPress 5.2ではPHP 5.6.20以降が必要なだが、古いPHPを利用してるときに発生する。
参考サイト

蛇足だが、インストールされてるPHPのバージョンを確認するのは以下

yum list installed | grep php

私の環境ではPHP5.2であったため、そもそもバージョンが足りていなかった。

■解決方法
理想はPHPのバージョンを7.xにすることだが、少々めんどくさい
また、今回はネットワークの勉強やAWSをさわりたい人がやっていると思うので、
書籍から大きく変わらない手順で対応するため、WordPressのバージョンを落とす。

以下のコマンドで配置したファイルの削除を行う

 
cd /var/www/html/
sudo rm -rf ./*
cd 
rm -rf wordpress

8-3 でwget で行ったコマンドを以下に読み替える

wget https://ja.wordpress.org/wordpress-4.9.13-ja.tar.gz

※併せてtar の展開コマンドも変える。

以降の手順は書籍通りに実施すれば500エラーが出ずにWordPressのページが開けるはずだ。

以上