#PLAID_Party 参加記

株式会社プレイドのオフィス移転パーティーに、ありがたいことにご招待受けましたので参加してきました。

プレイド、オフィス移転のお知らせ GINZA SIXに「完成しない」オフィスを構築 | 株式会社プレイド

パーティー雰囲気

ガツガツ食べさせてもらいましたがめっちゃ美味しかったです!

オフィスに芝生がありました!靴を脱いで歩くと気持ちい~

参加者全員プレゼントでTシャツとコースターもらいました!うれしいですね。

パーティー中の展示

プレイドの主力サービス、カルテを支える技術について展示がありました。

僕は特にSREの話が面白いと思いました。初めはAWSでやっていたのが、MongoDBが思ったよりパフォーマンスが出ず、BigQuery(だったかな?)を擁するGCPをメインに据えるようになりました。しかし、GCPはしばしば障害を起こす(特にネットワーク系の障害)ため、AWSをサブとして現在はマルチクラウド体制をとっています。

僕のクラウド力の都合上詳しいことは書けないのですが、1秒あたり15,000リクエストをさばくために頭を悩ませている姿はかっこいいなと思いました。

その他

  • ぷよぷよをやるスペースがあったのでちょっとやったのですがボコされましたw

  • gamiさんの友人がたくさんいらっしゃった。

  • ベンチャーやスタートアップの偉い人が結構いらっしゃって会話を聞いていて楽しかった。逆に僕が何も提供できてなくてアレ。

AWS 認定ソリューションアーキテクト – アソシエイト 攻略法

先日合格したので自分の対策を残します。

対象読者

  • AWS 認定ソリューションアーキテクト – アソシエイト」に合格したいけど、AWS力に自信がない人
    • AWSのサービスをあんまり知らない……
    • そもそもネットワークを自分で考えたり組んだりしたことがない……

私のレベル

  • ネットワークの知識はあまりない
  • AWSを業務で取り扱っている

AWS 認定ソリューションアーキテクト – アソシエイトとは

  • 試験概要 AWSのサービスを用いたアーキテクチャ設計に関する問題が出ます。2018年2月から新しいバージョンが登場し、現時点では新旧両方のバージョンを受験することができますが、旧バージョンは2018年8月12日までしか受けることができません。ちなみに会場があいていれば数日後には試験を受けることができますし、試験自体は毎日行われています。

新旧バージョンの違い

旧バージョンではEC2とS3の細かい知識を問う問題が多かった一方、新バージョンでは他のサービスのこともバランスよく問われるようになった印象です。

勉強内容

① 参考書

他のブログでも上げられていますが、こちらの書籍です。

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

初学者向けです。この本から入って、全体像を把握するにはいいと思います。ただし、扱っていない事項も数多くありますので、これだけでの合格は難しいかなと思います。例えば、RedShift、Kinesis、EMRあたりは記述がありません。

② WEB問題集

こちらのサイトになります。

aws.koiwaclub.com

700問以上の問題があり、それぞれのサービスや、サービス同士のの関連性など、幅広い知識を身につけられます。一方で、NATインスタンスなど一部抜け漏れがあるので他の勉強法で補う必要があります。

AWS Black Belt

こちらのサイトになります。

aws.amazon.com

ここの「コンピューティング」から「分析」まで(「開発者用ツール」を除く)を読むといいと思います。そのサービスの全体像がわかります。 私は全部に目を通していないのですが、上記のWeb問題集を解いていてわからないサービスが出てきたらこちらを参照するというやり方をとっていました。

試験中、「全然わからない、受かる気しないわ」となったときにすべきこと

僕は一発合格ではありませんでした。初回の試験は解いている最中もボロボロで、全く合格できる感触ではありませんでした。*1

もしもう一度受験できるチャンスがあるときは、やるべきことがあります。分からなかったサービスや用語を試験中に覚えておくことです。*2

合否は回答提出後すぐに判明します。残念ながら不合格になってしまった場合は、意味のわからなかった単語はもちろんですが、サービスの理解があいまいな部分があったものも、試験後にBlack Beltで調べましょう。試験はテストセンター開催され、メモ等を持ち帰ることはできないので、頭の中に頑張って記憶しましょう。

所感

身も蓋もないのですが、一番効いたのは実務経験です。ここでVPCを軸とした、EC2・RDS・ELBの関係性がなんとなく把握できた感じです。次に役に立ったのはWeb問題集です。こちらで細かい知識が自然と頭に入りました。

模試は受けておけばよかった気がする。

他の合格記

総じてどの記事もよくまとまっていると思いました。

*1:合格したときも感触は良くなかった

*2:試験中、僕はメモをたくさん取り、理解があやふやだった部分を記憶するようにしていました

『試して理解 Linuxのしくみ 実験と図解で学ぶOSとハードウェアの基礎知識』前編

第4章まで読んだので一旦まとめたいと思います。ちなみに私はLinuxを使うことはありますが、中身については無知です。

第1章 コンピューターシステムの概要

重要なことを一点挙げると、CPUにはユーザモードとカーネルモードがあるということです。 プロセス管理システム、プロセススケジューラ、メモリ管理システムなど「通常のプロセスから実行できると困る処理」はカーネルモードで動作します。

ちなみにカッコつきなのは本文からの引用なのに加えて、じゃあなぜ困るんじゃって聞かれてもうまく答えられないからです。(´;ω;`)

第2章 ユーザモードで実現する機能

ここで取り上げられていたのはシステムコールです。通常ユーザモードで処理されているプロセスが発行するもので、カーネルに処理を依頼します。

実験プログラムでは、ユーザモードとカーネルモードを行き来するプログラムを動かしました。

第3章 プロセス管理

プロセス管理のために、fork()とexecve()の2つの関数があります。

と、章の冒頭でいきなり宣言されて、???という感じでした。しかし、章を最後まで読むと、プロセスを複製する場合はfork()単体で、全く別のプロセスを新規生成する場合はfork()とexecve()を組み合わせるという使用法があるということがわかりました。

また、プログラムファイルの構造を示されてこれまた???となりましたが、プログラムをメモリ上にマップするための情報とわかり納得できました。

第4章 プロセススケジューラ

Linuxカーネルが複数プロセスを同時に動作させる仕組みを解説しています。冒頭にある

  • 1つのCPU上で同時に処理するプロセスは1つだけ
  • 複数プロセスが実行可能な場合、個々のプロセスを適当な長さの時間(=タイムスライス)ごとにCPU上で順番に処理する。

という原則で以降の説明が理解できるので、比較的わかりやすい章でした。

コンテキストスイッチの説明で「ソース上では次の行にある処理であっても、直後に呼ばれるとは限らない」ということがしっかり理解できたのが良かったです。

おわりに

第4章はあまり自分で手を動かしていないのですが、それでも非常に理解しやすく、初学者向けに丁寧に書かれていると感じました。 目的に沿った実験、わかりやすい図表がその原因なのかなと思いました。図表の充実っぷりは本当にすごいと思います。

『体系的に学ぶ安全なWebアプリケーションの作り方』3章まとめ

あの徳丸本が第2版になったと聞いて、最近セキュリティのことも仕事でちょっと触っているのもあり早速買って読んでいます。

600ページ超の充実した内容です。今回読んだのは3章「Webセキュリティの基礎~HTTP、セッション管理、同一オリジンポリシー、CORS」です。基礎的なこともよくわかっていないこともあり、内容を自分なりにまとめようと思います。

3.1HTTPとセッション管理

  • リクエストメッセージとレスポンスメッセージがある
  • レスポンスメッセージの1行目であるステータスラインはたとえばHTTP/1.1 200 OK
  • レスポンスメッセージの2行目はヘッダで、Content-LengthやContent-typeが入っている
  • POSTメソッドによるリクエスト・メッセージにはボディという部分がある
  • GETメソッドは参照(リソースの取得)のみに用いる。副作用がないことが期待される。
    • GETで秘密情報を送信した場合、様々な漏洩のリスクがある
  • 秘密情報の送信にはPOSTメソッドを使う
  • hiddenパラメータは利用者自身で書き換えられる
  • サーバー側がアプリケーションの状態を覚えておくことをセッション管理とよぶ
  • クッキーは値の個数や文字列長で限界があり、クッキーの値を利用者本人に参照・変更できるので、秘密情報の格納には向かない
    • セッションIDだけを持たせるべき
  • セッションIDに求められる要件は以下の3点
    • 三者がセッションIDを推測できないこと
    • 三者からセッションIDを推測されないこと
    • 三者にセッションIDが漏洩しないこと
  • セッションIDは認証後に変更するべき

後ろの2項に比べると基本的な内容。とはいえ知らないことも結構あり、勉強になった。セッションIDのセキュリティ上の重要性が理解できた。対話にたとえた説明が非常にわかりやすい。

3.2 受動的攻撃と同一オリジンポリシー

  • 受動的攻撃:Webサイトの利用者に罠を仕掛け、罠を閲覧したユーザーを通じてアプリを攻撃する。パターンが3つ紹介されている
    • 罠サイト
    • 正規サイトに罠を仕込む
      • この手法はよく用いられている
      • 正規サイトに罠を仕込む方法は後の章で記載されている
    • サイトをまたがった受動的攻撃
  • 受動的攻撃にはブラウザが対策を講じている
  • サンドボックスとは、JavaScriptや、ActiveXなどができることを制限する
    • JavaScriptの場合は以下の通り
      • ローカルファイルへのアクセス禁止
      • プリンタなどの資源の利用禁止
      • ネットワークアクセスの制限=同一オリジンポリシー
  • 同一オリジンポリシーとは、サイトをまたがったアクセス(クロスドメインアクセス)を禁止すること
  • アプリケーションに脆弱性があった場合、同一オリジンポリシーの制約を受けていても攻撃をすることが可能
  • クロスドメインアクセスは全面的に禁止されているわけではない

受動的攻撃の3手法は、2つ目が頻度・流出する情報の二点から特に危険なものだと感じた。あと3つ目については仕組みがまだよくわかっていない。

JavaScriptがやりたい放題できると危険極まりないから、ブラウザで制約をかけているという認識を持った。

3.3 CORS(Cross Origin Resource Sharing)

サイトを超えてデータをやり取りできる仕様のこと。 たとえばXMLHttpRequest

  • Access-Control-Allow-Origin:クロスオリジンからの読み出しを許可するための仕掛け
  • シンプルなリクエストの場合、相手の許可無しでHttpリクエストを送れる
    • メソッド、リクエストヘッダ、Content-Typeに制約がある
  • 条件を満たさない場合は、プリフライトリクエストを送る必要がある

全般的にこの項はついていけなかった。

まとめ

基本といいつつ、僕にとっては知らないことがかなり多かったので勉強になった。4章も折を見て進めていきたい。その前に環境構築が先かもだが。

『退屈なことはPythonにやらせよう』流し読み

タイトルの通りです。1章だいたい2,3分で読んで何が書いてあるか確認したという状況です。

目次一覧

  • 第1章 Python入門
    • 整数、小数、print出力など
  • 第2章 フロー制御
    • if、for、while
  • 第3章 関数
    • スコープの話とか
  • 第4章 リスト
    • リスト、タプル
  • 第5章 辞書とデータ構造
  • 第6章 文字列操作
    • 取り出し、置換など
  • 第7章 正規表現によるパターンマッチング
  • 第8章 ファイルの読み書き
    • ファイルの作成
  • 第9章 ファイルの管理
    • ZIPファイルの取り扱い
  • 第10章 デバッグ
    • アサートやログ
  • 第11章 Webスクレイピング
  • 第12章 Excelシート
    • 読み書きとレイアウト
  • 第13章 PDFファイルとWord文書
    • 読み取りと作成、簡単な加工
  • 第14章 CSVファイルとJSONデータ
    • 読み取りとそこからの加工
  • 第15章 時間制御、自動実行、プログラム制御
    • timeモジュール、マルチスレッド
  • 第16章 電子メールやSMSの送信
    • 受信もある
  • 第17章 画像の操作
    • Pillow
  • 第18章 GUIオートメーションによるキーボードとマウスの制御
    • pyautoguiでマウスや画面を制御

所感

「ノンプログラマーにもできる」と謳っている通り、ノンプログラマーが頻繁に触っていそうなExcel、Word・PDFの章があります。ちなみに前回の記事で書いたツールは、この書籍のExcelの章をヒントにしています。

11章から18章で取り扱っているものを見て、自動化できそうな作業があれば、まずは読んでみるといいと思います。

Pythonで音ゲー(ボルテ)のツール作ってみた

タイトルを何にするか迷いましたが、一般的な感じにしました。

背景

僕はSOUND VOLTEX(以下ボルテ)というゲームが好きでよく遊んでいます。

このゲームはゲームセンターで遊べる音楽ゲーム音ゲー)です。音ゲーがどのようなものかは省略します。ボルテは以下のような特徴を持った音ゲーです。

  • レベルが20段階
    • 特に16~19あたりが多く遊ばれる
  • 譜面数が非常に多い
    • レベル16・17は300以上の譜面ある
  • スコアが1000万点満点
    • ほとんどの譜面は900万点以上獲得できる
  • 各譜面のハイスコアをCSVファイルで入手できる(→後述)

僕自身のボルテに対するスタンスはというと、

  • プレー歴5年以上
  • 5000クレは投入?
  • その割に上手くない
  • 成長が鈍い(伸びてないわけではない)
  • 現在はレベル15~20の譜面を遊んでいる

つまり、マンネリとなってモチベーションが低下してしまう可能性が常にあるというわけです。

また、ボルテには様々な非公式なツールが存在しています。

nearnoah.sakura.ne.jp

myamyasdvx.herokuapp.com

今は使えませんが昔はこのようなツールがありました。

SDVX IIIのスコアツール

スコアツールによって、何が可視化されてうれしいかというと、代表的なものに各レベルのスコア平均値があります。

f:id:alek3:20180616234341p:plain

これを見ながら、「レベル15の平均99いった!」とか「今月はレベル18の平均957目指そう~」とかそういう使い方をします。計測可能な目標を増やすというわけです。

現状のツールの不満点に、参照できるデータが最新のもののみであるという点があります。昔のツールは、過去のスコアや、ひとつ前の記録との差分を見ることができました。

以上の背景から、「各レベルのスコアの平均値の推移表を作成する」ツールを作成することにしました。

Input/Output

プログラムを作成する前に用意するもの、すなわちインプットは、ボルテのスコアが記録されたCSVファイルです。これは最新版がKONAMI提供のe-amusement gateから取得できます。

これを定期的に取得して保管しておきます。

f:id:alek3:20180617002456p:plain

ファイル名は自分でリネームしています。

プログラムは下記を参照してください。

github.com

scoresheetディレクトリにいくつかのCSVファイルを入れて、プログラムを実行すると、以下のようなxlsxファイルが得られます。これがアウトプットになります。

f:id:alek3:20180617002807p:plain

これによって僕は、「6月10日から13日までで、レベル18の平均スコアが2700点も伸びてる!!よっしゃ!!!!」という達成感を得ることができるようになりました。ボルテをやってない人にはさっぱりでしょうが、僕にとっては有用な代物です。*1

終わりに

エクセルファイルをアウトプットにしようと思ったのは最近読んだ以下の書籍の影響があります。今回Pythonで書いたのにも少し影響しています。

改善ポイントとしては、以下があるかなと思います。

  • コードが汚い
  • 平均スコアが上がったセルは、赤色とかで塗りつぶしがあるといいな
  • スコアのCSVを定期的に手動でダウンロードするのが面倒

アウトプットがExcelファイルというのは見やすくていいなと思いました。

*1:ちなみに、R3からR4にかけて平均値が16000も上がっています。これは一見すると異常なのですが、上昇の理由はΩ Dimensionでクラッシュしたまま放置していた曲があったためです。Ω Dimensionで解禁できない曲がある19は、平均値が大きく上下します。

レビュー『改訂新版 Swift実践入門』

こちらの書籍のレビューです。

対象読者

本書の「はじめに」にあるように

  • 他の言語の経験はあるがSwiftの経験はない方
  • Swiftの知識をより深めたい方

です。歯ごたえあると思います。実践入門は入門に非ず。

感想

また「はじめに」から引用ですが

どんな(what)言語仕様があり、それらをどのように(how)使うかに関しては豊富な情報源があります。それらがなぜ(why)存在し、いつ(when)使うべきかについてまとまった情報があるとは言えません。本書は、読者の皆さんの「なぜ」や「いつ」を解消することにも主眼をおいています。

とあるように、類似する機能の使い分けについて、いくつか書かれていました。例を挙げると以下の2つです。

  • クラスと構造体の使い分け
  • 継承とプロトコルの使い分け

特にクラスと構造体の違いは、この本に触れる前から気になっていたので勉強になりました。

ただ全般的に僕にとっては少し難しすぎたようです。特に11章あたりから……

14・15章はスキップしました。

現状は、完全に理解したいというよりも、なにか課題にぶつかったときにこの本の内容を参照できればよしというスタンスです。例えるなら「心のインデックス*1」ですね。

*1:僕発祥ではない。この概念を説明するの難しい