/var/log/study

つまり雑記

DigitalOceanをざっと眺めて気になった点

クラウド事業を展開しているところに従事している都合上、他社サービスがどんな風になっているかきになるお年頃なのです。

先日、DigitalOceanを触り始めたのでそのメモ

コンパネ

  • 白を基調に水色で綺麗
  • 何が動作するのかは分かりやすい
    • ただしわかりづらいところは、本当によく分からない(後述する)
  • 料金が明示的ではないので、お金のかかり方がよく分からない

インスタンス

メモ

  • 基本10個まで
    • 上限解放できそう
  • OS
  • リージョン
    • いろいろあるが日本リージョンは無い
    • 地理的な話だと一番近いのがシンガポール
  • オプション
    • プライベートネットワーキング
      • これが本当によく分からない
      • 同じリージョン, ゾーンに属すインスタンスをつなげると書いてあったがよく分からない
      • 割り振られたプライベートIPが/16なので、リージョン間でどのVMとも共有されるIPをつけることが可能な機能?
      • コンパネをざっと眺めているだけだと、プライベートネットワークを止める方法が分からない
    • バックアップ
    • IPv6
    • User data ?
    • 監視
価格 cpu(vCPU) メモリ(GB) ディスク(GB) ネットワーク流量(TB)
5 1 512MB 20 1000GB
10 1 1 30 2
20 2 2 40 3
40 2 4 60 4
80 4 8 80 5
160 8 16 160 6
320 12 32 320 7
480 16 48 480 8
640 20 64 640 9

雑感

インスタンスの設定とローカルディスクのサイズが関連してしまっているので, 中サイズのインスタンスを後に, 小さいインスタンスにすることができなさそう.

なので「インスタンスのサイズを下げてコストを抑える」とかのクラウド的な基本テクが使いづらい.

日本リージョンが無いのは割と残念.

$10でまともなVMが借りることができるのは本当にすごい.

ネットワーキング

  • ドメイン
  • PTR
  • LB
    • 月20ドルから
    • 性能は未調査
  • フローティングIP

    • AWSで言うところのElastic IP
    • VMについてるIPをフローティングIPに昇格させる
  • ファイアーウォールが無い

    • iptablesとかFirewalldとかやらなきゃいけなくてダルい

雑感

  • LBが安いと思う

触っていないもの

  • volume
  • API
  • Image

最後に

DigitalOcean: Cloud computing designed for developers

あなたがdocker-ceをcentos7にansibleでインストールしたい時に読むべき記事

タイトルの通り。

あと2017/03/03に書かれている記事なので注意

dockerがリリースサイクルを変えて、多分リポジトリの情報の配布方法も変更した模様。

具体的に言うと、 yum-config-manager ってやつを使うようになった。

ansibleでyum-config-managerコマンドを扱ってくれるモジュールは現状なさそう。

yum_repositoryモジュールはrpmで配布するやつを扱うので今回のケースではうまくいかない?っぽいのでワークアラウンドを書く。

ワークアラウンドだと思うし、本当にyum-config-managerを扱うモジュールがいないのか?は疑問なところだが、それは後日もう少し調べる。 

以下はplaybook

- name: install yum-utils
  yum: name=yum-utils state=present
- name: add docker repo
  shell: "yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
  args:
    chdir: "/etc/yum.repos.d"
    creates: docker-ce.repo
- name: install docker-ce
  yum: name=docker-ce state=present
- name: restart docker
  systemd:
    name: docker.service
    state: restarted
    daemon_reload: yes
    enabled: yes

shell moduleでなんとかする方向でやってあげると良さそう?

ちなみに、この記事を書いてる時点でインストールされるdockerのバージョンは以下

# docker --version
Docker version 17.03.0-ce, build 3a232c8

Emacsでドキュメントを読む

2017年、何としてもemacsを捨てたい気持ちと、emacsの使い方を学んでしまいより快適な環境が手に入ることによる喜びで葛藤が生まれています。

そんなことはさて置き、emacsで諸々のドキュメントを読む方法を軽く纏めます。

man

標準パッケージの woman を使えば良い

M-x woman の後に適当に知りたいコマンドを叩く

python

helmを使う前提になってしまうが、以下を参考に、helm-pydoc.elを使う

syohex.hatenablog.com

golang

github.com

go-modeから引ける

M-x godoc の後に、適当にパッケージ名を入れる

ansible

以下を使う

yaml-modeと連携するので、yaml-modeを先にインストールしておくのがベター

github.com


以下は軽く調べて無かったもの

  • Dockerfileのためのドキュメントを見る.el
  • docker-compose.ymlのためのドキュメントを見る.el

2015年以降に増えたgTLDにご注意を

仕事でネームサーバーを扱うことになるかもしれなくて、DNSとはどのような働きをするかを調べてるうちに、 ふと思い立って、 .cloud ドメインがあるかないかを調べてみた。

結果としてはあったのだが、それはさて置き、それ以外も調べた結果、現在所属している会社的に取られたらまずそうなドメインを2こほど抑える結果となった。

調べた過程で分かったこととして、 fujitsu.cloudntt.cloud あたりは全然関係のない外国の方が抑えている

なにやら2015年あたりに増えたgTLDあたりが割とノーマークになっている様子

現在のTLDのリストは以下で観れる

厄介なのは、 .コム (xn--tckwe) などの文字列に対してaliasが貼ってあるドメイン。政府などがあるが、読みを見るに中国のドメインっぽい。「グーグル」なんてドメインもあるらしい。

真面目に調べたら、これ抑えられていなくて良いのか?というやつが山ほどある気がするので、転売目的の方などに取られて不要なお金を支払う羽目になる前に各自ご注意を.

メンテナンス用データを生成するツールについて僕の思う事

結論

bin/rake db:migrate

機械的に 実行されるような環境が最強だって事に気がついた.

不要な中間形式もなく、誤ったデータを使う可能性もかなり減らせる.

良いと思う所

手動で bin/rake db:migrte すると考慮すべきパターンが増えるため, 機械的に が超重要. 考慮すべき間違いが減る. おそらくは, 間違ったデータを挿入しないか否かだけを考慮すべき状態になる.

また上記のコマンドは暗黙的に、gitできちんとワークフローを回していれば、productionやstagingに取り入れられて問題ないとされるデータしか入ってこないはずなのも良い点である.

但し書き

bin/rake db:migrate

でokなのは、ActiveRecordを使ったプログラミングがみんな出来る前提なので、そこら辺だけ要考慮

BSD系のコマンドを読む下準備

TypeScriptのブログを書くと言っていたけど, そんな暇もなさそう.

業務で色々なプロトコルに触れて(OSIで言うところのデータリンク層~アプリケーション層まで), わからないことだらけで困っているのが現状です.ただ分からないと嘆くだけでは前進できないので, せめてwebシステム開発の出身なんだから, HTTPサーバーを切り口に色々と勉強しよう!と思ったわけです.web上の人達もサラッとhttpサーバー書きました!みたいなノリなので.

まぁ結果としては、C言語を殆ど触ってこなかった自分としてはムズい.

もう少しレベルを下げて, まずC言語を取得しよう!というところに焦点を当てて勉強をしようと思った際に見つけた記事が以下

lsコマンドをハックしてみよう - Yahoo! JAPAN Tech Blog

なるほど. 過去の(現在でも?)yahooでは新人にBSD系のコマンドを読んで学習することを推奨しているのか.ならば自分も取り組めるのではないか?というところで, 本日はその下準備.

必要なもの

前提

普段は CentOS + zsh + tmux + emacs で作業をしているので, それっぽい環境に近づけたい

準備

  1. VMに対してisoでFreeBSDをインストール
    1. tuiに乗せられて適当にエンターを押していけば問題なし
    2. その過程で適当にユーザーを作る
    3. 作ったユーザーを wheel グループに属させる
    4. pkg install sudo
    5. visudowheel ユーザーに sudo する権限を与える
  2. 適当に作ったユーザーでsshし、zsh tmux emacs git あたりをインストール
    • 手軽にzsh環境を整える為に、oh-my-zshを導入
    • emacsの環境を整えるのに、Cask を使っているので、それをインストールする為に, curl python を導入
  3. GitHub - freebsd/freebsd: FreeBSD src tree (read-only mirror) から git clone してくる

詰まったこと

  • yahooブログには適当にファイルを揃えろって書いてあったし, 適当にlsディレクトリ配下をコピペして持ってきたけど動かなかった.
    • 執筆当時はそれで良かったのかもしれない
  • BSDの初期環境はCentOSと違いすぎて色々と戸惑った.
    • sudo 無い
    • ココらへんは無いものだらけだって事が分かったら後はスムーズに作業出来た

Angular2のチュートリアルに取り組んだ感想

angular.io

上記のページの配下の

Tutorial: Tour of Heroes - ts - TUTORIAL

に取り組んだ後の感想を書く.

背景

12月の配属発表で, 今後はJSを書くことはほぼ無い事が確定したと思っている.

であるならば, 正月くらいは今後触らないであろう技術に積極的に触っていくのが吉では無いかと考えた.

去年はES6とReactでSPAもどきを作るくらいは頑張ってみたが, その組み合わせ自体は良いと思いつつ, ビルドの環境を作るのが面倒だし, ボイラープレートを適当に拾うのも面倒だし, ReactとES6以外のライブラリどうするか問題があるし.

本職としてJSを書き続けるならまだしも, 片手間でJSを書くのに色々と選ぶのは面倒くさい.

そんななかで, Angular2はTypeScriptを採用して, フルスタックにライブラリ(RouterやHTTPクライアント)を持っていることをふと思い出した.

JSに関する事前知識

  • Angular
  • Backbone
  • CoffeeScript
  • 上記はいずれもプロダクションのコードを書いた経験あり

  • ES6は体験済み

  • Reactも体験済み
  • ただし両者ともプロダクションでの経験ではない

  • TypeScript未経験

  • RxJSも未経験

取り組んだこと

2016/12/31 ~ 2017/1/2 にかけて開いてる時間をちょこちょこ使い,

Tutorial: Tour of Heroes - ts - TUTORIAL

上記の英語のうち, Angularに関する解説はほとんどすっ飛ばし, 何がやりたいのか?だけを拾って, ひたすらサンプルコードを書き写す作業に取り組んで, TypeScriptとAngular2の雰囲気をつかんだ.

感想

ほとんどの解説を飛ばしたので, よくわかってないところ, 認識が間違っている事はたくさんある前提で

環境

github.com

上記のリポジトリを引っ張ってきて, npm install && npm start で即始められる体験は最高に良かった.

が, 上記のボイラープレートは, ファイルの変更とブラウザとを同期するタイプなので, 最初のうちは, TSのコンパイルが失敗してたのを見落とすと??? という感じの状況が長く続いた.

またこのボイラープレートは, コンパイル対象の ts ファイルと同じディレクトリに js.mapjs ファイルを吐く. 要は 'js' と 'js.map' と 'ts' が混在することになる

色々考えると tsjs は別ディレクトリに吐かれて欲しいので, プロダクション環境で使うときに要検討の箇所になると思う.

すこし調べた感じだと、TypeScriptのコンパイラの設定でどうにかなりそう.

Angular2に関して

チュートリアル程度ならば、

ビルドの環境を作るのが面倒だし, ボイラープレートを適当に拾うのも面倒だし, ReactとES6以外のライブラリどうするか問題があるし

上記の問題はほぼ解消

サーバーサイドのプログラミングを書いているときと、似ているような考え方で写経できたという感想.

  • module
  • service
  • component
  • 通常のClass

Angularのコードは上記したように分類が出来るっぽい. MVCモデルとマッピングするとしたら, componentがContoller, serviceがModel, htmlがviewになるのかな? componentの中で, templateのhtmlとそれに対するcssをパスで設定出来るのは結構良いのではないか? と思った. ただし, templateはAngular1の頃と同様に、 ngIf みたいな文法が入ってくるのは個人的に好みではない.

jQueryのコードと比較して, Angular2やReactの様に, コードに対してテンプレートが紐付いている状態は色々と考えることが少なくて済むのは非常にデカイ.

DIは良いよね!って感じなんだけど, DIするにはInjectable書けばそれっぽくなるでしょ?くらいの理解しか現状ない. たぶんAngular2のDIを知るとかよめばすんなり理解できそう.

この次に取り組むべきだと感じたこと

  • TypeScriptの文法を固める
    • tscの仕様をもう少し探る
  • RxJSとは何か?を学ぶ
  • Angular2に関する理解を深めるために、チュートリアルの解説を読みながら再度取り組む

以上のような流れになると思うので, TypeScriptの文法とtscを抑えると思う. ので, たぶん次の記事はTypeScriptの話になる.