2017年8月30日水曜日

ページ右下に熱盛を出すだけのUser Styleを書いた

ものすごく邪魔。

@mazamachiさんの「たまに熱盛が出てしまうextension」が面白そうだったので作った。

中身はコレ。

StylishといったUser Styleを設定できる拡張機能を利用したりして使う。

transitionやらanimationやら設定して忘れた頃に「熱盛!」ってドンと出る実装はできそうだけど、ここまでやって満足してしまった。

問題があって、Stylishでやるとiframeの中にまで熱盛するので、Twitterのタイムライン中の埋め込み動画やBloggerの画像アップロードダイアログの中にも熱盛が出てしまい、笑いをこらえながらこの記事を書いています。

2017年8月29日火曜日

cron.yamlのdescriptionに日本語を書いてはいけない

TL;DR

Google App Engineのcron.yamlのdescriptionに日本語を書くと、アップロード処理がInternal Server Errorになることがある。
なので、基本的に英語で書いておくのが無難。

確認したのはGo言語のStandard Environment。

なにが起きたか

既存のプロジェクトでcron.yamlに記述している6つの設定のdescriptionを全て日本語に書き換えた。
CIで自動デプロイしているのだが、何故かcron.yamlのアップロードだけInternal Server Errorのため失敗しているログが出ていた。
デプロイスクリプトのexit statusがnon-zeroにならないという別の問題も発生しており、気付かないうちにcron.yamlのアップロードに失敗したり成功したりを繰り返している謎の挙動になっていた。
失敗したり成功したりはサーバー側で発生しており、デプロイを行うのがgcloudコマンドでもappcfgでも同じ状況。

どうやら次の繰り返しになっていた。

  1. cron設定が無い状態
  2. cron.yamlをアップロード → これは成功し6つすべて反映される
  3. 別のCIでcron.yamlをアップロード → Internal Server Errorが発生し、6つのcron設定のうち3つだけが何故か残っている状態に
  4. 更に別のCIでcron.yamlをアップロード → Internal Server Errorが発生し、残り3つも消えて、cron設定がない状態に
  5. 0に戻る

cron設定が3つ以下の場合は、上の挙動の3番目が抜けるだけで成功と失敗を繰り返しすのは一緒。

今回の現象が起きる前から6つのcron設定を 同じCIで常にデプロイしていたが、失敗はしていなかった。
1つ日本語のdescriptionも混ざっていたが アップロード出来ていた。
おそらく6つすべて日本語に書き換えたため発生した。

推測と対応

cron.yamlを書き換えつつ gcloud app deploy cron.yaml --project foobar を何度か実行した結果から、次のような現象だと推測している。

  • cron.yamlのアップロード処理は既存の設定を一旦全てクリアするため、3つずつ削除している
  • そこに日本語のdescriptionが含まれていると失敗しInternal Server Errorになる
  • 消し損ねたものは 次にcron.yamlをアップロードする時に削除される
  • そのためcron設定が4〜6つある場合は、2回アップロードに失敗して(3つずつ削除して)全て消しこんでからでないとアップロードに成功しない
  • 既存の設定のdescriptionに日本語が含まれている時に発生するので、一旦すべて削除したから英語のdescriptionだけのcron.yamlをアップロードすると成功するし、その後も英語のdescriptionであれば問題ない

というわけで、一旦空のcron.yamlを 2回アップロードして(2回Internal Server Errorにして)から英語だけのdescriptionのcron.yamlを 何度かアップロードしているが、今のところエラーは発生せず反映されている。
また、コメントに日本語入っているのは問題ない様子。

TODO issue登録

2017年8月5日土曜日

えいえんのケチャガールへの道&C92宣伝 #Splatoon2

Splatoon2のはじめてのフェスでしたね!
今回はマヨネーズvsケチャップで、ケチャップ側につきました。

2017/08/05のお昼頃からはじめて休憩はさみつつ2時間半弱で、フェス称号のカンストである「えいえん」まで行きました。
ちょうど30戦やって勝ったのは18戦でした。勝率60%でしたが、正直もっとうまく立ち回らないとガチマッチで上にいけないなー、という気持ちになりました。

戦績をメモっていたので簡単に振り返ってみます。

最初N-ZAPを使っていて何度か黒が付いたので、遠目から着実に立ち回ろうとジェットスイーパーに切り替えましたが、むしろ近づかれて倒されるシーンが増えてしまいました。
あとで確認したら、N-ZAPでは7割弱だった勝率が、ジェットスイーパーでは6割に落ちていました。
もう少し近距離にも対応できるようデュアルスイーパーに切り替えましたが、そこから連敗してもっとひどい状態に。
そろそろデュアルスイーパーに慣れて勝ち星が付き始めたところで、「えいえん」に到達しました。

ブキ別勝率 N-ZAP ジェットスイーパー デュアルスイーパー
勝率 69.23% 60.00% 42.86%
回数 13 10 7

ステージ別の勝率を見ると、母数が違うので一概には言えませんが、海女美術大学が一番勝てています。
海女美術大学は侵攻ルートが限られていて守りやすいので堅実に立ち回っていれば巻き返せるステージです。

一方でバッテラストリートの勝率は芳しくありません。
押し込みまくっって勝つか、その逆をやられて大敗するか5分5分な感じでした。味方の状態を見てもっと堅実に立ち回って前線を確保できていれば勝率は改善できそうだと思います。

ステージ別勝率 コンブ ミステリー タチウオ 海女美術大学 バッテラ
勝率 0.00% 66.67% 66.67% 71.43% 50.00%
勝ち星/回数 0/1 6/9 2/3 5/7 5/10

30戦全体の戦績は次のとおりです。

勝敗ステージ称号のタイミング備考
1loseコンブふつう12:30開始, N-ZAP
2winミステリー
3winミステリーまこと
4winタチウオ
5winミステリー
6winタチウオスーパー
7loseタチウオ
8win海女美術大学13:00ステージ変更
9lose海女美術大学
10winミステリー
11winバッテラ
12winバッテラ
13loseバッテラ
14winミステリーカリスマジェットスイーパーに変更
15loseバッテラ
16loseバッテラ
17winバッテラ
18winミステリー
19win海女美術大学
20win海女美術大学
21win海女美術大学
22loseバッテラ
23loseミステリー
24loseバッテラデュアルスイーパーに変更
25lose海女美術大学
26loseミステリー
27win海女美術大学身内戦
28winバッテラ
29winバッテラ
30loseミステリーえいえん14:48えいえん到達


おまけ(宣伝)

今夏もコミケ(C92)に行くんですが、一緒に出展するvvakameさんが「負けたくない!Splatoon2」という出すそうです。
レビューで読ませてもらいましたが、チームプレイの心構えといったところから書かれていて、Splatoon2を知らなくてもある程度楽しめる内容になっています。この本自体の入稿体験記も載っています。

俺も「Edge of Android 8」という本に「ツは通知のツ」というタイトルでAndroid 8 Oで大きく変わるNotification関係について書いてます。

2017年6月18日日曜日

ng-japan 2017に行ってきた

ng-japan 2017に行ってきました。
ツイートとスライドをまとめただけの記事です。

Keynote: How to Think About Angular



RxJSを活用したアプリケーション開発

CQRSを学ぶために「.NETのエンタープライズアプリケーションアーキテクチャ第2版 .NETを例にしたアプリケーション設計原則」という本を使っているそう。

You need to know SSR

 

Angularアプリのテストについて

Web Payments + Credential Management API

これはAngularのトークではなく、ブラウザでの支払いフォームなどの改善や新機能の紹介。
※スライドのURLを見つけられなかった。

Apple Pay JSをPayment Request APIと同じように使えるwrapper
https://github.com/GoogleChrome/appr-wrapper

Angular, Firebase, Cloud Functions for Firebase

スライド


関数型はモテる。

Advanced Component styling with Angular (v4+)



Best practices for modules in Angular



Angular Animations

スライド

What's New in Angular Material

Autocomplete や Datepickerふえたよー。今後も対応部品増やしていくよー。というトーク。




2017年5月17日水曜日

Google I/O 2017 初渡航KPT(非技術記事)

初渡航だよ。

2017/05/15に入国、16日までの時点での気付きを、雑だけどKPTにまとめてみた。 最終日までにアップデートはあるとおもう(記事を更新するとは言っていない)。

登壇予定の Google I/O 2017 フィードバックセミナー もよろしく。

Keep

  • 成田の出国ゲートの職員さんが可愛かった
  • 自動化ゲートの登録をしておくと、入出国の手続きがスムーズになる
  • 無印良品のネッククッション
    • 飛行機の中で寝る時に色んな形で使える。首に巻いてネックピローにしてもいいし、抱きまくらにもなる。座席で同じ体勢で寝続けるのが辛いので色んな形になるこの商品がちょうどよかった。
  • 耳栓
    • 機内は大型のトラックや重機のエンジンのそばにいるような騒音が鳴り続けてます。それが高速道路を車で走ってる時くらいにはなる。
  • 1日余裕を持って現地入りする
    • 到着したその日は時差ボケで眠すぎてほぼ何も出来ない

Problem

  • 時差ボケ
    • ホテルにチェックイン直後に寝入ってしまった(日本時間で深夜だった)
    • 2日目も同じ時間帯(日本時間では深夜)に眠くなってしまった。
  • SIMのアクティベートのミス
    • ZIP SIMというのを購入した。SIMを入れた直後に滞在地のZIPコードをSMSで送ると、そこの地域の電話番号が割り当てられる。
    • ZIPコードを送らないと、ランダムな電話番号が割り当てられる。カリフォルニアに居るのに東海岸エリアの番号になってしまった。
    • ※参考: https://www.amazon.co.jp/dp/B01ESSHHSM の商品説明
  • SIMの電話番号重複
    • 以前別の人が使っていた番号らしく、知らない電話がかかってきたり…
    • Uberも↑のせいで登録できずサポート問い合わせ中
    • Lyftは同じ番号を使っていた別人のアカウントを引き継ぐかとか聞かれてしまった
  • 旅行用に買った安い財布のジッパーが開けづらかった
  • 耳栓のサイズ
    • サイレンシアのMだと少し大きかった
  • アイマスク使わなかった。
    • 狭い機内で荷物の出し入れが大変だったので、横着して席に元々あったブランケット被って凌いでいた。
    • 帰りはちゃんとアイマスク使ってみよう。
  • 喉の乾燥防止用のマスク
    • 同上
  • 衣類をTシャツと下着とセットで圧縮袋にいれておいたが、探しづらい。
    • 一方で、Tシャツだけ下着だけの圧縮袋に分けると、1度目に着替えを取り出す時に全部解凍することになる…

Try

  • 財布はもっと使いやすさを考えて買おう
  • プリペイドSIMでUberやLyftなど電話番号が必要なサービスを登録した場合
    • 後で電話番号の登録を消したりアカウントを消したりしておく
  • 衣類は小さめの圧縮袋に種類ごとにまとめて入れておく
    • 種類ごとにすることで探しやすくする
    • 小さめのもので小分けにしておくことで、ちょっとずつ解凍できるようにする