2019年の振り返りと2020年の抱負
はじめに
2019年は大学院を卒業し、会社に就職と人生で割と大きなイベントがあった年でした。入社して3ヶ月間の研修後配属された職場は、(私が入社した会社からは)想像がつかない程居心地の良い場所であり、また所属チームのメンバーのスキルも高く、刺激を多く貰いました。
何を学んだか
実務編
職場では主にインフラ担当として、以下を扱いました。
- Kubernetes (EKS)
- Terraform
- MySQL
- パフォーマンスチューニング系
Kubernetesについては配属される前は名前だけ知ってる状態でしたが、実務で扱うことになると知った直後、猛勉強しました。実際に実務で扱ってからは、ある種毎日がインプットとアウトプットの連続であり、Kubernetesについてどんどん理解を深めることができて楽しかったです。
また職場ではAWSを主に使用しているため、AWS関連のサービスについても学習しました。
以下、学習に使用した書籍になります。今でも読み返しています。
プライベート編
実務では主にインフラを担当しているため、プライベートではフロントエンドに興味が湧きました。
2020年の抱負
2020年は社会人2年目に突入し、より専門性を職場で求められると思いますので、今まで以上に精進していきたいと思います。直近として、年度内にAWS SAPの取得を頑張ります。あとちょくちょくleetcodeもやっていきます。
では、今年もよろしくお願いします!
【合格体験記】AWS認定ソリューションアーキテクトアソシエイト(AWS-SAA)に合格したので振り返る
はじめに
はじめまして。令和新卒エンジニアの八雲です。
入社して早半年が過ぎ、ちょうど良いタイミングだったのでAWS認定ソリューションアーキテクトアソシエイト(AWS-SAA)を受験し、無事合格できたので振り返りの意味も込めて記事に起こしました。
これからAWS認定資格を受験しようと考えている新人の方への一助になれば幸いです。
対象とする読者
- 基本情報技術者レベルの知識を持つ方
- インフラに興味のある方
- 新人でこれから資格を取ろうとしている方
- 短期間で合格したい方
私について
- IT企業に2019年度入社の新入社員
- 情報系出身
- Linux歴3年
- 研究室のサーバー管理を担当してました
- 趣味でAWSを用いてサービス構築の経験あり
- 無料枠でEC2を立てて
sudo rm -rf *
は基本 - fitbitで取得したバイタル情報の可視化をしてました
- lambda, DynamoDB, Athena等はこの時学習済み
- 無料枠でEC2を立てて
なぜ受験しようと考えたのか
勉強方法
試験までに主に2つの学習教材を使用しました。
- Udemy講座
- BlackBelt
試験受験まで以下の流れで学習しました。
- AWS模擬試験受験
- Udemy講座の受講
- 特に理解し難いサービスはハンズオンも実施して頭にインプットさせる。
- Udemy講座に付いてきた模擬試験を繰り返し解く
- Udemy講座を全て学習し終わったら模擬試験を解いて理解度をチェック
- 誤答の多かった分野は再学習。模擬試験で全問正解できるまで復習
- BlackBeltの読み込み
- 模擬試験で誤答の多かった問題を中心にAWS BlackBeltを読み込みサービスの理解を深める
- 参考URL:https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/
おすすめは学習教材はUdemy講座のこれだけでOK! AWS認定ソリューションアーキテクト-アソシエイト試験突破講座(初心者向け21時間完全コース)です。これを軸に学習すれば無駄なくAWSの各サービスの概要・詳細・連携について知識を付けることができます。
試験当日
試験を受けるテストセンターは2種類から選べます。
- PSIテストセンター
- ピアソンVUEテストセンター
今回私は渋谷のPSIテストセンターを予約して受験しました。試験端末はKIOSK端末であり、カメラを通して試験官に監視されながらの受験となります。 試験を開始する前に、運転免許証・クレジットカードを試験官に見せて本人確認を行います。しかし運悪く試験端末の調子が悪くフリーズをしてしまい、結局本人確認が終わったのは試験開始予定時間から40分程過ぎた頃でした。 今後受験を行う方はピアソンVUEでの受験をお勧めします。
余談ですが、試験会場に用意されているキーボードは日本語キーボードですが、入力は英字キーボードになっています。それを知らないと、本人確認の際のメールアドレス入力時に『@(アットマーク)』が打てない!となるので注意しておきましょう。
試験自体はつつがなく進み、全ての問題を解き終わり、アンケートに回答し試験終了ボタンを押下直後に画面に『合格』と表示されました!
反省点
試験を受けて、もう少し勉強をしておくべきだったサービスを以下にまとめました。
- EC2
- Cloud Front
- OAI(オリジンアクセスアイデンティ)
- OAIを使用してS3のアクセス制限を実現する等の知識が必要です
- OAI(オリジンアクセスアイデンティ)
- Cognitio
- 認証基盤を提供してくれるサービス
- 各サービスとの連携について把握しておくべき
- 参考URL: https://qiita.com/Futo23/items/97586a3c16d939a8ab5f
- ELB
- 試験ではUdemy講座で扱った内容以上に詳しく聞かれた印象
- 特にELBの証明書関連は理解していたほうが良いです
- 試験ではUdemy講座で扱った内容以上に詳しく聞かれた印象
- Elastic Beanstalk
- Elastic Beanstalkが適している要件をきちんと把握している必要あり
最後に
AWS-SAAに無事合格できてほっとしています。資格取得のために幅広い分野のサービスを体系的に学習して各サービスの連携や設計のベストプラクティス等を知れたのはとても良かったです。アソシエイト資格を取得したことで、自信もつけれたと思います。
AWSの進化は目まぐるしく、早いペースで既存サービスの更新、新サービスの追加が行われていて、ネット上にある記事の内容が古いことなんてざらにあります。AWS認定ソリューションアーキテクトアソシエイト試験の新しいバージョンも予告され(https://aws.amazon.com/jp/certification/coming-soon/)、試験内容が難しくなることが予想されます。
今後も継続してAWSの勉強をしていくつもりです。次はソリューションアーキテクトプロフェッショナルに向けて頑張ります!
YOLOv3を用いてポケモンGOの黒卵の出現を自動検出してGoogle-Homeに喋らせる
はじめに
みなさんはポケモンGOというゲームをご存知でしょうか.ポケモンGOは位置情報を利用し,実際に現実世界に繰り出し様々な土地で出現するポケモンをゲットし収集するゲームです.
このポケモンGOの中に『レイド』なるものがあります.レイドでは,ポケモンGOの世界で『ジム』と呼ばれる場所に45分間出現する特別なポケモンをみんなで協力して倒すことができ,ポケモンを倒した人は報酬としてそのポケモンをゲットするチャンスが与えられます.ジムでレイドが行われる場合,一時間前にそのジム上に『卵』が出現します.出現する卵の色によって,出現する特別なポケモンの強さが変わり,黒卵の場合は『伝説のポケモン』が出現します.
伝説のポケモンは黒卵のレイドでしか入手できないため,ポケモンGOをプレイするポケモンマスターは日々黒卵が出現しているかをチェックし,黒卵が出現したジムの周りに集まる習性があります.私も土日はポケモンGOの画面を開き黒卵が出現しているかをチェックしています.
しかし,常にポケモンGOの画面を開き黒卵の出現をチェックするのは大変で,出現に気づかないことが多々あります.
そこでふと『黒卵が出現しているかのチェックを自動化できないか』と思い,やってみました.
どうやって作るか
YOLOv3を用いてMacbookPro上に出力したポケモンGO内のレイド一覧画面を認識し,黒卵を検出 → 黒卵を検出した場合,google-home-notifierを用いてGoolgleHomeに喋らせる,という方法で自動化したいと思います(無理矢理感あふれる)
YOLOv3の導入
cd 任意の場所 git clone https://github.com/pjreddie/darknet.git
認識させたい物体(黒卵)の学習準備
下記サイトを参考に黒卵の画像を学習させます.黒卵の画像の水増し,画像内の検出させたい物体の位置とラベルの出力を行います.
認識させたい物体(黒卵)の学習
Google Colaboratory(無料でGPUを利用できる環境が提供されている)を用いて学習を行います.
- Google Colab上にYolo v3動作環境を用意する
!apt update !nvcc -V !ln -sf /usr/local/cuda-9.2 /usr/local/cuda !apt-get install gcc-4.8 g++-4.8 !update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 !update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50 --slave /usr/bin/g++ g++ /usr/bin/g++-7 !update-alternatives --config gcc # 入力欄が出てくるのでg++-4.8のインデックスを入力
import os import google.colab import googleapiclient.discovery import googleapiclient.http google.colab.auth.authenticate_user() drive_service = googleapiclient.discovery.build('drive', 'v3') upload_filename = 'darknet.zip' file_list = drive_service.files().list(q="name='" + upload_filename + "'").execute().get('files') file_id = None for file in file_list: if file.get('name') == upload_filename: file_id = file.get('id') break if file_id is None: print(upload_filename + ' is None.') else: with open(upload_filename, 'wb') as f: request = drive_service.files().get_media(fileId=file_id) media = googleapiclient.http.MediaIoBaseDownload(f, request) done = False while not done: progress_status, done = media.next_chunk() print(100*progress_status.progress(), end="") print("complete")
- GoogleDriveからダウンロードしたzipを解凍
!unzip darknet.zip
%%bash cd darknet make
- 学習を開始.darknet53.conv.74は重みの初期値ファイル.
%%bash cd darknet ./darknet detector train cfg/obj.data cfg/yolov3-voc-obj.cfg darknet53.conv.74
学習が開始されると,あらかじめ設定されている試行回数(ここでは100)毎に重みファイルが出力されます.試したところ,だいたい試行回数1000の重みファイルで物体はある程度検出可能であったため,試行回数1100で学習を終えました.重みファイルは随時ダウンロードしておきます.
- 黒卵を検出できるかの確認
./darknet detector test cfg/obj.data cfg/yolov3-voc-obj.cfg backup/yolov3-voc-obj_1100.weights iOS.png
YOLOv3によるポケモンGO画面の監視方法
ポケモンGOの画面をミラーリングソフト(iPad/iPhone画面録画ソフト)を利用してMacbookProに出力し,MacbookProのスクリーンショット画像をYOLOv3で認識します.
screencapture ./test.jpg ./darknet detector test cfg/obj.data cfg/yolov3-voc-obj.cfg backup/yolov3-voc-obj_1100.weights test.jpg > result.txt
GoogleHomeへの通知
google-home-notifierを利用する.下記サイトにmacOSでのgoogle-home-notifier導入について解説されているので,指示に従って行います.
- main.jsの作成
const googlehome = require('google-home-notifier') const language = 'ja'; googlehome.device('Google-Home', language); googlehome.notify('ポケモンGOで星5レイドが出現しました。', function(res) { console.log(res); });
コマンドを実行すると,GoogleHomeMiniが独特の声で喋ります.
YOLOv3の黒卵検知とGoogleHomeへの通知の自動化
Pythonとlaunchdで自動化を行う.
import os import subprocess cmd = 'screencapture ./pokemongo_raid.jpg' cmd_darknet = './darknet detector test cfg/obj.data cfg/yolov3-voc-obj.cfg backup/yolov3-voc-obj_1100.weights pokemongo_raid.jpg > result.txt' subprocess.call(cmd,shell=True) subprocess.call(cmd_darknet,shell=True) test_data = open("result.txt", "r") contents = test_data.read() fd = contents.find('black_eggs') test_data.close() if fd > 0: notification_cmd = './notification_gh.sh' subprocess.call(notification_cmd.split(),shell=True) print('end')
- launchdでsearch_black_eggs.pyを自動実行させる 下記サイトを参考に行います. banmian.hatenablog.com
結果
こんな感じになりました.
ポケモンGOの黒卵を通知するGoogleHomeくん... pic.twitter.com/CAQKYEfqgw
— ykmrt@社会人になりました (@ykmrt_) April 7, 2019
これでゲームに熱中していてもGooleHomeが教えてくれます,やったね!
感想
初めてこうして記事を書きましたが,文字に起こしてアウトプットすることは非常に大変でした.ただ,継続は力なりと言いますので今後も何かネタがあったら書きたいと思います.