Monday, April 19, 2021

webアプリの自動的な再起動の方法(Linux)

(当記事は、こちらの記事の翻訳になります。)

最近、私は自分のビジネスを始めました(今年中に自分の会社を設立する予定です)。そして、Django.で自分のウェブページを作成しました(https://www.suganolab.com)。

まだ、URLやプロトコルのルーティングの問題が残っていますが、今のところうまくいっています。しかし、このウェブサイトには大きな問題があります。

事後分析はしていませんが、特定の間隔でウェブページが接続タイムアウトエラーを返します。djangoなので、次のようにコマンドを実行すると

ps aux | grep manage.py

というコマンドを実行しましたが、まだプロセスは生きています。何が問題なのでしょうか?これまでのところ、根本的な原因を正確に把握する時間がありませんでしたが、もしかしたら

1. インスタンスのメモリ/CPUが、Webアプリが処理するプロセスに耐えられない。

2.Webサイトに大量のアクセスがあると、クライアントとWebサイトの間にロードバランサーがないため、Webアプリに負荷がかかりすぎてプロセスが壊れてしまう。

では、どのように解決すればよいのでしょうか?もしかしたら、(1)インスタンスのスケールアウト(メモリ、vCPU)か、ロードバランサーを追加することが一番の解決策かもしれません。

しかし、私の記憶では、AWS/GCP上でロードバランサーを追加すると余分な費用がかかりますし、今回は、私のサイドビジネスでは固定額の収益がないので、ロードバランサーは必要ありませんでした。サブスクリプションでもない限り、自分のウェブサイトにロードバランサーをホスティングするのは良いアイデアとは思えない。(私の偏見かもしれませんが)

そこで、以下のようなアイデアを思いつきました。

1. https://www.suganolab.com に接続するスクリプトを作成し、2秒以内に接続がタイムアウトするかどうかをチェックする。

2. (1.)が真であれば、djangoウェブアプリを再起動する。

3. crontabにスクリプトを追加し、1分ごとに実行する。サーバが稼働している場合、スクリプトはウェブアプリを再起動しないので、全く気になりませんが、サーバが停止している場合は、ウェブアプリが再起動されます。

以下は、1.と2.のスクリプトです。

res=$(timeout 2 curl https://www.suganolab.com) 
if [ -z $res ]; then 
       echo "$date : ウェブアプリの再起動..." | tee ~/.log 
       rp & 
else 
       echo "$date : web app healthy" | tee ~/.log 
fi

timeoutコマンドを使って、ウェブサイトへのcurlアクセスがタイムアウトしたかどうかをチェックするだけの簡単なスクリプトです。

crontabの内容は以下の通りです。

tobasojyo_gmail_com@manga:~$ crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/1 * * * * /usr/local/bin/rst​

crontabを設定するには、crontab -eというコマンドを使います。

先ほどお話したように、このコマンドは1分ごとに実行されるので、ウェブサーバの問題を素早く検出することができます。

はい、そんな感じです。

ツイッター @keisuganodev

keitaroimo.bandcamp.com 

飲食店への理不尽なクレーム「コロナおわんないよ」

 今朝、近所にVeloce(カフェ)があり、朝の散歩がてらそこにふらっと入ってみた。

ツナと卵のサンドイッチ。あとは、ちょっと朝寒かったのであったかいカフェオレを頼んで、カウンターの真向かいの席に座った。

まったりと携帯を長め、自分のフェイスブック、ツイッター、インスタグラムを確認(だめな大人だが、ビジネスとしてどういう投稿がどういうリアクションか、をモニターしているので仕方ない・・・・)

すると、しばらくして一人の老人(80代?70代?)がカウンターの横の食器をおく場所の近くにある、従業員がカウンターにはいる場所に立って、若いバイトの男の子にすごい剣幕で食ってかかった。

「あそこの席だけどさ、四席になってるよ」

「あれじゃコロナおわんないよ」

一瞬、また老害かよ・・・・・と思いうんざりした。(まあ安易に老害、と判断するのもよくないのだが)若い男の子は

「僕の一存じゃどうにもなんないんで・・・・」

と返し、それに対しおじいちゃんは

「わかってるよ。上の人に言っておいて」

正直、ここのベローチェ単価安いし単価安い店にクレーム入れてもしょうがないだろ・・・・とも思ったが、

おそらくこの老害おじいちゃんの言ってることにも一理あるのだ。

確かに、飲食店がコロナ対策を講じることは現在自助努力であるから、個々の店舗としては、本音としてはあまりコストはかけたくないだろう。

そして、飲食店で混み合ってしまうとどうしてもリスクになる。

これに対しては、確かに「しきつめる」のを放置しておくとそれはリスクになるし、それへの申し訳としてあってもなくても変わらないような気休めのセパレータが横行しているがあれだって大して安心はできない。

だが、一方的に飲食店経営者を責めることもできない。

事実コストがかかる、とか、とくにその対策を講じることに「ご褒美」もなければ講じないことに「制裁」もなければ、僕が経営者ならそのまま放置、もするだろう。(なぜなら損益を計算して損が明確でなければやるメリットがないから)

この場合解決に必要なアプローチは二つある:

(1)政府が飲食店のコロナ防止対応プロトコルを規定し、義務化(支援あり。時短、で解決した気にならない)

(2)コロナ防止設備のための技術開発・支援

まずは(1)政府主導の強制力がなくてはならないのでこれは政府の怠慢ともいえるし、もう一つは(2)ここについてまだ技術開発やプロダクトの供給が追いついていない、お粗末な点だ。

今後もパンデミックが長期化する可能性を考えるとなにかしらイノベーションが必要になる。(日本人は人が創ったものを変数を変えてコピーするのは得意だが、1からものを作るのが本当にできない人口の割合が多い)

逆に言えば、起業家にとっては千載一遇のチャンスであるともいえよう。いまのところコロナ防止のための(とくに飲食店用の)設備は幼稚園のお絵描きレベルのプロダクトしかなく、ここに注力すればうまくいけばものすごい儲けになるのでは・・・・とは思う。

以上、個人的な感想でした(あくまで個人的見解)


😀😀😀😀 以下のリンクもチェック!!!!!!😀😀😀😀😀

@twitter : suganomanga 

keitaroimo.bandcamp.com

https://music.amazon.co.jp/artists/B008RL4YHY?ref=dm_sh_c707-c31e-677d-aaf2-9e806











Sunday, April 18, 2021

個人的な美学、と後悔

 美学、というか意地ではあるんだけど、2008年からいわゆる個人的な音楽活動をやっていて、

今メジャーデビューして有名人になった知り合いのアーティストが何人かいる。

多くの場合、「〇〇の知り合いだぜ!」的なことを言えば自分の価値に箔がつきそうなきがするが、

個人的にそういうのがいやで、

やってない。昔から「素人大学生」という名前で活動していて、

まあ旧来の友人からからかわれたりもしたが、

TVとかに普通にでてるあの有名なアーティストの何人かは、「素人大学生」を知っている。

かつてmixiでやりとりもして、ぼくがそいつの似顔絵を描いてむこうがよろこんでくれたり、

Skypeで誕生日にメッセを送ってくれたりした。

僕はそいつらのことが好きだ。


まあ逆に言えばネットで音楽をやっていた仲間内の中で、彼らはものすごいレバレッジかけて成功したのに、僕は実力不足と変な意地やプライドから、

今のようなていたらく、であるとも言え、

そう考えると自分が惨めにもなってくる。

つーふぇいすくん(彼なら有名じゃないからだいじょうぶだろう)にも悪いことしたなと思ってる。

というより、かつての僕はかなりの被害妄想で偏執狂でアスぺだったし、

周りを否定して自分を守ってた弱いやつだった。

弱いやつだったので、どうしても歌詞が批判的で強くなりがちだし、

妬みもあった。

本当にどうしようもないやつだったと思う。


2021年、あれから10年以上がたって、

僕らの見えている世界は180°変わった。


新しく、前を向いていこう!


@suganomanga

@keisuganorap

https://keitaroimo.bandcamp.com/music












Friday, April 16, 2021

漫画「共産主義の日常」第五巻、Kindleにて発売開始!!!!

 



「あれっ?私の同志、赤すぎ・・・・・?」

Kindle版漫画「共産主義の日常」第五巻、ついに発売開始!

主に2021/4月までの作品を集めたものになります!

共産主義を信奉するロシア人JKのナターシャ・ポミュスキーとその他極端なシンボルをもつ仲間達の、ほんわか日常ストーリー。(ちょいエロあり)

価格はなんと96ページでたったの120円!
😇😇😇


これは読むしかないアルな!!!(革新)

舐達麻の逮捕に関して


漢 aka GAMI に続いて、舐達麻の逮捕。まあ予想はできていた。歌詞とかPVの中で自分は大麻を所持しているよ、栽培しているよということを公に歌っていたわけで、足がつかない訳が無い。

まあ今更でしょ・・・・という感じしかしない。舐達麻は日本のラッパーのなかでは稀に見る(というと怒られそうだけどこれは私のような雑魚の主観なので許して欲しい)「クオリティの高いラッパー」である。クオリティの高いラッパーというのはクオリティの高い製品を提供できるセンスとか実力があるということだ。

僕らはよくみてきたはずだ。フェイクなアーティストを。金とか広告にものをいわせたフェイクな音楽、アメリカをそのまんまコピーしただけのなんの付加価値もないラップ、名指しはしないけどそういうのにうんざりしていたはずだ。

REAL-T とかもそうだがいわゆる若干半グレ系の危ない系ラッパーのもつオーラというか、存在そのものがきちんと(というとおかしいが)凶暴でそれ自体が様式美になっている、アウトローが様式美になっている、やはりそういうラッパーってリアルなんじゃないか、漢akaGAMIってリアルなんじゃないか、

そう考えて、まあリルティーのばあいはちょっとアウトになっちゃったけど原則人を傷つけたりとか殺傷したりとかしない限り、まあ言い方はあれだが「たかが大麻」で刑務所にはいる今の法制度ってどうなのか????とも思う。

が、ここからは完全に私の妄想かもしれないが、

そういう日本の下方硬直的な法制度の狭間でもがいている彼らをある意味でアウトローの殉職者(marthyrdom)とみなすこともできるのかもしれない。

個人的には「きちんと」ぐれているラッパーには好感しかもてないし、それはおそらくは、例えば僕のような世間の秩序やホワイトカラーの虚栄の世界で、型にはまり暴力を封印して生きることしかできない、

法的制裁を恐れて自分に正直に生きられない(そして愚か者が役所でいきりちらす、みたいな)

そういうある意味で去勢された僕たち現代人にはもはや残されていない原始的な魅力っていうか、

そういういわゆる不良の魅力っていうか、

そういうのを彼らには見出すことができ、個人的にはとてもリスペクトできるし彼らの音楽は日本の資産だ・・・・とすら思うのである。

なので、これからも舐達麻には活躍して欲しい・・・・・と一ファンとしては思うのであった。

追記:

一つ残念だな、と思ったのは彼らのような人気グループでさえマリファナ売らないと収益が安定しない、という事実で、こっちがときにラップでビジネスをやろうとする人たちには厳しい現実なのかな.... とも思った。

事実、戦極MCバトルでの賞金も新人漫画賞の佳作なみにしょぼいし、やはり日本でラップの市場というのはパイが小さすぎて本当に一部しか生活できないし・・・・ということなのか?と。

そうすると、やはり海外市場にせめていくしかないのかな、やはり英語に切り替えるべきなのか・・・・・という確信を最近持ち始めた。

https://music.amazon.co.jp/artists/B008RL4YHY?ref=dm_sh_3f9b-429f-4c01-25b6-d428b











僕がどうしてもvimにこだわる理由

 vim、ときくと「は?何この老害」というリアクションをする諸兄も多いのではないだろうか。

このIDEとか自動補完とかが充実した21世紀にvim?お前正気か???と。

たしかに君たちの言いたいことはわかる。

しかしそれでも私は言い続けたい。vimが最強のエディタであると。

これはとくに、Unix系のOS、macとかlinuxで特に顕著である。

なぜvimが最強かというと、

1. モードの概念によりエイリアス(可動操作域)が3倍になる

2. OSと合体していて、OSをIDEにできる

3. コンパイルなど、自分がやっていることをより正確に理解できる

4. 速い

5. 言語に依存しない

6. shellを使う癖がつく

7. 自分でエディタを作る、という習慣がみにつく

------------------------------------------------------------------------

一つ一つ解説していこう。

1. モードの概念によりエイリアス(可動操作域)が3倍になる

まずこれがでかい。というより、vim敬遠者のほぼ多くが日本語入力に依存している。そもそも高等教育までやっていれば英語の読み書きができない、は言い訳にならない。英語でコメントを読み書きするのがデフォルトであればそもそもvimの操作で引っかかることはなくなる。

その前提で、モード切り替えができるということはショートカットがコンテクストごとにあるので総計で3倍になる、ということだ。例えば、

f d というキーの組み合わせは「今いる行のうちはじめに見つけたdという文字まで移動しろ」、ということで

v f d であれば選択モードなので現在位置からはじめにみつけたdまでの領域を選択する

i f d であればインサートモードなので fdという文字列が入力されている... というようなことである。

vi自体がマウスなしで操作すること前提で作られているのでこのモードにより操作の種類が3倍に圧縮されており、できる操作のレベルがマウスを使うのとは遥かに違う。

これは、結局vimのキーバインディングを学習しなければできないので、結局ここでヘタレエンジニアどもがつまづき、自己正当化しはじめる.... ちまたできくvimへの悪口雑言というのは負け犬の遠吠えなのである。

2. OSと合体していて、OSをIDEにできる

これもよく知られているが、vimがコマンドラインで編集できるエディタである以上それはコマンドラインの上に乗っかっているのである。vimではシェル実行モードあり、それはノーマルモードにおいて

:! [command]

で実行するか、もしくは

:.! [command]

を実行するかのどちらかで、前者と後者の決定的な違いは後者はコマンド実行結果をそのままバッファ(バッファというのは今編集している画面という意味)に貼り付けることができるのである。

3. コンパイルなど、自分がやっていることをより正確に理解できる

そもそもIDEなどでボタンポチしてコンパイル、とか、変なGUIにいろいろパラメータ入れて... みたいにしている過程が愚かである。はっきり言ってIDEでの開発はコンドームを20枚装着して性行為をしているのと同じである。そんなの、ないほうがいいに・・・・(女性の方、当方アスペなんどす、すんまへん・・・・)

まあ余談は置いておいて、「自分がいま何をやっているのかを」より直接的に把握するには、結局一番直接的なのはコマンドラインなのであるか、そこに何枚も絵を噛ませるのがナンセンスなのである。それでも確かに業務は回るが、応用が効くという意味ではやはりvim/emacsなどのコマンドラインエディタを使うべきだと思う。(あなたの大好きな Linus TorvaldsもRichard Stallmanも emacs使い)

4. 速い

結局IDE使いはマウスぐりぐりやってばかりになるので開発速度としてはどうしてもvimが有利になる。IDEのより良い点としてはデバッグモードが〜などとのたもううつけものありしが、斯様なたわけにつける薬あらずして、デバッグを要するやうなコードをしたためること自体間違いであり、すべてコンソールで書くこと能わずや。あないみじ。

5. 言語に依存しない

「そうだ!COBOLやってみよう!」と思ったときあなたのIDEはサポートしてますか?また、だとしてもいちいちちまちまプラグインとか入れんの?は?意味なくね?つかなんでそんなコマンドライン開発ならただ apt/brewとかでエンジンいれてそのままコード書いてコンパイルすべきところをそんな大作業になるのかわからん、そこまでしてコード自動補完ありがたいか?ドキュメントに全部書いてあるやろ?だるいねん!!!!!びしぃぃぃぃぃ!

ということです。

6. shellを使う癖がつく

刃牙の環境利用闘法じゃないですがコマンドライン派は基本コマンドラインに引きこもって一生過ごせるわけです。そしてそのときの母国語が、unixならshellなんですな。ですから、当然vimの上でもshellをべらべらべらべらしゃべるわけです。まあインターネッツいじるときはブラウザも使いますけど、まあlynx/w2mもありますしねぇ・・・・(遠い目)

7. 自分でエディタを作る、という習慣がみにつく

これも重要で、vimそのものってあれ自体で完成しているわけではなくvimscriptたくさんかましたり /usr/local/bin配下にいっぱい自分のエイリアススクリプトとかパイソンスクリプトとかいれてそれをvimに呼び出していろいろなことをやるわけでやんす。とくに1000回繰り返しそうな動作であれば確実にそうやって省力化するわけです。(emacsだとマクロですね)

まあそんなかんじで、vimを嗜むとメリットしかないです。

有料エディタ?お主うつけものか?叩っ斬る!控えおろう!!!!!

by 井原西鶴

ってかんじです。

まあ煽りとか抜きにして例えば、こんなユースケースを想像しましょう。

「ワイ、ソースコード鑑賞して技術力をみがくンゴ〜っ。そうンゴね・・・・ワイ意識高いからLinuxのソースコードでも読むンゴ?ンゴ?」

みたいなことを思ったとしましょう。そんなときにIDEでどうやってランダムにソースコードよみますか?

検索して、なんかプラグインとか落とすんですか????(侮)

nnoremap * :Randopen<CR>  
...
nnoremap _ :Prevfile<CR>
nnoremap + :Nextfile<CR>
 
:command! -nargs=? Randopen :call Randopen(<f-args>)
function! Randopen(...)
   if a:0 >= 1
       let result = system(g:script_dir . "randomfile " . a:1)
   else
       let result = system(g:script_dir . "randomfile ")
   endif
   execute "edit " . result
endfunction

:command! -nargs=0 Nextfile :call Nextfile()
function Nextfile() 
 let result = system("navi -n " . @%)
 execute "edit " . result
endfunction

:command! -nargs=0 Prevfile :call Prevfile()
function Prevfile() 
 let result = system("navi -p " . @%)
 execute "edit " . result
endfunction

ちなみにここで呼ばれてる randomfileってのが

#!/usr/bin/env bash
if [ "$1" == "-b" ]; then
   files=$(find . -perm +111 -type f | grep -v .git)
   len=$(echo $files | tr -s ' ' '\n' | wc -l)
else
   files=$(find . -type f -not -empty | grep -v git | grep -v .class | grep -v .png | grep -v .ico | grep -v .jpg | grep -v .PNG | grep -v .gif)
   len=$(echo $files | tr -s ' ' '\n' | wc -l)
fi
#idx=$(echo $((1 + RANDOM % $len)))
idx=$(echo $((RANDOM % $len)))
i=0
target_file=$file
for file in $files; do
   if [ "$i" == "$idx" ]; then
       target_file=$file
   fi
   i=$((i+1))
done
echo $target_file

こちらがnaviスクリプト

#!/usr/bin/env bash
action=$1
if [[ "$action" != "-n" && "$action" != "-p" ]]; then
   printf "\naction missing (-n|-p)\n\n"
   exit
fi
current_path=$(basename $2)
if [ -z $current_path ]; then
   current_dir=$(pwd)
else
   dirname2=$(dirname $2)
   if [[ $dirname2 != $pwd* ]]; then
       dirname2="$(pwd)/$dirname2"
   fi
   current_dir=$dirname2
fi
i=0
pointer=-1
list=$(ls -lt -r $current_dir | awk '{print $9}')
current_dir=$(echo $current_dir | sed 's/\/\.//g')
for x in $list;do
   if [[ -f $x || -f $current_dir/$x ]]; then
       base_cp=$(basename $current_path)
       base_x=$(basename $x)
       if [[ $base_cp == $base_x ]];then
           pointer=$i
       fi
       i=$((i+1))
   fi
done
i=0
for x in $list;do
   file=$x 
   if [[ -f $current_dir/$x ]]; then
       file=$current_dir/$x
   fi
   if [[ -f $file ]]; then
       if [[ $i == $((pointer+1)) && $action == "-n" ]];then
           echo $file
       fi
       if [[ $i == $((pointer-1)) && $action == "-p" ]];then
           echo $file
       fi
       i=$((i+1))
   fi
done

まあようは ボタンの8とシフトキー同時に押すと現在のディレクトリの中のファイルを一覧して、その一覧サイズがマックスの乱数を生成してその乱数のインデックスのファイルをとってくる、つまりランダムにファイルをとってくるんですな。

こういうのは、まあファイル数が膨大で何から読んでいいかわかんないし、とりあえずなんでもいいから出してほしい、というときには便利なアプローチになります。

また、上記エイリアスでは+, _ ボタンで同じディレクトリ上で右のファイル、左のファイルに移動することができます(バッファの呼び出し履歴じゃないんで C-i, C-oとは違う)

まあそんなかんじで自分でエディタを拡張していく、しかもそれも bash/pythonとかでちゃっちゃかつくれるから楽ちんですな?

てなわけで みなさん、vimを使いましょう!(真顔)

はじめは手こずるかもだけど、てだれてくるとすごいことになります!!!!!

twitter: @keisuganodev

あ、あと手前味噌ですがエンジニア?に関係する漫画を描いてます、もしよければ

https://www.amazon.co.jp/dp/B092JFQVF9