brand new note

ジャズお兄さんの技術メモ

ITから離れることになります

はいこんにちは。

わたくしIT業界から一度身を引くことになりました。

理由としては研究時代にのめりこみすぎた結果環境にうまく適応できないことが分かったことが大きいのですが、経歴ができてしまったが故にわりといろんなところで声をかけていただくことが多くて。それはとてもうれしいことであり本望だったのですが、実際に仕事を経験してみると自分の向き不向きやストレス源がどんな部分にあるのか、自分にとっては大きな責任を全うできるのかという部分が数多く出てきたことにより、あまり精神衛生上よろしくないということから、今回一度身体をめいっぱい動かす仕事に変えることとなりました。

いちおう仕事していない間は元気にしておりまして、コンピュータが嫌いになったわけでもコンピュータに触れている自分が嫌いなわけでもないので、マイペースに知識や技術は積み重ねていきたいと思っています。けれど、ハードルはあまり上げないようにするかなとは思います。

これまで関わってくださった方にもこれから関わってくださる方にも、最大限の感謝を込めて、この場で一度ご挨拶させていただきたいと思いました。身勝手ですが今後ともゆるい距離感でお付き合いいただけますと幸いです。

今後ともよろしくお願いいたします。

最近覚えたこととか

相変わらず自分の不器用なところは全然治らなくて,ここのところバタバタしていて仕事をしたりしなかったり辞めたり始めたり行ったり行った先で追い返されたりSNSアカウントを消したり作ったりしていました.

で,最近大事だなと思ったこと.

  • 他人は頼る瞬間に頼ること.今の5倍くらいはやらないといけない.
  • 自信を失わないこと.どれだけ無駄足でも無駄足じゃなくなる時がくる.
  • 自分に足りないものを当てる勘は割と合っているので信じて動き続けること
  • やることをやればどんな簡単なことでも感謝されそこに有意義な経験が生み落とされる
  • 特に仕事においては簡単なことも難しいこともものの本質は同じである
  • が,理解力と冷静さと言語化能力が高ければ高いほど幅が効くというだけ
  • 好奇心は必要なことをやりやすくするための道具として非常に強力である
  • 一方で,やるべきことをやるための道具でしかなく優先度は原則的に常に二番である
  • これが逆転していると幸せになれるが,意図してこの状況を実現するには何年もかかる
  • 何かを向上させるにはヒント探しと違和感探しのようなフィードバックが大事である
  • ここは感覚と試行回数でも代替できるができるだけ言語化することが望ましい
  • ものができるようになる過程のエビデンスが残る為,あと脳の回路が鍛えられる為
  • 脳の回路を鍛えるのは筋肉と同じで,続けるとカロリー消費の際に疲労しにくく洗練されてくる
  • 好きなことをやると何がどこかの誰かにとって喜びであるかが自然と分かる
  • 感覚で好きになっても理屈が身体のどこかで分かってないと身にはつかない
  • 誰に何が最後に伝わればいいかを意識してコミュニケーションする
  • 言われたことを忠実に記憶してやることに意識の全てを持っていかれてはいけない
  • 背景や周りの人の情報共有の状況,遂行すると何が嬉しいのかまで頭に入らないと本質は見えない

最後の方とかは特に最近思うのですが,おそらくここ数年一人で頭の限界に挑んでいるばかりで全く末端をなんとかやりきれるかどうかしか意識が割けておらず,歯が立たなかったように思います.それは今でもかもしれませんが,実際には難しいことを覚えることは仕事を覚えることの3割くらいでしかなく,その背景が残りの7割を占めているような気がするのです.そうすると専門職を極めていきたいというようなモチベーションの自我から,あえて意識の外にいる人たちを眺めた時,全くこういうことを考えない人たちがどのように,なぜ楽しそうに,ある意味割り切って仕事をしているのか,それは営みのためである,ということが見えてきました.私と私の周りの人達のために幸せになる,ただそれだけであるというような図式が見えてきて,ある種人間の根源に回帰しているような感じがするのです.

ろくに仕事もできないくせに何を言ってるんだと知り合いから罵られそうですが,ここにたどり着きたくてやってきた部分がありますし,もしかするともっと簡単な仕事をたくさんしたり色々な人と話して何か大事な共通点を見出したりすることがもっとできれば,もっとこのあたりの確信が洗練されていくような気はするので,人が苦手なりにもどうにかやりくりしてやりたいなと思います.

概念の覚えかたについて思ったこと

技術の勉強をしてると概念を覚えなきゃいけなくなるときがありますが,これが苦痛な場合には日頃からいろんな好きな話を見聞きしておくとちょっと有利になる気がします. つまり,知らない単語が出てきたときに会話中にそれを想像したり,知ってる単語を概念的に別の扱い方をするときなんかにそれを想像したり,そういうことが会話の中で定期的に行われていると多少は勉強が苦痛じゃなくなるのかもな,って思います.

カタカナを使ってばっかりでうんざりする頭のよさそうな人たちがいますが,あれを痛いと揶揄するのではなく,そういうものを必要な分だけ見聞きすることも重要な気がするのです.いろんな人の話を聞いて,これは本当に頭がいい人なんだなとなんとなく自分で見極めていくことも重要です.考え方がしっかりしているとか,自分の言葉で端的に表現できているとか,この言葉遣いを利用すると思考がうまくなるんだろうなとか,個人的には人の話を聞く際そういうところに注意を向けてしまいます.まあこれは余暇でやらないといけないんですが.

ただこれは勉強が器用になるかもしれないヒントでしかなくて,実際に手を動かしたり,誰かと協力してやることをやっていく中で必要になる社会人的なスキルとはまた別なのかもしれません.あればあったほうが楽だろうなと思ったのでメモしました.

なんか最近非認知能力というのが流行っているそうで,社会人になってこれすごく大事だなと思うばかりなのですが,概念を覚えるというのも一種の非認知能力で,下記で示すところの応用力なのかな?って思いました.

https://www.embot.jp/news/36501

このあたり,20歳を超えても伸びるらしいので,地頭の限界と仕事中の悪癖を知った自分としてはこのあたりに光があるんじゃないかなと思っているこの頃です.

オブジェクトキャッシュってなに

webサーバで使われるキャッシュの話をしたく。

memcacheredis が有名

Redis とMemcached | AWS

memcached.org

redis.io

これらはオープンソースのインメモリデータストア(ディスクではなくメモリ内にキャッシュする技術)。有効化することによってディスクベースのDBよりも迅速にデータを読み込むことができる。 redis, memcachedを利用する際にはwordpresプラグイン等ができている場合には有効化のスイッチを押すだけでいいんだけど、もしそうでなく自前で利用したい場合には少々コードを書く必要がある。が、最小限で動くように設計されてはいる。 データを複数ノードに分散することもできる(おそらく別々のメモリに同時にデータをキャッシュしても正しく動作するように設計されているという意味だと思われる)。つまりスケールアウトが可能。

JavaPythonPHP、C、C++C#JavaScript、Node.js、Ruby、Goなどで動かせる。加えてredisは、String に加えて、List、Set、Sorted Set、Hash、Bit Array、HyperLogLog をサポートしている。一方でmemcachedはマルチスレッドであるため、コアを複数使ってより多くの操作を処理できるメリットがある。

その他にも機能や長所短所はあるらしいので詳しくは上のリンクを読んでみてください。

wordpressでの実装について

LS cache pluginの場合は構築しているサーバ上でMemcachedとredisがそれぞれ利用可能なのかがステータスとして表示されている。使える場合にはボタンスイッチで有効化できる。ホスト、ポート、キャッシュされたオブジェクトのデフォルトのTTL(メモリに残存する時間)、ユーザ名、パスワード、redisの場合データベースID、NWレベルでキャッシュされたグループ(いくつかある)のキャッシュの選択、キャッシュしないグループの選択、wp-adminのキャッシュ、キープアライブ機能を使ったmemcachedの高速化などを利用することができる。

topコマンドの込み入った使い方

topって見るだけで終わりやすいのでいじって何ができるのか試してみた。

画像で見比べる記事が欲しかったので書いた所もある。

f:id:frazz:20210605102244p:plain

1

CPUコアごとの使用率を表示できる。

f:id:frazz:20210605102453p:plain

2

NUMAをサポートしている場合NUMAノードごとの使用率を表示できる*1

f:id:frazz:20210605104148p:plain

z

カラーマッピングの設定をONにする。見やすいね(?)

f:id:frazz:20210605114253p:plain

Zで設定を変更できるのでもう少し見やすくできそうではある。

b

bold。running tasksの訳が微妙にわからないけど、今CPUが処理しているプロセスにマーカーを引くってことだろうか。よく適当にbを押して自分出来てる感を演出したくなるのでこれはしっかり理解しておきたいところ。

f:id:frazz:20210605114823p:plain

B

boldをenableにする。マーカーだけだと思ってたら単に太字にする機能もあるらしい。こっちのがシンプルだしこれありきのマーカーなんだろうね。マーカーはmanでは"bold"と記載してるので、そういうことだとおもう。

f:id:frazz:20210605115733p:plain

f

Filelds management。これびっくりしたんだけど、いつも見ている出力はもっと自分が見やすくしたいようにカスタムできるらしい。試しに説明の通りCOMMANDを一番上に持っていくと、こんな感じになった。

f:id:frazz:20210605120215p:plain f:id:frazz:20210605120226p:plain

全部有効化してみる

ああ〜

f:id:frazz:20210605120952p:plain

見切れるくらいなら最初から/proc見ればいいんじゃないかという気持ちになった。

ちなみに

こんな遊び方をしても一回デタッチすると元の出力に戻るので安心してほしい。でも、遊びじゃなくとも恒久的に出力を自分好みにするための編集ファイルがあるほうがなにかと便利なはずだ。探してみた。

haydenjames.io

When you save using W, notice top will display the path to the file it creates to save custom settings.

これだ。Wで保存する。

f:id:frazz:20210605124141p:plain

いえす!ファイルを確認する。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/.c/procps> head toprc
top's Config File (Linux processes with windows)
Id:i, Mode_altscr=0, Mode_irixps=1, Delay_time=2.0, Curwin=0
Def fieldscur=�������ķ��Ŧ���������������������������������������������_`abcdefghij
    winflags=193844, sortindx=18, maxtasks=0, graph_cpus=0, graph_mems=0
    summclr=1, msgsclr=1, headclr=3, taskclr=1
Job fieldscur=�����(��Ļ�@<��)*+,-./012568>?ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij
    winflags=193844, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0
    summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem fieldscur=���<�����MBN�D34��&'()*+,-./0125689FGHIJKLOPQRSTUVWXYZ[\]^_`abcdefghij
    winflags=193844, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=0

うーんなんか若干文字化けしてるけどこれは別問題。

意外と簡素にまとまっていて、filelds managementでいじれる設定がこれを見る限りだとわからない。アルファベットが順に続いてるのはおそらく押して設定変更ができるキーのことを指してるんじゃないかと思う。このファイルをいじってカスタムするよりかは、topの実行中に好き勝手にやってみていいところで保存してくださいってことだろう。ともあれこれでtopを再度使っても自分好みの設定が持ち越されるようになった。デフォルトに戻したかったらファイルを消すだけだ。

s

脱線した。デフォルトでは3秒間隔でもろもろ出力されるけど、このインターバルはsで変更できる。きりがいいのでデータ取るときは1秒とかにすることがある。

f:id:frazz:20210605125915p:plain

n

デフォルトでは動作するすべてのプロセスを表示するようになっているけど、上位だけ表示することもできる。出力が減ると何が割りを食っているのか確認しやすい上に、ファイルに出力するときのデータサイズが軽くなるといったメリットがある。15から10にするときはこんな感じ。デフォルトは0、すなわち無制限である。

f:id:frazz:20210605130827p:plain

V

プロセスをツリー状に表示する。apacheとか使うとこの恩恵が多少わかるかもしれない。なんでVかと言われれば木っぽいからである(覚えられればいい)

f:id:frazz:20210605133940p:plain

m

メモリ使用率をバーで表示する。ここをどうするかは、ちゃんと使用量のデータを数値で取りたいか、その場で直感的に理解したいかで決めればよいと思う。普段使いならこっちのほうがかっこいいよね。

f:id:frazz:20210605131151p:plain

まあかっこよさだけならhtop使えって話ではあるんだけど。

最後に

こういう「出力が見えてから特定のコマンドを打ち込む操作」を「インタラクティブコマンド=対話コマンド」というらしい。manを見つけたので整形して再アップしてみた。テキスト探すの面倒じゃないみなさんはman読んでくれれば十分なんで、これが意味のある仕事かといわれればnoですけど、個人的に編集してて楽しかったので、型は今後につながるんじゃないかなあ、くらいに思ってます。

github.com

ubuntuにdockerをインストール - 2

前回:ubuntuにdockerをインストール - brand new note

先日半分までやってみて後半をやっていなかったのでやりながらメモ。

Ubuntu 20.04へのDockerのインストールおよび使用方法 | DigitalOcean

参考はこれ。まず前回作ったubuntuのコンテナイメージにログイン。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker run -it ubuntu
root@b2421f52ba91:/# 

アプリケーションのインストール

ここでは例としてnodejsをインストールしてる。
何に使うんですかと言われると困る。

root@b2421f52ba91:/# apt install nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package nodejs
root@b2421f52ba91:/# sudo apt update
bash: sudo: command not found
root@b2421f52ba91:/# 

あれ?コンテナはsudoないんだね。いらないねよく考えたら

root@b2421f52ba91:/# apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [297 kB]
root@b2421f52ba91:/# apt install nodejs

これで入った。途中でタイムゾーンを聞かれたのでtokyoとした。
バージョンを確認する。

root@b2421f52ba91:/# node -v           
v10.19.0

コンテナの管理

ログアウト。docker psで実行中のコンテナイメージが確認できる。

root@b2421f52ba91:/# exit
exit
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

普通にexitするとコンテナはシャットダウンするようになってるのでここではなにも出力されてない。-aを追加すると未実行のコンテナイメージも含めてイメージの状態を確認できる。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
83ef15493b01   ubuntu        "/bin/bash"   10 seconds ago   Exited (0) 4 seconds ago              exciting_einstein
b2421f52ba91   ubuntu        "/bin/bash"   22 minutes ago   Exited (0) 8 minutes ago              nifty_wright
e09ccc2414db   ubuntu        "/bin/bash"   29 minutes ago   Exited (0) 29 minutes ago             admiring_sanderson
6d9d8508a9ca   ubuntu        "/bin/bash"   30 minutes ago   Exited (0) 30 minutes ago             charming_swartz
5f9574e596e0   ubuntu        "/bin/bash"   30 minutes ago   Exited (0) 30 minutes ago             admiring_chaplygin
ca738446dafa   ubuntu        "/bin/bash"   6 days ago       Exited (127) 6 days ago               epic_feynman
63ab6e895499   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 recursing_ramanujan
937c1efdf209   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 confident_wu
ab2f5e6adf0e   hello-world   "/hello"      6 days ago       Exited (0) 6 days ago                 flamboyant_mclaren

今気がついたんだけどrunはイメージを新規作成するコマンドなのでubuntuが大量生成されていた。同じものを指定して再利用するには二回目以降で別のコマンドを使わなきゃいけない。凡ミス。

さっきnodejsを入れたコンテナイメージを指定して立ち上げる。docker start。確認するとログインはできていないが立ち上がりはしている。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker start b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b2421f52ba91   ubuntu    "/bin/bash"   27 minutes ago   Up 28 seconds             nifty_wright

ログインにはdocker execを使うようだ。さっきnodejsを入れたイメージを指定して本当に当該イメージに入れているか確認する。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker exec -it b2421f52ba91 /bin/bash
root@b2421f52ba91:/# node -v           
v10.19.0

よさそうなので今度は立ち上がっているイメージを落とすdocker stopを試す。のだが、このままexitするとそのタイミングで落ちてしまうのでデタッチをする。

Dockerのコンテナにログインする際は例えば以下のように実行します。 このあと、 ctrl + d で抜けるとコンテナは終了してしまいます。 コンテナを終了せずにログアウト(デタッチ)するには ctrl + p + ctrl + q を実行します。

root@b2421f52ba91:/# read escape sequence
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ [1]> 

これでいいはず。落ちていないことを確認。

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b2421f52ba91   ubuntu    "/bin/bash"   41 minutes ago   Up 14 minutes             nifty_wright

ここからdocker stop

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker stop b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

大丈夫そうだね。

作ったイメージを削除するにはdocker rm

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker rm b2421f52ba91
b2421f52ba91
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
83ef15493b01   ubuntu        "/bin/bash"   21 minutes ago   Exited (0) 21 minutes ago             exciting_einstein
e09ccc2414db   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             admiring_sanderson
6d9d8508a9ca   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             charming_swartz
5f9574e596e0   ubuntu        "/bin/bash"   51 minutes ago   Exited (0) 51 minutes ago             admiring_chaplygin
ca738446dafa   ubuntu        "/bin/bash"   6 days ago       Exited (127) 6 days ago               epic_feynman
63ab6e895499   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 recursing_ramanujan
937c1efdf209   ubuntu        "/bin/bash"   6 days ago       Exited (0) 6 days ago                 confident_wu
ab2f5e6adf0e   hello-world   "/hello"      6 days ago       Exited (0) 6 days ago                 flamboyant_mclaren

これでnodejsを入れたb2421f52ba91が削除された。

コンテナ内の変更をセーブして新しいイメージを作る

前回いろんなイメージの中から選択して好きなイメージをダウンロードしたけど、逆も可能で、自分が変更を加えたイメージを新たなイメージとして新規生成してdockerhubにアップロードすることもできる。まずdocker commitコマンドを使う。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker commit -m "ekp commit" -a "ekp" 83ef15493b01 spsyk103/new_ubuntu
sha256:1551dcbc8d23045ea00b00d33c5e109ea85f538f5691fbaaaaccbe9950a4560b

-mはメッセージで-aはauthor、作者。ここは任意だと思う。イメージのidと新しい名前を書いて、docker imagesで新しいイメージが手元に作成できたか確認する。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
spsyk103/new_ubuntu   latest    1551dcbc8d23   2 minutes ago   72.7MB
ubuntu                latest    7e0aa2d69a15   5 weeks ago     72.7MB
hello-world           latest    d1165f221234   3 months ago    13.3kB

dockerhubに作ったイメージをアップロード

これをアップロードしてみる。dockerhubはgithubみたいなもので、個人アカウントを作って自分で作ったイメージをインターネット上に保存して管理できる。ログインをした後docker pushを使う。その後、少し待つ。

ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker login -u spsyk103
Password: 
WARNING! Your password will be stored unencrypted in /home/ekp/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ekp@ekp-ThinkPad-X1-Carbon-3rd ~/デスクトップ> docker push spsyk103/new_ubuntu
Using default tag: latest
The push refers to repository [docker.io/spsyk103/new_ubuntu]
0ea9b9f8f036: Pushed 
2f140462f3bc: Mounted from library/ubuntu 
63c99163f472: Mounted from library/ubuntu 
ccdbb80308cc: Mounted from library/ubuntu 
latest: digest: sha256:1f9dfa9100dba94515b4c030beb98cee2b78a552647cee1fc230f57e4b604f6e size: 1150

※dockerhubアカウントの開設は割愛します。簡単なのでこの辺を見てください。

Docker Hub アカウントとリポジトリの作成 — Docker-docs-ja 1.13.RC ドキュメント

自分のdockerhubにアップロードできたことを確認。

f:id:frazz:20210605012417p:plain

以上

今回はここまでです。おつかれさまでした!