Intro to Relational Databases | Udacity を受講した

Udacity で開講されている Intro to Relational Databases を受講してみた。

www.udacity.com

日々、雰囲気で SQL を書いていて基礎知識がないなぁと感じていたので受講してみた。終了するまでに4時間21分費やした。

講義内容としては SQL の基本的な構文(select, join, create table, view) が主で、すでに知っていることが多かったので新たに勉強になることは少なかったけれども、SQL インジェクションとスクリプトインジェクションの実例を見ることができたのは良かったと思う。

この講義では前回受けた講義同様 Vagrant を使っていたが、私は代わりに Docker を使った。 まだまだ Docker に慣れていないので受講時間よりも Dockerfile を書いている時間のほうが長かったように思う。。。 講義で使われている Vagrantfile を参考に Ubuntu 16.04 イメージを元にした Dockerfile を作ったのだが、後々になって思うと PostgreSQL のコンテナと Python のコンテナを使えばよかったなと思う。

goropikari.hatenablog.com

github.com

ここ最近は Udacity の講義を受講して基本的なことを勉強しているが、もう少し難しい講義を受けてみたいと思うようになってきた。

Configuring Linux Web Servers | Udacity を受講した

Udacity で開講されている Configuring Linux Web Servers を受講してみた。

www.udacity.com

TIMELINE: Approx. 1 Weeks という講義だけあって重い講義ではないので1日でサクッと終わらせた。 講義では Vagrant を使ってそこに Ubuntu Server を建てるというものであったものの、私は Docker を使って受講してみた。 とくに Vagrant でなければいけないということもなかったので Docker でも問題はなかった。

github.com

今まで ufw をとりあえず設定していたものの、恥ずかしながらそれが何であるのかわからず設定していたがこの講義を受けることでようやく設定する意味を理解することができた。

講義では PostgreSQL に関してはインストール方法だけが紹介されていて、接続してその情報を Web ページに表示させる部分は完全に Exercise になっていた。 ネットの情報を参考にしながら無事に接続でき Web ページにもDB内の情報を Web ページに表示することができた。

極めて些細なことであるがフレームワークを使わずに表示させたことがなかったので勉強になった。 Docker の勉強にもなって短いながら有意義な勉強をできたように思う。

Introduction to Cybersecurity with Chronicle | Udacity を受講した

ネットワークの勉強の一環で Udacity の Introduction to Cybersecurity を取ってみた。

www.udacity.com

講義動画自体は長くても1分程度で動画を見ると言うよりも各ページに書かれた説明を読んでいくという形だった。

Introduction ということもありセキュリティのために具体的にどう設定するかということよりも、Cybersecurity とは?といった概念的な講義であった。

広く浅くといった内容だったのでクラウドでよく使われる用語をざっと知るにはちょうど良いのかなと思う。

個人的にはもっと踏み込んだ内容が知りたかったので物足りなさを感じた。 他の講義で security を題材にしているものは、GorgiaTech の院生向けの講義で一気に難易度が上がりそうなので次に勉強するのは何が良いのだろうかと言う感じ。

AWS Developer: Building on AWS | edX を Terraform を使ってやり直してみた

AWS が edX で開講している AWS Developer: Building on AWS を Terraform でやり直してみた。

www.edx.org

この講義では最終的に下図のようなシステムを構築する。

https://s3-us-west-2.amazonaws.com/us-west-2-tcdev/courses/AWS-100-ADG/v1.1.0/exercises/Arch+Diagram.jpg

以前にもこの講義を受講したことがあり、その時は講義どおりマネジメントコンソールからポチポチして構築していったが、今回は復習と Terraform の勉強を兼ねて、Terraform でできるところは全て Terraform でやってみた。

github.com

今まで雰囲気で使っていたところを理解しながら進めることが出来たと思う。 全てを Terraform でやるというのは慣れていない私のようなものからすると大変ではあったが、日々の業務にも役立つことが勉強できてとても有意義だった。

失敗談

Terraform を使った理由としては、もちろん Terraform の勉強と言う面もあったものの、もうひとつの理由として terraform destroy で手軽に使ったリソースを破棄できるところにあった。だが、destroy するときには少々気をつけねばならないことがあることも知った。

まず S3 と RDS はデフォルトの設定だと terraform destroy で破棄できないため、 S3 の場合は force_destroy を、RDS の場合は skip_final_snapshot をそれぞれ true にする必要があった。

www.terraform.io

www.terraform.io

それと今回のように勉強のために Terraform を使って最終的に destroy することが前提の場合、count を使うととても面倒になることもわかった。

Error: Invalid count argument

  on sg/sg.tf line 27, in resource "aws_security_group_rule" "ingress_sg":
  27:   count                    = "${var.security_group == "" ? 0 : 1}"

The "count" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the count depends on.

結局どう対処すればいいのかわからなくて手動でリソースを地道に消していった。

「ふつうのLinuxプログラミング」を読んだ

日頃 Linux を使っているものの、Linux について全然理解していないなぁと思っていたので「ふつうの Liunx プログラミング」を読んでみた。 読み終わるまでに22時間12分かかった。

この本の構成は以下の通り

 
●目次  
第1部 Linuxの仕組み  
 第1章 Linuxプログラミングを始めよう  
 第2章 Linuxカーネルの世界  
 第3章 Linuxを描き出す3つの概念  
 第4章 Linuxとユーザ  
第2部 Linuxプログラミングの根幹  
 第5章 ストリームにかかわるシステムコール  
 第6章 ストリームにかかわるライブラリ関数  
 第7章 headコマンドを作る  
 第8章 grepコマンドを作る
 第9章 Linuxディレクトリ構造
 第10章 ファイルシステムにかかわるAPI
 第11章 プロセスとハードウェア
 第12章 プロセスにかかわるAPI
 第13章 シグナルにかかわるAPI
 第14章 プロセスの環境
第3部 Linuxネットワークプログラミング
 第15章 ネットワークプログラミングの基礎
 第16章 HTTPサーバを作る
 第17章 HTTPサーバを本格化する
 第18章 本書を読み終えたあとは

第1部で Linux の概要、第2部で実際に手を動かして system call や各種 API を使い、第3部ではそれらの知識を総動員して HTTP サーバを作るという流れになっている。

この本の良いところはなんといっても手を動かしながら学べることだと思う。

この本で扱っているような内容は初心者向きの本や記事だと概念的なものにとどまっているが、逆に専門書だと私のような基礎のない者からすると始めで撃沈してしまう。この本はちょうど両者の橋渡し的な本のように思う。

言語は一貫してC言語を使用している。各種APIの使い方の解説はあるが、C言語の文法の話は基本的に無いので、C言語を使ったことがないという方は先にC言語の入門書(苦Cなど)を読むことをおすすめする。

最後の書籍案内のところで著者が「私はかなり保守的な(堅い)書籍を選ぶ傾向があります。」とおっしゃっているが、そのような方が書く本であるので、巷の「○日できる XX」のような書籍とは趣が異なる。 おそらく、この本を読んでも実務において役に立つことは少ないと思われる。

しかし、今までブラックボックスというか、なんとなくで使っていた部分の詳細を知ることができ私はとても満足できた。 具体的には FILE にはファイルディスクリプタに加え stdio のバッファの内部情報が入っているということを知らなかったし、簡単なシェルならばC言語でも150行程度でかけるとは思ってもみなかった。

https://github.com/aamine/stdlinux2-source/blob/master/sh1.c

また、最近のプログラミング言語GCが付いているのが当たり前で、自分でメモリ管理をするなんてことは滅多にないが、C言語ということもあって malloc, free を使って自らメモリ管理しなければならない。ポインタ演算も当然出てきて、いかにもなC言語を存分に楽しむことができた。 文字列の比較やコピーするために strcmpstrcpy といった専用の関数を使うなんて今日日なかなか味わえないだろう。

最終的に出来上がる HTTP サーバもかなり原始的なものであるが、現代において socket を明示的に使用してサーバを建てるなんてことは早々ないと思うのでなかなか貴重な体験ができた。

i.loveruby.net

github.com