最近の開発の進捗。golangの軽量コンテナづくり

 ものづくり楽しいめう~してます。お絵描きしたりもしてるし、音楽も自分で作ってみたいなぁ~。絵もプログラムも音楽もできるハイパー人材になりたいめう~。


qiita.com


 でこれが先週の進捗。go言語をk8sに上げるにあたって軽量コンテナを作成したいなと思ったんですが、ググっても意外といいのがなかったですね。せっかくコンパイルできる静的型付け言語なんだからdistroless使いましょうよと。golang公式パッケージに標準でdepを入れてくれ~って感じ。どのみちそこそこ依存パッケージのダウンロードに時間がかかってしまうのをどうにかしたいですね。パッケージも含めてコピーすればコンパイルだけ走るので高速化できそう。

 まぁdistrolessは完全に本番環境で使うのでこれでいいんですよね。逆に開発環境どうするのが正解なんだろう。毎回ライブラリのダウンロードとコンパイルが走るんですよねぇ~。

 しばらくは絵とかマッチメイクアルゴリズムとかを考えよう。

M3で買った曲

買ったアルバム

  • 情報技術クラブ  理科大葛飾の曲とかゲームとかCGとかやってるサークルです
  • Grabity Zero  理科大野田の同じような趣旨のサークル(だと思う)
  • TOHO BPM128[+-10]なんとかかんとか  もりアツもりアツ!はやくないクラブミュージックをテーマにしてるらしい
  • LOST IDEA  Endorfinさんの曲。友達に勧められた
  • frost era  ARForestさんの曲。Dynamixで知ったアーティスト

終えて

 そのあと友達とスタバでだらだらしたら「あの人も出してたのかぁ~~」ってなった。事前準備は大切。

 こまかい感想とか述べようかと思ったけど、表現力皆無なのでやめ

哲学はなんで抽象化をしないのだろう

 数学って抽象化、一般化の連続だと思うわけです。具体的な数字の計算から、変数を代入して、変数の次数や種類を増やして、二次元から三次元、さらに多次元でも適用できる概念を探求する。けどいきなり抽象化できないから、具体例を漁りながら最適なものを探していく。プログラミングでも同じことだと思う。

 数学と哲学って関係が深そうでまったくそんな気がする。僕は哲学というものをロボットがわかるようなところまでかみ砕く必要があると思う。

 例えば「人間は幸福になろうとする」

 という考えがあったとして、これを動物とかすべての生物に当てはめるならどうするだろうか考えて、

 「すべての生物はあるべき姿になろうとする」

 みたいな言い方ができるんじゃないかと考えたりする。植物に幸福になろうとする意志があるかわからないけど、あるべき姿(成長する、子孫を残す)を実現しようとするわけで、これが人間レベルなら「幸福になる」って言えるんじゃないかみたいな。で、「幸福になろうとする」の延長としてルールとか法律の成立を見ることができるわけで。何が人間にとって幸福であるかはほとんどの部分は共通で(ご飯を食べたい、寝たい、安心して暮らしたい)、その実現の実践としてルールがあると考える。

 こんな風に組み立てて既存のわけのわからない用語で埋められた哲学をもっとシンプルにまとめることができるんじゃないかと思ってる。いまの哲学はそれぞれの思想が対立したり協調したりして依存関係が意味不明すぎる気がするし、それぞれの主張もかなり属人的な部分が多かったりしてごちゃごちゃしてるような気がする。

 哲学ができる人にはそれがすごくきれいに整理されたツリーになってるのかもしれない。

Azure DevSpaceは対応言語が増えればかなりいいサービスになると思う。

Azure DevSpaceとは

 昨今ではマイクロサービスマイクロサービスとよく言われて、k8sがもてはやされています。マイクロサービス化のメリットについては語るまでもありませんが、開発してるときに思うわけです

これローカル開発環境どうするの?



 いまでは機械学習も当然のように利用され、GPUインスタンスも起動しているケースが多いと思います。そんな中で貧弱なノートパソコンでは本番環境を再現することができません。おそらくは再現環境の中の1プロダクトをyamlファイルを書き換えて作業するのが普通でしょうが、それなりに手間です。そのためにAzure DevSpaceを使います。

Azure Dev Spaces ドキュメント

 もともとがどんなに大きなアーキテクチャだとしても、マイクロサービスとして切り出してブレークポイントを貼ったりしてデバッグできるのは感動です。ただ、対応している言語が今のところC#(.NET Core)、Java, NodeJSだけみたいです(Golangにも対応する気があるっぽい)。

情報工学科について

 最近はやっているので

入学前に差があり、在学中に差が広がる学科

 大学にはいろんな学科がある、物理科でも化学科でも電子系学科であっても入学前にとびぬけた人はそこまでいない。いてもせいぜいSSHで活躍していました程度の差で、大学で頑張れば埋められる差だ。

 だが、情報工学科はそうもいかない。小さいころからパソコンをやってたり、プログラミングでなにか作ってる人がいる。それだけでもほかの学科で差がついているのに、在学中にさらに差が広がる。ほかの学科なら成績くらいの差だが、情報工学科にはプログラミングという非常に目に見えやすい進捗の差がある。ある程度自分で進捗を産んだ人にとって情報工学科で学ぶコンピューターサイエンスは低レイヤへの橋渡しとなるが、そうでない人には「ちょっとだけパソコン触れる人」にしかならない。

人気沸騰学科らしいが、一番意味のない学科だと思う

1, ネットに一番情報が落ちている学科である

 ggったらかなり情報が出てくるし、勉強の仕方もある程度整備されている。というか独学ができない人は向いてないと思う。

2, いうほどオタクはいない

 聞いた話ではあるが、どの大学もそこまでプログラミングをやっているような人たちは少ないらしい。最近は競プロの流行りがあって普及しつつあるが、それでもプログラミングを趣味でやる習慣のある人は絶望的に少数派らしい。「共に学ぶ友を見つける」というのは大学の役割の一つだと思うが、これではあまり意味がない。

3, プログラミングをする学科ではない

 プログラミングをしている学科もあるが、それはもはや専門学校である。プログラミングができる前提で論理回路アルゴリズムを学んで身に着ける内容になっている。なので情報工学科を出てもプログラミングができるようにならない。お飾りの学歴でしかない。

情報工学科を活かすために

1, 競プロはもっとも参入障壁が低くオススメ

 まずアルゴリズム情報工学の最たるものであり、ゲーム感覚でやりやすいのでお勧めできる。

2, Rails, Go, Pythonなどで興味を持ったものを始める

 ある程度コーディングに慣れたら実際にサービスを作ってみるとよい。そこでポートフォリオで完成すれば有意義なインターンにも参加できるので良い。

3, 逆におススメしないのは機械学習

 非常にキャッチーなワードだが、知り合いでちゃんと続けられている人は少ない。専門家としてやるならば統計学を基礎として様々な勉強をしなくてはいけないし、その勉強を支えるためのコミュニティも上二つに比べると弱い傾向にある気がする。

なんて書いたが私は情報工学科ではないし、プログラミングなんて毛が生えた程度しかしないはんだ付け学科だったりする。

Docker/Kubernetes 実践コンテナ開発入門の6章をAzureでやってみる(失敗)

 機械学習の方は進捗ゼロです。

 機械学習、たぶん「習うより慣れろ」なんでしょうけど、Webに関してもLAMPから丁寧に入るような人間なので、やるならちゃんと統計学からやっていきたいという気持ちがあります。

 

 
 で、僕はDocker/Kubernetes 実践コンテナ開発入門という本でコンテナ技術を勉強している最中なんですが、生憎GCPのトライアル期間みたいなのはすでに終わってしまい、Azureの学生プランしか残っていない状況です。まぁクレカを登録しなおしても良いんですけど、アカウント管理が手間ですしとりあえずk8s触れればいいって気分なので、Azureで立ててみようかなと思います。

 
 やってることは6章のAzure版なのであしからず。

 
docs.microsoft.com

docs.microsoft.com

 ここのドキュメントを読みながらやっていきます。

 まずは、リソースグループの作成。適当に「gihyoR」とでもつけておきます。

az group create --name gihyoR --location japaneast

 でAKSクラスターの作成

az aks create --resource-group gihyoR     --name gihyo     --node-count 1     --enable-addons monitoring     --generate-ssh-keys

ちなみにくそ待たされます。カップラーメン作れるやん。

クラスター接続

 kubectlのローカルインストール(もう入ってると思うけど)

az aks install-cli

 kubectlに認証情報をわたす

az aks get-credentials --resource-group gihyoR --name gihyo

 で接続確認

kubectl get nodes

 このままだとローカルのk8sダッシュボードがバグるので以下のコマンドを打ちます

kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

あとアクセス先がドキュメントとちょっと変わって

http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/overview?namespace=default っぽい

Master-Slave構成Mysql構築

 ここはGKEとは違うというか違わないんですが、プラットフォームに対応した永続ボリュームを使います。

docs.microsoft.com

 ここに同様にストレージクラスと書かれたページとyamlがあるのでパクって

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ssd
  annotations:
    storageclass.kubernetes.io/is-defauld-class: "false"
  labels:
    kubernetes.io/cluster-service: "true"
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
  storageaccounttype: Premium_LRS
  kind: Managed

でStorageclassを作成

$ kubectl apply -f storage-class-ssd.yaml

パラメーターがなんなのかよくわかってないけどとりあえず進む

 次はStatefulSetです。これは書籍と同じ というかこの後そのまま書籍通りやったんですけど、IngressグローバルIPアドレスを拾ってくれない。どうもGKEの場合はIngress Controllerが最初から生えているので、AKSだとそこの作成からやらないといけないっぽい。

 とりあえずドキュメントのこのページを参照する。

docs.microsoft.com

ここからHelm周りを触る関係上クラウドシェルで操作していた(ローカルで入れてもいいけどここでは割愛) イングレス コントローラーを作成

$ helm install stable/nginx-ingress --namespace kube-system --set controller.replicaCount=2

で、ingress.yamlは以下の通り

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: todoweb
          servicePort: 80

で、Mysqlがうまく動かなくてinit-data.shしまくってから、 todo-api.yamlの接続先でrootにしたらなんかうまくいった? f:id:Piffett:20190323092330p:plain

なんかJSとCSSが読み込まれてない気がする。Azureのサンプルも丁寧に見てみようかと思います。正直DBは外部にしたいなぁ

機械学習始めました





三日坊主の天才なので三日後には飽きてると思う



 まぁなんか割と著名な本とかを大量購入したりしたので、たぶんこれから少しずつ触っていくと思います。本当はハードやりたいんですけどねぇ、独学ではちょっと費用的にも時間的にも難しいかなと。ハード触れる人みんなサークルとか学科とかでやりこんでる人ばかりで独学しかしてない僕にとっては結構難しい世界です。誰か教えてくれ~

 で、機械学習のエッセンスのアルゴリズムをなんかで実装してからデエプラアニングに入ろうかと思います。ん~どーすっかな~