細菌培養とエンジニアリング

細菌研究からエンジニアへ転向した人のブログ

AWSのソリューションアーキテクトに受かった話

こんにちは。
題名の通り、AWSのソリューションアーキテクトアソシエイトレベルに合格したので、なんか書いていこうと思います。
はじめに書いておきますが、勉強法とかは書きません。(他にたくさんあるから)
なので、ここでは受けるに当たっての僕のモチベーションとか会場の感想を書いていこうと思います。
完全に自己満足の記事になります。

受けようと思ったきっかけ

まず、モチベーションの根底です。
一時期はAWSのソリューションアーキテクトアソシエイト(SAA)を持っていたら、
それなりに強いイメージがありましたが、最近ではこなれてきた感じが個人的にはあります。
しかし、未だ必要であるとされている資格の中ではダントツで上位であり、勤めている会社もパートナー企業になっていることもあり、
クライアントに説明する上でも厚みをつけられるよねってことで取ることにしました。
(あとは取得奨励金でるのd......)

勉強

とりあえず、最近黒本と称されているこちらを買いました。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

(こちらの内容が陳腐化する前に受けたかったというのもあります)
内容はわかりやすく、何回か読むうちに馴染んでいったのでとてもおすすめです。
何回か読んで、それなりにこちらの問題を解きました。
AWS WEB問題集で学習しよう
試験受ける直前になって気づきましたが、後ろから解いたほうがよかったかもです。
(問題の新しさ的に)
最近あったのは侵入テストが最近不要になってしまったので、こんなところは意外と情報をキャッチしておかないといけなさそうでした。
トピック的には大きかったので知っていましたが。
参考:侵入テスト

模試受けた

結果は 76%
まぁ受からなくもないだろうけど、それなりに不安な点数。
受けた問題をよくよく見返したりして、弱点を少し埋めました。
上司からは「余裕じゃん」とか言われていましたが、個人的にはかなり不安でした。

当日のメンタル

受験前日までは「無理!!!!落ちそう!!!!」とかマジで思っていました。
なのですが、前日くらいは流石によく寝ようと思って、8時間くらい寝ました。
そしたら、当日は「受かるんじゃね?」くらいの謎のメンタルに変化していました。

受けた

当日は銀座のテストセンターにしました。
理由は、上司から勧められてたのと、ネットでもそれなりに評判がよかったからです。
実際にホームページもあるので割と安心して受けられました。
開始時間2時間くらい前に着いてしまったので、地下にあるカフェで最後の追い込みと心を落ち着ける作業をして、受けました。

受かった

実際のところ、3周くらい見直して解答を終えました。
アンケートに答えて、結果が出てきます。 覚えでは合格と出ていたのですが、疲れすぎて夢なのかと思っていた時がありました。
数日後、アカウントを確認したらしっかり合格と出ていたので、安心しました。
(スコア見ると1問間違えていたら多分落ちていました)

思ったこと

睡眠大事
とりあえず受けないと受からない
当たり前かつ当たり前な感想ですし、この試験に限った話ではないですが、本当に痛感しました。
実際、1回延ばしましたし、(読みが甘かっただけなんですが)
試験1週間前は毎日2時就寝、7時起きで勉強みたいなかなり張り詰めた生活をしていて、心が枯れかけていました。
メンタル維持にも睡眠て大事だったんだなって思いました。

あれ、それなりに勉強法とか書いてしまった。
f:id:kaedemalu:20190326092544j:plain

TensorFlowのα版が出たのでDockerfile書いた

こんにちは。
つい先日、TensorFlow Dev Summit 2019というイベントがあったそうですね。
(全然キャッチできてなかった)
そこで、TensorFlowの2.0.0 アルファ版がリリースされたとアナウンスされました。
早速試せるみたいなのですが、ここはせっかくならDockerで動かそうと思ったのですが、
思いの外詰むことが多くて、でも個人的には達成感が多いものにもなりました。
なので新鮮な情報を得たので、新鮮なうちにブログにしてしまいます。

はじめの方針

「Dockerのイメージはなるべく軽くすること」がいいことと最近知りました。
ならばAlpineベースで作りたいと思いました。
無知であるがゆえに夢を抱いていましたが、それが蟻地獄への第一歩......。

Alpineベースで試す

公式サイトによると、最終的には

$ pip install tensorflow==2.0.0-alpha0

ができればアルファ版を試せるようになると書いてあります。
ここを最終目標として作ります。 参考は忘れてしまいましたが、最初のDockerfileはこんな感じです

FROM alpine:3.7

RUN apk --update-cache \
    add linux-headers \
    gcc \
    g++ \
    make \
    openblas-dev \
    python \
    python-dev \
    python3 \
    python3-dev

RUN mkdir /app
WORKDIR /app

RUN pip3 install --upgrade pip
RUN pip install Pillow \
    ipykernel \
    jupyter \
    keras_applications \
    keras_preprocessing \
    matplotlib \
    numpy \
    pandas \
    scipy \
    sklearn

RUN python -m ipykernel.kernelspec

RUN pip --no-cache-dir install \
    tensorflow==2.0.0-alpha0

(お作法とかが身についていないのは許してください)
こんな感じでDockerfileを書いてみました。
最低限必要なものはapkでインストールし、
そのあとはpipで色々入れて、最終的にTensoFlowをインストールしようとう魂胆です。

蟻地獄その1

あるエラーが出ました。

Collecting matplotlib
  Downloading https://files.pythonhosted.org/packages/26/04/8b381d5b166508cc258632b225adbafec49bbe69aa9a4fa1f1b461428313/matplotlib-3.0.3.tar.gz (36.6MB)
    Complete output from command python setup.py egg_info:
    ============================================================================
    Edit setup.cfg to change the build options
    
    BUILDING MATPLOTLIB
                matplotlib: yes [3.0.3]
                    python: yes [3.6.5 (default, Aug 22 2018, 14:20:40)  [GCC
                            6.4.0]]
                  platform: yes [linux]
    
    REQUIRED DEPENDENCIES AND EXTENSIONS
                     numpy: yes [not found. pip may install it below.]
          install_requires: yes [handled by setuptools]
                    libagg: yes [pkg-config information for 'libagg' could not
                            be found. Using local copy.]
                  freetype: no  [The C/C++ header for freetype2 (ft2build.h)
                            could not be found.  You may need to install the
                            development package.]
                       png: no  [pkg-config information for 'libpng' could not
                            be found.]
                     qhull: yes [pkg-config information for 'libqhull' could not
                            be found. Using local copy.]
    
    OPTIONAL SUBPACKAGES
               sample_data: yes [installing]
                  toolkits: yes [installing]
                     tests: no  [skipping due to configuration]
            toolkits_tests: no  [skipping due to configuration]
    
    OPTIONAL BACKEND EXTENSIONS
                       agg: yes [installing]
                     tkagg: yes [installing; run-time loading from Python Tcl /
                            Tk]
                    macosx: no  [Mac OS-X only]
                 windowing: no  [Microsoft Windows only]
    
    OPTIONAL PACKAGE DATA
                      dlls: no  [skipping due to configuration]
    
    ============================================================================
                            * The following required packages can not be built:
                            * freetype, png
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-07jytk9b/matplotlib/
The command '/bin/sh -c pip install Pillow     ipykernel     jupyter     keras_applications     keras_preprocessing     matplotlib     numpy     pandas     scipy     sklearn' returned a non-zero code: 1

matplotlibをインストールしている時にでたエラーです。
とりあえずmatplotlibを無視してみても他のインストールエラーが出るので、一旦公式に倣ってみることにしました。

公式に倣う

TensorFlowの公式にDockerfileがありました。
今回はこちらをお借りして、TensorFlowのところまで試しました。
50行目にある、TensorFlowのインストールの部分をアルファ版に置き換えました。
それがこちら。

FROM ubuntu:18.04

# Pick up some TF dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    curl \
    libfreetype6-dev \
    libhdf5-serial-dev \
    libpng-dev \
    libzmq3-dev \
    pkg-config \
    python \
    python-dev \
    rsync \
    software-properties-common \
    unzip \
    && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN curl -O https://bootstrap.pypa.io/get-pip.py && \
    python get-pip.py && \
    rm get-pip.py

RUN pip --no-cache-dir install \
    Pillow \
    h5py \
    ipykernel \
    jupyter \
    keras_applications \
    keras_preprocessing \
    matplotlib \
    numpy \
    pandas \
    scipy \
    sklearn \
    && \
    python -m ipykernel.kernelspec

# Install TensorFlow CPU version from central repo
RUN pip --no-cache-dir install \
    tensorflow==2.0.0-alpha0

こちらで

$ docker build -t tensor-alpha .

を叩くと、一通りbuildできました。

蟻地獄その2

Macローカルではすんなりbuildできて、満足していました。
で、環境をLinuxでもできるかと思ってやってみました。
buildまでは全然できて、コンテナ内にも入ることができました。
コンテナ内のディレクトリにローカルのディレクトリをマウントしているのですが、
それを確認しようよ思ってもpermissionで怒られました。

解決策

コンテナ内に入る時にオプションをつける

$ docker run --rm -it -p 8888:8888 -v $(pwd):/app:Z -w /app tensor-alpha bash

-vのオプションの最後にZをつけると解消されました。
参考:dockerで共有ディレクトリを利用したが、「Permission denied」が出てアクセスできない。

やっとできた

時間はそんなにかかっていないけれど、なんとかインストール済みのimageを作成できてよかったです。
あくまでインストールまでが目標なので、使えるかは不明ですが、チュートリアルにある
このコードは動きました。

今回はDockerfileを書くことまでが目的でしたが、今度は実際にアルファ版を試してみた記事を書いてみたい。

これをやって唯一後悔しているのは、朝の5時まで興に乗って試しまくっていたことです。
睡眠、大事......。

お試しリポジトリこちらにあるので使って動いたらスターください。

他のリポジトリにpushする時

こんにちは。
今回の記事は誰かの役に立つというよりは、
自分の備忘録的な部分になるので、もし参考になる人がいたら、
コメントとかスターとかつけてもらえると嬉しいです。

扱うケース

今回、扱うケースとしては、

そういう場合でどうすればいいか分かるように書きます。
例えばですが、最近Githubがプライベートリポジトリを無制限に作成可能になったので
以下のユースケースは考えにくいですが、
BitBucketで作っていたものが完成したのでGithubで公開したい
とかが該当するのではないかなと思います。
今回は、開発用のリポジトリと本番環境用のリポジトリがある時を考えてやっていきます。
それでは、始めます。

ステップ

  • 現状のリモートリポジトリを確認
  • 思い出す
  • はっ......さては......

現状のリモートリポジトリを確認

(今回はGIthubhttpsで扱っている時を例にします。)

$ git remote -v

とコマンドを打つと、

origin   https://github.com/[user_name]/[repo_name].git (fetch)
origin  https://github.com/[user_name]/[repo_name].git (push)

上記のように現在登録されているリポジトリが出てくると思います。

思い出す

Githubとか最初にソースコードをコミットするときに

$ git remote add origin https://github.com/[user_name]/[repo_name].git

と打つように指示がなされていたかと思います。
そして、

$ git push -u origin master

と打つことでソースコードがGit上にpushしますよね。
ここで、全く疑問を感じずに-uとかremote addとかしているとのちに壁にぶち当たるわけですよ。
(僕みたいに)

はっ......さては......

調べて今さら知りました。
リモートリポジトリは名前を変えれば加えられること。
ここでは本番環境のリリースブランチにpushすることを想定するとしましょう。

$ git remote add prod https://github.com/[user_name2]/[prod_repo].git

こうすれば

$ git remote -v

としたときに

origin https://github.com/[user_name]/[repo_name].git (fetch)
origin https://github.com/[user_name]/[repo_name].git (push)
prod https://github.com/[user_name2]/[prod_repo].git (fetch)
prod https://github.com/[user_name2]/[prod_repo].git (push)

と表示されていると思われます。
そして、pushするときは

$ git push prod release

と打てばpordとしたリポジトリのreleaseブランチにpushされているはずです。

書くの忘れた

すっかり書くのを忘れましたが、-uをつけると、push、pullするときにデフォルトのリポジトリとしてみてくれて、
次回から

$ git pull

とかしても-uオプションをつけた方から自動的にpullされるようになります。

まとめ

改めて考えてみたら、「そんなことか」みたいなことですが、案件でinitial commitするのなんてPMかPLくらいですし、
自分でゴリゴリ開発している人の方がずっと理解していそうだなぁと思いました。
考えりゃわかるだろ系記事ですが、備忘録までに......。

パンチの効いた検証を思いついたけど、いろんな意味の学習コストが半端ない。

Cloud OnBoard Tokyo 2019に参加した①

こんにちは。
今日は、2/20(水)に行われたCloud On Boardに参加してきました。
昨年は非常に人気で席が割と早く埋まったとか埋まってないとか...。
たまたまWebで見つけてその場で応募しましたが、心から行ってよかったと思う内容でした。
全体の内容は避けますが、だいたいどんな感じか、ざっくり書いていけたらと思います。

Cloud On Boardとは

そもそもCloud OnBoardってなんでしょうという話です。
Cloud OnBoardとは、

Cloud OnBoard は GCP 認定トレーナーによる Google Cloud Platform (GCP) トレーニング入門編です。
2016年より開催されております とのことす。参考サイト
2016年から開催されているとなると、今回で4年目になるのでしょうか。

なんで行こうと思ったのか

僕がなんでこのイベントへの参加を決めたのかというのを書きます。
新卒でエンジニアを始めて以来、僕はクラウドにとても興味を持ちました。
なのでそれに付随して、ベンダーの資格も取りたいと思い、今は勉強しているところですが、
このCloud OnBoardはGCPの資格を取得された方の記事をみているとそれなりに見受ける言葉でした。
なので、
「そもそもクラウドとは」みたいな考え方から
GCPはどう使えばいいのか」とかを一度ハンズオンとして聞きたかったので参加しました。
申し込みをしてから、この日がとても待ち遠しくて仕方がありませんでした。

実際に参加した感想

声を大にして言いたい
すごくよかった!!!!!
何がよかったというか、非常にわかりやすい!
GCPの基本的な考え方や、最近流行りの機械学習のネタまで、
GCPのサービスや、始めの立ち上げ方までデモで見せていただいたりもしました。

少し面白かったお話

  • クラウドはスケールしますが、トイレはスケールしませんので......。」

確かに。
特にエンジニア系のイベントは男性が圧倒的に多いので、
普段女性が並んでいて大変だな、と思う行列に並ぶことになるので少し気持ちがわかるような気がしました。

  • 「小学生の夏休みの課題にBig Query」

そういう発想が今後はどこかで訪れるとは思うのですが、個人的にはなかなか好きな話でした。
Big Queryは割と簡単に結果を得られるので、複雑なクエリ投げる必要ありません。
しかし、それは高性能であるからであって、ローカルで行うためにはもっと複雑な
クエリを投げないと大変なことになりますね笑
また、Big Queryしか使っていなかった人が使えない環境に行ったらとても苦しんだ話を聞いたので、
便利に慣れてしまうのも問題だなと思ってみたりしています。

まとめ

今回はGCPを知るためにCloud OnBoardに参加しました!という記事でした。
内容は、GCPの0→1を手助けするようなもので、それなりに知っている人にとっては物足りなかったのかも知れません。
ですが、GCPに限らずクラウドの思想も知れた気がするので個人的には大満足でした。
まだまだ、GCPの知識は全然ないですが、今年中にはGCPの資格取得も目指すので、
これから深めていきます!
また、今回は入門編を紹介しましたが、もう一つ
「アーキテクトデザイン講座」にも参加するので、
そちらの内容も参加後、うっすらと書いていきたいと思います!

追記(2019/05/20)

思いのほか、この記事を見ていただいている方が多いので、
こちらも参考までにご覧ください。

kaedem-dev.hatenablog.com

ブログ、立ち上げました

初めまして

こんにちは。
遂に重い腰をあげてブログを立ち上げるまでに至ったのですが、
なんで僕がはてなブログにしたのか、
理由をつらつらと書いていきます。

はてなを選んだ理由

  • 作るまでがとても簡単
  • いろんなコストを抑えられる
  • みんな使っている

作るまでが簡単

結構何をやるにもそうだと思うのですが、
始めるまでの障壁が高いといつの間にかおざなりになっていたり、
どうでも良くなったり......。
そしていつの間にかやる気も無くなっていたりしませんか?
でもこれはとてももったいないことだと僕は思っていて、
「やりたいと思った気持ち」
ってとても大事だと考えています。
そして、思った時の律速をいかに早くできるかが
そのあと長続きするか否かに関わってくると思っています。
その時に簡単に作れるはてなブログを選びました。
なんではてなブログを選んだのかは3つ目の理由にも繋がってきます。

いろんなコストが抑えられる

ブログ運営といえば、それなりにコストとか気にする人もいるかと思います。
かくいう僕もその一人なのですが、無料で始められるっていいですよね。
有料会員にするとドメインも取得できるみたいなので、
このブログがそれなりなものになったら考えます。笑
ブログを立ち上げるにあたり、他で検討していたのはhugoです。
hugoとはなんなのか、とかは色々調べれば出てくると思うので、
ここでは割愛します。
ただ、なんで検討したのかというと、エンジニアにとって割と大事な
ポートフォリオの一つになったり、自分でインフラを組み上げるのが楽しそうって思ったからです。
考えていた策としては、hugo + firebaseだったのですが、
写真とか嵩んだ時にお金がどんどんのしかかってきそうなのでやめました。
(いい方法はあると思うのですが、今のところ思いつかず)
写真も記事にして公開していきたいので、その辺も考慮して、
ここにたどり着きました。

みんな使っている

エンジニア畑ではてなブログ使っている人、結構見かけます。
みんな使うってことはそれなりにいいものなんだろうなぁと思っています。
普段は天邪鬼なので、みんなが使うものがあまり好きではないのですが、
逆にみんな使っているということはそれだけ安心なものなのかなと。

終わりに

ここまで書いていますが、別に手段の一つとしてここを選んだので、
宣伝したいわけでもないです笑 ですが、せっかく始めた始めたブログ。
いつまでここで書くか、いつまで続くかわかりませんが、
今年はアウトプットをたくさんしていくために頑張ろうと思いました。
以後、お見知り置きを...。