2023年7月30日日曜日

Google コミュニティガイドラインに準拠していない

 ずっとこれの意味がわからなかった




どの投稿ですか?
と思って、プルダウンを見たら、下書きになっているものがある
なるほど、これか?
と開いてみたら、非表示になっていた
どうやらわたしは、偽のサイトのリンクを張り付けていたらしい
申し訳ない・・・


2023年7月29日土曜日

Windows WSL2 でnginx + CGI

今回の目的だが、初心に戻るため、

KENT-WEBさんのCGIをDocker+nginx+CGIで動かす

という事を目的にしている

したがって、動かすCGIはPerlとなる

ちなみにCGIとSSIについては以下を参照して欲しい

https://serverkurabe.com/cgi-and-ssi/


誰か同じことやってないかと探してみたら、

こちらに発見

https://github.com/dai65527/nginx_cgi_on_docker

ちょっと編集して自分の環境に合わせて使わせていただくことにしました


以下手順


 WSL2を起動

適当なフォルダ(~/workにしておく)でDockerfileをつくる

~/work/Dockerfile

FROM    debian:buster

RUN     apt-get update && apt-get -y upgrade \
        && apt-get -y install \
            nginx \
            fcgiwrap \
            perl \
            vim

RUN     cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf

RUN sed -i \
        -e s/'\/usr\/lib'/'\/var\/www\/site_a'/ \
        /etc/nginx/fcgiwrap.conf
RUN     mkdir -p /var/www/site_a/cgi-bin

COPY    ./srcs/default /etc/nginx/sites-available/default
RUN     chmod 644 /etc/nginx/sites-available/default

COPY    ./srcs/cgifiles /var/www/site_a/cgi-bin/
RUN     chmod -R 755 /var/www/site_a/cgi-bin/

COPY    ./srcs/entrypoint.sh /
RUN     chmod 755 /entrypoint.sh

CMD [ "/entrypoint.sh" ]

一応解説

nginxとfcgiwrapとperlとvimも入れておく

fcgiwrapとfastcgiに関しては以下を参照

http://www.pasokuma.net/linux/server/nginx/nginxfcgi.html


fcgiwrapのexampleにあるnginx.conf をfcgiwrap.confにコピーすることで

fcgiwrapを動かす準備をする


fcgiwrap.confの/usr/libを/var/www/site_aにしておく


つづいて、nginxの設定を用意する

nginxの動作としては、/var/wwwにサイトをいくつも動作させることが出来る

例えば、/var/www/ownCloudとか/var/www/Corporatoinとか動かすことが出来るのだが、それらの設定を/etc/nginx/sites-availableに置いておいて、

そこのシンボリックリンクを/etc/nginx/sites-enabledに貼ることで、サイトの設定を有効にする


今回は、/var/www/site_aというサイトを動作させる

~/work/srcs/default

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/site_a; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } include fcgiwrap.conf; }



つづいて、~/work/cgifilesと言うフォルダを作り
そこにテスト用のCGIを準備しておく
~/work/cgifiles/perl.cgi
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<h1>Hello perl.cgi !!</h1>\n";
print "<p>AUTH_TYPE = \"$ENV{'AUTH_TYPE'}\"</p>\n";
print "<p>CONTENT_LENGTH = \"$ENV{'CONTENT_LENGTH'}\"</p>\n";
print "<p>CONTENT_TYPE = \"$ENV{'CONTENT_TYPE'}\"</p>\n";
print "<p>GATEWAY_INTERFACE = \"$ENV{'GATEWAY_INTERFACE'}\"</p>\n";
print "<p>PATH_INFO = \"$ENV{'PATH_INFO'}\"</p>\n";
print "<p>PATH_TRANSLATED = \"$ENV{'PATH_TRANSLATED'}\"</p>\n";
print "<p>QUERY_STRING = \"$ENV{'QUERY_STRING'}\"</p>\n";
print "<p>REMOTE_ADDR = \"$ENV{'REMOTE_ADDR'}\"</p>\n";
print "<p>REMOTE_IDENT = \"$ENV{'REMOTE_IDENT'}\"</p>\n";
print "<p>REMOTE_USER = \"$ENV{'REMOTE_USER'}\"</p>\n";
print "<p>REQUEST_METHOD = \"$ENV{'REQUEST_METHOD'}\"</p>\n";
print "<p>REQUEST_URI = \"$ENV{'REQUEST_URI'}\"</p>\n";
print "<p>SCRIPT_NAME = \"$ENV{'SCRIPT_NAME'}\"</p>\n";
print "<p>SERVER_NAME = \"$ENV{'SERVER_NAME'}\"</p>\n";
print "<p>SERVER_PORT = \"$ENV{'SERVER_PORT'}\"</p>\n";
print "<p>SERVER_PROTOCOL = \"$ENV{'SERVER_PROTOCOL'}\"</p>\n";
print "<p>SERVER_SOFTWARE = \"$ENV{'SERVER_SOFTWARE'}\"</p>\n";


Dockerfileに記述した通り、/var/www/nginx/site_a/cgi-binにコピーされ、
http://localhost:8080/cgi-bin/perl.cgiにアクセスすると上記が動く

つづいて、entrypoint.shの準備

~/work/srcs/entrypoint.sh

#!/bin/bash

echo 'starting nginx and fcgiwrap'
nginx
/etc/init.d/fcgiwrap start
echo 'done'

これの役割は、fcgiwrapのstart

Dockerfileの最後でこのentrypoint.shを実行する

以上でフォルダ構成は次のようになる

/home/xxx/work
├── Dockerfile
└── srcs
    ├── cgifiles
    │   └── perl.cgi
    ├── default
    └── entrypoint.sh


いよいよ?ビルドから始める

$ docker build -t nginx_cgi .


続いて起動

$ docker run --rm --name nginx_cgi -d -p 8080:80 nginx_cgi

起動したら、さきほどのhttp://localhost:8080/cgi-bin/perl.cgiにアクセスし、
CGIが起動することを確認する

DockerDesktopを入れていたら、そちらでも確認できる


動くことを確認したら、site_aのフォルダをWSL2にマップし、
VSCodeで編集できるように起動し直す
DockerDesktopでコンテナを削除し、以下でもう一度起動

$ docker run --rm --name nginx_cgi_test -d -v ~/www:/var/www/ -p 8080:80 nginx_cgi

VSCodeを起動し~/wwwにアクセスすると、Dockerの/var/wwwがマップされている状態になる
cgi-binはマップ先に無くなっているので、~/www/site_a/cgi-binを作り、
そこに先ほどのperl.cgiを配置
以下の様に755をつける

$ chmod 755 ~/www/site_a/cgi-bin/perl.cgi

http://localhost:8080/cgi-bin/perl.cgiで表示されることを確認する

kent-webさんのCGIで、今回は、チャットシステムのWindyを動かしてみる

ダウンロードしたZIPを解凍し、WindyフォルダのCGIを~/www/site_a/cgi-binにコピー
index.htmlはkent-webさんのサイトのチャットサンプルから、ソースを表示して丸コピしてつくり、~/www/site-aにコピー
chmodでkent-webさんのページの指示通りに設定
これで動くはずなのだけど、私は先走って、index.htmlからUTF-8化し、
全部のCGIもUTF-8化しまくって文字化けしまくってしまった
まぁ、あれこれやると動くようになるのだけど、丁度こちらのサイトを発見
http://mycc.s33.xrea.com/data/pc/perl_use_utf8.html
こちらを参考にしてあれこれ変えてみたところUTF-8で動くようになりました


申し訳ないけど、どこをどう変えたかは、分かるようにこちらに張り付けるわけにはいきません
KENT-WEBさんは著作権を放棄されているわけではなく、
わたしが修正したからと言って、そのコードをここに張り付けるわけにはいかないのです
ヒントは上記サイトにありますので、そこを参考にしていただきたい

===最後に===
今回は複数のサイトで得た情報をまとめただけで、
わたしが何か新しいことをしたわけでもなんでもありません
情報をWEBに公開されている方々にお礼申し上げます

最近、Javaの仕事が多く、思ったよりJavaが遅いという認識に至りました

WEB技術でクソ重い物をつかわずとも、
CGIの方が早いし開発もしやすいのではないかと、
かつて大変お世話になったKENT-WEBさんのチャットを取り上げさせていただきました

若い人たちに是非ここの内容をトライしていただきたいです
WSL2でなくとも、ご自宅に眠っているラズパイでも動かせると思います
ドメインを取得してDDNSで自宅のサーバを動かすこともできます
つまり、自分で作ったサーバを外部に公開することも出来るという事です
ただし、その場合、LetsEncryptなどで証明書を作ったり、nginxの設定を変えたり、
あれこれやることはあります

しかし、やってみることは勉強になるでしょう
攻撃を食らって、ログを見て絶叫してみるとか、
監視してみるとか、
自分の知識を広げることもつながることでしょう

2023年7月24日月曜日

PocketChip





もう7年前だ
PocketChipというものがKickStarterで始まり、
わたしはそれを購入しました
そして作ったのが上記のLifeGameです
Pico8と言う、昔の8ビットっぽいゲームを作るフレームワークが入っています
言語はLuaです
これを使ってLifeGameを作りました

PocketChipを手に入れた殆どの方は開封の儀とやらしかやらないのですが、
わたしはプログラマですし、Luaも使い慣れています
開封の儀と言うくだらないことはやらず、
いきなりプログラムして動かすのがわたしの流儀です

このガジェットは面白い開発環境になりました
昔はシャープのLinux Zaurusでプログラムしていましたが、同じような事ができます

そう考えると、当時あのようなデバイスを作っていたシャープは本当に凄いものを作っていたと思うのです

しかしながら、この世の中にはプログラマが居ないのでしょうか?

おそらくPocketChipを手に入れ、わたしのようにプログラムした人は居ません
見たことが有りません

ZaurusもPocketChipもプログラミング環境として使う人が殆ど居ません

みなさん一体これを手に入れて何をするつもりだったのでしょう?

ゲームですか?

わたしはゲームプログラマでしたが、ゲームはしません

pico8のようなゲームフレームワーク、ゲームエンジン、WEBフレームワーク、データベースなどを作るにあたって、いつでもプログラムが出来るのはとても便利です

最近だと、WEB版のVSCもあるので、開発環境が作りやすくなりました
やろうと思えばiPadでも開発できます

わたしはプログラムを組むのが大好きです

2023年7月2日日曜日

銅、アルミニウム、鉄の調理具

定期的に似た内容書いてると思いますが、、、

足尾鉱毒事件を知っている方は、
緑青が毒であると認識しているのではないでしょうか

しかし、足尾の件はカドミウムが原因でした

あのいかにも毒々しい緑青と呼ばれる銅のサビは人体に無害との事です

アルミニウムの鍋を使っているとアルツハイマーになると言うのも現在は否定されています

アルミニウムは土壌に多く存在しており、植物にもよく吸収するものがあります

例えば緑茶、ツバキ、紫陽花などで、ドイツでは緑茶のアルミニウムを問題視する声もありました。

緑茶抹茶を含むもので、例えば抹茶クッキーなども対象に調査されましたが、それも2019年あたりに問題なしと発表されています

アルミの鍋も銅鍋も使っていて問題ありません

鉄のフライパンも当然無問題です
そもそも血液のヘモグロビンはヘム鉄です

鉄の赤錆は、体に悪いどころか、貧血防止になります

2023年7月1日土曜日

マイクロプラスチックに関して

https://www.businessinsider.jp/post-271610

わたしの感覚になりますが、土壌や海洋プラスチックは100年でも分解されないと感じています

プラスチックの中でも、ABSや発泡スチロールは紫外線で劣化しやすく、すぐにマイクロプラスチックになり、土壌に紛れ込みます

肥料や野菜種の表面をプラスチック類で覆う加工をしたものもあり、これらもマイクロプラスチック化して、植物の成長に影響する事は知られています
そうして、できた野菜類の中にも混入していきます

プラスチックが紫外線で劣化してマイクロプラスチック化するのは、樹脂の性質のようなもので、自然に帰ろうとしているだけなのですが、微生物の中には、圧倒的な世代交代の速さにより、プラスチックの分解能力を持つ進化を遂げたものが現れてきています

まさかこんなに明確な形で生物の進化を目の当たりにすることがあるとは思いませんでしたが、彼らが地球表面を覆うように分布するまではそれなりに時間がかかるでしょうし、そうなれば屋外でプラスチック製品を使っていると、とんでもない速度で分解される世界がやってきます

ビニールハウス、マルチ、ペットボトル自販機のジュース、車やバイクの外装などもすぐにボロボロになるでしょうし、家の塗装も穴だらけになるかも知れません

マイクロプラスチックの処理方法としては、土壌表面も、海水も濾過して、得られたプラスチックは焼却していくしかないと思っています