私のバイブルはシャープ MZ-40K【44年前】

私はプログラミングで飯を食べ始めて40年現役プログラマーです。

ふとしたきっかけでインターネット見てたら「MZ-40K」を見つけました。懐かしいなー。と思い私がまず最初に購入したパソコン(当時はマイコン)を紹介いたします

現在のパソコンは64ビットパソコンですが、下記のようにCPUの性能は一気に飛躍的に発展していきました

1971年インテル社i-4004  4bit MPU
1974 年モトローラ社MC6800  8bit MPU
1978年インテル社i-8086  16bit MPU

私は、9人家族で生活がすごく厳しい。極貧貧乏でした。

しかし、元気なのに仕事を休みがちで酒浸りで博打好きな父を見てきました。子供に食べるものも食べさせられない生活。いまでいうDVの生活でした。しかし当時のぼくはどん底だったからこそ、這い上がろうとしていまから仕事として伸びるプログラミングの分野で生きていきたいと確信させてくれたマイコンでした。小遣いのない私にとってMZ-40Kは当時確か25000円でしたのである筈もなく、早朝の新聞配達で買いました。私のバイブルマシンです。

プログラムというよりは、16進4ビットを入力しレジスタも2,3?個しかなかったが格納し音を出したりライト表示で感動したおもちゃでした。これをきっかけに偏差値の少し高い工業高校の電子科へ進みプログラムを本格的に学び始めました。

44年たったいまも当時に気持ちは忘れないです。

中学生には、このような簡単なプログラミングでも感動するのかなと思い出せてくれる出来事でした

mac/windowsが影響を受けたはるかに古い無料OS:Unixの歴史

Unixの産声

Unixは1969年AT&Tベル研究所にて、ケン・トンプソンデニス・リッチーらが開発を開始した。当初はアセンブリ言語のみで開発されたが、1973年にほぼ全体をC言語で書き直した。C言語を開発した デニス・リッチー は私が最も尊敬する人物です

wikipediaよりリンク

※こちらの本は、ご本人が改版されたすばらしいバイブル本なのでぜひ手元に置いていただきたい本です。

独占禁止法でUnixがフリーとなった

しかし、AT&Tは通信会社です。Unixは素晴らしいものであり1企業では、独占禁止法に触れると訴えられたので。そこで世界の発展のため無料で公開を行ったことより大学や研究所などの教育機関で広範囲に採用されました。特にカリフォルニア大学バークレー校は改良を行いBSD系統が誕生しました。逆にAT&Tの流れを受け継ぐ UNIX System V は「伝統的なUNIX」(traditional Unix)とも呼ばれる。

現在では多く使われているUnixとしてはmacOSAIX(IBM)HP-UX(Hewlett-Packard)Solaris(SunMicroSystem)などがある(いずれも商用)。また認証を受けていないUnix系としてはLinux(派生OSにAndroid他)やMINIXBSDの派生OS(FreeBSDNetBSDOpenBSDDragonFly BSDなど)があります。

しかし、Unixは肥大化してしまいワークステーションなどの高価なマシンでしか動作しないOSとなっていったのが歴史があります。

パソコンでUnix動かしたいという思い!Linux誕生

そこで、1991年に、当時フィンランドヘルシンキ大学の学生であったリーナス・トーバルズは、当時 Intel 80386 CPU を搭載した32ビットPC/AT互換パーソナルコンピュータが登場していたため、Unixをこの非力なマシンで動作できないかカーネルと呼ばれるコアな部分の実装を行ったのです。

Linuxカーネル・メーリングリスト (LKML) が登場し、だれでもが開発に携われることとなっていき一気に非営利へのパソコンの利用ということで開発が加速されて行きます。

Linuxのフリーを守るためにGNUが発足

LinuxをUnixのように商用とならないようにリチャード・ストールマンは、GNUプロジェクトの最初の声明を1983年9月に行いました。“GNU”という名前は、いくつかの必要に適合するために選ばれました。第一に、それが“GNU’s Not Unix”の再帰頭字語であること。第二に、それが現実の言葉であること。第三に、それを言う(またはうたう)のがおもしろいこと、です。

“free software”(自由ソフトウェア)の“free”は自由に関連していて、値段には関連しません。GNUソフトウェアを入手するのに、代価を払うこともできますし、払わないこともできます。どちらにせよ、いったんあなたがソフトウェアを手に入れてしまえば、それを使う上で4つの特定の自由を享受できることになります。

(1)望むままプログラムを実行する自由。

(2)プログラムをコピーしそれを友だちや同僚にあげる自由。

(3)ソースコードへの完全なアクセスを持ち、プログラムを望むように変更する自由

(4)改良されたバージョンを配布し、それによってコミュニティを建設する自由。(ただでコピーを配ってもよいのです。)

GnuがOSSの普及へ貢献されたことは大きな出来事だったのです

現在のLinuxでの活躍

レンタルサーバでは無料であるLinuxサーバが活躍しております。

世間のインターネットで動いているサーバのOSはLinuxなのです。開発環境もDockerが多く使われます。こちらもLinxであり無料で勉強できますよ

プログラマーであれば、Linuxを使いこなせるスキルが必要ですので、身近に感じて取り組まれてくださいね

aws ec2 への vim インストール方法

dnf install vim-enhanced

root@ip-172-31-56-20 html]# dnf install vim-enhanced
Last metadata expiration check: 0:49:55 ago on Mon 08 Jun 2020 11:01:08 PM UTC.
Dependencies resolved.
================================================================================
 Package         Arch    Version              Repository                   Size
================================================================================
Installing:
 vim-enhanced    x86_64  2:8.0.1763-13.el8    rhel-8-appstream-rhui-rpms  1.4 M
Installing dependencies:
 gpm-libs        x86_64  1.20.7-15.el8        rhel-8-appstream-rhui-rpms   39 k
 vim-common      x86_64  2:8.0.1763-13.el8    rhel-8-appstream-rhui-rpms  6.3 M
 vim-filesystem  noarch  2:8.0.1763-13.el8    rhel-8-appstream-rhui-rpms   48 k

Transaction Summary
================================================================================
Install  4 Packages

Total download size: 7.8 M
Installed size: 30 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): vim-filesystem-8.0.1763-13.el8.noarch.rp 352 kB/s |  48 kB     00:00
(2/4): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  7.3 MB/s | 1.4 MB     00:00
(3/4): gpm-libs-1.20.7-15.el8.x86_64.rpm        349 kB/s |  39 kB     00:00
(4/4): vim-common-8.0.1763-13.el8.x86_64.rpm     22 MB/s | 6.3 MB     00:00
--------------------------------------------------------------------------------
Total                                            19 MB/s | 7.8 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          1/4
  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          1/4
  Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/4
  Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/4
  Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  4/4
  Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  4/4
  Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    4/4
  Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                1/4
  Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/4
  Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/4
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          4/4

Installed:
  gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-13.el8.x86_64
  vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch

Complete!
[root@ip-172-31-56-20 html]# 

dockerメモリ不足 と apache2タイムアウトの対応方法

事象

500のエラー画面で原因がよくつかめない事象となりました

Laravelログは下記が発生

[2021-05-03 00:53:15] local.ERROR: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) {"userId":1,"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1): Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) at /var/www/html/vendor/dompdf/dompdf/src/Css/Style.php:879)
[stacktrace]
#0 {main}
"} 

原因

  • 1つ目の原因は、Laravelログにでておりましたメモリ不足です。
  • 2つ目の原因はapache でのタイムアウトなのでこちらが 500エラーで原因がつかめなくて時間を消費しました

対策

(1) phpinfo.php を作成し、”<?phpphpinfo();?>” をコーディングしました。こちらを表示して調査しました


(2)メモリ不足は、PHP.ini ファイルです。Docker作成済みなので直接vim で追加しました。vimインストールは
apt-get install vim
vim /usr/local/etc/php/php.ini
を行いました。下記変更です


(3)apacheの設定は
vim /etc/apache2/apache2.conf

docker再起動で変更されますのでお確かめください

その他補足

viの使い方は、下記おすすめです

https://blog.codecamp.jp/vim-command

Docker環境なれると、上記はLinux環境設定です

楽ですね。少し前では大変な開発環境ですが、あっさりできるので最近の若い人たちは恵まれてるなーと感じます。

dockerのbuild できなくなった。作成者未記載はできなくなったぞー!

いままでbuild できたのにエラ-になりました

docker Hub の過去の作成者が未記入なものがbuildできなくなっております
その際は設定を変更してください

{
"registry-mirrors": [],
"insecure-registries": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": false
}
}

docker でvim 使いたいですよね

vimとは

ファイルの作成や編集時に用いる、linuxの標準的なコマンド。
linuxで、cuiでのファイル編集時には、まず「vim」を利用することが多いのでの操作は覚える必要があります。
GUIに慣れた人には「iキー」が挿入であったり、編集後の書き込みが「:wq」となっていたり、初めはよくわからないと思いますが慣れれば、苦ではありません。

containerにログイン

・docker container exec -ti コンテナ名 bash

Vimのインストール

OSによってインストール方法が変わる。

・Redhat系

yum install vim

・Debian/Ubuntu系

apt-get update
apt-get install vim

Dockerで不要なコンテナ・イメージの見つけ方

イメージ

$ docker images --filter "dangling=true"

不要なイメージを削除

$ docker image prune

ちなみに、v1.2.5 以前では以下のコマンドで削除していました。

$ docker rmi $(docker images -f "dangling=true" -q)

コンテナ

不要なコンテナ一覧

$ docker ps -f "status=exited"

停止コンテナ一括削除

$ docker container prune

docker 削除(docker-compose.ymlのvolumesセクションに書かれた名前付きボリュームとコンテナにアタッチされたanonymous volumeが削除)

docker-compose down --rmi all --volumes --remove-orphans

downコマンドの特性としては、upコマンドと真逆のことをするコマンドということになる。つまり、upコマンドで作られうるもの(イメージ、コンテナ、ボリューム、ネットワーク)をすべて削除する。やり直しに有効なコマンドなのです

--rmiオプションは、削除するイメージの種類を指定する。allはすべてのイメージ。localはフィールドにカスタムタグのないイメージのみを削除する。--rmiオプションを省略すると、イメージは消されない。

--volumesオプションは、docker-compose.ymlvolumesセクションに書かれた名前付きボリュームとコンテナにアタッチされたanonymous volumeが削除される。

--remove-orphansオプションは、docker-compose.ymlで定義から削除されたサービス用の未定義コンテナも削除される。

git clone でタイムアウト対処方法

PS D:> git clone -b develop ssh://XXX/XXX.git
Cloning into ‘git-renewal-baystars’…
remote: Counting objects: 602770, done.
remote: Compressing objects: 100% (162237/162237), done.
client_loop: send disconnect: Connection reset by peer89 MiB/s
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

このように下記が出る場合は、タイムアウトが原因です

client_loop: send disconnect: Connection reset by peer89 MiB/s
fatal: the remote end hung up unexpectedly

ルーターの設定などで一定時間(早ければ10分程度で)その接続に通信が無いと切ってしまうからです。

この様な環境下で一定時間を過ぎても接続を維持できる様にする方法は

設定するには~/.ssh/configに以下の行を加えます。

ServerAliveInterval 60
ServerAliveCountMax 3

これでうまくいきました

PS D:> git clone -b develop ssh://XXX.net:/web_git/XXX.git
Cloning into ‘git-renewal-baystars’…
remote: Counting objects: 602770, done.
remote: Compressing objects: 100% (162237/162237), done.
remote: Total 602770 (delta 429055), reused 601417 (delta 427825)
Receiving objects: 100% (602770/602770), 5.08 GiB | 7.96 MiB/s, done.
Resolving deltas: 100% (429055/429055), done.
Updating files: 100% (81759/81759), done.
PS D:>

Dockerインストール方法(Windows10)

1.環境・前提
・Windows 10 Home 64bit
・Docker version 19.03.8
・docker-compose version 1.25.4

この2020年8月からは HomeでもDockerがCPU仮想化対応できるWSL2が一緒にインストールできるので超簡単になりました。
2.Dockerってなに?【参考資料】
https://tech-lab.sios.jp/archives/19191
Windows10 HomeでDocker環境を導入する
https://qiita.com/zeffy1014/items/dda78f4ab0449989dfe1
Windows 10 Home で WSL 2 + Docker を使う
https://qiita.com/KoKeCross/items/a6365af2594a102a817b
【環境構築手順】
3.CPU仮想化確認
タスクマネージャ→パフォーマンス→CPU にて仮想化: 有効となっていればOKです。
4.docker for desktop-windows ダウンロード
https://hub.docker.com/editions/community/docker-ce-desktop-windows
参考サイト)
5.Docker Desktop Installer.exe を「管理者」で実行
▼インストール開始前に確認される画面(この状態でOKクリック)
インストール終わったらPC再起動
Docker起動
6.Docer起動後に下記ダイアログが表示された場合、ダイアログ内のリンクから
WSL2インストール
(サイト内の「 download the latest WSL2 Linux kernel からダウンロード可」)

WSL2インストール後に再度Docer起動(startクリック、次へ進んでいく)


無事起動

以上がdockerインストール方法でした

次回はいよいよLinexイメージ構築です

・・・・続く・・・・