アフィリエイト広告を利用しています
検索
<< 2024年04月 >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2024年04月26日

新しい技術による開発 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
JavaScript.jpg
 今日は、朝すぐ起きて、令和3年の経営情報システムの問題を解きました。ボケボケと言うこともあったのかもしれませんが、今まで受験した中で、最低の60点・・・。先ほど振り返り復習をしたのですが、それほど難しい単語はないのですが、単純な部分で選択を間違っています。実力がまだまだということもありますが、当日は頭をクリアにして受験しないと稼げる点数も稼げないかもしれないと感じました。
 中小企業診断士試験の勉強もそうですが、システム開発もそろそろ進めていきたいと思います。遅れに遅れている中小企業診断士の状況から、システム開発に時間を割くことは難しい状況なのですが、ブログでは、今後システム開発で利用する、新しい技術について勉強していこうと思います。

[JavaScriptオブジェクト指向プログラミング]
 JavaScriptは今まで、関数として利用していました。画面から利用する場合は、今後も従来通りに開発をしていくのですが、JavaScriptプログラムから呼び出される、文字操作、数字操作、配列操作などといった機能をもったプログラムは、オブジェクト指向で開発をしていきたいと思います。
 画面から呼び出される関数は、再利用性が乏しく、その画面に特化して作ることが多いのですが、ある目的の機能を持ったプログラムは再利用性が高い場合が多いというのは今までの経験から感じています。しかも、現在利用できるJavaScriptは、JavaPHPに似たような感じで開発が出来るようになりました。

[勉強の素材]
 いつもなら本をすぐに購入するのですが、今回はその必要はないかなって感じています。理由は、インターネットの記事を読んだ範囲の話ですが、Java、PHPでオブジェクト指向プログラミング開発、または知識があれば、開発ができそうだと判断したからです。
 じゃ、何をということで思い出すのが、いつもお世話になっている「とほほ」です。現在は、いろいろなカテゴリーでポータル画面が埋め尽くされていますが、1990年当初は、HTMLとJavaScriptがメインでした。
 私はWebの開発を業務で初めてした言語はJavaScriptだったのですが、そのとき非常にお世話になっており、なじみがあり、使い慣れているということもあり、今回もお世話になることにしました。

[とほほのWWW入門 ]
 とほほのサイトの情報は、以前にもこのブログで御紹介していますが、どちらかというと中級以上の人向けの情報です。理由は、読んですぐに理解できるという記述になっていないからです。初めて業務でWeb系のシステムを作るときにこのサイトの情報を見ながら作ったのですが、わかりにくい・・・。情報自体が最小限で、余計な事が書いていないので、行間を読みながらの開発になります。ただ、一度理解してしまえば、辞書代わりに利用できるので非常に便利です。そういう意味で、このサイトは中級者以上向けサイトだと感じています。

[今後の予定]
 JavaScriptが、JavaやPHPと同じような開発ができたと言いましたが、それは、Classで定義するようになったと言うことです。実は、それ以前からオブジェクト指向でプログラムを記述できたのですが、非常にわかりにくいというか勉強していないので、理解できません。勉強すれば理解できると思うのですが、今まで習得してきた技術スコープから見ると、アウトオブレンジって感じています。重ね重ねいいますが、一度も勉強はしていないんですけれどね・・・。
 ということで、今回は、Classを定義すると言うところから勉強していきます。目次だけを見ると以下のような項目が並んでいます。

クラスを定義する(class)
コンストラクタ(constructor)
フィールド(field)
メソッド(method)
プライベート(#)
スタティック(static)
スタティックイニシャライズブロック
ゲッター(getter)とセッター(setter)
プロトタイプ(prototype)
継承(extends)
親クラス(super)
クラス式


当然、以上のとほほの内容をまとめていくだけでなく、AIを駆使して、いろいろ寄り道をしながらの勉強と言うことになると思います。多分、1〜2ヶ月ブログを書けば、JavaScriptでオブジェクト指向プログラム開発ができるんじゃないかなって想像しています。
 まっ、かかりっきりでやれば、数日だと思いますが・・・。

[あとがき]
 実は、「ゼロからはじめるシステム開発」で何書こうかなって悩んでいました。PHPの製造も、中小企業診断士の進捗が遅れているのが原因で止まっていて、何も報告することができないし、環境については、前回までに、特出すべき事はすべて書いたような気がするし・・・。
 っということで、オブジェクト指向のJavaScriptです。ここで勉強しておけば、スムーズに、開発に入ることができそうです。

 今日は、午前中に、経営情報システムの受験と整理が終わったので、午後は、令和3年経済学・経済政策の受験に進みたいと思います。

 では、また!!!

■とほほのWWW入門
https://www.tohoho-web.com/

2024年04月16日

Ubuntuのアップグレード −Gsudo apt -u upgradeー 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日の起床は、予定通り7:00でした。明日の起床目標は、6:30です。最終的には、5:00に起きたいのですが、寝ることができる時間を考えると難しい状況です。過去問の試験結果もひどい状況だし、もっと、勉強時間を作るようにしないと・・・。
 では、昨日の続きで、今日は、Esudo apt updateからです。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse

Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。



[Esudo apt update]
 昨日までは、Ubuntuの公式リポジトリで今後使いそうなものをインストールしました。今日は、Esudo apt updateから解説するのですが、このapt updateは、@で実施済みです。では、なぜEで再びupdateを行うのでしょうか?
 以下が、Bardからの回答です。

 Esudo apt updateは、Ubuntu アップグレード手順における、追加したリポジトリの情報を取り込むために必要です。

■詳細説明
 B、C、Dのコマンドで universe、restricted、multiverse リポジトリを追加した後、Eのコマンドで再度 apt update を実行することで、これらのリポジトリに含まれる最新のソフトウェアパッケージ情報を取得できます。

 具体的には、以下の情報が取得されます。
・各パッケージの最新バージョン
・各パッケージの依存関係
・各パッケージのダウンロード元

 この情報に基づいて、F以降のコマンドで適切なソフトウェアパッケージのインストールやアップグレードが行われます。

■E を省略するとどうなるか
 E sudo apt update を省略した場合、以下の問題が発生する可能性があります。
・最新のバージョンのソフトウェアパッケージがインストールされない
・必要なソフトウェアパッケージがインストールされない
・依存関係エラーが発生する

 つまり、アップグレードが正常に行われない可能性が高くなります。


このupdate作業なんですが、何かインストールする前そして後に実施しなければならない作業のようです。

[Fsudo apt -y install gdebi]
 次に、apt -y install gdebiはgdebiをインストールするということは分かるのですが、gdebiとはどのようなツールなのでしょうか?以下は、Bardからの回答です。

 Ubuntu アップグレード手順における F sudo apt -y install gdebi は、gdebi パッケージをインストールするコマンドです。

■gdebi パッケージとは
 gdebi パッケージは、.deb ファイルのインストールを容易にするユーティリティです。

■.deb ファイルとは
 .deb ファイルは、Debian パッケージと呼ばれるソフトウェアパッケージの形式です。

■gdebi をインストールする利点
 gdebi をインストールすると、以下の利点があります。
・コマンドラインで .deb ファイルを簡単にインストールできるようになります。
・グラフィカルなインストーラーを使用するよりも高速にインストールできます。
・依存関係を自動的に解決してくれます。
・破損したパッケージの修復にも役立ちます。

■F のコマンドを実行すると、gdebi パッケージがシステムにインストールされ、以下のコマンドが使用できるようになります。
・gdebi <ファイル名>.deb:指定された .deb ファイルをインストールします。
・gdebi --force-bad-name <ファイル名>.deb:名前が不正な .deb ファイルをインストールします。
・gdebi --reinstall <ファイル名>.deb:既にインストールされているパッケージを再インストールします。
・gdebi --purge <ファイル名>.deb:パッケージとその構成ファイルを削除します。

■具体的には、以下のことが可能になります。
・ダウンロードした .deb ファイルをダブルクリックするだけで、gdebi を使用してインストールできます。
・ターミナルで gdebi コマンドを使用して、.deb ファイルをインストールできます。
・依存関係のある複数の .deb ファイルをまとめてインストールできます。


あらかじめインストールしておいたほうが、後々作業が簡単になりそうです。

[Gsudo apt -u upgrade]
 そして、本作業の目的である、アップグレード作業を実施します。以下にアップグレード作業の概要についてのBardからの回答です。

 Ubuntu アップグレード手順における G sudo apt -u upgrade は、システムにインストールされているパッケージを最新バージョンにアップグレードするコマンドです。

■詳細説明
 apt upgrade コマンドは、以下の動作を行います。
・リポジトリに登録されている最新バージョンのパッケージ情報を取得します。
・現在インストールされているパッケージと比較します。
・古いバージョンのものを 最新バージョンにアップグレードします。

■G のコマンドを実行すると、以下のことが行われます。
・main、universe、restricted、multiverse リポジトリに登録されている 最新バージョンのパッケージ情報 が取得されます。
・現在システムにインストールされているパッケージと比較され、古いバージョンのものが 最新バージョンにアップグレードされます。
・アップグレードに必要な 依存関係 も自動的に解決されます。

■G を省略するとどうなるか
 G sudo apt -u upgrade を省略した場合、以下の問題が発生する可能性があります。
・古いバージョンのソフトウェアパッケージを使い続けることになり、セキュリティ上の脆弱性にさらされる可能性があります。
・新しい機能を利用できなくなります。
・バグや パフォーマンスの問題 が発生する可能性があります。
・つまり、システムを安全かつ快適に利用するためには、G のコマンドを実行することが重要です。


このupgrade作業において、updateしているのに、なんでわざわざupgradeするのかという疑問を持つ方がいると思います。私もその一人なのですが、そもそも更新するものが違うようです。updateコマンドは、更新パッケージのリストを更新するのですが、upgradeはパッケージその物を更新します。そのため、upgrade作業を行わないと、パッケージそのものは更新されず、安定面、セキュリティ面で問題が発生する可能性があります。詳細については、Bardは以下の内容で解説しています。

 update コマンドは、パッケージリストを最新の状態に更新するコマンドです。一方、アップグレードは、パッケージを最新バージョンに更新するプロセスです。

■update コマンドのみでは不十分な理由
 update コマンドのみでは、以下の理由で セキュリティや安定性を維持できない可能性があります。
・新しいパッケージがリリースされていない場合: update コマンドは、既にリリースされているパッケージのみを更新します。新しいパッケージがリリースされていなければ、update コマンドを実行しても、セキュリティ上の脆弱性やバグが修正されない可能性があります。
・依存関係の問題: update コマンドは、依存関係を考慮せずにパッケージを更新します。そのため、特定のパッケージを更新すると、別のパッケージが動作しなくなる可能性があります。
・古いバージョンのパッケージが残っている場合: update コマンドは、古いバージョンのパッケージを削除しません。そのため、古いバージョンのパッケージが残っていると、セキュリティ上の脆弱性やバグが修正されない可能性があります。

■アップグレードが必須な理由
 アップグレードを実行すると、以下のことが行われます。
・新しいパッケージがインストールされます。
・古いパッケージが削除されます。
・依存関係が解決されます。

 そのため、アップグレードを実行することで、システムを最新の状態に保ち、セキュリティ上の脆弱性やバグを修正することができます。


以上から、頻繁にアップグレード作業は実施しなければいけないようです。Bardからの提案では、1週間に一度は、アップグレード作業を実施した方が良いと言っています。
 ただ、セキュリティに関しては、リリース直後にした方がいいという回答もあります。それには、当該サイトを頻繁に見なければならないため、難しいといえるでしょう?それを考えると、1週間という周期は最低限守らなければならないサイクルなのかもしれません。

[あとがき]
 以上の作業を実施後、システムをシャットダウン後電源ボタンを押下し、システムを起動すれば、システムのアップグレード作業は完了です。ただ一通り、調べて見て、本番環境においては、1週間ごとにやらなければいけないというのはハードルは高いように感じます。ただ、セキュリティのことを考えると仕方がないのかもしれません。実施時にはアナウンス後、実施した方がよいでしょう?
 今までの解説にはなかったのですが、Copilotは、バックアップ後実施した方がいいといっています。確かにそうなのですが、本番機などのバックアップは容量の関係で難しいといえます。スナップショットなどがとれればいいのすが・・・。
 実施前のバックアップについても、ご検討下さい。

 では、また!!!

2024年04月15日

Ubuntuアップグレード −Bsudo apt-add-repository universe/Csudo apt-add-repository restricted/Dsudo apt-add-repository multiverse− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日の起床は、7時30分でした。昨日より、30分早く起きることができました。明日は、7:00からかな?
 では、昨日の続きで、今日は、Bsudo apt-add-repository universeからです。

@sudo apt update
Asudo apt install software-properties-common

Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。



[Bsudo apt-add-repository universe/Csudo apt-add-repository restricted/Dsudo apt-add-repository multiverse]
 Bsudo apt-add-repository universe、Csudo apt-add-repository restricted、Dsudo apt-add-repository multiverseの実施の理由は、利用することができるソフトウェアを増やすことにあります。まっ、目的が決まっている人はあえてする必要はないかもしれませんが、不確定な運用において、ディスクに余裕があるプロジェクトは、転ばぬ先の杖的に有効した方がいいかもしれません。本日は、ChatGPTからの回答です。

 Bsudo apt-add-repository universe は、Ubuntuのパッケージソースリストに「universe」リポジトリを追加するためのコマンドです。これを実行する理由は以下の通りです:

■ソフトウェアの選択肢の拡大
 Universe リポジトリには、Main リポジトリには含まれていない多数の追加パッケージが含まれています。これにより、より多くのアプリケーションやツールをインストールできるようになります。

■特定の依存関係の解決
 あるソフトウェアをインストールしようとしたとき、その依存パッケージが Universe リポジトリにのみ存在する場合があります。そのため、これを有効にしておくと依存関係の問題を解決できます。

■追加の背景
 デフォルトでは、新しいUbuntuインストールにはMainとRestricted のリポジトリは有効になっていますが、Universe と Multiverse は手動で追加する必要があります。この手順を行うことで、アップグレードや新しいソフトウェアのインストールの際に、より広範囲のパッケージが利用可能になります。
 手順Bは、これらの追加パッケージにアクセスできるようにするため、特に多くのコミュニティサポートされるアプリケーションやライブラリを使用したい場合に重要です。このステップを実行することで、システムの機能や利用可能なソフトウェアの幅が広がります。


ちなみに、Ubuntuで公式に管理しているリポジトリについて、ChatGPTから解説ありましたので、付け加えておきます。

■Universe リポジトリについて
 Ubuntuでは、利用可能なソフトウェアパッケージがいくつかのリポジトリに分けられて管理されています。これらは主に以下の4つのカテゴリに分類されます:

・Main
 Canonicalによってサポートされ、Ubuntuリリースの一部として提供されるフリーかつオープンソースのソフトウェア。

・Universe
 コミュニティによってメンテナンスされるフリーソフトウェアの広範囲なコレクション。Canonicalによるサポートは受けていませんが、数千ものソフトウェアが含まれています。
・Restricted
 サポートが必要なプロプライエタリなドライバー。

・Multiverse
 著作権や法的な制約により自由に使用できないソフトウェアが含まれています。


以上はUbuntuプロジェクトから公式にリリースされたものです。ChatGPTからの解説の通り、mainは、今回のインストール作業により、既に有効になっているのですがUniverseRestrictedMultiverseは有効となっておらず、予め有効にしておいた方が運用面で負荷が軽減されると考えられるので、今回インストール手順に含めています。
 また、公式なリポジトリには、以上の他に、UpdatesSecurityBackportsProposedがあります。Updates、Securityは、今までの手順で有効となっていますが、Backports、Proposedは無効となっています。Backportsは、。特定の新しいソフトウェアを使用したい場合にのみに必要となるもので、当プロジェクトからは除外対象とします。そしてProposedは、まだ正式にリリースされていないアップデートをテストするためのリポジトリです。テスト環境で有効とすることは、ぎりぎり許容できますが、本番環境では、有効にすることは推奨できません。ただ、本番環境と同じ環境でテスト等しないと問題等発生することが考えられることから、やはり、無効のままにしておいた方がよさそうです。

[あとがき]
 いろいろと調べていくとあっという間に、予定文字数を越えてしまいます。ただ、知らないシステムを利用するのは問題があるので、引き続きこのような形で、調べた上で利用するようにしたいと思います。
 続きは、明日引き続き書きます。

 では、また!

2024年04月14日

Ubuntuのアップグレード @sudo apt update/Asudo apt install software-properties-common 〜経営情報システム〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 昨日はお葬式でした。2週間のうちに2回もお葬式があり、その間いろいろな出来事がありました。詳しくは書きませんし、書けませんが、本当に疲れました。
 本日から、通常の生活に戻る予定でしたが、今日起きたのは8時・・・。普通に起きることができませんでした。しばらく、こんな生活が続くのかもしれません。早く元の生活に戻ることができるようにがんばります。
 そんな、今日、令和5年の経営情報システムを受験したのですが、結果72点でした。去年から今年にかけて勉強したのは、Studyingだけです。その状態から、合格点以上というのは、不思議です。去年の試験では、試験直後難しいと感じていましたが、本日解くとさほど難しく感じません。知らない単語がたくさん出てきているのは事実なのですが、知っている単語から導き出すことができます。令和6年中小企業診断士試験勉強開始当初、応用情報技術者試験の勉強をするという発言をブログでしていましたが、その必要はないようです・・・。時間もありませんし・・・。Studyingから拾える単語を100%覚えて、試験では、90点以上を目指したいと思います。
 では、本日は、昨日からの続きで、Ubuntuのアップグレード作業について書きましょう!

[Ubuntuのアップグレード]
 以下がUbuntuのアップグレード手順です。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。

では、@から順番に解説をしていきましょう!

[@sudo apt update]
 @は、以下の理由により、アプリケーションをインストールする場合など、何かシステムに変更を加える場合、必ず行います。今回は、Copilotに解説をしてもらいましょう!

■パッケージリストの更新
 apt updateは、Ubuntuパッケージリストを最新の状態に更新します。
パッケージリストには利用可能なパッケージとそのバージョン情報が含まれています。
アップグレード前に最新の情報を取得することで、正確なアップグレードが可能になります。
■依存関係の解決:
 アップグレード時には、新しいパッケージやバージョンに対する依存関係を解決する必要があります。
apt updateを実行することで、依存関係を正確に特定し、適切なパッケージをダウンロードできます。
■セキュリティと安定性:
 最新のセキュリティパッチや修正が含まれたパッケージを利用することで、システムのセキュリティと安定性を向上させます。
したがって、apt updateはアップグレードプロセスの前提条件として重要です。この手順を実行することで、アップグレードがスムーズに進行し、問題を最小限に抑えることができます。


これは、システムに変更を加える以外にも、習慣的にやった方がいいかもしれません。

[Asudo apt install software-properties-common]
 これは、今までのアップグレード作業の最中に実行したことがないコマンドです。アップグレードの最中に、エラーになることがありましたが、もしかしたら、この処理を実行していなかったため、エラーになっていたのかもしれません。今回も、Copilotに解説をしてもらいましょう!

 sudo apt install software-properties-commonは、Ubuntuシステムでソフトウェアリポジトリの管理に必要なパッケージをインストールするコマンドです。具体的な理由を説明します。

■ソフトウェアリポジトリの追加
 software-properties-commonは、新しいソフトウェアリポジトリを追加するためのツールを提供します。
 リポジトリを追加することで、新しいパッケージやアップデートを取得できるようになります。

■PPA (Personal Package Archive) の利用
 PPAは、Ubuntuユーザーがサードパーティのソフトウェアをインストールできるようにする仕組みです。
 software-properties-commonをインストールすると、PPAを追加できるツールが利用可能になります。

■システムのアップデート:
 インストールされているパッケージを最新の状態に保つために、software-properties-commonをインストールすることが推奨されています。


ちなみに、PPAとは、Personal Package Archivesの略称で、個人や開発チームが自分たちのソフトウェアをUbuntuユーザーと共有するために使用する、Launchpad.netにホストされるリポジトリのことです
 冗長的に解説すると、以下のような特徴があります。以下は、Bardからの解説です。

 PPA は 、Ubuntu用のソフトウェアパッケージを配布するためのリポジトリです。
 公式リポジトリに含まれていない最新バージョンのソフトウェアや、公式リポジトリでは提供されていないソフトウェアを入手するために利用されます。

■PPAの主な特徴:
・最新バージョンのソフトウェアを入手できる
 公式リポジトリよりも早く、最新バージョンのソフトウェアを入手できます。
・公式リポジトリでは提供されていないソフトウェアを入手できる
 公式リポジトリでは提供されていない、特定のニーズに合わせたソフトウェアや、開発中のソフトウェアを入手できます。
・簡単にインストールできる
 sudo apt-add-repository コマンドを使用して、簡単にPPAを追加できます。
・簡単に削除できる
 sudo apt-remove ppa: コマンドを使用して、簡単にPPAを削除できます。

■PPAの注意点:
 公式リポジトリよりも安定性が低い: PPAは個人が作成・管理しているため、公式リポジトリよりも安定性が低い場合があります。

・セキュリティ上のリスクがある
 PPAには、公式リポジトリにはない脆弱性を含むソフトウェアが含まれている可能性があります。
・すべてのディストリビューションで利用できるわけではない
 一部のPPAは、特定のUbuntuディストリビューションのみを対象としています。


 ちなみに、Launchpad.netとは、ソフトウェア開発者向けのWebサービスです。ソフトウェア開発のプロジェクトを管理したり、ソフトウェアパッケージを配布したり、他の開発者と協力したりすることができます。

[あとがき]
 長くなってしまったので、今日はここまでとさせていただきます。
 今日の更新は、遅い時間になってしまいましたが、明日からは、できれば、昼間に更新したいと思います。

 話は変わり、最初の話に戻りますが、令和5年の経営情報システムの試験ですが、当日、目がチカチカしかなり体調が悪い状態でした。そのときは、前日一夜漬けしようとしたつけだと思っていましたが、後日もしかしたら、コロナかもしれないということが分かりました。
 そんな体調で去年受験したのですが、経営情報システムの点数が合格点以下だったのは、その体調のせいだったのかもしれません。ただ、経営法務は受かったんですよね・・・。まだ、経営情報システムのほうが自信があったのですが・・・。まっ、どっちにしろ、1次をまた再受験しなければいけないので、がんばります!

 では、また!

2024年04月10日

Ubuntuをupgradeする 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
UbuntuUpGrade.png
 今日は最悪な日です。予定外なことがたくさん出てきている中、急いでいろいろなことをしなければならないのですが、ブログを作るために、Ubuntuのアップグレード作業をしたのですが、2時間以上かかった上に、録画していたビデオファイルが消えた・・・。
 脆弱なマシンが本当に恨めしく思えます。ただ、グチをいっていても仕方がないので、ここから、急がず慌てず慎重に、いろいろと進捗を進めていきます。
 っということで、作業のビデオファイルは残すことができなかったのですが、今回、インストールしながら、同方法について、ChatGPTBardCopilotにいろいろ質問をして、正しいと思える方法が確立できたので御報告します。

[Ubuntuをアップグレードする]
 以下が、ChatGPTが推奨している手順に、自分の考えで修正した手順です。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。


ChatGPTが推奨している点と違うところは、以下の2点です。

Gsudo apt -u upgrade
Hshutdown -h now


ChatGPTは、Gの-uは不要だと言っていましたが、オプション-uをつけました。去年作った手順書も-uを付けています。理由については、おって解説しましょう。
 続きまして、Hなのですが、ChatGPTはカーネルのバージョンアップが行われるなら分かるが、そうで無いなら不要だと言っています。ただ、今までの経験で、upgrade実施後キーボードからの入力がおかしくなったりしたことがありました。そんな経験から、Hのコマンドを実施するようにしています。なお、去年の手順書では、rebootでしたが、今回は、shutdownコマンドを実行するようにしています。実は、rebootコマンドでもキーボードからの入力がおかしくなったと言う経験からです。
 では、そんな違いがあるのですが、項番@から順をおって解説していきましょう!

[あとがき]
 っ思ったのですが、長くなったので、本日は、ここまでとさせていただきます。

 今回、ChatGPT、Bard、Copilotに同じ質問をしながら、インストール作業を進めたのですが、システムについては、ChatGPTが強いって言う印象です。次に、Bardでしょうか?聞いた内容で矛盾があった場合、Bardはこう言っているんだけれど、ChatGPTはどう思うって聞くと、それについて、的確に回答してくれます。
 昨年のアップグレードに関するリポートなのですが、インターネットから自分で情報を集めたものでした。今回の手順と比較して、どっちが合っているのでしょうか?Ubuntuは、自分で作ったシステムではなく、その詳細まで把握していないので、今回は、AIを信じてブログを更新しました。もし、何かご意見がございましたら、ご連絡下さい。
 なお、同インストール作業の状況は、Xserverの作業を録画したモノで作成し公開したいと思います。

 では、また!

2024年04月05日

現状と今後 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
StartUp.jpg
 久しぶりの更新です。
 現状の話と、今後について話しましょう!

[現状]
 現状あまり開発は進んでいない状況です。本日までに、製造したクラスは以下の通りです。

・DB関連クラス
・データクラス
・配列クラス
・ディレクトリクラス
・日付クラス
・文字列クラス
・ファイルクラス
・ファイルアップロードクラス
・ファイルダウンロードクラス
・ファイル・ディレクトリ特定メソッド
・数値クラス
・時間制限管理クラス
・ファイルサマライズクラス
・ユーザ管理クラス

 今後作る予定のクラスは以下の通りです。

・メール管理クラス
・システム管理クラス
・セキュリティ関連クラス
・クライアント管理クラス
・URL管理クラス


今後作る予定のクラスの個数は、それほど多くはないのですが、Prototype EVEで使用していた関数の中身を見ると、それなりに時間がかかりそうです。

[今後の予定]
 今まで、予定していたスケジュールは以下の通りです。

01月 クラスの製造
02月 クラスの製造
03月 Yahooダウンロード処理の製造
04月 クローニングデータ抽出条件登録・修正・削除処理の製造
05月 Yahooデータ抽出処理の製造
06月 クラス関連の見直し
07月 クラス関連の見直し
08月 ユーザ管理システムの製造
09月 権限管理システム製造
10月 メッセージ管理システムの製造
11月 パラメータ管理システムの製造
12月 ログインシステム
01月 ファイル・フォルダ管理システム
02月 コンテンツ管理システム 


3月の予定はまだ未着手で、現在は4月です。3〜5月までは1つのシステムとして稼働し、クラスの製造が終わりさえすれば、1カ月間ぐらいで製造可能かなとも思うのですが、予定を変更することにしました。

[起業チャレンジ!覆面ビリオネア!]
 理由は、ブログ「システムエンジニアから見た社会」で書きました、「起業チャレンジ!覆面ビリオネア」です。この中で1つ心に刺さる言葉がありました。それは、需要がないところに何を持って行っても、成果はないということ・・・。まっ、当たり前なんだけれど、なんだか、目から鱗ですよね・・・。それを、聞いた瞬間、開発の手が止まりました。 そろそろ、インカムがないとまずいかなって感じになってきています。そこで、いろいろ始めたのですが、一番現実的な方法としては、システム販売です。それには、いくつか方法があるのですが、需要なんて考えていません。作れば、誰かがほしいって言ってくれるんじゃないかなぐらいで考えていました。
 システムを作るということは、それほど簡単ではなく、それなりに時間がかかります。ビジュアルプログラミングなど、現在いろいろ便利なプログラミング手法が出てきているのですが、それは、財務システムなど既に誰が作っても同じになるようなありふれたシステムです。もし、画期的な製品で利益を得ようとするなら、従来の開発手法しかないでしょう?それを考えると、作って売れないから次といった感じで作った場合の、数カ月というタイムロスは厳しいものがあります。

[中小企業経営政策]
 中小企業診断士の勉強をしていますが、いろいろ中小企業を後押ししてくれる団体があります。以下が主に、支援してくれる組織です。

・商工会議所
・中小企業基盤整備機構(中小機構)
・よろず支援拠点
・ワンストップ相談窓口Plus One


調べてみると分かりますが、意外と金銭面での支援は多いのですが、起業そのものの相談に乗ってくれる団体って多くはないようです。
 ソフトウェア開発って、多くの人がお金がかなりかかるモノって考えているようですが、実は間違っています。システムを作れる人からすると、パソコンさえあれば、システムは作れます。それ以外、食費、光熱費等々が必要なのは確かですが、それは、ソフトウェア開発をしていなくても、かかる費用なので、起業という面では無視していいと思います。起業し、組織を大きくしようとする段階では、多額のお金が必要になりますが、当分は不要でしょう?
 以上は、そんな人に必要な相談窓口です。中小企業診断士試験が終わってからになると思いますが、相談にいきたいと思います。

[あとがき] 
 システム開発において、需要のあるシステムを作るという方向性は出たのですが、ただ、できるといって信じる人はまずいないでしょう?それを、考えると、まず、EVEシステムを作るのもありかなって、ブログを書きながらそう感じました。
 当初、Prototype EVEを再利用しながら、徐々にEVEシステムへ移行しようと考えていましたが、それもどうかなって現在方向性がぐらついています。
 ただ、今このブログをつけている現在は、少なくても、4月いっぱいは、中小企業診断士の勉強中心の生活にしたいと思っています。

 起業する上で、2つ必要なものがあります。それは、起業するためのスキルと、経営のノウハウ・・・。経営のノウハウを形あるモノとして取得するための、準備を4月いっぱいで目途をたてたいと考えています。5月以降はどうするのかは、これから考えたいと思います。

 では、また!


■ビジュアルプログラミングの特徴について(QUREOプログラミング教室)
https://qureo.jp/class/blog/blog-14908#:~:text=%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%E3%80%81%E5%9B%B3%E5%BD%A2,%E3%82%84%E3%81%99%E3%81%84%E7%82%B9%E3%81%8C%E9%AD%85%E5%8A%9B%E3%81%A7%E3%81%99%E3%80%82

2024年03月28日

本番環境を準備する −準備編@− システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ネットワーク.jpg
 本日は、昨日の続きで、Ubuntuのインストール後の設定作業になります。
 本日は、下記の項番Aからになります。

@rootへのパスワード設定
Aネットワークの設定
BUbuntuのアップデートの実行
Cネットワークツールのインストール



[Aネットワークの設定−ネットワーク設定ファイルを見つける−]
 今回の作業すべて動画に残したのですが、開発環境を一般の方に知られたくなかったため、普段の環境とは違うものを設定しました。そのため、開発環境を最新にするためには、Ubuntuがレポジトリに用意してくれている、最新パッケージをネットワーク経由で取得しなくてはいけません。そのため、ネットワークを再設定しなくてはいけないのですが、意外と大変・・・。理由は、Ubuntuでは、インストラーに入っている設定は、最小限なモノらしく、ifconfigとか通常利用しているコマンドが利用できない。そこで、いろいろ調べ、ネットワークの設定ファイルを直接いじることにしました。手順としては、以下の通りとなります。
 まずは、ネットワークを設定しているファイルを開きます。

cd /etc/netplan/***********.yaml
#sudo vi ***********.yaml


設定ファイル名が、「***********.yaml」となっていますが、これは、バージョンにより違うので、以上の記述となっています。それと、Ubuntuでは、「/etc/netplan/」には、***********.yamlファイルしかありませんでした。他の、ディストリビューションでは、Copilotによると、場所とか違うが、拡張子は、yamlだそうです。まっ、find等で見つけるなどして、当該ファイルを探して下さい。

[Aネットワークの設定−ネットワークファイルの設定を変更する−]
 次に、特定したファイルをviで表示後、設定していきます。


network:
ethernets:
ens33:
addresses:
- xxxx.xxx.xxx.xxx/xx・・・@
nameservers:
addresses:
- xxx.xxx.xxx.xxx・・・A
search:
- pro2grammer.com
routes:
- to: default
via: xxx.xxx.xxx.xxx・・・B
version: 2


 上記がネットワークを設定する拡張子yamlファイルです。表示後は、以下の内容で@、A、Bを修正します。

@当該サーバーのIPアドレスを設定します。
ADNSのネームサーバーのIPアドレスを設定します。
B当該サーバーが所属するデフォルトゲートウェイを設定します。

上記設定後、上記内容を保存し、ネットワークを再起動します。

#sudo systemctl restart systemd-networkd



[BUbuntuのアップデートの実行]
 次に、Ubuntuのアップデートを実行します。UbuntuはDebian というディストリビューションから派生した製品です。そのため、以下のコマンドは、Debian系のディストリビューションは、多分同じです。

#sudo apt update


以上のコマンドを実行することにより、リポジトリに公開されている最新のモジュールを利用することができます。

[Cネットワークツールのインストール]
 最初にネットワークを修正するのに、普段利用しているコマンドが利用できませんでした。それでは、普段使いのコマンド等を利用するため、パッケージをインストールします。

#sudo apt install net-tools


実はここで苦労しました。理由は、以前は、net-toolsではなく、network-toolsだったらしいのです。Copilotだっけかな?network-toolsをダウンロードして下さいと回答を得てからダウンロード作業を開始したのですが、network-toosがダウンロードできない。そのためダウンロードをしようとしたときの、エラーメッセージを紹介し何回問い合わせても問題が解決できず、結局、2021年1月までしか更新されていない、ChatGPTに聞いたところ、最新のバージョンは、network-toolsではなく、net-toolsだと言う回答を得て問題が解決されました。
 Copilotって、インターネットにつながって日々更新されているはずなんですけれどね・・・?よく考えたら、Bardに聞くの忘れている(笑)。

[あとがき]
 以上で、システムを構築する前作業は完了です。これから、OSを最適な環境にしてから、EVE、Prototype EVEシステムが動作する環境を構築していきます。

 では、また!!!

2024年03月27日

本番環境を準備委する −環境調査編@− システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
vmware-s.png
 今日の午後は、Ubuntuの本番環境構築の調査をしていました。
 昔と違い、インターネットでいちいち調べるのではなく、ChatGPTCopilotBardから聞きたい情報を聞くことができます。
 ただ問題が・・・。

[システム構築におけるAIを使用する場合の問題点]
 システム構築におけるAIを使用する場合の問題点は、Ubuntuひとつにしても、いろいろなバージョンがあり、バージョンによりコマンドやパッケージが違うということです。そのため、教えてもらったコマンドをそのまま実行しても、正常終了しないケースがあります。それと、正常終了した場合でも、情報が古いなどの理由により、ディストリビューション開発者側の意図に沿っていない設定になっている可能性があります。

[対策]
 そんな問題点への対策ですが、今回、実行したコマンドをすべてメモをしました。ChatGPTは、2022年1月までの情報で、直近更新される予定はないので、CopilotまたはBardに最新の環境において、正しい設定かどうか後日聞くことにしました。聞くに際しては、バージョンとか環境について詳しく解説してからのほうがいいと思われます。
 めんどくさいとブログをつけながら思ったのですが、よく考えたらインターネットに公開されている情報も正しいかどうかわかりませんもんね?それを、考えれば、聞けばすぐに答えてくれて、間違っていれば訂正してくれる、AIの方がいいような気がします。

[今日の作業]
 今日の作業は、以下の通りです。

@rootへのパスワード設定
Aネットワークの設定
BUbuntuのアップデートの実行
Cネットワークツールのインストール

では、順をおって解説していきましょう!

[@rootへのパスワード設定]
 以前も話しましたが、インストール時にrootのパスワードは設定できません。そのため、インストール時に作ったユーザーでログイン後以下のようにパスワードを設定します。

#sudo passwd root


以上のコマンドを実行すると、ログインユーザーのパスワードを聞いてきますので、入力後、rootのパスワードと確認用パスワードを入力します。
 以上でrootのパスワードの設定は完了です。

[rootでログインを許さない理由]
 Ubuntuではセキュリティレベルを高めるために、sshからは、rootでのログインはさせません。その理由はログから誰がどのような作業をしたのか知るためです。rootでログインを許した場合、複数で開発するプロジェクトでは誰が何をしたのか後で知ることができません。加えて、ウイルス等に感染した場合、ユーザーのパスワードが窃取された場合でも、rootでのログインを許していなければ、不正な行為をする時間を遅らせることができ、その間に、対策を取ることができるかもしれません。

[それでもrootでログインできるようにしたい!]
 それでも、rootでログインし作業をしたいというニーズがあります。私のように1人で開発している場合は特にです。現在は、WinSCPで開発をしていますが、そのWinSCPのユーザーは、インストール時に作成したユーザーです。そのため、作業内容に制約があります。
 Prototype EVEはApache権限ですべて実行するため、開発環境はすべてApacheへ所有権を移譲しているのですが、その移譲している作業領域でファイルなどを保存しようとするとエラーになります。そのエラーを出さない方法もあるのですが、その場合、ファイルの保存日付が更新されません。
 インストール時に作成したユーザーにApacheグループを付与しても同じでした。だから、root権限がどうしてもほしいのです。そこで、今回、いろいろと調べてみました。そうしたら、ChatGPTが、しぶしぶですが、以下の方法を教えてくれました。その場合は、以下のファイルを、viで開きます。

#sudo vi /etc/ssh/sshd_config


表示したファイルへ以下の1行を追加します。

PermitRootLogin=Yes


PermitRootLoginという行を探したのですが、説明文はあるのですが、該当するものはありませんでした。そのため私は、PermitRootLoginを解説していると思われる33行目の下に、以上の行を追加しました。
 追加後sshサービスを再起動します。

#sudo service ssh restart


以上で、rootに関する作業は完了です。

[あとがき]
 長くなってしまったので、本日はここまでとさせていただきます。

 思った以上に作業に時間が取られてしまいました。ただ、今まで開発で苦労していた部分が解消できて、うれしいです。しかし、現在は非推奨な開発方法です。理由は先ほど解説した通りです。ただ、もし1人で開発する機会がございましたら、ご利用ください。

 では、また!!!

2024年03月21日

Ubuntuをインストールする −プロファイルの設定〜パッケージの導入− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 あともう少しで、Ubuntuのインストールの解説も終了です。今まで通り、トリビア的な知識も織り交ぜて解説致しますので、おつきあい下さい。
 今日は、項番Hのプロファイルの設定からです。

@GMU GRUB version 2.86
A欠番
B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定

Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定
Kパッケージの導入



[Hプロファイルの設定]
 以下がプロファイルの設定画面の概要なのですが、順に解説していきましょう!

1)Your name      □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
2)Your server name   □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
3)Pick a username   □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
4)Choose a password  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
5)Confirm your password □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□


 1)では、あなた自身の本名またはハンドルネームを入力します。この項目は任意に設定できます。
 2)はサーバー名を入力します。Webサーバーを構築する場合、ここで指定するサーバー名が、URLの一部となるので、その点を考慮に入れ名前を入力して下さい。なお、入力は小文字のみです。
 3)では、ログインするときのユーザー名を入力します。Ubuntuでは、rootユーザーはここで作成するユーザーでログイン後に有効にします。ここで作成するユーザーが、rootユーザーを有効にするまでの、インストール作業者が自由に利用できる唯一のユーザーとなるので、紙などにメモして忘れないようにして下さい。
 4)5)では、パスワードを設定します。4)でパスワードを入力し、5)は確認用パスワードを入力します。基本、自分が忘れることがない、大文字、小文字を組み合わせた英数字と記号で作成し、10文字前後で作る方が良いでしょう!パスワードなので、紙などに残せないので、記憶に残りやすく、かつ、セキュリティの高いモノにしなくてはなりません。ちなみに、総務省からは、一度設定したパスワードは変更しなくていいという案内が出ています。それは、2度目、3度目に再設定するパスワードは、一度目に設定したパスワードの一部を変更する、または平易なパスワードになる可能性があるためです。実際の業務では、セキュリティの高いパスワードを定期的に更新するのが望ましいです。

[Ubuntu Proアクティベーションの実施]
 ここでは、有償サービスの選択メニューになります。

 Ubuntu Proは、Canonicalが提供する有料のサブスクリプションサービスです。このサービスは、Ubuntu Serverのエンタープライズ向けバージョンであり、以下の特徴を提供します:
❶セキュリティとカーネルアップデート
 Ubuntu Proは、セキュリティパッチとカーネルアップデートを優先的に提供します。これにより、システムのセキュリティと安定性が向上します。
❷FIPS 140-2認証
 Ubuntu Proは、米国連邦情報処理標準(FIPS)に準拠した暗号モジュールを提供します。これは、セキュリティ要件の厳しい環境で必要とされます。
❸AWS、Azure、Google Cloudとの統合
 Ubuntu Proは、クラウドプロバイダーとのシームレスな統合をサポートします。
❹Landscape: Ubuntu Pro
 リモート管理ツールであるLandscapeへのアクセスが含まれています。これにより、複数のサーバーを効率的に管理できます。
❺エンタープライズサポート
 Ubuntu Proは、24/7のエンタープライズサポートを提供します。


 注目する点は、❷FIPS 140-2認証です。これ、情報処理安全確保支援士の試験でよく見かける暗号に関する記述です。
 そして、❺なのですが、これは、Ubuntuからの技術的なサポートに関する記述になります。Ubuntuは多くのLinux製品と違い、ディストリビューション提供元からの手厚い保守サービスが用意されています。料金的に10万円/年以下と他のサービスと比較するとリーズナブルな料金体系となっているので、もし、業務で利用する場合、このサービスに入った方がいいでしょう?

[SSHの設定]
 SSHをインストールする画面も用意されています。SSHは、インストールサーバーと保守用クライアントとの間をセキュアな通信を提供します。インストール以降複数の作業者で分担し作業をする場合、ここでSSHをインストールした方がいいかもしれません。私は、1人で使うので、ここでは、スキップし、次の作業に移ります。

[Kパッケージの導入]
 この項目は、昨日までなかった項目で、参考にしているインストール動画で改めて確認できた画面です。
 ここでは、無料で利用できるパッケージの一覧が表示されます。Copilotに一部になりますが、どんなパッケージがあるのか解説してもらいましょう!

microk8s: 軽量なKubernetesクラスタを簡単にセットアップできます.
nextcloud: オンプレミスのファイル共有とコラボレーションプラットフォーム.
wekan: オープンソースのタスク管理ツール.
docker: コンテナ化されたアプリケーションを実行するためのプラットフォーム.
powershell: Microsoft PowerShellのLinux版.
wormhole: ファイル転送のためのエンドツーエンド暗号化ツール.


以上は、一部で20以上のパッケージを利用可能なようです。もし、ディスク容量などの問題によりインストールに悩むなら、後でもインストールすることが可能です。私は、運用後少しずつインストールしていくことにします。

[あとがき]
 家にサーバーを構築する場合、クラスタリング構成にしたいと考えています。だから、最初の項目のパッケージなどは魅力的ですね?
 気を付けなければならないのは、特異なパッケージを利用した場合、後日サポートが受けることができなくなる可能性があるという点です。当初はデフォルトで設定した方がいいでしょう?

 以上で、Ubuntuのインストールは完了です。これから、各パッケージのインストールに移ります。現在動画の製造もしていますので、文章で分かり難いという人がいましたら、そちらで確認してください。

 では、また!

■総務省から「パスワードの定期変更は不要」と発表|安全なパスワード管理・設定方法を紹介(GMOトラストブログ)
https://blog.trustlogin.com/articles/2018/20230518

2024年03月20日

Ubuntuをインストールする −ストレージの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
ふきのとう.jpg
 本日も、Ubuntuのインストールに関するリポートです。本日は、項番Gストレージからです。

@GMU GRUB version 2.86
A「物理コンピュータと同じようにUbuntuをインストールをします。完了してオペレーティングシステム起動後に、[インストールを完了しました]をクリックして下さい。」
*CTL+ALTキーを押して、マウスカーソルを解放します。

B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定
Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定



[Gストレージの設定−初期設定−]
 以下がストレージの初期設定の画面です。

Guide storage configuration
Configure a guided storage layout,or create custom one.
(×)Use an entire disk
 [/dev/sda local disk 20.000G]
 [×]Set up this disk as an LVM group
  [ ]Encrypt the LVN group with LUKS
( )Custom storage layout


ここで知らなければならないのは、WindowsLinuxのストレージの管理方法の違いです。WindowsとLinuxの違いについて、本日は、ChatGPTに解説してもらいましょう!

 WindowsとLinuxのディスク管理にはいくつかの違いがあります。以下にそれらの主な違いを示します。

❶ファイルシステム:
・Windows
 NTFS (New Technology File System) がデフォルトのファイルシステムですが、exFATやFAT32もサポートされています。NTFSはセキュリティやパフォーマンスの観点から設計されています。
・Linux
 Ext4 (Fourth Extended File System) が一般的なデフォルトのファイルシステムですが、他にもXFS、Btrfs、およびFAT32やNTFS(サードパーティーのドライバーを使用して)などが使われます。Linuxは複数のファイルシステムをサポートしており、選択肢が豊富です。
❷ディスクのパーティション管理
・Windows
 ディスク管理ツールを使用して、パーティションを作成、削除、サイズ変更することができます。Windowsでは主にMBR(Master Boot Record)およびGPT(GUID Partition Table)のパーティションスキームが使用されます。
・Linux
 Linuxでは、パーティション管理にfdiskやparted、GPartedなどのツールが使われます。MBRやGPTの他に、LinuxではLVM(Logical Volume Manager)やRAID(Redundant Array of Independent Disks)などの柔軟なストレージ管理方式も一般的です。
❸ボリューム管理:
・Windows
 Windowsでは、ディスクをボリュームとして扱い、ボリュームにはドライブレターが割り当てられます。Windowsではディスクを簡単に拡張したり、ボリュームシャドウコピーを作成したりすることができます。
・Linux
 Linuxでは、物理ボリュームをLVMやRAIDなどの抽象化レイヤーでラップし、論理ボリュームとして扱います。そのため、ディスクの拡張やスナップショットの作成などが柔軟に行えます。
❹ファイルシステムのマウント
・Windows
 Windowsでは、ファイルシステムをドライブレター(例:Cドライブ、Dドライブ)に割り当ててマウントします。
・Linux
 Linuxでは、ファイルシステムをディレクトリにマウントします。通常、/mntや/varなどのディレクトリにマウントされます。


WindowsもLinuxもいろいろ種類があり、上記の解説でそのすべてを網羅することはできないのですが、最新の環境を利用している場合は、以上の解説で問題ないと思います。
 以上の内容を読んで、WindowsとLinuxの違いを理解したうえで、ストレージの初期設定画面を見ていきましょう!

 Use an entire diskでは、指定したディスク全体をUbuntuのインストールに使用します。ここでは/dev/sdaというローカルディスクが20.000Gで指定されています。つまり、このディスク全体をUbuntuに割り当てることになります。なお、この20Gというのは、私が仮想サーバーを構築時にアサインしたディスク容量になります。仮想サーバで保持している全てのディスクを使用してインストールすることになります。
 Set up this disk as an LVM groupでは、論理ボリュームを柔軟に管理するための仕組みです。このオプションを選択すると、指定されたディスクをLVMグループとして設定します。LVMを使用すると、論理ボリュームを必要に応じてサイズ変更できるため、柔軟なストレージ管理が可能です。ここでこの指定をしないと、後でディスク容量を増やすことが無理とは言わないのですが、かなり手間のかかる作業となります。なお、ここでもし指定しない場合でも、後で、Set up this disk as an LVM groupとしてディスクを再構成することは可能です。
 Encrypt the LVM group with LUKSは、ディスクの暗号化を提供する仕組みです。このオプションを選択すると、LVMグループをLUKSで暗号化します。暗号化されたディスクはセキュリティが高く、外部からのアクセスを防ぎます。多分多くの方の想像通り、ディスクからのデータの読込速度は遅くなります。具体的な速度の遅さは、環境や設定によって異なりますが、通常は数パーセントから数十パーセント程度の影響があると言われています。
 Custom storage layoutを選択すると、ユーザーがカスタムでストレージを設定できます。パーティションの作成やマウントポイントの設定などを手動で行います

 このメニューを見て、Set up this disk as an LVM groupがいいと思うのですが、不勉強で運用にどういう影響が出るのか不明です。Set up this disk as an LVM groupについては、今後調査するということで、ここでは、Use an entire diskを選択し、次に進みたいと思います。

[Gストレージの設定−サマリー−]

FILE SYSTEM SUMMARY
AVAILABLE DEVICES
USED DEVICES



 [Gストレージの設定−初期設定−]で選択した内容のサマリーが表示されます。
 FILE SYSTEM SUMMARYでは、インストールされるファイルシステムの概要が表示されます。boot用に確保する領域と、それ以外の領域について表示されています。
 AVAILABLE DEVICESでは、利用可能なデバイスの一覧が表示されます。これには、インストールに使用できるディスクやパーティションが含まれます。インストール時に選択できるデバイスがここに表示されます。なお、ここでは、ubuntu-vgとFree Spaceが表示されていますが、ubuntu-vgはこれからインストールする、ストレージの論理グループになります。そして、Free Spaceは、ディスク上でまだ割り当てられていない、利用可能な空き領域を示します。なお、まっさらなサーバーの場合は、Free Spaceはないそうです。仮想環境で、何回かインストール作業を行ったために、Free Spaceができたと思われます。
 USED DEVICESでは、使用されているデバイスの一覧が表示されます。これには、すでに他の用途に使用されているデバイスやパーティションが含まれます。

[ubuntu-vg(new) LVM volume group]
ubuntu-lg new,to be formatter as ext4,mount at /


 以上については、ubuntu-vg は、Logical Volume Manager(LVM)の論理ボリュームグループ(Volume Group)を指します。論理ボリュームグループは、物理ボリューム(Physical Volumes)をまとめて管理するための仮想的なグループです。
 そして、ubuntu-lv は、LVMの論理ボリューム(Logical Volume)を指します。論理ボリュームは、論理ボリュームグループ内の利用可能な空き容量から作成され、ボリュームグループ内のディスクスペースを論理的に区切るために使用されます。普段使用するUbuntuやその他のアプリケーションはこの領域に格納され、動作することになりそうです。
 なお、ubuntu-vgとubuntu-lvの関係は、ubuntu-vg>ubuntu-lvとなり、ubuntu-vgという仮想グループにubuntu-lvという領域が存在します。ubuntu-lvの領域は、ubuntu-vgが管理する領域になり、それは、ユーザーにより指定することは可能です。
 そして、最後に以下の項目ですが、partition1、2はboot領域になります。
 最後に、partition3 は新しいパーティションで、LVM ボリュームグループ ubuntu-vg の物理ボリューム (Physical Volume) として設定されています。

partition1 new,BIOS group spacer
partition2 new,to be formatted as ext4,mounted at /boot
partition3 new,PV of LVM volume group ubuntu-vg


以上の内容で、自分がシステムを製造する上で利用できるのは、ubuntu-lvで、ubuntu-vgと比較すると約1/2です。正直言ってもっと増やしたいと思うのですが、Ubuntuで何をどうやっているのかまだ理解できていないので、ここは我慢して、デフォルトのまま次に進みたいと思います。

[あとがき]
 Linuxのストレージって、個人的に非常に複雑だと感じています。以前、製造環境のディスク容量が足りなくなり、増設したのですが、非常に苦労した記憶があります。
 その理由は、Ubuntu-lvの領域しかユーザーは利用できないため・・・。普通は、Ubuntu-vgの領域全部利用できると思いませんか?ただ、それは間違いだと今回知りました。
 前回は、製造環境を再構築するに際し、最終的にデータベースの2倍の容量を増やし、やっと、データベースへデータを格納できたのですが、今後は迷うことはなさそうです。

 では、また!

2024年03月19日

Ubuntuをインストールする −Proxy・アーカイブミラーサイトの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
福寿草.jpg
 昨日までは、Dのネットワークの設定まで解説しました。本日は、その続きで、項番Eから解説します。なお、Aですが、特段何もすることがないようだったので、解説から削除しました。加えて、プロキシーの設定とアーカイブミラーの設定の順番を変更させていただきました。

@GMU GRUB version 2.86
A「物理コンピュータと同じようにUbuntuをインストールをします。完了してオペレーティングシステム起動後に、[インストールを完了しました]をクリックして下さい。」
*CTL+ALTキーを押して、マウスカーソルを解放します。

B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定
Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定



[Eプロキシーの設定]
 ネットワークの次には、Proxyを設定する画面が表示されます。

Configure proxy
If this system requires a proxy to connect to the internet,enter its details here.
Proxy address:□□□□□□□□□□□□□□□□□□□□□□□□□□


以上のような画面が表示されますので、同一ネットワーク上にProxyが存在する場合は、セキュリティの面から設定すべきでしょう?
 Proxyとは、当該サイトとの通信を中継するシステムです。通信速度が遅い時代には、同一ネットワークからの同一サイトの通信の重複を避けるため、当該サイトのキャッシュ情報を保持し、それを同一ネットワークのメンバーへ提供するのが主な機能でしたが、近年では、セキュリティの側面が強くなってきています。
 ただ、これは、一般論なので、設定の有無については、ネットワークエンジニアもしくはセキュリティエンジニアに相談した上で設定する、しないを決定して下さい。

[Fアーカイブミラーサイトの設定]
 次に、アーカイブミラーサイトを設定する画面が表示されます。

Configure Ubuntu archive mirror
if you use an alternative mirror for Ubuntu,enter its details here.
Mirror address:□□□□□□□□□□□□□□□□□□□□□□□□□□
testing of the mirror location has not yet started.


以上がアーカイブミラーサイトを設定する画面ですが、アーカイブミラーサイトとは、公式サイトの複製サイトになります。アーカイブミラーサイトの役割としては、公式サイトの安定運用のためといったところでしょうか?公式サイトに世界中のユーザーから一気にアクセスされた場合、公式サイトはダウンする可能性があり、公式サイトとしての可用性信頼性を失う恐れがあります。それを防ぐために、この画面でミラーサイトを指定します。今回のインストールでは、アーカイブミラーサイトを利用していませんが、できれば、アーカイブミラーサイトを利用した方がいいでしょう?以下が、CopilotBardが調べてくれた、日本人が利用しやすい、アーカイブミラーサイトになります。

https://launchpad.net/ubuntu/+archivemirrors Canonical
https://www.tsukuba.ac.jp/ 筑波大学
https://www.wide.ad.jp/index_e.html WIDEプロジェクト
https://nii.res.in/ 国立情報学研究所
https://www.ubuntulinux.jp/japanese Ubuntu 日本語フォーラム
https://zh.wikipedia.org/zh-cn/%E7%90%86%E5%8C%96%E5%AD%A6%E7%A0%94%E7%A9%B6%E6%89%80 中国語版ウィキペディア
http://www.u-tokyo.ac.jp/ 東京大学
https://www.osaka-u.ac.jp/ 大阪大学
https://www.hokudai.ac.jp/ 北海道大学
https://www.tohoku.ac.jp/japanese/ 東北大学
https://www.keio.ac.jp/ja/ 慶應義塾大学
https://www.nagoya-u.ac.jp/ 名古屋大学
https://www.kyoto-u.ac.jp/ja 京都大学
https://www.kobe-u.ac.jp/ 神戸大学
https://www.hiroshima-u.ac.jp/ 広島大学
https://www.tokushima-u.ac.jp/ 徳島大学
https://www.kyushu-u.ac.jp/ 九州大学
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 清華大学
https://tekdataco.com/blog/%D8%AA%D9%85-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88/ Tekdata
http://ubuntutym.u-toyama.ac.jp/ubuntu/ 富山大学:
http://ftp.riken.go.jp/Linux/ubuntu/ 理化学研究所:
https://ftp.jaist.ac.jp/pub/Linux/ubuntu/ 北陸先端科学技術大学院大学:
https://www.ftp.ne.jp/Linux/packages/ubuntu/archive/ KDDI研究所:
https://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/archives/ 山形大学:



[あとがき]
 本日、気づいたのですが、コメントが寄せられていました。2024年03月10日のブログ、「Ubuntuをインストールする −インストール準備− 〜ソフトウェア研究室〜」に寄せられたモノなのですが、本日、同コメントを承認させていただいた上、コメント内に返信を書かせて頂きました。
 普段から、コメントが欲しい欲しいと思っていたのですが、もらったことがなく、コメントをもらうと言うことが想像できていなかったため、気づくのに遅れました。ご連絡が遅れ大変申し訳ございません。
 なお、今回のコメントで、相互リンク希望というご依頼でしたが、当サイトについては、一言声を掛けて頂ければ、リンクしていただいて結構です。ただ、当サイトから全く知らない方のサイトのリンクをすると言うことは、現時点では、する予定がございませんのでご容赦ください。
 ご希望に添えない返信の仕方で大変申し訳ございませんが、以上よろしく御願いします。

 では、また!

2024年03月18日

Ubuntuサーバーのインストール −ネットワークの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 先週末は、お休みを頂きました。ブログをアップロード後、旅行に行くかもしれなかったのですが、確率的に100%でなかったので、前回のブログには、旅行の話は載せませんでした。そのため、今回の旅行の案内については、事後的に旅先から週末は更新できませんといった内容で、X(旧ツイッター)から案内しようと思ったのですが、ハプニングが・・・。普段全然使っていない、携帯、IPhoneなのですが、ディスプレイが膨らんでいます(笑)。インターネットで調べるとどうもバッテリーが膨張しているらしい・・・。全然使っていないのに・・・。使おうと思えば、使うことができるのですが、ちょっと、怖いので、気づいた瞬間に、電源を落としてしまいました。そんな理由で、本日の連絡になりました。
 本日は、頭痛で思った活動ができていませんが、徐々に日常の生活に戻していきたいと思います。

[Dネットワークの設定]
 前回までは、Ubuntuのインストール作業の「Choose type of install」Ubuntuインストールタイプを選択するところまで実施しました。本日は、その続きで、ネットワークの設定からになります。
 ネットワークの設定画面では、最初に、ネットワークカードに関する情報が表示されています。技術的・システム的には、DHCPでも可能なのですが、サーバーを構築するので、固定IPで設定する方がいいでしょう?


NAME TYPE NOTES
[enc 33 eth - ← ここを選択
DHCPv4 192.168.10.130/24]



そうすると、以下の様なメニューが表示されるので、IPv4を選択します。以前、YouTubeの動画の取材の一貫で、IPv6の勉強を開始したのですが、中途半端な状態で、業務では利用できないので、ここは、迷わずIPv4を選択したいと思います。


(colose)
Info
Edit IPv4 ← ここを選択
Edit IPv6
Add a VLAN tag



 次のメニューでAutomatic(DHCP)と表示されているので、その項目をクリックすると、以下のようなメニューが表示されます。


Automatic(DHCP)
Manual ← ここを選択
Disabled



ここでは、固定IPv4で設定したいので、Manualを選択します。
 ちなみに、Automatic(DHCP)は、接続する度毎に自動でIPアドレスを取得する方法になります。
 Disabledは、このネットワークの設定を無効にする場合に使用します。

 Manualを選択すると以下の項目が画面上に表示されます。


Subnet
Adress
Gateway
Name server
Serch domains



 Subnetは、Windows等でも設定すると思いますが、サブネットマスクを指します。通常、Windowsでは、[255.255.255.0]と入力しますが、Ubuntuでは、「ネットワークアドレス + / +マスク長」という形式で入力します。
 ネットワークアドレスは、コンピューターネットワーク上で使用される、特定のネットワークセグメントを識別するためのアドレスです。そして、マスク長は、ネットワークアドレスとして何オクテッド利用するのか指定します。IPv4では、アドレス長は、32オクテッドで、そのうち24オクテッドをネットワーク部、そして、残りの8オクテッドをホスト部として利用するという意味になります。
 ちなみに、ここで、オクテッドという単位を利用していますが、ビットとあまり意味は違いません。昔のネットワーク技術者は、オクテッドという言葉をよく利用していましたが、現在は、ビットと表現している人の方が多いようです。
 次の、Addressですが、これは、これから構築するUbuntuのIPアドレスになります。
 Gateway (ゲートウェイ)は、ローカルネットワークと外部ネットワーク(インターネットなど)を接続するためのルーターまたはファイアウォールのIPアドレスです。
 Name serverは、DNSサーバーには、キャッシュサーバーネームサーバーがありますが、ここでは、Ubuntuの名前を解決するDNSのネームサーバーのIPアドレスを設定します。ふと思いましたが、ここに、IPではなく、DNSのアドレスを入力したらどうなるのでしょうか?ただ、Windowsの設定もそうですが、普通、DNSはIPアドレスを設定するものです。ここでは、迷わず、IPアドレスを入力しましょう!
 そして、最後の「Search domains」は、ドメイン名を解決する際に検索されるドメインのリストを設定します。これは、短縮されたホスト名を使用してドメイン名を解決する際に便利に利用します。

[あとがき]
 長くなりましたので、本日はここまでとさせていただきます。
 今まで、「ゼロからはじめるシステム開発」ブログですが、「システムエンジニアが目指す中小企業診断士」ブログに時間が取られ、あまり更新できませんでした。そのため、バランスを取る意味で、今回は、マシンが起動してくるところまでブログを書きたいと思います。
 明日も引き続き、Ubuntuのインストール作業について書かせていただきます。

 では、また!

2024年03月14日

Ubuntuサーバーのインストール −起動からインストールタイプの選択− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
オフィス.jpg
 前回までは、マシン起動後、Ubuntuのインストールの概要について解説しましたので、今回は、その詳細について解説していきたいと思います。

[@マシンの起動]
 マシンを起動してから最初に表示されるのは、GNU GRUBとタイトルにある画面です。この画面、Ubuntuに限らず、多くのLinuxマシンで起動時に利用されるブートローダーの画面です。Ubuntuでは、以下の選択肢が用意されています。

Try or Install Ubuntu Server. ←@
Ubuntu Server with the HWE kernel. ←A
Test Memory ←B


 @では、Ubuntu Serverを実際にインストールする前に、ライブ環境で試すことができます。
 Aで、カーネルは、新しいハードウェアや機能に対応するために、Ubuntuのカーネルをアップグレードするオプションです。通常、Ubuntu Serverはリリース時点の安定したカーネルを使用しますが、HWEカーネルを選択することで、最新のカーネルバージョンを利用できます。
 Bで、簡易的なメモリテストツールで、物理メモリの欠陥や故障を検出するのに便利です。全ノードを調査するわけではありませんが、特定の物理アドレスを指定してテストできます。

以上の調査から、@で問題ないでしょう?なお、@では、インストールする前にライブ環境を試すことができるとありますが、何回かインストールしてみましたが、この意味が分かりません。普通にインストールして完了しています。
 ちなみに、Bですが、今まで多くのLinuxをインストールしていますが、WindowsXP時代に、FDRed Hatをインストールしているときからある項目です。昔は、インストール時に必ずやっていましたが、近頃は全くと言っていいほどやっていません。

[B言語選択Cキーボードの選択]
 次に、言語設定を行います。不思議なのは、言語選択の中に、日本語がありません。他にどんな言語があるのか、読もうとするのですが、何を指しているか分かりません。ここでは、唯一言語として認識できる、Englishを選択します。
 そして、Doneを押下すると、次にキーボードを選択する画面が表示されます。表示項目としては、以下の通りです。

Layout←@
Variant←A


@「Layout」では、キーボードの物理的な配置を指定します。
A「Variant」では、同一地域でもいろいろな種類のキーボードがあるので、Layoutの詳細と言ったらいいでしょうか?その詳細を選択します。

 ここでは、LayoutにJapanese、そして、VariantもJapaneseを選択しています。
 Layout選択時面白いなって思ったのは、選択肢にPC-98があったこと・・・。PC-98って昔NECがパーソナルコンピュータ市場をほぼ独占していた時期に、独自の規格を出していたのですが、その時の名残だと思われます。その昔というのは、30年近く前の話です。まだ使用している人がいるのでしょうか?

[インストールタイプ]
 次にインストールタイプを選択します。LayoutとVariantを選択後、以下の画面が表示されます。

Ubuntu Server←@
Ubuntu Server(minimized)←A
Serch for third-party drivers←B


 @の「Ubuntu Server」では、標準のUbuntu Serverをインストールします。環境等に問題がなければ、こちらを選択すべきです。
 Aの「Ubuntu Server (minimized)」では、最小限のパッケージで構成されており、インストール後、必要なパッケージを手動で追加します。
 Bの「Search for third-party drivers」サードパーティのドライバを検索してインストールするためのものです。特殊な機器を使用している場合は、ここで選択します。

私の環境は、仮想環境で、標準なものを利用しているので、@で問題ありません。多くの人も@で良いと思います。

[あとがき]
 長くなってしまったので、この辺にしたいと思います。今まで何気にやっていた作業なのですが、すべての項目を調べるといろいろな事が分かります。ただ、調べて見て、今のところ、今までの手順ではダメだったと言うことはないようです。
 なお、ここでまとめた調査結果は、久しぶりに、動画にしています。文章では分かりにくいと言う人は、そちらで確認し作業の参考として下さい。今後は、技術的な資料については、文書に残すのと同時に、動画も残していきたいと思っています。

 では、また!!!

2024年03月10日

Ubuntuをインストールする −インストール準備− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
起動画面.jpg
 昨日は、X(旧ツイッター)の障害でブログの更新が遅れ寝るのが遅かったので、今日のすべての開始時間が遅れてしまいました。そのため、午後がんばろうと言うことで、予定通りの時間からブログを更新しています。
 以前は、寝る直前に書いていました。そうすると寝る時間が遅くなり、翌日の午前中何もできないということが度々ありました。そのため、午前中からブログを書こうと予定していたのですが、いろいろやっているとそういう分けにも行かず、ここ数ヶ月は午後にブログを書くことが多いという状況でした。しかし、本日は、久しぶりに午前からブログの更新準備を進めています。ただ、もう少しで12:00間近なんですけれど(笑)。
 そんな本日のブログですが、前回は、Ubuntuのインストーラーをダウンロードしたので、本日は、Ubuntuのインストールから解説をしていきましょう!

[インストラーを選択する]
 Ubuntuには、通常版LTS版という2種類のインストーラーがあり、サーバーを構築するなら、LTS版を利用すべきだという話を前回までにしています。そして、そのLTS版にもバージョンがあると言うことを、前回のダウンロードで知りました。以下がその3種類のインストーラーなのですが、私は既にVMWareを保有しているので、今回は、@を選択しインストールしていきたいと思います。

@Option 1 - Manual server installation
AOption 2 - Instant Ubuntu VMs
BOption 3 - Automated server provisioning



[インストールを実施する]
 まず、最初にやることは、CD、DVDまたはBDなどのマルチドライブへインストラーを設定します。仮想環境ではなく、実機でやる場合は、メディアにISOファイルからインストラーを作成しなくてはいけないのですが、それについては、機会がございましたら御紹介します。
  私は、今回は仮想環境を利用するので、ISOファイルをVMWareで認識できるメディアデバイスにファイル選択ボックスからアサインし、インストールすることになります。
 アサインが終わったら、サーバーを起動します。

[インストールの流れ]
 まず最初に、インストールの流れを御紹介します。

@GMU GRUB version 2.86
A「物理コンピュータと同じようにUbuntuをインストールをします。完了してオペレーティングシステム起動後に、[インストールを完了しました]をクリックして下さい。」
*CTL+ALTキーを押して、マウスカーソルを解放します。
B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定
Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定


以上の流れでインストールが進み、完了すれば、インストールは終了です。私の、脆弱な環境では、開始から完了まで1時間ぐらいを要しています。

[あとがき]
 Ubuntuを選択する理由は、保守体勢がしっかりとしているという点でしょうか?
 以前は、新システムの開発環境を、業務でも利用したことがある、CentOSにしようと考えていました。ただ、バージョン8を過ぎた後、CentOSの開発体制に不安を覚えるような出来事がありました。その出来事から、CentOSの将来に不安を覚えたため、数多なディストリビューションから、保守体制、使い勝手等を考慮してUbuntuを選択しました。
 まだ、Linuxを導入していない、または新たなバージョンを考えている方がいましたら、本ブログを参考としていただければ、うれしいです!

 では、また!

2024年03月09日

X(旧ツイッター)へログインできない!!! 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
暗闇の男.jpg
 今日は、EVEProjectのアカウントがロックされ散々な一日でした。
 原因は、ChatGPTから質問ができなくなったのがきっかけです。

[ChatGPTと会話ができない]
 昨日からなのですがChatGPTと対話ができていません。質問はもっぱら、CopilotBard・・・。近頃、簡単な質問は、Copilot・・・。勉強に関しては、Bard・・・。そして、システム開発は、ChatGPTに聞くというふうに、使い分けることが多くなりました。
 アンサンブル学習ということで、すべてのAIに質問をするということもあるのですが、本当に納得がいかない回答が出てきたときぐらいです。
 使っていると、それぞれのAIの特性が分かってきて、この質問は、Copilotがいいとか、Bardがいいとか分かるようにはなってきました。
 ただ、ときどき間違えた答えを言ってくるのも確かなので、やはり、すべてのAIの多数決を取った方がいいな〜、っとブログをつけながら感じています。
 開発は、近頃、移植作業が中心で、なかなか、ChatGPTと会話する機会がありませんでした。そんな昨日、ちょっと、質問をしようとテキストボックスから質問を入力したのですが、入力できない・・・。質問した情報が、画面に表示されず、かつ、ChatGPTから回答がありません・・・・。嫌われたのでしょうか?

[履歴を削除する]
 普段は、ブラウザはGoogle Chromeを利用しているのですが、そのChromeの履歴情報を削除することにしました。キャッシュと言われる情報がこのようないたずらをするということはChatGPTに限らず、多くのシステムである現象です。そこで、設定から実行したのですが、気を付けたのは、履歴情報の中でもパスワードの履歴は残すこと・・・。以前は、ダイアログボックスの同じ画面の項目として存在していたのですが、最新バージョンはパスワードマネージャーという項目で別で管理されていました。って思ったのですが、履歴情報の詳細画面にパスワードがありました。デフォルトは、チェックボックスにチェックが入っていないようなので大丈夫だと思うのですが気を付けた方がいいでしょう?

[ChatGPTにログインできた!しかし・・・]
 削除後、早速ChatGPTにログインできたのですが、画面が変わっていました???もしかしたら、キャッシュの画面を表示していて、そのキャッシュの画面とChatGPTの本体、サーバーとの不整合があったため、質問ができなかったのかもしれません。
 その問題はひとまず落ち着いたのですが、表示する全てのシステムからパスワードを求められます。通常、Google Chromeのパスワードマネージャーが当該サイトのパスワードを表示するのですが、X(旧ツイッター)は違っていました。EVE2、ようは中小企業診断士試験用のアカウントしか表示しません。仕方がないので、開発用のアカウント、EVEProjectをEVE2が表示されている画面に追加しようとするのですが、エラーとなって追加できない・・・。おかしいです・・・。アカウント名も、パスワードもあっているのにログインできません・・・。仕方ないので、メールアドレスを利用して、パスワードを再発行しようとしても、X(旧ツイッター)に登録したと思われるメールアドレスがすべてエラーになる・・・。

[IPhoneから追加]
 いろいろやってうまくいかなかったので、今度は、IPhoneからパスワードを変更することを試みました。当然うまく変更できたのですが、そのパスワードをGoogle Chromeで表示したX(旧ツイッター)に入力しログインを試みますがエラーになります・・・。もう、なんだかよくわかりません!

[Microsoft Edgeからログイン]
 最後に試みたのは、Edgeからのログインです。普段Edgeは利用していないのですが、EVEProjectのURLにアクセスすると、EVEProjectのパスワードが表示されます。そのまま次へとクリックすると、ログインできました!!!どんなパスワードだっけかなということで、Edgeのパスワードマネージャーを開きパスワードを見たのですが、やはり、IPhoneで変更したパスワードでした。今までこのブログで書いたX(旧ツイッター)へログインできないという現象は、Chromeの問題のようです・・・。その後、Edgeと同じ操作をして、Chromeでも、X(旧ツイッター)にログインできるようになりました。
 本当に、人騒がせのブラウザです・・・。まっ、たまにはこんなこともありますか?

[あとがき]
 現在の問題は、X(旧ツイッター)にメールアドレスが登録されているのかどうか、当該画面にログインしようとするとエラーになるので分かりません。自分が使用できるすべてのメールアドレスを使用して、パスワードを再発行しようとしたのに、それができなかったので、多分X(旧ツイッター)に登録されていないのだと思います。ただ、エラーになって、それすら確認できない・・・。本日はChromeにもかなり、悩まされましたが、X(旧ツイッター)も困ったちゃんです・・・。
 1度あることは、2度あると考えていいでしょう?大事なアカウントなので、今後は早急に復旧できるように、対応したいと思います。

 では、また!

2024年03月04日

インストーラーダウンロード作業 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。

 さぁさっそく、Ubuntuをインストールしていきましょう!
Ubuntuダウンロード画面.png

[Ubuntuダウンロード]
 では、早速Ubuntuのダウンロード画面から、Ubuntuのインストーラーをダウンロードしてみましょう!
 昨日話したとおり、業務用に用するなら、LTS版をダウンロードすべきでしょう?ただ、よく見ると、そのLTS版なのですが、3つのタイプがあることに気づきます。


@Option 1 - Manual server installation
AOption 2 - Instant Ubuntu VMs
BOption 3 - Automated server provisioning


どのようなものなのか不明なため、このボタンからインストールされるインストーラーは何なのかCopilotにそれぞれの違いについて、解説してもらいましょう!

 Ubuntu Serverのダウンロード画面には、以下の3つのオプションがあります。

❶Option 1 - Manual server installation (手動サーバーインストール):
 このオプションでは、Ubuntu ServerのISOイメージをダウンロードし、手動でサーバーをインストールします。詳細な手順に従ってサーバーをセットアップできます。
❷Option 2 - Instant Ubuntu VMs (即時Ubuntu仮想マシン):
 このオプションは、Multipassというツールを使用して、デスクトップ上で仮想マシンを簡単に作成できる方法です。Multipassは、Mac、Windows、Linuxで利用でき、セキュリティ修正が常に適用されています。Virtualbox、Hyper-V、HyperKit、またはKVMを使用してUbuntu VMを作成できます。
❸Option 3 - Automated server provisioning (自動サーバー設定):
 このオプションは、MAAS(Metal as a Service)を使用して、データセンター内のマシンをプロビジョニングする方法です。MAASを使用することで、自動的にサーバーをセットアップできます。


 ❶は、普通のISOファイルです。このファイルをダウンロードした場合、ツールを用いてISOファイルをDVD-ROMに焼き付けてインストーラーを作成するという方法がまず最初に思いつきます。そして、仮想環境があるなら、仮想マシンを作成後、作成した仮想マシンのDVD Deviceに同ISOファイルを認識させたうえで、DVD Deviceから起動し、インストールをするという方法もあります。
 ❷ですが、これは、まだ、いじったことがないのですが、どうも、Multipassという仮想環境を作るツールを用いて、仮想環境を作ったうえで、そこにUbuntuを構築するためのインストーラーのようです。この❷では、親切にも仮想ツールを用意してくれているようです。ただ、VirtualboxHyper-VHyperKit、またはKVMを使用してUbuntu VMを作成できるとはどういうことでしょうか?Multipassとは何をするもの???
 その点が不明だったため、再度Copilotに聞いたところ、冗長的な解説になるようです。最初の解説の通り、Multipassを利用して仮想環境を作り、作った仮想環境へUbuntuをインストールするための、インストーラーのようです。
 そして、最後の❸ですが、クラウド環境などに、ベアメタルサーバープロビジョニング、モニタリング、管理が簡素化され、仮想マシンの操作とリモートで自動化された操作などが可能となるようです。
 ちなみに、プロビジョニングとは、サーバーをセットアップし、必要なソフトウェアや設定を適切にインストール・構成するプロセスを指します。そして、ベアメタルとは、本来の意味は、「むき出しの金属」という意味なのですが、ここでは、OSやソフトウェアなどがインストールされていない物理サーバーを指します。
 ❸については、イメージが難しい部分はありますが、Amazonなどのクラウド環境に対して、簡単にデフォルトの機能を提供するインストーラーと考えればいいのでしょうか?まっ、使う段階になったら、もうちょっと深掘りをしたいと思います。

 以上の調査から、私はVMWareという環境を既にもっているので、❶を選択し、ダウンロードしました。

[あとがき]
 意外と調べはじめると時間がかかります。以前は、躊躇なく、デフォルトで表示されたものをガンガン選択し、インストールしているのですが、本番環境となると話は別です。分からないことを分からないまま残しておくと、大けがをする場合があります。まっ、あまり多くありませんけれど(笑)。では、後日、UbuntuをダウンロードしたISOファイルをDVD Deviceに配置して、そこから起動してからのインストール手順についてお話ししましょう!

 では、また!

2024年03月03日

新システム環境の構築検討 −はじめに− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
タイピング.jpg
 本日から、システムの構築について検討を開始しましょう!以前構築した環境もあるのですが、以前は、AIに相談することなく、Ubuntuに関する本と、インターネットの情報からシステムを構築しました。多分、それでも、間違ったことはしていないとは思うのですが、作業をしていて、なんでしているのか不明なところがあったりして、不安があります。
 そういうことを今回は一掃したいと思います。

[インストールする順番]
 前回、システムの構築を検討し、以下の順番でシステムを構築すると決めています。

■インストール
@Ubuntu
AApache
BPHP
CPostfix
DClamAV


そして、以上のインストール完了後、以下の作業を行います。

■セキュリティの導入
@Apacheのセキュリティ設定
APostfixの導入(メールのポート開放)
BSSL/TLSの導入


これは、2024年2月7日に検討した結果なのですが、現在も考え方は変わっていません。
 では、早速Ubuntuのインストールを検討していきましょう!

[Ubuntuダウンロード]
 本番環境を構築するXServerでは、最適なOSが既に用意されており、クリックすれば、インストールが開始されるのですが、テスト環境などを考え、Ubuntuをダウンロードするところから再度検討をしてみたいと思います。
 Ubuntuをダウンロードするサイトは、以下の通りとなります。

現在のテスト環境もこのページからダウンロードしたのですが、そのときからバージョンアップされたものが紹介されています。

[Ubuntuのタイプ]
 Ubuntuのタイプは2種類あります。
 1つは通常版と言われるもので、主にPCなどで利用します。特徴としては、最新の機能が搭載されているのですが、サポート期間は9ヶ月と短いです。主に、最新の機能を試したい開発者などが利用します。
 2つ目は、LTS版と言われ、最新の機能は入っていないのですが、動作環境が安定しており、かつサポート期間が、5年と長くなっています。やはり、サーバーを構築するならLTS版でしょう!

[Ubuntuのダウンロード]
Ubuntuダウンロード画面.png
 早速先ほど紹介した、ページにアクセスしてみましょう!右記のような画面が表示されます。2種類のインストーラーが確認できますでしょうか?
 1つは、Ubuntu Server 22.04.4 LTSで、2つ目は、Ubuntu Server 23.10です。1つ目の方は、LTS版だと分かるのですが、2つ目は、バージョンしか分かりません。
 2つめのバージョン23.10について、インターネットで検索すると、通常版の最新が、23.10とあるので、多分2つ目は通常版だと考えていいようです。

[あとがき]
 いつだったか定かではないのですが、クライアントに構築したテスト環境は、通常版で構築していると言う話をしています。そして、ときどきアップグレードをしようとしているのですが、近頃エラーになります。理由は、インターネット上に公開されている、リポジトリが廃止されたから・・・。ようは、Ubuntuの場合、保証期間が過ぎると、アップデートする環境を閉鎖してしまうようです。代替サーバーのURLを探したのですが、見つかりませんでした。その作業から久しいのですが、よく考えたら、バージョンアップすればいいのです。以前、XServer上でしたが、実施しうまくいった実績があり、その手順については、インターネットに記録として残しています。
 テスト環境は、VMWareなので、スナップショットを取ってから実施すれば、怖いことは何もありません。ただ、時間が恐ろしくかかります。しかも、多分ですが、かなりパソコンに負荷がかかるので、他の作業は難しいでしょう?
 アップグレードしている最中、Windows95マシンになりますが、Let's Note CF-WSに復活してもらおうかな?

 では、また!!!

■本番環境の構築検討 〜システム開発研究室〜(2024年02月07日)
https://fanblogs.jp/bahamuteve/archive/435/0?1709449912

■本日のシステム開発状況〜Ubuntuのアップグレード〜 [ソフトウェア研究室](2022年11月30日)
https://fanblogs.jp/bahamuteve/archive/151/0

2024年03月02日

トラックボール 大玉 8ボタン チルト機能 ブラック M-HT1DRXBK 〜ハードウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
トラックボール.jpg
 先日から早く起きようと努力しています。昔は、頭の回転数が上がっていない午前中にプログラミングをするのが常だったのですが、近頃、気づいたことがあります。何かしようとした場合、午前中の方が目標を達成できるケースが多い。
 プログラミングって論理的な思考が必要で、考えることにより、頭の回転が通常に戻ります。やはり、それでもプログラミングの最初は、なかなかロジックが浮かばなかったりするのですが、それも中小企業診断士の勉強でも同様です。布団からでて、スマート問題演習を受けるのですが、ボロボロです(笑)。ただ、スマート問題などの間違った点を再確認してから、過去問セレクト演習を受けるとまぁまぁの点になり、やっと、頭も体も起きたかなって感じになります。
 そこで、今まで7:00起床を目標としていましたが、先日から、6:00に変更しました。寝る時間がどうしても遅くなってしまうため、まだ、6:00に起きることができず、6:30ぐらいの起床なのですが、近日中には実現したいと思います。そして、中小企業診断士試験直前には、5:00起きぐらいになっていることが目標です。

[ハプニング]
 本日は昨日同様に6:30に起床することができたのですが、ハプニングが・・・。
 私、2020年からマウスをやめて、トラックボールを使用しています。 

エレコム マウス ワイヤレス (レシーバー付属) トラックボール 大玉 8ボタン チルト機能 ブラック M-HT1DRXBK

価格:6199円
(2024/3/2 16:59時点)
感想(0件)



 Amazonから購入したのですが、驚いたことがあります。大きい・・・。特にトラックボールのボールが・・・。その当時、作業デスクの省スペース化を進めていたので、この大きさは予想外です。まっ、寸法については、Amazonのホームページに記載してあったんですけれどね・・・。その大きさにも不満があったのですが、最初は使いづらかったです。
 大きさは手のひらサイズで、トラックボールのボールは、テニスボールを2割ぐらい小さくしたぐらいの大きさです。ホームページには、52mmって書いてありますから、5cm以上あることになります。
 その2020年から使用しているトラックボールが突然動かなくなりました。私が利用しているのは、トランシーバーと通信をする無線タイプのものになります。その無線通信がうまくいっていないようで、ときどき動くことがあるのですが、継続的に動かない。電池切れかとも思ったのですが、交換しても症状は変わらない・・・。そこで、ディスプレイに表示しているすべての資料を閉じて何回かパソコンを再起動してみたのですが、それでも症状は変わりませんでした。

[今はこのトラックボールじゃなきゃだめ!]
 使い始めた当初は、目的は肩こりを軽減すると言うことで、あまり、使い勝手を考えていませんでしたし、トラックボールを使用するのも初めてだったため、使いづらいという感想になったのだと思います。
 しかし、使用を開始してから数ヶ月で、当初使いにくかったトラックボールが、逆に、これがないと作業がはかどらない状態になりました。
 非常に大きいため、手をそのままトラックボールに乗せる感じになります。そのため、パソコンとの一体感、操作感が最高です。そして、大きいトラックボールは、指ではじくような操作で、複数画面のディスプレイを、飛ぶように移動してくれます。極めつけは、このトラックボール複数操作ボタンがあり、その操作ボタンを押下することにより、パソコンからの音量を調整したり、ブラウザの表示ページ移動をしてくれます。
 だから、このトラックボール無しで、システム開発とか、勉強とか考えることができません。

[購入する?]
 そこで、同型機または後継機を探しました。そうしたら驚きです。もう購入してから、3年以上経っているため、型落ちしているとかと言った理由で、安くなっているのかと思ったのですが、逆に高くなっています。
 実は私このトラックボールを、税込み4,008円で購入しているのですが、現在の価格は、楽天で6,000円を越えています。Amazonだと、税込みで5,000強って感じでしょうか?
 インフレ、インフレと騒がれている中、あまり、外を出歩くことがないため、他人事だったのですが、実感をもってインフレを体感することができました。

[再接続]
 ちょっと、今5,000円の出費は惜しいなっていうことで、直すことに専念することにしました。実は、この段階で既にいろいろやっているので、もうやることがないと思っていたのですが、以下の2点を実行することにより、パソコンへ再接続することができました。

@トランシーバーをなるべくパソコンの近いUSBハブに接続し直した。
Aトランシーバーの近くにトラックボールを持っていき再起動した。

以上の操作で、以前同様にトラックボールを利用できています。

[あとがき]
 今、ブログを更新していますが、愛用のトラックボールが利用できてホットしています。いつかは、壊れるときがあるのかもしれませんが、それは、今じゃないでしょって感じです。そういえば、今までマウスが壊れて交換したことってないですもんね・・・?壊れて交換することになったとすると、マウスから使い始めて、初と言うことになります。

 話はがらりと変わりますが、引き続き、システム開発を継続しています。製造状況については、X(旧ツイッター)での御報告の通りです。まっ、それから追加でメソッドをいくつか作っているので、作ったメソッドの数は増えています。
 急がず慌てず正確に、性能のいいシステムを製造したいと思います。

 では、また

2024年02月27日

文字列クラスのデバック −Bardからの指摘- 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
コーダー.jpg
 本日は、昨日の続きで、Bardからの解析を元に、プログラム修正を試みます。2日連続長々としたプログラムをブログに載せるのは、見栄えが良くないので、対象のプログラムを参照したい方は、昨日のブログを見て下さい。
 では、早速、Bardからの解説を見てみましょう!

[Bardによる文字列クラスのデバック]
 以下が、昨日のプログラムのデバック結果です。

■概要
 このコードは、文字列の基本的な操作を行うstringClassというクラスを定義しています。

■デバッグ結果
このコードにはいくつかの問題があります。

★問題点
❶コメントの書き方が不統一
 コメントの書き方が統一されていません。
1)多くのコメントは日本語で書かれていますが、一部英語で書かれています。
2)コメントのフォーマットが統一されていません。

❷エラー処理が不完全
 いくつかのメソッドでエラーチェックを行っていますが、処理が不完全です。
1)metSearchKeyメソッドで、検索キーが空の場合、エラーメッセージを設定していますが、処理を継続しています。
2)metCheckErrorMessageメソッドで、エラーメッセージが設定されている場合、処理を中止していますが、エラーメッセージの内容をユーザーに表示していません。

❸不要な変数
 metCheckErrorMessageメソッドで、$resultという変数をstatic変数として定義していますが、この変数は不要です。

❹デストラクタの処理が不十分
 デストラクタで、プライベート変数を初期化していますが、すべての変数を初期化していない可能性があります。

■改善点
・コメントを日本語で統一し、フォーマットを統一する。
・エラー処理を完全に行う。
・不要な変数を削除する。
・デストラクタで、すべてのプライベート変数を初期化する。



[指摘の検討]
❶から順番に見ていきましょう!
 ❶については、コメントを指摘しています。ChatGPTは特にそうですが、プログラム解析をするに際し、コメントを重要視しています。その点Bardはコメントとプログラムとの不整合に関する指摘はないようなのですが、ChatGPTとBard両方にデバックをお願いするということを考えると、以下の点に気を付けてプログラムを製造したほうがいいようです。

1)プログラムの処理とコメントの内容を合致する。
2)コメントのフォーマットを統一する。


1)については、今後かなり気を付けて記述したいと思います。
2)については、コメントのフォーマットは統一しているつもりだったのですが・・・。パット見た目、そろっていると思いません?もしかしたら、構成管理システムが完成した場合、ヘッダ情報を構成管理システムに登録して、登録した情報をヘッダとした方がいいかもしれません。これについては、検討します。
 なお、コメントにおける日本語と英語は今後も両方利用していく予定です。英語って言っても変数名ですしね。

 ❷❸については、どうも、Bardは、エラーが発生した直後に、returnで呼び出し元へ制御を移すのが本来の動作だと思っている節があります。そのため、resultを利用して、プログラムの最後で、処理結果を返却するのはナンセンスだと感じているのかもしれません。
 Bardが指摘したこのような記述は私の、癖です。決して正しいとは思わないので、これから作るプログラムは、異常が発生したタイミングで呼び出し元へ制御を移すような作りにしたいと思います。既に作っているプログラムについては、徐々に変更するという方向で作業を進めます。
 なお❷2)は、エラーになった場合、呼び出し元で参照したければ、getterで取得できるようにしているので、指摘は無視します。
 ❹は、何を指摘しているのかわかりません、って思ったのですが、ChatGPTの指摘を思い出しました。プライベート変数に定義されているエラーメッセージは、エラーのEが大文字なのですが、メソッド内で、いくつか小文字のeで記述しているところがあります。そのことを指摘しているのだと思います。
 ちなみに、staticで記述したメソッド内変数は初期化する必要はないと、Bardから回答をもらっています。もし初期化するものがあるとしたら、Classに定義したプロパティのみのはずです。

[あとがき]
 Bardからの指摘が重大なものが含まれていなくてよかったです。今まで1人でシステムを作り、独りよがりの部分があったかもしれませんが、AIをプログラム製造に導入することにより、世間一般のプログラムに近づけるような気がします。
 以前、このブログのどこかで書きましたが、私も含めてユーザーは、PHPなどの言語開発者がだめなコーディングだと思っても、できることはやってしまいます。知らないうちに・・・。そのようなことを指摘してもらえて非常に助かっています。

 では、また!

2024年02月26日

ChatGPTでプログラムデバックをしてみる 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
オフィスワーク.jpg
 本日は、いままでChatGPTを用いてやると言っていた、デバックをやってみました。今から考えると、雛形1本作ってから、その雛形から横展開すべきでした。そんな後悔を今更しても仕方がないので、今後は、そうしたいと思います。

[デバック]
 一番気になるのは、4,000ステップ弱の文字クラスです。これに、致命的なエラーがあったら、かなりの修正がはいりそうです。
 ただ、4,000ステップのプログラムのデバックは、ChatGPTの入力制限にひっかかります。そのため、メソッドとそのメソッドを構成するコンストラクタ、メソッド、プロパティデストラクタを切り出して1つのクラスとしてデバックすることにしました。以下が、初めてデバックしたクラスです。
 一番簡単なメソッド、指定文字列検索メソッドをターゲットにクラスを作成し、ChatGPTにデバックを御願いしました。


<?php
/*************************************************
*【クラス名 】文字列クラス
*【製 造 者】EVE
*【製造年月日】2023年12月16日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 文字列の基本的な操作を行う
*************************************************/

class stringClass {
//プライベート変数定義
private $priErrorMessage = ""; //エラーメッセージ
private $priBaseString; //編集対象文字列
private $stringLen; //文字列長
private $stringByte; //文字列バイト数

/*************************************************
*【メソッド名】コンストラクタ
*【 引 数 】
* $strObject:編集対象文字列
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年12月16日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 初期の処理を実施する
*************************************************/

public function __construct(string $strObject) { //編集対象文字列
//引数をプライベート変数へ設定する
//文字列長を取得する
$this->stringLen = mb_strlen( $strObject );

//文字列バイト数を取得する
$this->stringByte = strlen( $strObject );

//引数をプライベート変数として設定する
$this->$priBaseString = $strObject; //編集対象文字列
}

/*************************************************
*【メソッド名】指定文字列検索メソッド
*【 引 数 】
* key:検索キー
*【返 却 値】
* 正常時:検索語文字列
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2024年1月24日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* Keyに基づき検索し、検索文字列以降の文字を取得し返却する
*************************************************/

public function metSerchKey( string $key ) { //検索キー
//■変数定義
$result = ""; //検索結果
$cutString = ""; //編集文字列

//■入力データチェック
//エラーメッセージが設定されているかどうか判定する
if ( $this->metCheckErrorMessage() === false ) {
//返却値を設定し呼び出し元へ制御を移す
return false;
}

//検索キーの設定の有無を判定する
if ( $key == "" ) {
//例外メッセージを格納する
$this->metSetErrorMessage("検索キーが設定されていません。検索キーは入力必須項目です");

//返却値を設定し呼び出し元へ制御を移す
return false;
}

//■処理開始
//検索文字列を取得する
$this->priBaseString = stristr($this->priBaseString,$key);

//文字列長を返却する
return $this->priBaseString,;
}

/*************************************************
*【メソッド名】文字列長取得メソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:文字長
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2024年1月21日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* 文字列長を取得し返却する
*************************************************/

public function metGetStringLen() {
//■入力データチェック
//エラーメッセージが設定されているかどうか判定する
if ( $this->metCheckErrorMessage() === false ) {
//返却値を設定し呼び出し元へ制御を移す
return false;
}

//■処理開始
//文字列長を返却する
return $this->stringLen;
}

/*************************************************
*【メソッド名】文字列バイト数取得メソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:文字バイト数
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2024年1月21日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* 文字列バイト数を取得し返却する
*************************************************/

public function metGetStringByte() {
//■入力データチェック
//エラーメッセージが設定されているかどうか判定する
if ( $this->metCheckErrorMessage() === false ) {
//返却値を設定し呼び出し元へ制御を移す
return false;
}

//■処理開始
//文字列バイト数を返却する
return $this->stringByte;
}
/*************************************************
*【メソッド名】事前プログラムエラーチェックメソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2024年2月14日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* 本プログラム前にエラーが発生していた場合エラーを
*返却する
*************************************************/

public function metCheckErrorMessage() {
//■変数定義
static $result = true; //処理結果

//■入力データチェック
//エラーメッセージが設定されているかどうか判定する
if ( $this->metGetErrorMessage() != "" ) {
//例外メッセージを格納する
$this->metSetErrorMessage("処理前にすでにエラーになっています。");
//処理結果にfalseを設定する
$result = false;
}

//返却値を設定し呼び出し元へ制御を移す
return $result;
}
/*************************************************
*【メソッド名】エラーメッセージ設定メソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年12月16日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* エラーメッセージを設定する
*************************************************/

public function metSetErrorMessage(string $errMsg) { //エラーメッセージ
//エラーメッセージを設定し呼び出し元へ制御を移す

$this->prierrorMessage = $errMsg;
}

/*************************************************
*【メソッド名】エラーメッセージ取得メソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年12月16日
*【更新年月日】
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* エラーメッセージを取得する
*************************************************/

public function metGetErrorMessage() {
//エラーメッセージを設定し呼び出し元へ制御を移す
return $this->prierrorMessage;
}
/*************************************************
*【メソッド名】デストラクタ
*【 引 数 】なし
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年12月16日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* オブジェクトが消滅する場合の処理を定義する
*************************************************/

public function __destruct() {
//使用パブリック変数を初期化する
$this->priErrorMessage = ""; //エラーメッセージ
$this->priBaseString = ""; //編集対象文字列
$this->stringLen = ""; //文字列長
$this->stringByte = ""; //文字列バイト数
}

}
?>


以上のプログラムのデバックをお願いしたところ、以下のような回答がありました。

❶コンストラクタのプロパティへの代入
 $priBaseString プロパティへの代入時に $ を付けていません。また、プロパティ名が priBaseString であるべきところで、 String になっています。
❷metSerchKey メソッドの文字列検索処理
 stristr を使用していますが、これは検索文字列以降の文字列を取得するものではありません。また、 stristr の戻り値が正しいように使用されていません。
❸metSerchKey メソッドの戻り値
 コンマ , が余分についており、また正しい形式で戻り値を返していません。
❹metSetErrorMessage メソッドと metGetErrorMessage メソッド
 それぞれエラーメッセージを設定するメソッドと取得するメソッドですが、エラーメッセージのプロパティ名が誤っています。


以上の通り、いくつかバグを指摘してくれました。この検証により、ChatGPTをデバックに利用することは有効だと判断しました。
 なお、❷については、ヘッダの「検索文字列以降の文字を取得し返却する」という記述の間違いを指摘しています。正確には、検索文字列を取得し返却します。
 ❷の結果を見ると、コメントから正しいプログラムかどうかも判断してくれているようです。今後、プログラムテスト前には必ずChatGPTでデバックしたいと思います。
 ChatGPTにも分かるはずもないのですが、今回デバックしたことにより、プライベート変数の頭にpriがついていないなどの仕様的なバグやコメントの間違いに気づくことができました。

[今回の反省点]
 とりあえず、ChatGPTの以上の回答を見れば分かりますが、分かりずらい・・・。バグが細かい部分だったということもあるのですが、事細かに質問してやっと気づくことができました。
 以上の点については、規約を事前に知らせておく、どういう回答をしてほしいのか、事前に知らせておくなどの対応をしたいと思います。

[あとがき]
 ChatGPTにデバックをお願いしたものと、同じものを、BardCopilotにもお願いしたのですが、Bardは構造上の指摘も多数してくれました。今まで、ChatGPTにしかお願いしていませんでしたが、併用すれば、正しいプログラムを作ることができそうです。
 Bardについては、後日お話しします!ちなみに、Copilotは、このレベルのクラスでも文字数制限にひっかかり、デバックできませんでした。

 プログラマの多くは分かっているとは思いますが、これ業務でやった場合、情報流出という扱いになるかもしれません。もしやる場合は、上長に十分相談し、適切な対応をとってから実施してください。

 以前、私の知り合いで、業務で作った成果物を自宅へE-メールで送り、裁判沙汰になった人がいましたが、そうならないように気を付けてください。

 では、また!!!

2024年02月25日

ChatGPTにプログラムを作ってもらう 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
未来.jpg
 1月から、functionで定義した通常の関数をオブジェクト指向プログラミングに書き換えています。
 そんな作業の最中、新たな試みをしています。
 昨日から、不足しているクラスChatGPTに作ってもらっています。作ってもらっているといっても、機能を説明して、その機能のプログラムを作ってもらっているレベルなのですが・・・。

[zipの圧縮関数がない!]
 昨日から、ファイルクラスの製造に入っています。ただ、Prototype EVEではファイル関連という扱いだった関数が、EVEシステムではオブジェクト指向プログラミングにする都合上、ファイル、データ、アップロードと、かなりクラスごとに細分化されることになりました。
 その中に、zipファイルを解凍するクラスがったのですが、圧縮する関数がない・・・。理由は、OSのコマンドをプログラム内で直接実行しているから・・・。だけど、EVEシステムではそんな変則的なことはせず、PHPプログラムで実行できることはすべてPHPで実行します。そのため、新たにプログラムを製造しようとしたのですが、いろいろやることある中、これから、調べるのはめんどくさいということで、ChatGPTに以下のようなお願いをしました。

 PHPでファイルを、zipファイルで圧縮する方法について例示してください。


今読むと日本語が変・・・。それはさておき、以上のようなお願いに対して、ChatGPTは以下のようなプログラムを作ってくれました。


<?php

// 圧縮するファイル
$files = array(
'file1.txt',
'file2.txt',
'file3.txt'
);

// 新しいZipファイルの名前
$zipName = 'compressed_files.zip';

// ZipArchiveのインスタンスを作成
$zip = new ZipArchive();

// 新しいZipファイルを作成し、開く
if ($zip->open($zipName, ZipArchive::CREATE) === TRUE) {
// 各ファイルをZipに追加
foreach ($files as $file) {
// 追加するファイルのパスを指定
$filePath = __DIR__ . '/' . $file;
// ファイルが存在するか確認してから追加
if (file_exists($filePath)) {
// 第2引数には、Zipファイルに追加する際のファイル名を指定
$zip->addFile($filePath, $file);
} else {
echo "ファイルが見つかりません: $file";
}
}

// Zipファイルを閉じるM
$zip->close();

echo "ファイルが圧縮されました: $zipName";
} else {
echo "Zipファイルを作成できません";
}
?>



日本語が変にもかかわらず、ChatGPTは気を利かせて、1ファイルを圧縮するぐらいにしか考えていなかったお願いに対して、複数のファイルをzipファイルへ圧縮するプログラムを例示してくれました。。
 今回は、クラスへメソッドとして追加するという目的で、プログラムの作成をお願いしたのですが、このロジックで十分です。
 あとは、このロジックを解析しながら、クラスにメソッドとして取り込むだけです。
 短い質問で、効率的にプログラムを作ることができました。

[あとがき]
 プログラミングの一部をChatGPTへお願いしたことにより、これから、クラスの製造は速くなりそうです。ただ、もっと複雑なことをさせたい!!!だけど、どうお願いしたらいいのか分からない???
 これから、日々使い方を研究し、作業効率を上げていきたいと思います。

 では、また!!!

2024年02月22日

PHPにおける正規化表現 〜プログラミング研究室〜

 こんにちは!
 ナビゲータのEVEです。
PHP.jpg
 では、本日は、早速正規表現について見ていきましょう!

[正規表現]
 昨日のおさらいになりますが、正規表現とは、いろいろな入力データを、一定の規則に基づき、統一的な表現で出力するものです。
 例えば、株式データを扱う場合、1株10円台から数十万円単位の株式までいろいろあります。1株10円、100円程度の株なら一目でいくらか分かるのですが、1株数十万円の場合、カンマで区切られていないとわかりません。そのため、1株千円以上の株価は、3桁ずつに区切りたいというニーズが生まれます。その時などに利用するのが、正規表現です。

[正規表現の実際]
 では、実際に、数値123456789をカンマ区切りする、正規表現を見ていきましょう!

/(\d)(?=(\d{3})+$)/


ただ、数字を3桁ずつに区切りたいだけなのに複雑な作りになっています。
 昨日、以上の正規表現には、メタ文字が使われ、そのメタ文字には、以下のようなモノがあるという話をしています。

\ 多目的に使う一般的なエスケープ文字
^ 検索対象(複数行モードでは行)の始まりを言明
$ 検索対象の終わりあるいは終端の改行文字の前(複数行モードでは行の終わり)を言明
. 改行を除くすべての文字にマッチ(デフォルト時)
[ 文字クラス定義の開始
] 文字クラス定義の終了
| 選択肢の開始
( サブパターンの開始
) サブパターンの終了
? ( の意味を拡張/0 または 1 回マッチ/なるべく少ない回数だけマッチ
* 0 回以上の繰り返し
+ 1 回以上の繰り返し
{ 最小/最大を指定する量指定子の開始
} 最小/最大を指定する量指定子の終了
/ メタ文字の開始と終了を示す。
\ メタ文字の開始と終了を示す。
出典元 【5分でまるっと理解】PHP正規表現の使い方まとめ(エンジニアの入り口)


以上の情報からどのようなことをしているのか、見ていきましょう!なお、最初のスラッシュ(/)なのですが、メタ文字の開始と終了を意味します。そして、最後のuは、、UTF-8エンコーディングを使用している場合に、正規表現のパターンを適切に処理するために必要な表現だそうです。通常、PHPで利用する関数は、UTF-8に対応しているため、最後のuは、呪文のように定義する必要があります。私の開発環境は、すべて、UTF-8で構成されていますが、Windowsで開発している人で、SHIFT-JISを標準文字コードとしている場合は、まず文字コードをUTF-8に変換したうえで、正規表現を利用しないと、想定しない出力結果になります。
 \B は、単語境界の直前や直後ではない位置を示す特殊なマッチング条件です。この記述がないと、3桁の数値の位置は特定できるのですが、特定後改行されてしまいます。
 続きまして、\Bのサブパターンの開始を意味する、カッコ"()"の中身を見ていきましょう!
 カッコ内の最初の?は、マッチングパターンである続くカッコの中身を指しています。それ以降については、\dは、数値を指しており、鍵カッコ"{}"はその数値の桁数を指しています。ちなみに、dは、digit(数字)を指しています。
 そして、+は、(\d{3})が1回以上繰り返されることを意味しています。
 最後に、(?!\d)は、?を説明している(\d{3})の否定語読みとなり、(\d{3})のパターン直後は続かないという条件を指します。ちなみに、エクスクラメーション(!)は、メタ文字ではなく、演算子です。
 以上で、正規表現をすべて説明しましたが、分かりましたでしょうか?ちなみに、この表現の中では、カンマ(,)は表現されておらす、これから紹介する、関数により提供されるモノらしいです。そこが、ちょっと、分かりにくい・・・。

[PHPで利用する正規表現関数]
 PHPでは、以下の2関数を用いて、正規表現したパラメータを処理します。

preg_replace
preg_match


多分以下のようなロジックで、数値を3桁区切りで表示できると思われます。

$number = 12345678
echo preg_replace('/\B(?=(\d{3})+(?!\d))/u', ',', $number);


出力結果は、

123,456,789

となります。

[あとがき]
 やっぱり、複雑・・・。ChatGPTに解説してもらわないともしかしたら、理解できなかったかもしれません。なお、メタ文字に関する情報を、【5分でまるっと理解】PHP正規表現の使い方まとめ(エンジニアの入り口)を見て提供しましたが、今回の調査で情報が不足していることが分かりました。追加した情報については、青字で記していますので、ご確認ください。
 まっ、書き終わってからなんですが、数値を3桁に区切って表示したいだけの場合、number_format()を利用すべきです。この関数だと数値を入力するだけで、数値を3桁ごとに区切って表示してくれます。ちなみに、カンマ区切りになった数値は、整数ではなく、文字列となることには、注意が必要です。

 では、また!

2024年02月21日

正規表現 〜プログラミング研究室〜

 こんにちは!
 ナビゲータのEVEです。
プログラマ.jpg
 昨日は、以下のX(旧ツイッター)のコメントに反応し、「システムエンジニアが目指す中小企業診断士」を更新しました。

「出題範囲の知識がムダだとは言わないが、名刺に中小企業診断士って書いてある奴は地雷」


以上の発言を受けて書いた、昨日のブログの記述に、不明瞭なところがあるので、一言でまとめます。

 現在の経営は中小企業診断士で教えるそれとかなり乖離があり、突っ込みどころ満載の状態です。そのような経営状況で、日本は失われた30年という闇の中にいます。しかし、去年から脱却できそうな所まで回復してきました。そんな現状、中小企業診断士という資格を持つ人の活躍の場は広がりつつあります。


 だから、一方的な以上のいいようは、言いすぎなのではないかなって感じています。まっ、多分ですが、以上の発言をしている人は、真剣に、中小企業診断士の勉強をしたことがないのだと思います。
 ただ、昨日のブログの中で、「うまくいかなかった場合のリスクは、成功した場合の成果をかなり上回る」という印象は現在も変わっていません。慎重な発言、対応を求められていることに注意しなければなりません。

[正規化]
 では、本日までの開発状況について御報告します。

 本日、先週末終える予定だった、文字クラスの製造が昨日終わり、ちょっと、遅れ気味な状況です。そして、本日は、数値クラスの製造に入っており、完成は明日を予定しています。
 ただ作るだけなら本日完成できるのですが、1つ知識として定着させたい情報がありました。それは、正規表現です。
 正規表現とはどのようなモノなのか、ChatGPTに聞いてみましょう!

 PHPで使用する正規表現(regular expression)は、文字列のパターンを記述し、そのパターンに一致する文字列を検索、置換、抽出するためのパターン記述言語です。正規表現は、様々なプログラミング言語やツールで広く使用されており、特定の文字列パターンに対する柔軟な検索・置換処理を行う際に非常に便利です。


 捕捉すると、いろいろな入力データを、一定の規則に基づき、統一的な表現で出力するものです。
 Prototype EVEでも、重複するスペースを削除するなどのケースで、正規表現を使用していました。それは、インターネットで公開されている情報をそのままコピペしただけです。正直言ってどうして、そのような記述になっているのか理解しないまま利用していました。
 ただ、技術者としてそれでいいのかという疑問があり、きちんと知識として習得するために時間を取ることにしました。

[利用する場面]
 先ほど、重複するスペースを削除するという場面で利用しているという話をしましたが、現在問題となっているのは、カンマ区切りの数字です。
 ただ、やり方だけを知りたいなら、ChatGPTに聞けばできるのですが、それでは、知識とは言えません。そこで、正規表現について解説しているサイトで情報をゲットし、Knowlegeシステムへ編集し登録しました。
 ただ、それを見ただけではまだよく分かりません。そこで、カンマ区切りにする、正規表現をChatGPTに教えてもらった結果と、以上の情報を利用し分析したいと思います。

[正規表現のメタ文字]
 それでは、正規表現ではどんなメタ文字が利用できるのか調べて見ましょう。以下に記した情報は、エンジニアの入り口から写させていただいた情報です。

\ 多目的に使う一般的なエスケープ文字
^ 検索対象(複数行モードでは行)の始まりを言明
$ 検索対象の終わりあるいは終端の改行文字の前(複数行モードでは行の終わり)を言明
. 改行を除くすべての文字にマッチ(デフォルト時)
[ 文字クラス定義の開始
] 文字クラス定義の終了
| 選択肢の開始
( サブパターンの開始
) サブパターンの終了
? ( の意味を拡張/0 または 1 回マッチ/なるべく少ない回数だけマッチ
* 0 回以上の繰り返し
+ 1 回以上の繰り返し
{ 最小/最大を指定する量指定子の開始
} 最小/最大を指定する量指定子の終了

出典元 【5分でまるっと理解】PHP正規表現の使い方まとめ(エンジニアの入り口)



[あとがき]
 以上のメタ文字を駆使して正規表現を作ります。見た目チョット複雑です。ただ、今までの経験上じっくり読めば理解することは可能だと思っています。
 明日、どんなことをしているのか、一緒に見て、分析していきましょう!

 では、また!

■【5分でまるっと理解】PHP正規表現の使い方まとめ(エンジニアの入り口)
https://eng-entrance.com/php-regularex

2024年02月17日

運用時に使用するPHPプログラムを暗号化する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 昨日、X(旧ツイッター)でつぶやきましたが、日本ニュースステーションという番組で、AIについてかなりでたらめな報道をしていました。
 細かいことを書くと長くなるので、ポイントだけ話すと、生まれたばかりの生成AIが、犬の動画を作ったり、女性が歩く動画を作れるようになったという報道です。まっ、この業界の技術のスピードは、かなり早く何があっても驚かないのですが、こればかりはいただけません。だって、生まれたてのAIが、犬とか女性がどういうモノなのか知るわけがないからです。
 全くデータがない状態から、AIが将棋とかが強くなると言うケースはあるのですが、それでも、将棋、囲碁のルールは最初に教えなければいけません。
 東大の教授がその番組の中で発言をしていましたが、自分のコメントが使われるのだから、一度中身を見た方が良かったのでは?っと思った昨晩の、報道でした。
 では、今日は、昨日の続きの検討です。

[プログラムをお客さまに見せたくない]
 昨日は、大きすぎるプログラムサイズへの対応を考えましたが、その中で、リリース方式という機能を、構成管理システムへ追加することにしました。その方式の中で、3つのやり方を検討しています。

❶製造したプログラムを以下の項目を指定してアップロードする。
 @プログラム概要
 Aシステムバージョン
 Bプログラムバージョン
 Cリリース日
  ・日付指定
  ・即時反映
 Dリリース方式(New)
  1)ソース(原本)
  2)不要ロジック削除
  3)暗号化(不要ロジック削除)



 D1)については、デバック環境へ、何の変更も加えずリリースする方法です。コンピュータ的に不要でも、開発者からするとかなり重要な情報が含まれています。それを削除しないように、アップロードしたままをデバック環境へリリースする機能です。
D2)については、本番環境へコメントなどの不要ロジックを削除したうえでリリースするという機能です。これは昨日検討した、プログラムサイズが大きくなったことにより、システムへの負担が大きくなってきたということへの対応です。
 D3)については、不要なロジックを削除したうえで、リリースしたプログラムを暗号化するという方法です。
 今回のシステム真剣に作っています。そして、販売も視野に入れて製造しているのですが、販売先でソースを見られ突っ込まれるのが正直言って嫌(笑)!
 今回のシステムは、前回と違い、ChatGPTにデバックしてもらったうえでリリースするので、一般的な規約とかと大きく違ったものは出来上がるということはないと思うのですが、システムに関連するすべての仕様を読み理解しているわけではありません。そのため、システム仕様でふさわしくないといわれる方法でも、できるならやってしまいます。
 数億円といった費用をかけたシステムなら、そんなことはないということを、私一人で作るシステムでは、やってしまう可能性があるのです。

[PHPを暗号化し運用する]
 そんなことできるのっていうことで、Bardで調べてみたのですが、できるそうです。

 PHPプログラムを暗号化して納品し、運用することは可能です。お客様のソースコードを保護するという意味では有効な手段と言えるでしょう。ただし、いくつか注意点があります。

❶暗号化方法
 PHPプログラムの暗号化には、さまざまな方法があります。代表的なものは以下の3つです。
@ファイル暗号化
 1)opensslなどのツールを使用してファイルを暗号化できる」
Aコード難読化
 1)変数名や関数名を意味不明な文字列に変換
 2)ソースコードの構造を複雑にする
B仮想化
 1)PHPプログラムを独自の仮想マシン上で動作させる

 それぞれの方法にはメリットとデメリットがあり、プロジェクトの要件に合わせて選ぶ必要があります。

2. 動作環境
 暗号化されたPHPプログラムを実行するには、専用のデコードツールや仮想マシンが必要になります。そのため、お客様の環境にそのツールや仮想マシンが導入されていない場合は、事前に準備しておく必要があります。

3. デバッグ
 暗号化されたプログラムは、デバッグが非常に困難になります。問題が発生した場合、原因を特定するのが難しく、解決に時間がかかる可能性があります。

4. パフォーマンス
 暗号化処理やデコード処理には、多少のオーバーヘッドが発生します。そのため、プログラムの処理速度が遅くなる可能性があります。

5. セキュリティ
 暗号化技術は常に進化しており、完璧な暗号化方法は存在しません。悪意のある攻撃者によっては、暗号化を解読されてしまう可能性もあります。

 これらの点を考慮した上で、お客様のプロジェクトに適した暗号化方法を選択する必要があります。


 ちょっと、私が聞きたい内容と不整合な解答もあり、製品としては、どのようなモノがあるのか聞いてみました。

1. Zend Guard
2. ionCube Encoder
3. SourceGuardian
4. PHP-Obfuscator
5. Phalcon



[あとがき]
 製品そのものを調べれば実際にできるかどうか分かるでしょう?
 今回のシステムですが、バグがあることが前提ではありません。ブラックボックス試験では正常に動くが、ロジックを1ステップ1ステップ見た場合、PHPの製造元が意図しない方法を採用しているとったケースへの対応です。
 お客様にソースを見られたくないという要望に対して、暗号化という方法の他に、Bardからの解答の中に、難読化というものがありました。その難読化の方法として、GoogleJavaScriptを提供する方法が利用できるかもしれません。
 まっ、とりあえず、自分が作らないと前に進まないプロジェクトなので、がんばります!

 では、また!!!

2024年02月16日

プログラムサイズが長すぎる 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 PHP8による開発が、なかなか進んでいない状況なのですが、文字クラスのステップを見て驚いています。
 ドキュメントを作ることをしない私が作るシステムは、コメントが非常に多いのですが、そのプログラムステップ数が、3,120行あります。文字クラスは今週末ぐらいには完成しそうなのですが、4,000行近くになりそうです。そのような状況を確認しながら、ちょっと、考えさせられています。

[メモリの解放されるタイミング]
 やはり、1つのクラスで4,000ステップあるのは長すぎます。しかも、文字クラスに、他のクラスもインポートしているので、かなりメモリに負荷を与えそうです。ただ、それを頭で考えていても答えは分からないので、ChatGPTに使用したクラスがどのタイミングで解放されるのか聞いてみました。

 require_onceで呼び出されるクラスがメモリから消えるタイミングは、そのクラスが不要になり、参照されなくなったときです。PHPでは、ガベージコレクション(Garbage Collection)と呼ばれる仕組みがあり、不要になったオブジェクトや変数は自動的にメモリから解放されます。
 具体的には、以下のようなタイミングでクラスがメモリから消えます:

1)そのクラスのインスタンスがすべて参照されなくなった場合。
2)クラスを参照している変数や配列要素などが他の値に上書きされた場合。
3)スクリプトの実行が終了し、PHPプロセスが終了した場合。

 セッションの終了とは直接関係ありません。クラスの使用が終了したかどうかは、そのクラスを参照する変数やインスタンスが解放されたかどうかによって判断されます。


以上の内容を読んでみると、セッション終了を待たずにメモリ解放されるようなので、もしかしたら気にする必要はないのかもしれません。

[構成管理システム]
 ただ、それでも気になります。そこで、構成管理システムで対応しようと検討を開始しました。構成管理システムでは、以下のような感じで管理しようと考えています。

@製造したプログラムを以下の項目を指定してアップロードする。
1)プログラム概要
2)システムバージョン
3)プログラムバージョン
4)リリース日
 ・日付指定
 ・即時反映
5)リリース方式(New)
 ・ソース(原本)
 ・不要ロジック削除
 ・暗号化(不要ロジック削除)


細かいことはまだ決まっていないので、割愛しますが、以上の構成管理システムにおいて何が注目点かというと、プログラムは、アップロード後すぐにシステムフォルダに反映されるのではなく、データベースで管理したうえで、指定したリリース日にプログラムをリリースします。以上のような方式だったら、以下の流れで管理することができそうです。

@データベースで管理する場合は、通常のプログラムソースで管理する
Aリリース時にはコメント等、プログラムを実行する上で不要なものはすべて削除してリリースする

以上のような方式だったら、プログラムサイズはかなり抑えることができそうです。ただ、いろいろと調べてみると、コメント等を削除した場合、デバックが大変そうです。そのため、テスト環境とかでは、コメント付きプログラムでも動作することができるように、5)にリリース方式を追加したほうがいいでしょう?

[あとがき]
 以上の構成管理システムを今までコンテンツ管理システムと呼称していたのですが、システム製造開始月は12月予定でした。しかし、コンテンツ管理システムで、コンテンツをリリースするという条件が入ると、そのリリース先を管理するシステムも必要になります。いろいろと頭の中で考えてみたのですが、かなり、複雑なモノになりそうです。

 もうちょっと考えて、再スケジュールしたほうがよさそうです。

 では、また!

2024年02月07日

本番環境の構築検討 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラマデスク.jpg
 開発について書こうかなって考えていましたが、関数をクラスに変換する作業だけなので、書くネタがありません。そろそろ、公開環境の整備をしようかなとは思っています。
 そのため、今日は、以前環境を作った時のブログを見直しています。本日は、まず、手順から確認していきましょう!

[構築手順]

■インストール
@Ubuntu
AApache
BPHP
CPostfix
DClamAV


 私がシステムを構築する上で利用するプログラムは以上の通りです。
 外部からのすべてのポートを閉じた上で、各アプリケーションをインストール直後にアップデートする流れになります。そして、ClamAVはインストール直後に構築します。ClamAVがインストールが終わったら、次にPostfixを構築します。ApachePHPは現時点では、インストール直後のままで放置します。
 それでは、第二弾として以下の作業に入ります。

■セキュリティの導入
@Apacheのセキュリティ設定
APostfixの導入(メールのポート開放)
BSSL/TLSの導入


SSL/TLSを申し込む前に、メールを構築しないとまた時間ばかりかかってしまいます。そして、忘れてはいけないのは、システムとして閉じているポートを開放することです。
以上の作業の次は、実際にやるかどうか、現在検討中ですが、以下の作業をするかもしれません。

@PowerShellのインストール
APythonのインストール


当初、ClamAV構築時には、Ubuntuで用意しているシェルを利用するのですが、今後すべてのシェルをPowerShellにする予定です。WindowsでPowerShellをいじったことがちょっとだけあるのですが、Ubuntuで全くありません。事前に調べ、このブログでその調査内容を報告したいと思います。

[あとがき]
 やろうと思った瞬間から、XServer上のすべての環境のバックアップを取ろうとしています。主要な所だけでいいかなとは思ったのですが、今まで、中途半端で困ったことが度々あったので、まっ、時間がかかりますが、全部取ることにしました。
 そんな本日、藤井王将がまた記録を書き換えようとしています。そのことを昼のニュースで聞いて、実況中継を見ています。他の先生方も日々精進している中、なんで藤井王将だけなぜこんなに勝つことができるのか非常に疑問であるのと同時に、尊敬のまなざしで見てしまいます。天才という言葉で表現できるのと同時に、日々精進している他の先生以上に努力をしているのだと私は思っています。

 では、また!

2024年02月06日

AIを開発で利用する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
人工知能.jpg
 こちらのブログではお久しぶりです。旅行に行ったり、営業キャッシュフローの調査に手間取ったりで、今日からやっと通常営業に戻れたっといった感じです。
 その間、プログラムを地道に作っていたのですが、製造する日もあれば、製造しない日もあったりして・・・。土、日に2日かけてプログラムを作るという話もしたような気もしましたが、それも現在は、できていない状況です。
 現在はどうかというと、中小企業診断士の問題を解いた合間にメソッドを作るようにしようとはしています。理由は、中小企業診断士の問題を解く作業は、非常に飽きるから・・・。スマート問題集は、まだいいのですが、過去問セレクト演習は苦痛です。回りくどい紛らわしい悪文(?)を読むのは、10問が限界です。プログラムはそのストレスがたまった合間に製造しようとしています。

[プログラム開発の進歩]
 プログラム開発をするのに、進歩がありました。それは、ChatGPTを使って開発する手法です。
 今までも、セキュリティとか技術的な話について、まずは相談していました。ただ、それ以外に、プログラム開発で以下のような利用をしています。

@PHP5で使用していた関数の有効性
Aプログラムの構文に関する質問
Bデバック

 @では、Prototype EVEで(PHP5)で使用していた関数を、メソッド(PHP8)に変換していて、その作業中に、Prototype EVEで利用していた関数が、PHP8でも使用できるのかどうか聞き、同関数の仕様について回答してもらっています。
 これにより、手戻りが少なくなるのと同時に、関数の現状及び今後の予定などを知ることができます。
 Aでは、メソッド製造しながら、構文について確認しています。Prototype EVEではこんな作りにしていたんだけれど、EVEシステムではこうしたいといったケースがある場合、以前なら、デバック環境で動作するかどうか検証確認作業をしてから、実プログラムを作っていたのですが、現在は、とりあえずプログラムを作ってしまいます。作ってから、同プログラムが動くかどうかChatGPTに確認するという作業をしています。作る前に聞ければいいのですが、質問の仕方も難しいですし、メソッドって長くても2〜3百行程度なのでこれが、一番速い製造方法だと現在は思っています。
 Bでは、1クラス製造ごとに、全てのプログラムをChatGPTのテキスボックスに挿入し、デバックしようかなって考えています。ただ、文字数制限があるみたい・・・。4096文字っていうから、メソッドごとになるのかな?ただ、やらないより、やった方が最終デバック楽かもしれない・・・。やろうとしているデバック方式、ビックバンデバックなのでSIのときかなり手こずると想定されるんですよね?ただ、ChatGPTにデバックを依頼することにより、負荷が軽減されると考えています。

[3つのAI]
 現在、ChatGPT、CopilotBardの3つのAIを使用していますが、それぞれ個性的です。
 ChatGPTは理屈っぽい・・・。システム開発には向いているのですが、中小企業診断士の問題とかには使えません。私が望んでいる回答は、Studyingの講義の内容を補足するレベルなのですが、それを飛び越えて、難解な回答になっています。
 それに反して、Copilotは、中小企業診断士で出題される問題に対して、的確に想定の範囲内の解答をしてくれます。しかも、どのWebサイトから参照しているのか、リンクを表示してくれるので、行間の内容が分からない場合など、当該サイトで確認することが可能です。ただ、1つの質問に対して、5回以上連続して質問できません。そのため、連続的に質問をしなければいけない、システム開発などでは不向きだと考えて、システム開発ではほとんど利用していません。
 Bardは、まだ使いはじめて間もないので、よくわからないというのが正直なところですが、強いて言うなら、ChatGPTとCopilotの中間に位置するAIだと思います。解答そのものは、Copilotに近いのですが、説明が長い・・・。簡潔な回答をお願いすると、いまいちな回答になるような気がします。

[あとがき]
 各社のどのAIも一長一短で、かつ進化の途中なので、今後も引き続き利用し、どのような進化をし、どれぐらい使い勝手が良くなったのかを日々検証したいと思っています。
 まっ、とりあえず、以前の開発よりは楽になりました。
 
 そうそう、TBSが自社システムを、言葉で指定するだけでアプリを自動生成しようとしています。いわゆる生成AIを利用してプログラム開発をしようとしているのですが、ここまで来たかっていう感じです、ただ、これに対して、まだ、懐疑的です。
 日々AIを使っているのですが、AIの回答が100%正しいとは思えません。どんどん深掘りしていけば、間違っていましたって謝ってくるし・・・。
 曖昧なモノだったらいいのですが、プログラムから出力されるアウトプットは厳格さを求められます。特に基幹系は厳格さをもとめられるでしょう?ただ、AIって、使わないと進化はありませんしね???

 そんな記事を横目に、自分は、今まで通りの開発スタイルを維持しながら、AIを利用していきたいと考えています。

 では、また!

■TBSもシステム内製を始めた、決め手は生成AI対応のノーコードツール(日経XTECH)
https://xtech.nikkei.com/atcl/nxt/column/18/02732/012500001/

2024年01月21日

DBへ接続するためのユーザIDとパスワードの管理方法の最終検討 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 昨日までは、DBへ接続するユーザーIDとパスワードを管理する方法について検討してきましたが、ブログアップロード後ChatGPTから以下の指摘がありました。

セキュリティ上の理由から、通常はプロジェクト内で利用するファイルには相対パスを使用する方が一般的です。
❶可搬性(ポータビリティ)
 相対アドレスはプロジェクト内のファイルやディレクトリの関係性を考慮して指定されるため、プロジェクトの構造が変更された場合でも相対パスが適切に動作します。絶対パスを使用すると、プロジェクトを別の場所に移動させたり、他の環境にデプロイする際に手動でパスを修正する必要があります。
❷セキュリティ
 絶対パスを直接指定すると、不用意にシステム内のファイルにアクセスするリスクがあります。相対パスを使用することで、必要なファイルやディレクトリへのアクセスを制限しやすくなります。
❸プロジェクトの可読性とメンテナンス性
 相対パスはプロジェクト内の構造を反映しているため、コードが他の開発者やメンテナンス担当者にとって理解しやすくなります。絶対パスを使用すると、どのファイルやディレクトリが指定されているのかを理解するのが難しくなります。


 今回、etcに設定し利用しようとしてるのですが、以上の指摘だとrequire_onceの記述が複雑になります。しかも、❷が気になります。以上のようなことを考慮すると、配置先は限定され、@とAを利用するのは難しくなります。

@INIファイル
AJSONファイル
B環境変数
CPHPファイル


なお、以上にChatGPTがプロジェクトと記述しているその内容をいろいろと調べた結果、var配下は一応Apacheは認識でき、それをプロジェクトと言って問題ないようです。但し、その調査は、十分し尽くしたと言えるレベルではないので、後日訂正するかもしれません。

[最終検討]
 ChatGPTとの長い時間会話した結論ですが、環境変数によりDBへ接続するためのユーザーIDとパスワードを設定し、設定したファイル値を$_SERVERで取得する仕様にしようと現在は、考えています。その場合、Apacheルート配下へDB接続するユーザーID、パスワードを管理するファイルを配置する必要はありません。しかも、$_SERVER変数として、プロジェクト内ならどこからでも取得することが可能です。ただ、この場合の問題は、設定するファイル名が限定されます。それは、ちょっと、いただけません。

[あとがき]
 DBへ接続するためのユーザIDとパスワードの管理方法については、問題はあるものの、今回はこれで、最後としたいと思います。$_SERVER変数への設定は、現在ファイル名が限定されるという問題はありますが、SALT値を導入することができれば、セキュリティが格段と上がります。という観点から言うと、以上の検討はEVEシステムでの利用となりそうです。ただ、Prototype EVEでは、ファイル名が限定される以上の方法は問題があると考え、別の方法で対応します。ここで、それを書こうとしたのですが、セキュリティ上問題があると思われますので、この辺までとさせていただきます。

 では、また!

2024年01月20日

サーバーでのユーザID/パスワードの管理方法 〜システム管理研究室〜


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 昨日までは、DBへ接続するためのユーザーIDとパスワードをハードコーディングする場合、どうしたらいいのかという検討をしてきました。
 本日は、同ユーザIDとパスワードをどのような形で管理をしたらいいのか具体的な検討に入りたいと思います。

[管理方法]
 ChatGPTは管理する形式について、一例ですが、以下の方法を提案しています。

@INIファイル
AJSONファイル
B環境変数
CPHPファイル


 以上のファイルをどのように管理するのかその保管方法について以下の内容で提案しています。

1)ファイルのアクセス権限
2)機密情報の暗号化
3)ファイルの場所
4)サーバーのログに記録されないように



[検討]
 ファイルを指定して、中身に定義している変数の内容を取り出すのはどの形式のファイルでも同じようです。そのため、プログラミングの生産性という意味では、@〜Cにおいては、同じと言うことになります。それでは、次に1)〜4)のセキュリティについて考えて見ましょう。
 1)は当然リリース時に実施します。所有者はApacheでそれ以外のユーザーに利用させないようにします。現在は以上のように設定していますが、EVEシステムでは構成管理システムで自動で行う予定としています。
 2)はどうでしょうか?DBへ接続するユーザーとパスワードのユーザを格納するファイルを暗号化した場合、当然復号しなければ利用できません。それを、データベースを利用するたびに実施するのでしょうか?この方法は現実的ではありません。私の作るシステムでは利用は難しいようです。
 3)ファイルの格納場所ですが、どこがいいでしょうか、Windowsユーザーにはあまり知られていませんが、Linux系OSの各フォルダには役割が決まっています。この機会に、Ubuntuで利用している各フォルダの役割についてChatGPTに解説をしてもらいましょう!

❶/bin (Binary):
役割: このディレクトリには、システムの基本的なコマンドやプログラムが格納されています。システムが実行されているときに必要なコマンドがここにあります。
❷/boot:
役割: システムの起動に必要なブートローダ、カーネルイメージ、および関連するファイルが格納されています。ブートプロセスで使用されます。
❸/dev (Device):
役割: デバイスファイルが格納される場所です。デバイスファイルはハードウェアや仮想デバイスと通信するための特殊なファイルです。
❹/etc (Editable Text Configuration):
役割: システムの設定ファイルが格納される場所です。ほとんどのシステムの設定はこのディレクトリ内のファイルで管理されます。
❺/home:
役割: ユーザーホームディレクトリがここに格納されます。各ユーザーはここに自分専用のディレクトリを持ち、そこに個人用のファイルや設定が保存されます。
❻/lib (Library):
役割: 共有ライブラリが格納される場所です。システムとアプリケーションプログラムが使用する共有のライブラリがここにあります。
❼/media:
役割: 可能な場合には、リムーバブルメディア(USBドライブ、CD-ROMなど)が自動的にマウントされるディレクトリです。
❽/mnt (Mount):
役割: 一時的にファイルシステムをマウントするためのディレクトリです。通常、外部のデバイスやネットワークファイルシステムをここにマウントします。
❾/opt (Optional):
役割: オプションのソフトウェアパッケージが通常ここにインストールされます。これにはサードパーティのアプリケーションが含まれます。
❿/proc (Process):
役割: カーネルとプロセスに関連する情報が仮想ファイルシステムとして提供されます。実行中のプロセスやシステムのステータスにアクセスできます。
⓫/root:
役割: rootユーザーのホームディレクトリです。通常のユーザーのホームディレクトリは/homeにあります。
⓫/run:
役割: 実行時に生成されるデータやプロセスの一時ファイルが格納されます。一時的なデータやPIDファイルがここに配置されます。
⓬/sbin (System Binary):
役割: システムの管理者が使用する管理コマンドやシステム設定に必要なプログラムが格納されています。
⓭/srv (Service):
役割: システムが提供するサービスに関連するデータが格納される場所です。例えば、Webサーバーのドキュメントルートがここに配置されることがあります。
⓮/sys (System):
役割: カーネルとハードウェアに関する情報が提供されるディレクトリです。/procと同様に、仮想ファイルシステムです。
⓯/tmp (Temporary):
役割: 一時的なファイルが格納される場所です。通常、システムが再起動するときに削除されます。
⓰/usr (Unix System Resources):
役割: システムのほとんどのプログラムやファイル、ライブラリがここに配置されます。通常は共有されるリソースが格納されるディレクトリです。
⓱/var (Variable):
役割: システムの変動するデータ(ログファイル、データベースファイル、メールなど)が格納される場所です。頻繁に変更されるデータがここに保存されます。


以上の調査結果から、etcがふさわしいようです。
 4)については、セキュリティにおいてログの管理方法を検討する機会があります。その時にどうしたらいいのか検討したいと思います。そのため、ここでの検討は省略します。

[あとがき] 
 今日も時間がきましたので、この辺までとさせていただきます。

 現在、クラスを製造していますが、そろそろ、文字クラスの製造の終わりが見えてきました。以前、以下のクラスを作ると話していました。

■DB関連class ← 作成済み
・データベース検索メソッド
・Fetchメソッド
・テーブル一覧取得メソッド
・SQLdbqueryメソッド
・レコード追加メソッド
・レコード更新メソッド
・レコード削除メソッド
・トランザクション開始メソッド
・コミットメソッド
・ロールバックメソッド
・レコード件数取得メソッド
・エラーメッセージ取得メソッド
・エラーNo取得メソッド
・トランザクション変数取得メソッド


■ファイルClass
・ファイル取得メソッド
・ファイルコピーメソッド
・ファイル書き出しメソッド
・ファイル削除メソッド
・ファイル読込メソッド
・コンテンツ取得メソッド

■数値Class
・数字チェックメソッド

■文字Class
・配列⇔文字列変換メソッド
・乱数取得メソッド
・文字列編集メソッド
・文字列部分取り出しメソッド
・指定文字列検索メソッド
・指定文字列削除メソッド
・html⇔文字列変換メソッド

■時間Class
・現在日付取得メソッド
・日付取得メソッド
・タイムスタンプ編集メソッド

■セキュリティClass
・SHA3ハッシュ値取得メソッド

■配列Class ← 作成済み
・配列結合メソッド
>

■メールClass
・メール送信メソッド

■メッセージClass
・メッセージ出力メソッド
・エラーログ出力メソッド


ただ、予定が変わり、現在は、文字クラスなら、Prototype EVEで利用していた関数をすべてクラスに変更しています。理由は、文字クラスならそのクラスで文字列に対する機能をプロパティメソッド等という形で提供していることを作っている途中で悟ったからです。そのため、配列Classは1つしかメソッドを記述していませんが、それ以外にもメソッドを製造しています。
 その他のクラスも同様に製造する予定です。そのような製造方針で作っていて、2月末日までに製造が完了するかどうか、あやしくなってきました。これから、速度を上げて製造していきたいと思います。

 では、また!

2024年01月19日

サーバーでのユーザID/パスワードのハードコーディング 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ワーク.jpg

 昨日までは、Webサーバー側からDBに接続するための、ユーザーID、パスワード保存するためにどんなセキュリティがあるのか検討し、そのセキュリティの問題点について考えてきました。そして、パスワードをPHPから定期的に更新することについては、リスクの軽減になるが、同ユーザーIDとパスワードの保存方法について細心の注意が必要だとChatGPTから指摘がありました。同4項目の指摘について、現在のPrototype EVEでの対応方法について考えてみました。❶〜❸までは見通しがたったのですが、❹のユーザーIDとパスワードのハードコーディングについて問題が解決できていないので、引き続き検討していきます。

❶権限の過剰な付与:
❷SQLインジェクションのリスク
❸暗号化されていない通信
❹ハードコーディングの問題:



[ユーザID、パスワードのハードコーディングの検討]
 では、ChatGPTはどのような保管方法が高いセキュリティで保護されるといっているのでしょうか?

 セキュアな設定ファイルは、機密情報(データベースのユーザー名、パスワード、APIキーなど)を保持し、アプリケーションがそれらの情報を安全に利用できるように設計されたファイルです。以下は、一般的なアプローチとファイルの形式のいくつかの例です。ただし、重要なことは、どのようにそれを利用し、保管するかです。

@INIファイル
 INI形式のファイルは、設定情報をキーと値のペアとして保存するのに適しています。例えば、config.iniというファイルを作成し、そこにデータベース接続情報を保存することができます。
AJSONファイル
 JSON形式のファイルもキーと値のペアを使用して構成でき、設定情報を格納するのに適しています。
B環境変数
 環境変数を使用して機密情報を設定する方法もあります。これは特にクラウド環境などで一般的です。
CPHPファイル
 PHPファイルに設定情報を含めることも可能です。ただし、この場合はファイルが外部から直接アクセスされないようにするなどのセキュリティ対策が必要です。


 では、重要だといっていることについてChatGPTに再質問をしてみました。

1)ファイルのアクセス権限
 設定ファイルには機密情報が含まれる可能性があるため、適切なファイルアクセス権限を設定する必要があります。これにより、不正なユーザーやプロセスからのアクセスを制限できます。
2)機密情報の暗号化
 パスワードなどの機密情報は、可能な限り暗号化された形で保存されるべきです。ファイルそのものは平文であるため、機密情報を保護するためには別途暗号化の手段を検討する必要があります。
3)ファイルの場所
 セキュリティの観点からは、設定ファイルは外部から直接アクセスされないように配置されるべきです。また、Webサーバーなどが公開するディレクトリ内には配置しないようにしましょう。
4)サーバーのログに記録されないように
 設定ファイルには機密情報が含まれるため、サーバーのログに出力されることがないようにすることが重要です。

 安全な設定管理は、設定ファイルだけでなく、それを扱うアクセス権、暗号化、およびアプリケーションの実装にも依存します。


最初の解答は、セキュリティのことは一切考えておらず、DBサーバーへのアクセスするためのユーザーIDとパスワードを格納しやすいファイルとして紹介してくれたようです。この場合、@Aは、DBサーバーへのアクセスするためのユーザーIDとパスワードを保管する方法としては不適切だと思ったのですが、「3)ファイルの場所」を見てはっとしました。当該ファイルをApacheのルートフォルダに設定する必要はないのです。もしかしたら、etcでもいいかもしれません。それを考えたら、別にPHPファイルで保管する必要はないようです。
 なんで、こんなこと今まで気づかなかったのでしょうか?これが、1人で開発する場合の限界です。ただ、今は、ChatGPTがいます。何かあればChatGPTに相談し、問題点を洗いだし、その問題を解決しています。

[あとがき]
 今日も時間となってしまったので、この辺までとさせていただきます。
 このような検討をしていると、いろいろな部分に配慮しないといけないことが分かります。
 「4)サーバーのログに記録されないように」とありますが、これについて、Microsoft社がやってしまったことがありました。それは、システム障害が発生したとき、公開鍵暗号方式の秘密鍵をログに書き込んでしまったのです。そして運悪く、そのログを中国人ハッカーに見られてしまったということがありました。そのあとは、ハッキングのし放題です。多分ですが、機密情報を窃取されたのでしょう?

 現在は、セキュリティは、必要不可欠なもので、リリースする前には、セキュリティチェックは必須です。ただ、Microsoft社のような大企業になると、システムも巨大で、かつ、それの全てを監査するのは難しいと思われます。結局は、問題が発覚してからの対処になるのでしょうか?どうしたら、いいのか引き続き考えていきたいと思います。

 では、また!

2024年01月18日

Prototype EVEの脆弱性への対応検討 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
進歩.jpg
 昨日は、Prototype EVEのセキュリティリスクについて検討しました。ただ、その検討結果をChatGPTにお聞きしたところ、セキュリティ上問題があるとの回答があり、本日再検討することになりました。では、ChatGPTは昨日の検討について、どんな問題があると指摘しているのでしょうか?

[ChatGPTからの指摘]
 ChatGPTは、以下の問題点を指摘しています。

❶権限の過剰な付与:
 rootユーザーはMySQLデータベースの管理者であり、非常に高い権限を持っています。PHPスクリプトがrootユーザーとして実行されると、そのスクリプトがデータベースに対して行う全ての操作に対して、rootユーザーの権限が与えられます。これにより、権限の制限が不十分である場合、意図しないデータベースの変更が発生する可能性があります。

❷SQLインジェクションのリスク
 PHPスクリプトがユーザーの入力を直接クエリに組み込む場合、SQLインジェクションのリスクが高まります。攻撃者は入力を操作して、意図しないクエリを実行させる可能性があります。これは特に、rootユーザーとして実行される場合には深刻な問題となります。

❸暗号化されていない通信
 PHPスクリプトがMySQLデータベースに接続する際に、パスワードなどの情報が暗号化されていない通信経路を介して送信される可能性があります。これは、ネットワーク上でデータが傍受されるリスクを孕んでいます。

❹ハードコーディングの問題:
 PHPスクリプトにrootユーザーのパスワードがハードコーディングされている場合、ソースコード自体が機密情報を含んでいることになります。このファイルが不正にアクセスされれば、データベースへのアクセス情報が漏洩します。



[ChatGPTからの指摘]
 聞いている問題点は、PHPからDBのユーザーIDとパスワードを変更するに際し、セキュリティリスクがあるということへの質問だったのですが、ちょっと、的がはずれているようです。その原因について深掘りして聞いてみると、更新すること自体はセキュリティリスクの軽減になるのですが、そのユーザーIDとパスワードを管理する方法について問題視しているようです。
 ChatGPTの指摘を、Prototype EVEではどうなのか考えてみたいと思います。

 ❶ですが、root権限では、権限が高すぎるといっています。これについては、実行するためのユーザーを複数作り、この問題に対応したいと思います。
 ❷SQLインジェクションですが、プログラム的に対応しているので、問題ないと考えています。
 ❸Webサイトを構築する場合、3階層にします。クライアント、Webサーバー、そしてDBサーバーです。そして、WebサーバーはDMZ上に存在し、DBサーバーは社内にあるのが通常です。ここでは、そのWebサーバーとDBサーバーの通信が暗号化されていないことを、問題としています。通常は、DBサーバーとの通信をWebサーバーに限定し、ポート番号を制限するというところまでですが、それだと、盗聴された場合、通信の内容が垂れ流し状態になります。Webサーバー(PHP)とデータベースサーバー(MySQL)間を、SSL/TLSで通信させる方法があるので、それを検討したほうがいいようです。
 ❹は仕方がありません。Webサーバーからアクセスする場合のユーザーIDとパスワードなので、データベースに格納することはできません。じゃ、どこに格納するかというとやはり、Webサーバー上のどこかということになります。

[あとがき]
 また、長くなってしまったので、本日は、ここまでとします。なお、❶〜❸の問題については、解決の見通しがたったので、明日は❹のハードコーディングの問題について検討を進めたいと思います。

 ❹ハードコーディングの問題はどうしても、問題は問題として認識し、それでもWebサーバーにユーザIDとパスワードをハードコーディングしなければなりません。明日は、このリスクを保有するに際し、どう対応するのか検討をしたいと思います。

 では、また!

2024年01月17日

Prototype EVEの脆弱性 〜システム開発研究室〜

 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 一気にと行きたいのですが、地道にプログラムを製造しています。
 中には、システム的に定義されているんだけれど、実際に使われておらず、かつ、どうやって使ったらいいのか不明だったモノがあったり、思ったより大変です。ただ、使われておらず、プログラムを見ても使用用途が分からないものは、どうしようもないので、削除しています。

[システムの脆弱性]
 Prototype EVE脆弱性を見つけてしまいました。それは、データベースに接続するためのユーザIDと、パスワードについてです。
 Prototype EVEでは、システムを動かすのに、root権限で実行しているのですが、それは、当然、Webサーバー側に設定しています。そうしないと、データベースにアクセスできませんから・・・。開発をし始めた2004年は、テキストファイルで一元管理していたのですが、それだと、アドレスバーから当該ファイルを指定した場合、その中身が見えてしまいます。それでは、まずいので、格納ファイルをPHPファイルに変更しました。実は、それで満足し、現在まで至っています。

[どんな脆弱性]
 Prototype EVEでは、データベース接続用のユーザIDとパスワードは定数で管理しています。そのため、ハッカーがPHPファイルをアップロードする手段があり、かつ、ユーザIDとパスワードの定数が分かった場合、echoとかprintでブラウザから確認できてしまうのです。

[現在の対策]
 以前自宅にサーバーを設置していたときのことですが、そのときは、サーバーのハードニングを行い、Prototype EVEからしか、ファイルの更新や、データベース操作ができないようにしていました。それに加えて、Prototype EVEからアップロードするファイルを限定していました。だから、問題ないとは思うのですが、自分ができないと思っても、できちゃう人はできちゃうんですよね・・・。

[今後の対策]
 今後の対策ですが、ChatGPTと会話をしていて、いい方法が思いつきました。
 データベースのユーザIDとパスワードなので、データベースに格納はできません。だから、今まで通り、ファイルで管理をするのですが、データベースにアクセスする場合は、ユーザIDとパスワードにSALT値をつけたものをユーザーIDとパスワードとして登録するのです。そうすれば、定期的に、SALT値を変更するだけで、ユーザIDとパスワードを高いセキュリティレベルで守ることができます。

[あとがき]
 実は、問題点もあります。それは、最初どうするか?
 普通にやるとすれは、ユーザID、パスワードとSALT値を用意し、用意したユーザIDとパスワードにSALT値を付加し、SHA3ハッシュ値を取った値を、MySQLのユーザIDとパスワードにするという方法です。最初だけだからいいのですが、ちょっと、間抜けです。やはり、これも、EVEシステムでユーザーを管理する方法と同様に、モードを用意し、通常モードで安全に稼働するようになったら、セキュリティの高いモードで管理するという方法がいいでしょうか?
 ただそれだと、EVEシステムのフレームワークができてからということになり、Prototype EVEで運用している時はどうしましょうか?

 頭が痛い問題です。

 では、また!

2024年01月11日

システムコンセプト


 こんにちは!
 ナビゲータのEVE Sunです。
設計.jpg
 今日から、システム製造の再開です。以前の開発体制に戻すので、平日はゴリゴリと製造するのではなく、隙間時間を利用し、1日1〜5メソッドの製造をしていく予定です。
 中小企業経営政策で時間が思った以上に取られましたが、その間、いろいろとシステム製造について考える時間を持つことができました。その考えることにより6、7月クラス関連の見直しの作業が必要なくなるかもしれません。ただ、オブジェクト指向言語でシステムを作ったことがないので、想像通りにならない可能性はありますが・・・・。

■開発スケジュール
01月 クラスの製造
02月 クラスの製造
03月 Yahooダウンロード処理の製造
04月 クローニングデータ抽出条件登録・修正・削除処理の製造
05月 Yahooデータ抽出処理の製造
06月 クラス関連の見直し
07月 クラス関連の見直し
08月 ユーザ管理システムの製造
09月 権限管理システム製造
10月 メッセージ管理システムの製造
11月 パラメータ管理システムの製造
12月 コンテンツ管理システム



[ログインシステム製造後]
 クラス関連の製造を除けばかなり余裕をもったスケジュールです。捕らぬ狸の皮算用だと言われるかもしれませんが、ついついその先のことを考えてしまいます。
 以前、EVEシステムは以下のようなコンセプトで製造するという話をしています。


@システムはユーザの利益のために
Aシステムそのものがドキュメント
B全てをシステムで管理する
C1人でシステムを運用する
Dすべての操作を一つの手順で


以上の全体のアウトラインは変わっていないのですが、細かい部分が少しずつこの時考えたものと違ってきています。特にDです。

[Dすべての操作を一つの手順で]
 ここでいっていることは、データベースに関する開発のことを言っています。
 昔は、小さいテーブルなら普通に製造できるのですが、そのテーブルのデータ件数等が大きくなると製造方法を工夫しなければなりません。テーブルのデータ件数が多くなると検索スピードが遅くなるからです。
 ただ、ここでは、テーブルのデータ件数が大きくても、小さくても同じ製造方法になるように工夫したいといった目標でした。
 この工夫なのですが、今まで製造したことがなく、かつ、他のシステムでも見たことがありません。しかも、このシステムを脳裏にイメージしようと試みるのですが、ぼんやりと靄がかかったような状態です。
 今までに、システムを作る段階で、靄がかかったような状態だったときはありません。完ぺきにイメージできていれば、システムを作ることは可能ですし、そうでなければシステムを製造することができませんでした。そういう経験からいうと、システムは作れないと言うことになります。

[今まで通りに作ってみる]
 どんなシステムなのか、解説しようと思うのですが、複雑すぎるうえ、自分でもきちんとイメージできていないので、説明できません。
 以上のような状況で、EVEシステム開発当初は今まで通りにデータベース関連まわりを作ってみようと思います。ただ、ある程度システムが成熟してきたら、新データベースにアクセスするメソッドを作り、画面からボタン一つで、新しい構成にデータベースを再編するようにしたいと考えています。

[あとがき]
 最初っから想定しているシステムを製造したほうが、バグがないなんて言う人もいるのですが、頭の中でシュミレーションすると、どうも、作ったから終わりという分けにはいかないようです。作ってみたけれど、速度が出ないといった場合も、新データベースを再構成しなければいけないというタイミングが出てきそうなのです。だから、どっちみちそうなる運命なら、絶対動く感じでデータベースを製造し、その後、再構成するでもありかなって思うようになりました。しかも、今回プログラムはオブジェクト指向で作るので、必要な部分だけ継承して作ることができます。
 これ、いつになるのか分かりませんが、製造が完了し、思ったパフォーマンスが出たら公開し、どんなシステムなのか概要を解説したいと思います。

 では、また!

■プロローグ〜EVE〜 [YouTubeでの稼ぎ方研究室] 2023年8月5日
https://fanblogs.jp/bahamuteve/archive/34/0

2024年01月09日

エモテット 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 本日は、2014年から流行しているエモテットというマルウェアについて御紹介します。マルウェアとは、ウイルスワームトロイの木馬スパイウェアアドウェアランサムウェアなど聞いたことがある悪意のプログラムの総称です。
 それでは、どんなマルウェアなのでしょうか?情報がIPAから提供されているので、確認してみましょう!

[どんなマルウェア]
 エモテットは、いろいろな使用の方法はあるようですが、多くの場合は、個人の銀行関連の情報、例えば、口座のアカウント情報、クレジットカードに関する情報などを盗聴し、金銭を搾取するために利用しています。2014年から未だに流行している背景には、金銭的なインセンティブエモテットの技術的な進化があるようです。

[どうやって感染する?]
 感染方法は、ソーシャルエンジニアリングです。主にメールが利用されることが多いようです。IPAで紹介されている方法は、メールに添付されたWordやExcelのマクロを使った感染方法です。ただ、これは一例であり、感染させようと思うなら、メール本文からURLをたどる方法も使用するかもしれませんし、USBなどを使用して感染させるグループもあるかもしれません。これは、あくまで一例なので、ゼロトラストのセキュリティ意識で対応することが大切です。

[感染症状]
 クライアントが感染した場合発見するのは非常に困難らしいです。ただ、以下の症状が現れることがあります。

@パフォーマンスの低下
A不審なネットワーク活動
B異常なプロセスやファイルの存在
C不正なメールの送信



[対策]
 では、対策については、ChatGPTに解説してもらいましょう!


❶セキュリティソフトウェアの使用
 信頼性の高いアンチウイルス・アンチマルウェアソフトを使用し、シグネチャベースの検知だけでなく、ヒューリスティック分析や機械学習などの高度な検知技術を備えたソフトウェアを選択します。
❷システムとソフトウェアのアップデート
 オペレーティングシステム、ブラウザ、セキュリティソフト、その他のソフトウェアを最新の状態に保ちます。セキュリティパッチやアップデートが提供されたら早急に適用します。
❸スパムメールへの警戒
 不審なメールやリンクを開かないようにし、特に送信者が不明で、不審な添付ファイルが含まれている場合には注意が必要です。
❹ネットワークトラフィックの監視
 不審なネットワークアクティビティを監視し、異常なトラフィックが検出された場合は早急に調査と対策を行います。
❺ユーザー教育
 ユーザーに対してセキュリティ意識を向上させるための教育を行います。不審なリンクや添付ファイルには慎重になるよう啓発します。
❻ネットワークセグメンテーション
 ネットワーク内でセグメントを作成し、セグメントごとにアクセス制御を強化することで、エモテットの感染が広がりにくくなります。


 ちなみに、IPAからは以下のような対策が提案されています。

・業務で使用しない形式のファイルが添付されたメールは、受信を拒否する。
・業務でマクロ機能を使用しない場合は、無効化する。
・送信ドメイン認証を活用したメールフィルタリングを実施する。
・職員(ユーザー)に対して、不審なメールに関する注意喚起やセキュリティ教育を実施する。
・職員(ユーザー)が不審なメールを受信した場合や、誤って添付ファイルを開いてしまった場合の相談・報告窓口を設置し、不測の事態に迅速に対応できるように準備しておく。

〜情報提供元〜 IPA

 なお、ウイルスソフトを導入していれば安心というわけではなく、そのウイルス対策ソフトを回避するエモテットもあるようです。特に、パターンファイル型のウイルス対策ソフトは発見が遅れる可能性があります。そのため、ChatGPTも指摘している通り、以下のタイプのウイルス対策ソフトの導入が望まれます。

@ヒューリスティック分析
Aビヘイビア分析
Bサンドボックス分析
C機械学習



[あとがき]
 対策したから安心なんてことはありません。狙われたら、まず90%以上の確率で感染してしまうと考えた方がいいでしょう?そのため、ChatGPTが指摘するような対策は当然行うとして、感染した場合、どのようなことをするのか事前に決めておくことが大切です。
 加えて、感染後すぐに普及し、業務を再開できるような体制をとることが重要です。

 攻撃者はかなり頭がいいのは分かるのですが、その頭脳・・・。公共の利益に利用してほしいと思うのは私だけではないと思います。

 では、また!

■Emotet(エモテット)の概要(IPA)
https://www.ipa.go.jp/security/emotet/index.html

■Emotet(エモテット)攻撃の手口(IPA)
https://www.ipa.go.jp/security/emotet/attack.html

■Emotet(エモテット)対策(IPA)
https://www.ipa.go.jp/security/emotet/measures.html

2024年01月07日

コンピュータウイルス 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
ウイルス.jpg
 久しぶりに、ブログの更新が太陽が落ちてからになってしまいました。中小企業経営政策の勉強の仕方にチョット迷いがあったからなのですが、やっと、勉強の方向性が定まりました。明日から、地に足を着いた活動ができそうです。
 それでは、夜も更けてきた本日は、先日X(旧ツイッター)につぶやいた、コンピュータウイルスの記事について調べて見たいと思います。

[ナゾロジーで紹介されていたウイルス]
 『ヤバイ「コンピュータウイルス」5選』ってタイトルだったので、本当にやばいな〜って思ってしまいました。ただ、調べて見ると、紹介していたウイルスは過去のモノで、昨年2023年に流行はなかったようです。
 紹介されていたウイルスは、下記の通りです。それと同時に、流行した年を入れておきました。

サッサー(Sasser)(2004年流行)
コードレッド(Code Red)(2001年流行)
ゲームオーバーゼウス(Gameover ZeuS)(2011〜2014年流行)
ラブレター(LOVELETTER)(2000年流行)
マイドゥーム(Mydoom)(2000)年流行


確かにやばそうなウイルスではあるのですが、防御する技術者も学習し、昨年2023年には感染報告はありません。しかも、ほとんどのウイルスはプラットフォームに依存するものばかりなので、対策したことにより消えたのと同時に、そのプラットフォーム自体も経年により消失し、そして、ウイルスがなくなったといった感じです。

[調べ終えて]
 調べ終えての感想ですが、『ヤバイ「コンピュータウイルス」5選』って記事なのですが書くネタがなくってアップロードした記事かなって感じです。
 記事の公開日は、2024.01.02 TUESDAYなので、多分そうでしょう?タイトルを見てドキドキしてしまいましたが、ドキドキするほどのモノではなかったようです。
 このウイルスが感染していたころは、システムは動けばいいと言ったもので、セキュリティまで考えてシステムは製造していませんでした。
 ただ、今振り返ると、2000年に入った直後だと思います。あるお客さまのところに行って、セキュリティについて聞かれたとき。セキュリティは現在使用しているフレームワークが保証していますと言った記憶があります。確かに仕事をする建前上そう言わざるを得なかったのですが、今から考えると、そのプラットフォームも怪しいところがいくつかありました。ただ、そのあやしさを当時の自分は気づいていなかったような気がします。しかも、当時、Yahooとか、公的機関とかしょっちゅうハッキングされていたので、そういう時代だったのかもしれませんが・・・?

[2023年のはやり]
 2023年にはやったウイルスは一体何だったのでしょうか?


エモテット:エモテットは、他のウイルスを拡散する強力なマルウェアです
JS/Adware.Agent:悪意のある広告を表示させるアドウェアの汎用検出名
HTML/ScrInject:HTMLに埋め込まれた不正スクリプト
DOC/Fraud:詐欺サイトのリンクが埋め込まれたDOCファイル
JS/Packed.Agent:パックされた不正なJavaScriptの汎用検出名
HTML/FakeAlert:偽の警告文を表示させるHTMLファイル


 調べて見るとコンピュータウイルス名として紹介している記事が少ないことに気づきます。ランサムウェアとかいった形で紹介されるウイルスは多いのですが、昨年はウイルス名がニュース記事には、ならなかったようです。

[あとがき]
 以上については、Bingからの情報なのですが、気になるのは、やはり、エモテットです。エモテットは、2014年に登場し、現在も進化し、一昨年から去年まで流行したウイルスです。
 実は、IPAのホームページでも度々見かけます。この機会にどんなウイルスなのか知っていただき、少しでも世間のセキュリティインシデントを減らすお手伝いができればと考えています。なお、本日は、文章が長くなってしまったので、この辺で・・・。

 では、また!

■ヤバイ「コンピュータウイルス」5選(ナゾロジー)
https://nazology.net/archives/119389

2024年01月04日

HTML 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
hmtl.jpg
 本日は、HTMLの話です。
 以前、お話ししたとおり、2021年1月28日にHTML5が廃止され、現在、HTML Living Standardに移行しています。ただ、2023年11月30日のブログには、デファクトスタンダードだったものが、デジュリスタンダードになっただけなのでは?ット言う話をしています。なお、デジュリスタンダードという言葉を使用しましたが、W3Cは、民間の非営利団体です。法的な効力はございませんので、この表現が適当かどうか不明です。
 そんな、HTMLなのですが、HTML2.0から利用しています。

[HTMLを初めて利用したとき]
 私が、HTMLを初めて利用したとき、それは、1996年12月25日でした。

 当時、インターネットは従量課金で非常に高価だったのですが、夜中の23時から翌日の7時までは、定額で利用できました。そのため多くの人は、23時以降にインターネットを楽しむのですが、当時、チャットというのが流行っていて、そこで、全国から集まり話をするのが、習慣となっていました。
 私は、当時からプログラミングはできたのですが、ネットワークとか技術的なことは二の次でした。そのため、当時、サーバーの接続するところから始まって、HTMLをアップロードする方法などに苦労しました。そんな技術的なサポートをしてくれたのが、チャット仲間でした。
 HTMLでホームページを作り、サンタクロースのGIF動画をみんなの協力を得てアップロードできたのは本当に嬉しかったです。それが、HTML2でした。

[HTMLの勉強]
 HTMLですが、HTMLタグ辞典を利用しています。
JHTMLタグ辞典1.png
 懐かしいですね!久しぶりに、PDF化した本を見たのですが、Netscape Navigator3.0とかInternet Explorer3.0とか書いてあります。これ、ブラウザですから?Netscape Navigatorなんてい言われてもピンとこない人も近頃は多いのかもしれません。

[HTMLプログラミング時の工夫]
 私が作るサイトでは、以下のような工夫をしています。

@タグを記述する場合は、必ず一番最初に、開始と終了タグを記述する。
AHTMLのタグは必ず大文字で記述する。しかし、HTMLの要素については、小文字で記述する。

 @ですが、複雑な画面などを作る場合、このルールを守っていないと必ず混乱します。当時からブラウザって、賢く勝手にバグを補正して画面を表示してしまいます。だから、HTML的にバグがあっても、エラーになりません。まっ、それは、それでいいのですが、JavaScriptでプログラミングをしようとした場合、タグをエレメントとして認識しないなどの弊害があります。この点は、実は、メーカー側に改善して欲しいと思っている部分です。そんなに、ごりごりとHTMLを書かない人からすると煩わしいと思うかもしれません。そんな人や私のような人のために、厳格にプログラミングしないモードと、厳格にプログラミングするモードを用意してくれればありがたいのですが・・・。
 Aなのですが、これは、私の製造するプログラム限定なようです。私が、よく利用している、「とほほWWW入門」でも、作っているページはHTMLすべて小文字で製造しています。実は、大文字で作っているサイトはあまり見かけません。
 HTML的には、大文字、小文字は区別しません。そのため、私の場合は、HTMLのタグとその要素を後で一目で見て分かるように、タグは大文字、要素は小文字と分けて入力しています。
 ただ、少数派であるという事に対して、これから問題にならないか、ChatGPTにきいてみました。

 HTMLにおいて、大文字でタグや属性を記述することが動作上の問題を引き起こすことは稀です。HTMLは大文字と小文字を区別しないため、ブラウザはどちらの形式でも同様に解釈します。つまり、動作的な違いはありません。
 ただし、小文字で統一することが広く採用されているのは、コーディングスタイルの一貫性と可読性の向上を目的としています。小文字で統一することで、コードの保守性が向上し、他の開発者との協力がしやすくなります。
 将来的な規格の変更や新しい機能の導入に対応する際に、小文字で記述することが推奨される場合もあります。また、特にHTMLの拡張や新しいバージョンでは、小文字での記述が推奨されることがあります。
 総じて言えることは、大文字でHTMLを記述することが動作上の問題を引き起こすことは少ないですが、標準のベストプラクティスに従って小文字で統一することが一般的な開発者の実践です。


 なお、深掘りして、どこの団体が推奨しているのかChatGPTにきいたところ、W3Cだそうです。プログラマとしては、標準のベストプラクティスが小文字だと言われると、EVEシステムでもそうしなくてはいけない気がしてきます。

[あとがき]
 現在、中小企業診断士試験の方に、かかりっきりの状態なので、もうしばらく、どうするのか考えたいと思います。
 ChatGPTは、可読性が上がるとか言っているけれど、タグと要素の記述をそれぞれ、大文字、小文字とした方が読みやすいと思うのは私だけでしょうか?

 では、また!

■開発体勢の変更 〜システム開発研究室〜(2023年11月30日)
https://fanblogs.jp/bahamuteve/archive/407/0

■とほほのWWW入門
https://www.tohoho-web.com/www.htm

2024年01月02日

ゼロからはじめるシステム開発−今年の抱負− 〜ゼロからはじめるシステム開発〜


 新年あけまして、おめでとうございます。
 ナビゲータのEVEです。
製造.jpg
 昨日は、「システムエンジニアが目指す中小企業診断士」から新年のごあいさつと、抱負について書きましたが、本日は、「ゼロからはじめるシステム開発」からです。

[今年の各コンテンツの目標]
 今年の各コンテンツの目標は、以下のように考えています。

@YouTube
 pro2grammer.comで開発したコンテンツの紹介をしたいです!
ATwitter
 EVE、EVE2のフォローワーの合計を1,000人以上にしたいです。
BA8
 「ゼロからはじめるシステム開発」、「システムエンジニアが目指す中小企業診断士」、「システムエンジニアから見た社会」の合計アクセス平均数が、200人を越えるようにしたいです!

 なんとか、達成したいですね!

[システム開発]
 システム開発は、以下のように考えています。

01月 クラスの製造
02月 クラスの製造
03月 Yahooダウンロード処理の製造
04月 クローニングデータ抽出条件登録・修正・削除処理の製造
05月 Yahooデータ抽出処理の製造
06月 クラス関連の見直し
07月 クラス関連の見直し
08月 ユーザ管理システムの製造
09月 権限管理システム製造
10月 メッセージ管理システムの製造
11月 パラメータ管理システムの製造
12月 コンテンツ管理システム

製造したい、またはしなければならない順番で並べると、以上のような感じになります。 まず、Yahooクローニング関連システムのクラスを製造して、Yahooクローニングシステムを製造します。
 当初話していたとおり、機能毎にプログラムを分割し、後日いろいろなサイトのクローニングが容易になるようにシステムを製造します
 6、7月には、運用を開始するのですが、開始後システムの問題点を抽出し、クラスの見直しを2ヶ月かけて実施する予定です。
 そして、8月からは、ログインに必要な権限、メッセージ、パラメータ、コンテンツを管理するシステムを製造し、2025年からログインシステムを製造するという流れで考えています。
 製造状況については、適時報告し、最終的な報告は今年の年末に御報告致します。

[あとがき]
 昨年は、年初にたてた目標の多くが達成できました。今年はどうでしょうか?

 今までのやり方を見直しながら、プロジェクトを健全な形で運営できようにがんばります!

 では、また!

2023年12月30日

手順を考える重要性 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
マニュアル.jpg
 今日は、Xserverの構築手順を作る前に、手順書を作る重要性についてお話ししましょう!

[手順を考える理由]
 このような作業なのですが、何も見なくても実施可能です。しかし、まず最初に手順を考え、かつそれを資料に残せば、ほぼミスすることなく、そして、次回以降の環境構築の参考とすることができます
 Fedraでの環境、PrototypeEVEの構築も当然資料として、Knowlegeシステムに残しており、現在も、何かあるたびに見ています。ただ、自宅にサーバーがあるということもあり、断片的なものは残しているのですが、きちんとした資料としては残してはいません。

 それが問題になったことがつい最近ありました。バックアップの実行時間を変更しようとしたのですが、変更されないのです。その理由をつい最近思い出しました。それは、sudoで利用するユーザーの権限を、/etc/sudoersへ登録していなかったのです。それを、つい最近、sudoの資料をまとめていて思い出しました。

[sudoへ権限が登録されていない理由]
 一昨年の年末、サーバーがクラッシュしました。RAID5で構成しているハードディスクの2つがクラッシュしたのです。Dellのマシンなのですが、このマシン、ハードディスクが破損したことを知ることができるタイミングは、サーバーが起動してくるタイミング、RAIDコントローラーに関するメニューが表示されるタイミングなのですが、そのメニューを選択し、表示しないと知ることができません。インターネット上に公開しているときさえ、見ることがなかったのに、インターネットへの公開をやめたそのときは当然見ていません。気づいたときはハーディスクをすべて交換しないと復旧しない状態でした。
 サーバーの情報はすぐにでも必要だったので、テスト機として利用していた、パソコンにサーバーのバックアップをインストールし元に戻したのですが、所詮、テスト機です。本番機とほぼ同じですが、全く同じではありませんでした。

[現在の状況]
 障害に気づいた当時、ターミナルのコマンドラインからも実行可能なため、システムで作成したクーロンタブコントロールファイルの内容をコマンドラインから実行しました。それで現在も運用しています。
 システムを公開しようとする場合、以上のような今までの経験を踏まえ、きちんとした手順書を残した方が良いでしょう?

[あとがき]
 このような作業にかかわらず、何か作業を実施する場合、予めきちんとしたモノでなくてもいいので、手順を考えることは重要です。特にテンパっているときなど、頭の中が整理されるのと同時に、ケアレスミスを軽減することができます
 ある程度年齢を経て、それを、別会社ではありますが、言ったことがあります。ただ、それを口にするとほぼ100%の人が否定してきます。システムエンジニアなんて職種に就いている人って、思った以上にプライドが高く、いうことを聞いた人はいません。まっ、それを口にしたことはそんなに多くはないのですが・・・。

 作業の参考としてください。

 では、また!

2023年12月29日

年末のスケジュール [Coffee Time]


 こんにちは!
 ナビゲータのEVEです。
年末.jpg
 経済学・経済政策マクロに足を引っ張られ、3日間ほぼ経済学・経済政策を勉強している状況です。しかも、今日はやる気さえない状況で、「労働市場」の半分勉強し終えた段階で、ブログをつけています。
 マクロは、やはり難しいですね・・・。なんとなく理解していると思っていても、いざ、問題を解いてみるのですが間違ってしまいます。いろいろな条件が複合的にはいってくると頭が混乱するからだと思います。それを必死に理解しようと努力しています。努力して理解できる問題はいいのですが、数式の問題は最悪です。解答を見てもなんでそのようにしているのかプロセスが理解できません。その問題を次回は解くことはできるでしょうが、少しでも条件が変わった場合、問題を解くことができないと思われます。昨日、「システムエンジニアが目指す中小企業診断士」の中でも書きましたが、7カ月という時間で理解できるでしょうか?最終的にシステムを作るという目標があるなら、理解できないといけません。

[システム構築の手順書]
 Xserverを再構築しようと、以前作った資料を見ようとブログを見返したのですが、見にくいというのは前回までの話です。そのため、新たに、「システムエンジニアから見た社会」というサブサイトを構築して、システムに関係がないブログを移そうとしているのですが、以上のような状況で、ここ数日できていません。ただ、そろそろ、Xserverの準備をしなければならない・・・。そのため、明日から、過去の資料から、EVEシステムを稼働する環境について新規でまとめていきます。引き続き、「システムエンジニアから見た社会」へシステム以外のブログを移動するという作業は続けていきますが、こちらの作業を待ってからだといつになるか分かりませんから・・・。
 システム開発もここ数日全くしていませんし、困ったものです・・・。ただ、経済学・経済政策をしながら、決めた仕様があります。それは、クラスからオブジェクトを生成する引数なのですが、それは、文字クラスなら文字しか渡さない仕様にすることにしました。Prototype EVEでの使い勝手は踏襲しません。規約優先って感じになります。

[あとがき]
 年末のスケジュールですが、以下のように考えていましたが、あきらめることにしました。Studyingの教科的には、2日遅れなのですが、それに加えて、経済学入門−マクロ−もまだ読み終えていません。今年いっぱい、経済学・経済政策を徹底的に勉強し、来年2023年1月1日からは、以下のスケジュールで中小企業経営政策を勉強することにします。
2023年12月18日 月 経営法務6-1、6-2、6-3
2023年12月19日 火 経営法務6-4、6-5、6-6、6-7
2023年12月20日 水 経済学入門ミクロ、マクロ
2023年12月21日 木 経済学入門マクロ
2023年12月22日 金 経済学5-1
2023年12月23日 土 経済学5-2
2023年12月24日 日 経済学5-3
2023年12月25日 月 経済学5-4
2023年12月26日 火 経済学5-5
2023年12月27日 水 経済学5-6

2023年12月28日 木 経済学5-7
2023年12月29日 金 中小企業経営政7-1、7-2、7-3
2023年12月30日 土 中小企業経営政7-4、7-5
2023年12月31日 日 中小企業経営政7-6、7-7

             ⇓

2024年1月1日 月 中小企業経営政7-1、7-2、7-3
2024年1月2日 火 中小企業経営政7-4、7-5
2024年1月3日 水 中小企業経営政7-6、7-7



 加えて、2024年1月1日からはプログラム開発を再開します。
 っと今は考えています!

 では、また!

2023年12月26日

クライアント側で大量データを表示する 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
HTML.jpg
 昨日は、PHPクラスの作りについて悩んでいるという話をしましたが、本日は、ブラウザの表示方法の悩みについて書きたいと思います。

[サーバーサイトに負荷をなるべくかけたくない!]
 今回自宅のサーバーではなく、XServerを利用するのですが、リソースに限界があります。しかし、EVEシステムのクラスの製造では、Prototype EVEの時とは違い、リソースを余り気にしない作りにしています。それは、約20年前の開発・運用環境とはかなり違い、資源が豊富になってきたということを上げたのですが、それでも、資源は有限です。むしろ、自宅にあるサーバーの方が資源が豊富だという側面もあります。そのため、リッチに資源を利用する一方で、削減したい部分もあります。それは、画面の生成方法です。

[クライアント側で動的に画面を生成する]
 Prototype EVEでは、製造当時サーバーサイトで画面を動的に作り、かつ、見栄えも決定してきたのですが、それをクライアント側で行うかどうか悩んでいます。

 まず、1つ目は、画面の見栄えをCSSに統一する。Prototype EVEでは、ごりごりとサーバーサイトでHTMLを動的に生成しクライアント側へ画面を提供していたのですが、EVEシステムでは、CSSへ統一します。これは、ブラウザメーカーの多くは、HTML Living Standardを採用し、HTMLのタグの属性の多くを廃止する一方で、画面の表現をCSSで統一する方向で動いている、その流れに沿った対応になります。
 そして、2つ目は、テーブルなどの表示するデータ量が多い画面では、クライアント側へ同大量のデータをJSONファイルで転送し、転送したJSONファイルをJavaScriptで画面へ編集し表示するという方法です。これは、プログラムの生産性という側面から悩むところではあります。

[サーバーサイトの負荷が軽減されるかどうかの考察]
 CSSの導入は既定路線なのでいいのですが、JSONファイルを利用した画面編集は、本当にサーバーサイトの負荷を軽減することができるのでしょうか?サーバーサイトで画面を編集する方法と、JSONファイルを用いたJavaScriptによる編集方法を比較し、検討したいと思います。

 まず、今まで採用していたサーバーサイトでHTMLを編集する方法ですが、以下のような流れとなっています。

1)サーバーからデータを取得する(サーバー)
2)HTMLタグを生成する(サーバー)
3)2)を実行しながら、そのタグの間にデータを挿入していく(サーバー)

 以上は、当然すべてサーバーサイトで実行します。
 次に、JSONファイルを用いたJavaScriptによる編集方法です。

1)サーバーからデータを取得する(サーバー)
2)JSONファイルを生成する(サーバー)
3)JSONファイルを受け取る(ブラウザ)
4)HTMLタグを生成する(ブラウザ)
5)4)を実行しながら、そのタグの間にデータを挿入していく(ブラウザ)

[あとがき]
 並べてみると、サーバーへの負荷はあまり変わらないことが分かります。ただ、強いて違いをいうと2)の部分で、画面をユーザーへきれいにみせようとするために、サーバーサイトでの画面生成の方が、JSONファイルを編集するより、サーバーへの負荷が大きくなると言うことが言えます。ただ、CSSの導入によりその違いは微々たるモノだと考えています。しかし、その微々たる差は、何十万人、何百万人のユーザーがいるなら大きくなると思いますが、そのときのプロジェクトの状態は、資金は潤沢でハードウェアはリッチな状態になっているでしょう?それを、考えたら生産性を優先したいです。

 なんて、現在は考えています。他に、考える余地があるとすると、生産性という面なのですが、これについては、まだ時間があるので、引き続き検討したいと思います。いろいろと考えることがありますね?

 では、また!

2023年12月25日

はじめてのオブジェクト指向言語での本格的な開発 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム開発.jpg
 Yahooクローニングシステムを作るために、EVEシステムで使用するPHPクラスの製造を引き続き行っています。
 ここ数日作っていてちょっと失敗したかなとか思う所があり、手戻り等が発生しています。

[EVEシステムで利用するクラス]
 EVEシステムで利用するクラスの作りなのですが、基本以下の様な感じになっています。

@操作対象の主となる変数は、クラス作成時にクラスに引数として渡し、オブジェクトを作成する。
A引数として受け取った操作対象の主となる変数のプロパティ情報を取得し、プライベート変数として保持する。
Bその操作対象の主となる変数をメソッドを使用して操作する場合、操作で使用する引数はメソッド実行時にオブジェクトへ引き渡す。
Cメソッドで操作した結果の全ては、オブジェクト内のプライベート変数として保持する。

こんな感じでしょうか?

[後悔している点]
 後悔している点は、オブジェクト作成時に、操作対象の主となる変数を特定してしまっていること・・・。作成したオブジェクトの再利用ができない・・・。操作したい変数が増えるたびに、クラスからオブジェクトを作らなければならない・・・。
 操作対象の主となる変数を特定している理由は、クラスとしての機能を明確にしたかったから・・・。まだ、本格的に製造していないので、想像の域はでないのですが、操作対象の主となる変数を特定していないと後で見た場合何をしているのか、明確に分からなくなる可能性を感じたから・・・。変数、変数毎にオブジェクトを割り振っておけば分かりやすくなると思いませんか・・・?違うかな・・・?

 二つ目は、このようなロジックにした場合、外部からクラスを利用するのは分かりやすく利用しやすいのですが、同一クラス内のメソッド同士がその機能を相互利用したいと言った場合、使いづらいということ・・・。これは、オブジェクト作成時に、原本保持用の変数と編集用の変数と分ける事により問題は解決しましたが、意外と手戻りが大きかったです。

 三つ目は、文字クラスなら文字変数しか引数として渡す予定はなかったのですが、いざ作ってみると、配列を渡したいケースなどが出てきたこと・・・。
 これについては、機能と後日修正する場合のわかりやすさ、そしてPrototype EVEでの利用状況を考え、配列を引数として引き渡せるようにしましたが、その影響で複雑なプログラムになりつつあります。

[あとがき]
 はじめてのオブジェクト指向言語での開発と言うことで、いろいろと悩みながらプログラミングしていますが、このまま当初のコンセプトでYahooクローニング製造完了まで突っ走りたいと思います。ただ、もしYahooクローニングシステムを製造してみて、使えないという判断があった場合、作り直す予定です。
 それを考えるとやはり利用するクラスの範囲内でクラスを製造した方が良いようです。ただ、作り直しやすいように現行のクラスは製造する予定です。やっぱり、初めてって難しい!

 では、また!

2023年12月22日

システム環境の資料を整理する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
タイピング.jpg
 また睡眠障害って感じです。Studyingの勉強中心の生活を送っていますが、記憶力が下がる眠いときは勉強しないことにしています。ただ、今日はとりあえず一日眠い・・・。寒いから目がパット覚めるような気がするのですが本日は逆でした。
 そんな一日の夕方ぐらいに来てやっと、しゃっきりとしてきました。遅すぎます(笑)。先ほどプログラムの見直しをし、メソッドを1本作ってからブログをつけています。

[本番環境の整備]
 現在、開発はノートブックの中でしているのですが、本番環境は、XServer上におこうとしています。その構築に際し、以前構築した環境のすべてを削除し、まっさらにした上で、現在ノートブックで試験している環境と同様のモノを再現したいと考えています。
 ただ、ノートブックの環境は試験環境なので、セキュリティの面ではちょっとこころもとないところがあるので、ただ再現するだけではなく、その辺もきちんと整理した上で、本番環境を構築します。
 その参考となるのが、以前構築した際につけたブログなのですが、見にくい!最初YouTubeで立ち上げた各研究室をブログでも再現しようとしたため、雑種多様な情報をブログに書いていたのですが、それを後で見ようとした場合、本当に見にくい。そこで先日から「システムエンジニアから見た社会」というブログを立ち上げて、せっせ、せっせと移動しています。目標は1日、最低1日分のブログなので、なかなか進まないのですが、とりあえず、「ゼロからはじめるシステム開発」では、開発に関する情報だけを残し、それ以外は、すべて、「システムエンジニアから見た社会」に移動したいと思います。その過程において、中小企業診断士関連の情報が「ゼロからはじめるシステム開発」にあった場合は、「システムエンジニアが目指す中小企業診断士」に情報を移動します。
移動する研究室等は以下の通りです。

・システム監査研究室
・株式市場研究室
・YouTubeでの稼ぎ方研究室
・先端技術研究室
・Coffee Time

[あとがき]
 今回の作業なのですが、以上の研究室の情報を強引に移動しようとした場合、続きものの、ものもあり、ブログの内容が断片的なものが出てくるのを懸念しています。
 そのため、以前書いたブログなのですが、一部修正した上で更新する場合があります。但し、更新日は秒まで以前のブログと同じにする予定ですので、ご理解下さい。

 なお、初期の段階では、移動しやすいブログを移動する予定です。例えば、Coffee Timeなどです。もしよろしければ、過去にどんなブログを付けていたのか、見て下さい。

 では、また!

■システムエンジニアから見た社会
https://fanblogs.jp/socialsystem/

タグ:ブログ XSERVER

2023年12月21日

EVEシステム クラス・メソッド・プロパティの製造状況−2023年12月21日- 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 昨日から再びクラス、メソッド、プロパティの製造にはいっています。
 先日は、配列クラス文字クラスを作っており、文字クラスは作っている途中という話をしましたが、まだ文字クラスは完成していません。
 しかし、今回はそれに加えて、数値クラスの製造に入っています。理由は、文字列内において文字の長さを求め、それが想定通りかどうか判定するところがあります。そのとき、長さを引数で数値で渡しているのですが、それが本当に数値かどうか確認するために製造しました。作った後なんですが、よく考えると、PHP8って引数を渡すとき型宣言するんですよね?もしか、そこで判定できるかもしれません・・・・。
 ただ、いつかは作らなくてはいけないモノなので、そのままにして次に行きます。

[Prototype EVEとEVEシステムの相違点]
 今回クラスを製造していて、Prototype EVEEVEシステムにおいて大きく違う点があります。それは、Prototype EVEのフレームワークでは、PHPから提供されている関数以外利用しないという規約がありました。そのため、Prototype EVEフレームワーク内において、自分が作った関数はほとんどの場合再利用していませんでした。しかし、EVEシステムではその規約をなくすことにしました。それは、関数の取り込み方法を、requireからrequire_onceに変更したことが最大の理由です。
 Prototype EVEでは、資源不足を懸念していました。そのため、同一アプリケーションから同一の関数を呼び出さないという方針がありました。だから、同一アプリケーションで利用する関数は、呼び出し元のアプリケーションですべて定義していました。しかも、現在文字クラスと定義している関数も複数のファイル、今数えると10以上のファイルに分割されており、使用するときは使用する関数以外取り込まないという方針で製造していました。
 開発から20年目を来年迎えるに際し、20年前とは大きく違う運用環境の状況からそのような製造方針としています。

[ちょっとあやしい関数]
 20年前と言えば、活気盛んではありましたが、現在と比較すると技術的にまだまだという部分はいなめないと思います。Prototype EVEのフレームワークは、最初に作ったということもあり、そんな雰囲気を強く感じます。
 関数には、製造年月日を入れているのですが、その製造年月日とロジックを見ながら、これ次期システムでも利用しようかどうか悩むのですが、めんどくさいので、今回すべてEVEシステムで実現し、使用してみて使えなかったら廃棄するという方針としています。

[クラス・メソッド・プロパティの規約]
 現在決まっている規約は以下の通りです。

・コメントは70桁目から(Prototype EVEでは55桁目から)
・メソッドからの返却値はすべてクラスのプライベート変数として保持する
 但し、getterは、現時点製造していません。
・メソッド内で使用している変数はすべて定義する(Prototype EVEでは不徹底)
・すべてのロジックにコメントを入れる(Prototype EVEでは不徹底)
・異常時の返却値はfalseに統一する(Prototype EVEではケースバイケース)
・異常時のコメントは後で閲覧できるようにクラス内のプライベート変数に保持し適時閲覧できるようにする
・プライベート変数の先頭にpriと付記する
・パブリック変数の先頭にpubと付記する
・クラスの最後にClassと付記する
・メソッドの先頭にmetと付記する
・newで作成したオブジェクトの最後にObjectを付記する
・コンストラクタで取得した変数は、原本を管理するのと同時に編集用のプライベート変数に転記する

※赤字は2023年12月23日に追加

こんな感じでしょうか?文字として規約を起こすのは本日初めてなので、以上が全てかどうか怪しいところはありますが、気づいたら、適時、本日2023年12月21日のブログに追記していきます。

[あとがき]
 とりあえず、怪しい関数もメソッドに変換するという方針を立ててからは迷うことなく、とりあえず作業を進めています。このような作業で一番時間がかかるのは迷うところです。その迷う部分をできるだけ軽減するというのが、作業をスピーディーにするコツと言えるでしょう?

 年末のまでのスケジュールが1.5日遅れという状況です。これから挽回できるでしょうか?

 では、また!

2023年12月16日

クローニング処理 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
Google.png
 朝起きてボケボケだったので、頭の回転を元に戻すため、Studyingスマート問題を解き、ビデオを講習を見てからこのブログを付けています。土、日はプログラム開発を行うといっていましたが、まだ製造に入っていません。このブログを書き、食事を終えてから開発に入ろうと思っています。
 そんなプログラム開発ですが、Studyingの問題を解きながらひらめいたことがあります。
 それは、クローニングシステムを汎用的に製造できないか?

[クローニングシステムを汎用的に製造できないか?]
 Prototype EVEでは、クローニングシステムは、単体で当該サイトをターゲットに専用に製造していました。ようは、サイトのページとクローニングプログラムが1対1の関係にあったのです。それを、サイトが多に対して1つのプログラムでクローニングできないかと言った考えです。

[やっぱり難しい?]
 Studyingを作っている最中はぼんやりと考えていたので、なんかできそうなんて思っていましたが、今実際にそのプログラム構成を考えるとかなり難しいことが分かります。それは、目的によりいろいろな種類があるからです。その種類について、列記してみましょう!

@Webページの当該ページから特定の情報を取得する
AWebページの当該ページから特定の情報を複数取得する。
BWebページの当該ページのリンクタグを抽出し、抽出した情報から情報を再抽出する

以上は、Webページ1ページのみなのですが、Yahooクローニング処理なんかだと、Aの情報を複数ページから抽出する必要があります。それに加えて、要望によっては、ABの情報を抽出したいという場合もあるかもしれません。

[できそう?]
 ただ、逆に考えると、パターンは3パターンしかありません。っていうか現在はと言うことですが・・・。そのパターン毎にプログラムを汎用的に製造し、複数のサイトに対応出来ないでしょうか?それと、抽出するロジックについては@AB共通で利用できるかもしれません。もし、3パターンが10パターンになるとしても、それだけ対応できるサイトが豊富になると言うことです。もしかしたら、悪い考えではないかもしれません。

[あとがき]
 作ってみないと分かりませんが、私の場合、イメージできるシステムは、今までは100%実現できています。経験則で言うと、多分以上のシステムは実現できると思います。ただ、時間がどのくらいかかるかです・・・。使用目的と誰に使ってもらうかを明確にして、プロジェクトを進めていきたいと思います。
 なお、もし、こんな目的に使用したい、こんなように作って欲しいなどの要望がありましたら、ご意見として下さい。自分が現在イメージしているモノの開発線上にのってくるご意見なら取り入れていきたいと思います。

 話は変わりますが、今まで社会をシステムとして見立てて、社会のことなどを「ゼロからはじめるシステム開発」または、中小企業診断士で勉強した内容を一部でも利用できるモノは、「システムエンジニアが目指す中小企業診断士」に書いてきましたが、今後、システム、中小企業診断士試験以外の記事は、「システムエンジニアから見た社会」にまとめていきます。なお、今まで書いたブログも順次同ブログへ移動する予定です。
 理由は、後で技術的な内容、勉強した内容を再確認するに際し、見づらくなってきたためです。

 では、また!

■システムエンジニアから見た社会
https://fanblogs.jp/socialsystem/

2023年12月15日

クローニング処理作成準備 〜プログラム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラマ.jpg
 明日から、Yahooクローニング処理を作るに際して、Prototype EVEで使用していた関数の調査をしています。まだ精査が終わっていない段階ですが、少なくても以下のクラスは作らなければいけないようです。

[作成予定Class]
 Classは、カテゴリーごとに作る予定です。Prototype EVEでは、システムのリソースを気にして、ファイルの単位を細かく分けたのですが、現在どんなハードウェアを使うにしても、昔と違って、リッチになっているので問題ないと思います。

■DB関連class ← 作成済み
・データベース検索メソッド
・Fetchメソッド
・テーブル一覧取得メソッド
・SQLdbqueryメソッド
・レコード追加メソッド
・レコード更新メソッド
・レコード削除メソッド
・トランザクション開始メソッド
・コミットメソッド
・ロールバックメソッド
・レコード件数取得メソッド
・エラーメッセージ取得メソッド
・エラーNo取得メソッド
・トランザクション変数取得関数

■ファイルClass
・ファイル取得メソッド
・ファイルコピーメソッド
・ファイル書き出しメソッド
・ファイル削除メソッド
・ファイル読込メソッド
・コンテンツ取得メソッド

■数値Class
・数字チェックメソッド

■文字Class
・配列⇔文字列変換メソッド
・乱数取得メソッド
・文字列編集メソッド
・文字列部分取り出しメソッド
・指定文字列検索メソッド
・指定文字列削除メソッド
・html⇔文字列変換メソッド

■時間Class
・現在日付取得メソッド
・日付取得メソッド
・タイムスタンプ編集メソッド

■セキュリティClass
・SHA3ハッシュ値取得メソッド

■配列Class
・配列結合メソッド

■メールClass
・メール送信メソッド

■メッセージClass
・メッセージ出力メソッド
・エラーログ出力メソッド

当然なので書いていませんが、コンストラクタとデストラクタも作ります。

[想定]
 まっ、ざっと見てどんな作りにしようかなっていうことを想像しようとしますが、作ろうとしているこの一覧からは難しいですね?作りながら、試行錯誤しながら作ることになりそうです。
 調べていてちょっと驚いたのは、SHA3がリリースされている点・・・。これ、仕様だけでなく、PHPでは実際にプログラムとして提供されています。
 つい最近ですが、情報処理安全確保支援士に合格しましたが、そのとき勉強したSHA3に関する記述は、仕様を策定中だったような気がします・・・。まっ、テキストには何も書いていなかったのですが・・・?

[あとがき]
 想像するのが難しいと言っていながらは最後に逆のことをいいますが、DB関連クラスと違い他のクラスは、以前作った関数の一部をコピーして作れるんじゃないかな?って思っています。当然、EVEシステムの開発基準に合わせて作り直し、今更ですが、デバックもします。
 つい最近、Prototype EVEで使用していたデバッカを復活させましたが、そこにバグがありました。ただ、想定通りに動いています。そんな現状を見たら、デバックしたくなります。だから、どうなるかわからいのですよね???
 時間はかかりますが、次回は業務レベルのシステムを作りたいので・・・。

 では、また!!!

2023年12月12日

PHPからcrontabを実行する 〜システム開発究室〜


 こんにちは!
 ナビゲータのEVEです。
開発.jpg
 政界は、久しぶりに騒がしいようですが、私は、自宅でくつろいでいました。ちょっと、1つ作業はしましたが、もうこんな時間になったので、残りはまったりとしたいと思います。
 では、昨日の続きです。

[PHPプログラムでクーロンタブを実行する]
 昨日話した内容がよく分からない人もいるかもしれないので、PHPというプログラムで、クーロンタブを実行する方法について最初から話したいと思います。大まかな流れとしては、以下の様になります。

@クーロンタブコントロールファイルを作成する
Aクーロンタブコントロールファイルをクーロンタブへ反映する
Bクーロンタブコントロールファイルの内容を確認する
C/etc/sudoersを編集する

 では、@から順番に、解説しましょう!

[@クーロンタブコントロールファイルを作成する]
 作業としては、以下の流れで作成します。

1)MySQLから実行予定のプログラムとその時刻等を取得し編集します。。
 ※これは、別画面を作成し、登録した内容をMySQLで取得し編集しています。
2)クーロンタブコントロールファイルを作成します。以下の様な感じのファイルを作成します。

1.SHELL=/bin/bash
2.PATH=/sbin:/bin:/usr/sbin:/usr/bin:
3.MAILTO=user@mail.jp
4.HOME=/var/www/html/batch

5.00 4 * * * bash batch.sh


 1.は特に異なるシェルを必要とする場合や、環境によってデフォルトのシェルが異なる場合に指定します。
 2.Cronジョブ内で実行されるスクリプトやコマンドが必要なプログラムやコマンドのパスを指定します。
 3.クーロンタブの実行結果などを送信するメールアドレスを指定します。
 4.バッチ処理を実行するホームディレクトリを指定します。
 5.以降は、MySQLから取得した内容に基づき編集する部分になります。

[今回の実装]
 今回の環境用に作ったコントロールファイルでは、1.2.3.は、Prototype EVEの環境同様に指定していますが、4.は指定していません。理由は、Prototype EVE、New Prototype EVE、そしてEVEシステムでそれぞれ実行するので、ホームを必要としないからです。ただ、4.のHOMEを指定した場合でも、実行するプログラムの絶対パスを指定することにより、4.のHOMEの影響を受けることなく実行できます。

1.SHELL=/bin/bash
2.PATH=/sbin:/bin:/usr/sbin:/usr/bin:
3.MAILTO=user@mail.jp
4.HOME=/var/www/html/EVE/batch

以降の記述が5.に相当します
00 4 * * * exePhp /var/www/html/EVE/batch/batch.php
00 5 * * * bash /var/www/html/PrototypeEVE/batch/batch.sh
00 6 * * * php /var/www/html/NewPrototypeEVE/batch/batch.php



[今回の問題点 〜Aクーロンタブコントロールファイルをクーロンタブへ反映する〜]
 今回の問題点は、実行権でした。以前は、管理者ユーザーrootに実行してもらっていました。当然、実行できるプログラムを限定した上、クーロンタブがプログラムから実行された場合、管理者にメールを通知するということをしています。それをセキュリティとしていました。

/usr/bin/sudo -u root /usr/bin/crontab crontabContolPath+File


 ただ、今回は、root権限でプログラムから実行しようとしても、system関数exec関数ともエラーになります。そのため、ChatGPTにエラーメッセージと、クーロンタブコントロールファイル、そして、実行するプログラムを見せて、どうしてこんなエラーになるのか問い合わせたところ、rootで実行するのはセキュリティ的に悪いので、ユーザーを作成し、作成したユーザーで実行することを勧められました。問い合わせた内容からすると的外れのような気もしたのですが、その通りにやりました。ただ、やはり、system関数、exec関数においてエラーになります。
 次にやったのは、Apacheをユーザーとして実行する方法です。PHPを実行するのは、実質的にApacheです。それを考えれば、そういう考えに至るのは当然の流れです。

/usr/bin/sudo -u www-data /usr/bin/crontab crontabContolPath+File


 Ubuntuの場合、Apacheのユーザーはwww-dataなので、www-dataで実行して見ると、system関数、exec関数で実行してもエラーになりません。ただ、その登録した結果を見ることができません。なぜかというと、www-dataで再ログインできないのです。それは、Ubuntu側で制限をかけているのです。だから、関数の方で正常と言っているが、まだ、うまくいっていないのだと思い込み、引き続き調査をしていました。・・・・が、実はここでうまくいっていたのです。今から考えると本当に無駄な時間を過ごしました。ちなみに、www-dataに設定したクーロンタブは、以下のコマンドで確認できます。

[Bクーロンタブコントロールファイルの内容を確認する]

# sudo crontab -u www-data -l


ただ、今このブログを書いている現在、ChatGPTに聞いたところ、Ubuntuでもwww-dataでシステムへログインする手段はあるようです。ログインすることにより、問題がある場合もあるそうなので、それについては、別途機会があったら、調べるとして、もし、設定した値を見たい場合は、以上のコマンドから見ましょう!

[C/etc/sudoersを編集する]
 PHPプログラムから、system関数またはexec関数で実行する場合、sudoツールを利用しなければなりません。直接OSコマンドを実行しようとしてもFedraではうまくいきませんでした。よく考えたら、Ubuntuでは試していませんでしたが、セキュリティが高くなったUbuntuでは、多分できないでしょう? 修正内容としては、今回は以下のように修正し、うまくいっています。


www-data ALL=(root) NOPASSWD : /usr/bin/crontab


セキュリティについては、本番環境構築までに考えたいと思います。

[あとがき]
 先週末の状況をまとめていて思うのですが、結果として、前回同様にかなり無駄な時間を過ごしているような気がします。このような調査をする場合の手順を予め作った方が良さそうです。まず、どうしたら最短で結果を得られるのか論理的に考えるのです。今後は、このような難題は出てこないとは思うのですが・・・。
 なお、以上の内容でシステムを構築していきますが、今回の目的から可能とする方法は多分ですが、以上の方法だけです。ようは、Apache+PHPの組合せで、crontabを実行する場合は、www-dataで実行しなくてはいけないと言うことです。なぜかというと、そう断言できるぐらいいろいろな方法をためし、system関数またはexec関数がエラーにならなかったのは、www-dataだけだったからです。
 以上で、PHPからクーロンタブが実行できるようになりました。これにより、今週末から、Yahooクローニング処理の製造にはいれます。
 流れとしては、以前お話ししたとおり、以前作ったプログラムから必要な関数の一覧を作り、その一覧に基づきClassを作っていきます。まだ、調べていないので、どのくらいかかるのか不明ですが、できるだけ、近日中に製造を完了したいと思っています。

 では、また!!!

2023年12月11日

crontabコントロールファイルの設定を定期的に変更する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
予感作業.jpg

 今週末予定通りのプログラム修正は完了しました。

@クーロンタブコントロールファイル作成処理 ← 完了
Aクーロンタブコントロールファイル実行処理 ← 完了

 @は、予定通りあまり時間をかけずに完了しました。
 問題はAです。クーロンタブコントロールファイルの作成を@で終えているのですが、その結果が、クーロンタブへ登録できない・・・。

[Prototype EVEでのクーロンタグコントロールファイル実行処理]
 具体的にどのような処理かというと、以下のようなコマンドを発行する処理をバッチプログラムで実行しようというものです。

# crontab crontabContolFile


この1行を実行するプログラムに10時間以上の時間をかけました。そのため、昨日寝たのは、午前様です。実は、このcrontabを実行するのに、10年前の2013年にも苦労しました。10って数字が多いような・・・?

[Prototype EVEのクーロンタブ実行処理]
 Prototype EVEのクーロンタブ実行処理は、以下の様なコマンドで実行しています。

# sudo -u root /usr/bin/crontab crontabContolPath+File crontab


そして、/etc/sudoersファイルも変更しています。

# apache test=(root) NOPASSWD : /usr/bin/crontab


製造当時なんと疑問もなく作っていたのですが、testってなんですかね?この位置になんでtestという文字がくるのかわかりません。
 ということで、以上の構文が何を指しているのか、ChatGPTに聞いてみました。



❶apache
 apache は、通常はWebサーバーなどで使用される特定のユーザーアカウントを指します。Apache HTTPサーバーなどがこのユーザーアカウントを使用することがあります。
❷test
 test は、apache ユーザーに対して特権が与えられる具体的なコマンドを指します。
❸root
 apache ユーザーが root 権限を利用できるようにしています。
❹NOPASSWD
 NOPASSWD は、パスワードの入力なしにsudoコマンドを実行できることを指定しています。
❺/usr/bin/crontab
 /usr/bin/crontabの実行する権限を有していることを指しています。


今となっては、なんでこんな記述をしたのか不明ですが、testというのは一般向けに記事を書いたときに便宜的に書いたのかな?って想像しています。以上の検証作業は、2013年には10日間かけて行い、実装できたそうです。本当に10って数字が多く出てきます・・・。

[デバッカの復活!]
 以上の10年前の検証を踏まえ今回も設定を試みましたが、うまくいきません。これを実証試験を行っている最中に、どこでどんなことが起こっているのか知りたかったため、Prototype EVEのデバッカを復活させました。このデバッカ、Prototype EVEを利用しようと思った主因だったのですが、今までそれがなくてもプログラム修正ができていました。ただ、今回は違います。
 余談ですが、デバッカを復活させるとき動かなかったので、1ステップ1ステップ検証をしたのですが、バグがあったんでよね・・・。本来なら動かないはずなのですが、Prototype EVEでは、現在も問題なく動いています。そこが不思議・・・。

[あとがき]
 以上が先週末、「Aクーロンタブコントロールファイル実行処理」を復活させる過程なのですが、以上はまだ道半ばまで達していません。これから、もっと苦労をすることになります。その苦労話の続きは、長くなってしまったので、明日にしましょう。

 では、また!

2023年12月08日

PHP8におけるバッチ開発検証 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラマー.jpg
 昨日、植田日銀総裁の発言により、円高に動いています。

 2023年12月7日、参院財政金融委員会で、「チャレンジングな状況が続いているが、年末から来年にかけて一段とチャレンジングな状況になる」との発言を受け、今月18、19日と来月22、23日に開催を予定している金融政策決定会合で政策変更、ようはイールドカーブコントロールを中止し、金融正常化に向けた動きがあるのではないのかと市場は憶測しています。
 以前から現在の円高は何が要因なのかという話を、「システムエンジニアが目指す中小企業診断士」の中でしていますが、今回の為替相場の動きは、金利による円高だと言うことを明示しています。これにより、為替を操作するという立場から言うと、どうすればいいのかと言うことが明確になりました。ただ、チャレンジングという言葉が示すとおり、ただやればいいというモノではなく、いろいろなところに気を遣いながらの政策になりそうです。

 では、今日の本題です。

[従来のクーロンタブコントロールファイルの作成方法]
 では、悶々としながら何をひらめいたのか話す前に、今までどのような方法でクーロンタブを設定していたのか話をしましょう。
 クーロンタブの設定の流れは、以下の通りです。

@crontabコントロールファイルを作成する。
A以下のコマンドでcrontabコントロールファイルをクーロンタブとして登録する。
Bクーロンタブの設定を確認する。

 @のcrontabコントロールファイルって、私が使っている用語なので多くの人が分からないと思うので、解説すると、クーロンタブに読み込ませるための設定ファイルです。通常は、

# crontab -e


というコマンドを実行し、表示されたエディタ、通常はviなのですが、同エディタでクーロンタブの実行内容を記述していきます。私の場合は、それを、別にファイルとして作成し記述しています。その作成したファイルを私はcrontabコントロールファイルと称しています。

 そして、そのcrontabコントロールファイルを作成するに際し、私は2つの方法を採用しています。
 1つは、viを使用する方法です。viを使用し始めたとき、Windowsでメモ帳とか秀丸を使用している人間からすると、私も含めて多くの人が使いにくいと言っていました。しかし、使っていると使いやすいと感じてくるものです。だから、現在もそうですが、viを多用しています。
 もう、1つは、Samba経由で、crontabコントロールファイルを秀丸で作成するという方法です。直近はこの方法が多かったような気がします。

 しかし、今回は、以上の2つの方法は使用していません。それは、開発環境が変わったからです。

[今回のcrontabコントロールファイル作成方法]
 今回は、WinSCPでcrontabコントロールファイルを作成し、それを保存し実行しようとしていました。Xserverへシステムを作ろうと考えた場合、Sambaは利用できません。じゃ、viかというとやはり生産性が落ちます。安直に試験をしようとしていたので、以上のような方法で実現しようとしていました。
 どうもこの方法がいけなかったようです。

 それに、悶々と部屋の中でごろごろしながらひらめきました。そして、viでコントロールファイルを修正したところ、昨日話していたエラーになることなく、しかも、実行できることが確認できました。

 この瞬間、幽体離脱しそうになりました(笑)

 ちなみに、crontabコントロールファイルをクーロンタブに読み込ませるコマンドは、以下の通りです。

# crontab FilePath+CrontabControlFile


 そして、設定されているかどうか確認する方法は、以下のコマンドです。

# crontab -l


 そして、crontabで問題があった場合、エラーがログへ出力されますが、その出力先は、syslogになります。同syslogの配置先は、システムにより違うようなので、findコマンド等で調べて下さい。

[あとがき]
 以上が、「APHP8におけるバッチ開発検証」の問題が解決されるまでの道のりです。いつもドツボにはまる時って、単純なことが多いのですが、今回もそうでした。
 今週末は、先週末から開始した、「Bcrontabコントロールファイル作成処理」を修正する予定なのですが、朗報があります。バッチ処理でセッションが利用できるのです。ChatGPTは、PHP5でセッションは利用できるといっていますが、私の環境ではセッションを利用できませんでした。そのため、PHP5の環境ではバッチ処理を利用するために、php.iniのセッションの部分を編集して実行していました。ただ、今回PHP8の環境では、エラーは出ていません。
 以上の確認から、普通のPHPプログラム同様にバッチ処理を製造することができそうです。どのくらいでできるのか、まだ見通しは立っていませんが、希望としては、明日、明後日で修正を完了し、「Bcrontabコントロールファイル作成処理」で作成したcrontabコントロールファイルでバッチ処理が起動するかどうかまで確認できればと考えています。

 では、また!!!

■金融政策運営、年末から来年かけ一段とチャレンジングに-日銀総裁(Bloomberg)
https://www.bloomberg.co.jp/news/articles/2023-12-07/S59QO5DWX2PS01

2023年12月07日

先週末の開発−問題点の検証− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ソフトウェア開発.jpg
 先週末は、開発中心に活動をしていてそれぞれの実施項目に問題点があったということを前回話しました。今回は、同問題点を整理します。

@Knowlegeシステム
APHP8におけるバッチ開発検証
Bcrontabコントロールファイル作成処理

[外部キーを設定する]
 @のKnowlegeシステムですが、正常に動作させることさえあきらめようかと思いましたが、土曜日に修正を開始したらさほど時間をかけずに、正常(?)に動作させることができました。そこで、早速、外部キーをつけようとしたのですが、できない・・・。理由は、以下の2点です。

@子テーブルの当該項目には、親テーブルの当該項目に対応する値が存在していなければならない
A子テーブルの当該項目がセカンダリキーであるため、同じ値を複数の行で許容します。そのため、外部キー制約のためには子テーブルの当該項目において、同じ値が複数の行で存在している必要があります

まっ、どちらかなのか、両方なのか分かりませんが、データに不整合が発生しているようです。実は、Prototype EVEでは、整合性確認ツールを作って、日々確認していた時期がありました。それは、インターネット上に公開している時期で、公開をやめたぐらいから停止してしまいました。多分ですが、インターネットに公開している時期においては、不整合は確認していないので、それ以降に不整合が発生したのだと思います。
 PHP8になった現在、整合性確認ツールの信頼性が微妙です。一応修正はしたのですが、それを使うのか、新たに以上のバグを検出するため専用のプログラムを作るのか思案中です。
 次期システム、EVEシステムでは、外部キーはデフォルトでつけていく予定です。つけすぎると遅くなるという話もあるので、最低限ということになりますが、この段階で以上のようなことが分かってラッキーだったかもしれません。

[PHP8におけるバッチ開発検証]
 現在外部キーの設定ができないことを確認後、方向性については、じっくり考えるとして、時間がもったいないので、PHP8の環境で、PHPをバッチ処理で動かすことを検討しました。簡単かと思いきや動かない・・・。今まで見たことがないエラーがたくさん出てきます。

@crontabに空白行は入れることができない。
A最終行の後に改行コードを入れないとエラーになる

しかも、動いていない・・・。今まで何本もバッチ処理を作ってきましたが、こんなことはありませんでした。つい最近では、PHP8での環境ですが、XServer上にウイルスソフトを導入し、それをバッチ処理で動かした実績があります。
 原因を調べるために、ログを見ても何も出力されてません。実はこの調査に10時間以上費やしています。

[あとがき]
 近頃、何か問題があると気力がなえる傾向があります。今回のバッチ処理の検証試験でも同様でした。調査に10時間といっていますが、調査というより悶々としている時間って言ったらいいでしょうか?
 ただ、悶々としながらうだうだして、パットひらめいたアイディアで問題は解決しました。続きは明日書くのですが、まっ、単純な話です。気づけばなんだ〜ってことになりますが、判明後はショックです・・・。しばらく、動けませんでした
 という続きは明日書きます。

 では、また!!!

2023年12月04日

今後製造するシステム 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ホームオフィス.jpg

 先週末は、開発中心に活動をしていました。

@Knowlegeシステム
APHP8におけるバッチ開発検証
Bcrontabコントロールファイル作成処理

以上のものには手を付けたのですが、問題が・・・。以上の中で完璧に終わったのは、Aだけです。
 @は動いたのですが、思った結果が得られませんでした。Prototype EVEを本来の形で動かしていれば問題なかったのですが、Prototype EVEの公開をやめたタイミングでいろいろとシステムを止めたのが原因だと思われます。そして、Bを作っている最中に先週末はタイムオーバーになりました。と言う状況で、現在資料を整理している最中です。数日で方針が決まる予定なので、決定後どんなことがあったのか、ブログにまとめたいと思います。
 では、本日は、今後どんなシステムを作る予定なのかお話ししましょう!

[開発予定のシステム]
 今後、以下のシステムを製造する予定です。なお、以下の順番はシステムを開発する順番ではありません。

■Prototype EVE
@crontabコントロールファイル作成処理

■EVEシステム
AYahooクローニング処理
B株式情報公開システム
Cログインシステム
D構成管理システム
01)フォルダ・ファイル管理システム
02)データベース管理システム
・データベース
・テーブル
・カラム
・権限
03)プログラム管理システム
04)ユーザ管理システム
Eセキュリティ関連システム
01)システム制限管理システム
・時間
・ユーザー
Fメッセージ管理システム
Gグループ管理システム
Hコード管理システム
Iパラメータ管理システム
Jシステムメンテナンス
1)データベース
・SQL実行プログラム
・フォルダ・ファイルメンテナンス
・バックアップ
・データベース復元ツール
・削除ツール
・整合性確認ツール
2)ファイル
・削除ツール
KKnowlegeシステム

Prototype EVEで、使用したものを踏襲すると以上のものは最低限作らないといけないようです。ただ、今メニューを見ていて得体のしれないシステムが・・・?後日調査しますが、使っていないから多分新規で製造することはないと思います。

[開発の流れ]
 開発の流れとしては、例えば、Yahooクローニング処理ですが、以前もYahooをクローニングしていたシステムがありました。そのシステムでどんな関数を使用していたのか調査をして、同調査に基づき、EVEシステム用のクラスを製造します。製造後、Yahooクローニング処理を製造するという流れになります。上記のシステムのほとんどは、Prototype EVEシステムで既に製造済みなので、だいたいのプログラムが以上の流れになると思います。

[EVEシステムで新しくなること]
 EVEシステムで新しくなることは、セキュリティの部分は最新化します。IPAで提唱されているセキュリティは当然ですが、当サイトで考えられるセキュリティを実現します。
 そして、構成管理システムは初めて作るシステムなります。普通のプロジェクトは、ドキュメントを作ってからシステムを作る流れになりますが、この構成管理システムを作ることにより、ドキュメントをそのままシステムに利用します。つまり、ドキュメントを修正すれば、そのままシステムが変更できるといった構成になります。
 そして、マルチスレッド処理を導入します。ChatGPTに聞くと、PHPのマルチスレッド処理は試験的なモノであるため、本番環境での使用は問題があるから検討が必要だと言っています。加えて、Bingでは、CLI環境のみ対応だとの指摘がありました。まっ、とりあえず作ってみて、作った後使えるようなら本番環境に導入し、問題があるなら、仮想的に実現するという流れで考えています。

[あとがき]
 前回の、Prototype EVEでは、管理システムは自分しか利用しないからかなり完成度が低いモノでした。ただ、今回は、作るだけではなく、使えるシステムにしたいと考えています。セキュリティの部分は、公開は難しいですが、それ以外で公開できるモノは、公開していく方向で考えています。今回は、海外にも積極的にアクセスしていきたいと思います。
 そうそう、システムの英語対応ですが、考えが変わりました。まっ、それについても、後日お話ししましょう。

 では、また!

2023年12月03日

共通フレームワーク 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
フレームワーク.jpg
 先週の金曜日で、第3章運営管理のIE(Industrial Engineering)のスマート問題まで終えました。
 IEとは、生産性を高めるための工学的な手法です。企業経営理論の中で勉強した、テイラーの科学的管理方法などから発展してきた学問です。普段システムなどを作っている人間からすると、かなり、遠くの話をしているような気がしていました。
 しかし、共通フレームワークの解説をIPA提供の動画を見ていて、身近なものだということを知りました。

[共通フレームワークとは?]
 早速、共通フレームワークについて、Biengに解説してもらいましょう!

 共通フレームワーク2013は、ソフトウェアのライフサイクル全体を通じて必要な作業項目や役割を包括的に規定した日本の情報処理推進機構(IPA)による枠組みです。これは、ソフトウェアの構想から開発、運用、保守、廃棄に至るまでのプロセスを体系化し、関係者が「同じ言葉で話す」ことを目的としています1。
 共通フレームワーク2013の主な特徴は以下の通りです:

・超上流の重視
・モジュール性の採用
・責任の明確化
・工程、時間からの独立性
・開発モデル、技法、ツールからの独立性
・ソフトウェアを中心としたシステム関連作業までを包含
・システムライフサイクルプロセスとの整合性
・文書の種類、書式を規定しない
・修整(テーラリング)の採用

 共通フレームワーク2013は、国際規格やJISとも整合性を持ちながら、日本独自のプロセス拡張を行っています。これにより、ソフトウェア開発における標準化と効率化を図ることができます。また、このフレームワークは、ウォーターフォール、スパイラル、プロトタイプ、アジャイル系など、すべての開発方法論に共通したものとして設計されています。
 詳細な情報やガイダンスは、IPAの公式文書や関連書籍で確認することができます12。また、電子書籍版も入手可能です。


 情報処理安全確保支援士の勉強をしていて、共通フレームワークについて知ったのですが、一見よさげです。

[共通フレームワークは生産管理の成功から生まれた!]
 以上は、IPAが中心に作った共通フレームワークですが、生産管理等の成功を受けて、システム開発分野にも適用したのが、共通フレームワークだというのです。2時間にわたり共通フレームワークについて解説しているのを聞いたのですが、ちょっと衝撃です。

 エンジニアの方は一度見て下さい。生産管理の語りの部分だけを教えることもできますが、それでは、解説者の方の意図を正しく伝えられない可能性があります。そして、私の理解も違っている可能性もあるため是非このビデオを見て下さい。

[すべての解説を聞いて]
 共通フレーム2013概説を見、かつ、IE(Industrial Engineering)の勉強を終えての感想は、この解説をされている方は、すべての工程を経験したことがないのでは?っという印象です。共通フレームワークについては、本も購入し読んだのですが、どちらかというとプログラムを作ることがないシステムエンジニア寄りのものとなっています。加えて、抽象的で正直言って、誰が使うのだろうと言った感想を持っています。現に、職場にいると、エッセンスは聞くことはあっても、そのフレームワークを適用しているプロジェクトはありませんでした。私が参加したプロジェクトですが・・・。

[共通フレームワークが提供されるタイミング]
 もし、この共通フレームワークが適用されるタイミングがあるとすると、ソフトウェア業界の技術の進歩が鈍化したとき、または、止まった時だと思います。
 現在は、日進月歩という状況で、いろいろな方がいろいろな考え方で、日々新しい技術、手法を試しています。その中で日本の工場(生産現場)で成功した生産管理の手法を取り入れた共通フレームワークを作りましたから、これで行きましょうと言われても・・・。

 現在、小学生でも作れるプログラミングということで、各プログラムをモジュール化しブロックを積み重ねるように、システムが作れるという開発技術が日々成長しています。これが主流となり、もう考える予知がなくなったとき、このようなことを言われても違和感もなく受け入れることができると思います。

[あとがき]
 お題目だけ聞いたり読んだりしていると、意外といいような気がするのですが、生産管理の部分は余計ですね・・・。
 それと、抽象的すぎてなかなか使えません。できれば、政府調達するソフトウェアは、共通フレームワークで開発していないと、納入できませんと言うぐらいのものを作らないと、見向きもされないでしょう?
 ようは、どんな考え方だけではなく、どんなドキュメントを作るといった踏み込んだ話です。そういう話をするとこれを考えた人達は、そうじゃないと言い出すと思うのですが、そこまでしないと誰も使わないし、共通の文化を形成することができません。

 本日は、「システムエンジニアが目指す中小企業診断士」で、IE(Industrial Engineering)を図を用いて解説しながら学習しようとしたのですが、書いているうちに、共通フレームワークになってしまいました。そのため、急遽、「ゼロから始めるシステム開発」の記事とさせていただきました。

 では、また!

■共通フレーム2013概説(IPA@youtube)
https://youtu.be/bbBtB7uye7U?si=jnEjpecfhmPLNOKl

■共通フレーム2013概説(IPA)
https://www.ipa.go.jp/archive/files/000027415.pdf

2023年12月01日

システム開発 −環境編− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
Start.jpg

 本日は、システム開発を本格的に実施するに際し、何をどうするのかと言ったところを、ブログにまとめたいと思います。仕様書が全くない開発は、気がついたら当初と違うモノを作っていたと言ったことが多々あります。Prototype EVEがそうでした。そのようなことがないように基本的な部分は、記録して残しておくのは大事でしょう?
 ただ、当初考えていた構想と途中で変わるというのは仕方がない側面もあります。そのときは、ここでまとめた内容を変更した上で、開発を進めたいと思います。

 通常の業務だと忙しさにかまけて、後でドキュメントを修正しようと、開発を優先することが多いという認識です。但し、開発後修正していないと思われるケースが多々ありました。やはり、面倒くさくても優先順位は変えてはいけないと言うことでしょう?

[開発環境]
❶ソフトウェア
1)Ubuntu
2)Apache
3)Postfix
4)PHP
5)Python
6)PowerShell
7)ClamAV

❷クライアントプログラム
1)HTML Living Standard
2)CSS
3)JavaScript

❸サーバーサイトプログラム
1)PHP
2)Python
3)PowerShell

❹データベース
1)MySQL

[開発環境詳細]
 ❶導入ソフトウェアは、こんな感じで考えています。
 ❶5)Pythonは将来的には、AIで利用したいという希望は持っていますが、現在の段階ではどこに使うという構想はありません。これは、念のため・・・。
 そして、❶6)は、バッチ処理で利用します。今までは、バッチ処理を製造する場合、PHP、または、LinuxにインストールしてあるShellを利用していたのですが、今後、すべての開発において、PowerShellを利用します。理由は、Windows、Linux両方で開発ができ、再利用性が高いと判断したからです。
 ❷の1)2)については、昨日話した通りです。最新のHTMLの仕様で、かつ、見栄えの部分はできるだけ、CSSを利用します。ただ、細かい指定はできるけれど、めんどくさい一面があります。
 例えば、テーブルの罫線をCSSでやろうとしたらめんどくさそうなんですよね???HTMLのTABLEタグ内に属性を指定すれば、簡単にできるものがCSSではそうはいかない・・・。classを1つ作れば、後日汎用的に利用できそうな気もしますが、この手の話はちょっと、苦労しそうです。
 そして、JavaScriptは、HTML画面から呼びだされるモノは、今まで通り、関数として製造しますが、文字class、数字classなどの共通のモノは、オブジェクト指向で製造します。
 ❸は飛ばして、❹ですが、今までこのブログでは、PostgeSQLを使用することを想定して活動してきたのですが、予定を変更します。それは、Prototype EVEの一部機能を利用するというところから始まっています。PDOを利用しているので、混在しても問題ない気もするのですが、とりあえず、今はその方針でいきます。
 Webとデータベースが近くにある場合は、MySQLで問題ないのですが、これが、距離が離れたり、Webとデータベースの間の回線が細いというケースを想定すると、やはり、PostgeSQLの方が優れています。定期的にバキュームとかしなくてはいけないため、運用がめんどくさそうなんですけれどね・・・?

[あとがき]
 環境面では、以上の内容で考えています。ひらめきで動いている人なので、以上については、予告なく変更します。但し、変更した場合は、このような形でアナウンスをします・・・。っていうか、そうしないと自分でも忘れそうですしね(笑)。

 長くなってしまったので、開発するシステム等については後日お話ししましょう!

 では、また!

2023年11月30日

開発体勢の変更 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
HTML.jpg
 お休み中いろいろ考えたのですが、開発の体制を変更したいと思います。
 今まで、毎日決めた時間ではないのですが、隙間時間に開発をしてきました。しかし、それでは、なかなか進捗が得られません。そこでですが、開発を週末に集中的に行います。ようは、土、日曜日を開発の日にするということです。
 先週まで開発の進捗が得られなかったのは、エンジンがかかってきたと思ったところで、開発をやめて次のことをやることが多かったためです。
 なお、現在週末と限定していますが、中小企業診断士の勉強の方が進み、1次試験の見通しがたった段階で、週末だった開発を、金曜日、木曜日といった感じで、週に開発する日数を増やしていきたいと思います。

[システム開発方針〜画面系・HTML〜]
 画面のデザインなのですが、Prototype EVEでは、クライアント、サーバーサイト両方で行っています。それは、開発当初は、サーバーサイトのみでやっていたのですが、HTMLのタグの属性の多くを廃止し、画面の表現をCSSで統一すると言う方針がW3Cから示されたことによります。そのときは、示されただけであって、確定したわけでもないし、廃止されるとも決まっていなかったので、新規開発分から徐々に移行していたのですが、不徹底だったため、混在するようないびつなシステムとなっています。

[廃止されたHTML5]
 HTML52021年1月28日に廃止されました。それに伴い、HTML5の仕様の変更に消極的だったW3Cが、WHATWGが策定するHTML Living Standardを採用しました。デファクトスタンダードが、デジュリスタンダードへ格上げされたといった感じでしょうか?
 これにより、アナウンスしていたとおり、画面の表現をCSSで行うことが明確になり、ウェッブページのデザインとコンテンツが分離されました。
 実は、このブログを付けるまでこの事実は知らなかったのですが、デザインをクライアント側で実施するという決断は間違っていなかったようです。
 但し、W3Cからのアナウンスでは、HTML Living StandardはHTML5だといった発言もあり、大きな変更はないようです。そのため、仕様を変更する猶予は与えられているようです。

[あとがき]
 週末は、Knowlegeシステムの動作確認から始めます。それが終わったら。データベースにインデックスを付与して、バッチシステムの製造の準備に入ってと盛りだくさんです。週末、開発中心にすることにより、どのくらいの進捗があるのかたのしみです。

 では、また!

■HTML5の廃止の影響は?知識を無駄にしない仕様変遷を紹介!(アンド エンジニア)
https://and-engineer.com/articles/YWfi7BIAACEADd6C

2023年11月22日

JavaScript  〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
JavaScript.jpg
 JavaScriptって知っています?名前からJavaとつくので、何となく親戚のような雰囲気を出していますが、実は全く関係がありません。ただ、今まで知りませんでしたが、以前からオブジェクト指向という扱いだったらしいです。プログラミングしていてオブジェクトもどきという気がしていましたが・・・。
 JavaScriptって他のプログラミング言語と違って、クライアント側で動作する(サーバーサイトで動作するモノもありました)ため、ユーザーがそのプログラムを見ることができます。たまたまアクセスしたサイトで面白い動作をするサイトがあったので、そのソースを見たのですが、自分が作ったことがないような作りになっていました。それがどうもオブジェクト指向のJavaScriptと言われるモノだったらしいのです。それが分かった、今でも、難解複雑なそのようなプログラミングをするつもりはありません。
 PHP5は過去に、オブジェクト指向言語ではないとインターネットでは言われてきました。多分オブジェクト言語だと言っていたのは、私が運営しているサイトぐらいです。ただ、そのPHP5と比較してもオブジェクト指向とは言えないような言語体系にもかかわらずオブジェクト指向として扱われてきたのは非常に疑問です。
 2015年に、JavaScriptの標準化バージョンECMAScript 2015がリリースされたことにより、本格的に普通の人が知っているオブジェクト指向言語になったようです。

[ECMAScript 2015]
 ECMAScript 2015の公開は、2011年で、その4年を経て正式リリースとなったようです。標準化団体は、欧州電子計算機工業会(ECMA: European Computer Manufacturers Association)で、その団体の略称を頭につけているようです。
 標準化と言われると、統一された言語なのに何かおかしな気がしますが、そもそも、JavaScriptは、Netscape社のNetscape上で動作するプログラムでした。それが、Internet Explorerなどのいろいろなブラウザでもサポートされるようになりました。そうです。JavaScriptはブラウザによりその動作を異にします。顕著なのが文字コードの扱い方です。NetScape系は文字列を1バイトで認識しますが、IE系は、1文字は1文字として認識します。これ以外にもいろいろな違いがあるのですが、とりあえず、ブラウザにより動作が違い、その動作の違いを標準化しようとした団体があったと言うことです。

[ECMAScript 2015]
 実は、PHPをオブジェクト指向言語として書き換えようとしている現在、JavaScriptもオブジェクト指向言語に書き換えようかと考えています。今とほほのサイトで言語仕様を確認しているのですが、JavaとかPHPを見ているような、なじみのある言語体系となっています。インターフェースとか抽象クラスとか言った部分については限定的で、本格的なオブジェクト指向言語となるのにはまだ、時間がかかりそうです。ただ、方向性としては、同機能もサポートする方向にあるようなので、その機能が導入されることを意識してプログラミングした方がいいようです。

[あとがき]
 明日からしばらく、ゼロからはじめるシステム開発、システムエンジニアが目指す中小企業診断士ともに更新をお休みします。たまには休みを取りませんと・・・。
 この休み中、休み明け何をするのかじっくり考えながら過ごしたいと思います。

 では、また!

■JavaScript って何?(とほほ)
https://www.tohoho-web.com/js/what.htm#ECMAScript

2023年11月21日

セッションタイムアウト 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
PHP.jpg
 今日中に、Knowlegeシステムの改修を終える予定でしたが、あきらめました・・・。これから予定も入っていますし、この辺にしたいと思います。

[今日の問題点〜mktime〜]
 Knowlegeシステムを動かしながら改修作業を進めていくと、セッションタイムエラーになります。なんでだろう〜〜〜〜っということで、フレームワークに突っ込んで調査してみて分かったこと・・・。date関数のmaketimeがうまく動作していない・・・。
 Prototype EVEでは、厳格にセッションタイムを管理したいという構想があったため、セッションタイムの管理は、フレーム側でやっています。
 以下が、今回の問題のロジックなのですが、まず、文字タイプエラー・・・。
以下の$By、$Bm、$Bd、$Bh、$Bi、$Bsは、substrで文字列を切り出しているので、文字列として各変数に格納されています。その文字列をdate関数に引数として渡すとエラーになります。


//セッションタイムアウト時間を算出する
//基準日の分離(現在日付を取得する。)
$By = substr($AccessTime,0,4);
$Bm = substr($AccessTime,4,2);
$Bd = substr($AccessTime,6,2);
$Bh = substr($AccessTime,8,2);
$Bi = substr($AccessTime,10,2);
$Bs = substr($AccessTime,12,2);

//現在時間(秒)にセッションタイムアウトの秒数を加算する
$Bs = $Bs + $SessionTimeOut;

//セッションタイムアウトの時間を算出する
$getTime = date ("YmdHis", mktime ($Bh,$Bi,$Bs,$Bm,$Bd,$By));//

//セッションタイムアウトかどうか判定する(現在時刻とセッション
タイムアウト時間の比較)

if ( $nw > $getTime ) {
//セッションタイムアウトの場合、エラーステータスを設定し
呼び出し元へ制御を移す

return "E0018";
}



 それでは、ということで、integer型に数値変換して渡すと、今度は、日付が1990xxxxxxxxxxxxxxって表示される・・・。現在日付に、想定しているセッションタイムの時間を加算しているのだから、1990年という日付は考えられない・・・。
 ちょっと、粘ったのですが、解消される見込みがなかったので、ChatGPTに相談して以下のように変更しています。


// 現在の日時を取得
$currentDateTime = new DateTime();

//現在時間(秒)にセッションタイムアウトの秒数を加算する
$secondsToAdd = (int)$Bs + (int)$SessionTimeOut;

// 現在の日時に秒を加算
$currentDateTime->add(new DateInterval("PT{$secondsToAdd}S"));

// 加算後の日時を取得
$getTime = $currentDateTime->format("YmdHis");

//セッションタイムアウトかどうか判定する(現在時刻とセッションタイム
アウト時間の比較)

if ( $nw > $getTime ) {
//セッションタイムアウトの場合、エラーステータスを設定
し呼び出し元へ制御を移す

return "E0018";
}



これで、セッションタイムエラーは解消されました。
 ただ、オブジェクト指向で作っていないプログラムに、1箇所だけオブジェクト指向のロジックを入れるのは、あまり好きではないのですが・・・。ただ、このロジックが後日問題になるとは思えませんし、このロジックで改修作業を進めます。

[あとがき]
 外部キーを設定するためにはじめたシステム改修作業なのですが、途中ですがやめたくなりました。ただ、改修後は、現在自宅で更新しているKnowlegeシステムをインターネット上に公開して更新したいとか思っていたりして・・・。そのため、つい最近、「Webデザインの基本」という本を図書館から借りてきました。システムまわりには強いつもりなのですがデザイン系がイマイチです。そのため、1から勉強しようと考えていたのですが・・・?

いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ]

価格:2640円
(2023/11/21 12:17時点)
感想(3件)



 数日で改修できないという状況になりましたら、途中で放棄し、Yahooのクローニングシステムの製造に入ります・・・。もったいないけれどね・・・。

 では、また!

タグ:php Date関数

2023年11月20日

Knowlegeシステム 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
PHP.jpg
 外部キーの設定により、検索の速度が速くなったことを確認したいと考えています。その対象のシステムとして、Knowlgeシステムで確認しようとしたのですが、動かすまでが思った以上に大変のようです。

[関数認識できない]
 今まで、管理システムを動かすことだけを想定しシステムを改修していたため、他のシステムを先日まで動かしていませんでした。動かす前までは、すぐに何とかなるだろうと思っていたのですがうまくいきません。
 その最大の要因は、違う階層のアプリケーションから関数を呼び出すとエラーになる。ようは、ルートディレクトリから2階層目のアプリケーションでは動作は正常に動くのだが、3階層目のアプリケーションから呼び出すとエラーになります。エラーとは、定義した関数またはクラスが認識できないらしいのです。
 調べていくと、今回から関数内で、関数を呼びだすと言うことを実施しています。今までは、関数を含めて、イベントにより起動するアプリケーションで使用する関数は、呼び出し元ですべて定義するという仕様だったのですが、オブジェクト指向言語にすることによりそれをやめました。それにより、各アプリケーションでは、関数またはクラスを使用するアプリケーション側でrequireからrequire_onceに変更しています。
 requireでは、1イベントで起動する関数、クラスまたはアプリケーション内で、重複する関数またはクラスを定義するとエラーになります。但し、require_onceを使用すると、どこの関数、クラスまたはプリケーションで同じものを定義してもエラーになりません。
 仕様の違いについてChatGPTに聞いてみました。


■require
 requireは、指定されたファイルを読み込みます。
 ファイルが存在しない場合や読み込みに失敗した場合、致命的なエラー(Fatal Error)が発生し、スクリプトの実行が停止します。
 同じファイルが複数回requireで読み込まれた場合、その都度再度読み込まれます。これにより同じコードが複数回実行される可能性があります。
■require_once
 require_onceも指定されたファイルを読み込みますが、そのファイルがまだ読み込まれていない場合にのみ、一度だけ読み込みます。
 ファイルが存在しない場合や読み込みに失敗した場合、致命的なエラーが発生し、スクリプトの実行が停止します。
 同じファイルが複数回require_onceで読み込まれた場合、最初の一回のみが実際に読み込まれ、それ以降は無視されます。

 どちらを使用するかは状況によります。通常、同じコードが複数回実行されて問題が生じる場合はrequire_onceを使用し、複数回実行されない場合はrequireを使用します。



[あとがき]
 以上のような状況のため、require_onceで定義するアドレスを相対アドレスから絶対アドレスに変更しました。但し、すべてのものを変更するのは工数がかかるので、今回は、関数、クラスだけを絶対アドレスに変更しています。
 以上の対応により、require_onceによるエラーがなくなったのと同時に、その他のエラーも減っています。但し、その他にも、いろいろとありました。しかし、今日、一通りのバグをつぶしたので、明日から、Knowlegeシステムでの検証作業に入ることができそうです。
 バージョンアップって大変ですね・・・。早くやりたいという気持とは真逆にどんどん遅れていきます。
 システム開発に集中できる環境が整えばいいのですが・・・?

 では、また!

2023年11月17日

情報セキュリティ10大脅威 2023 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
ネットワーク.jpg
 今日は、雨・・・。憂鬱な金曜日です。

 お約束通り、午前中にブログを更新しています。ただ、昨日帰りが遅くなったこともあり、朝は早く起きれませんでした。予定の生活リズムになるには時間がかかりそうです。今日は夜遅くなるような要因はないので、早く寝るというところから始めましょうか?

[情報セキュリティ10大脅威 2023]
 去年も御紹介した、情報セキュリティ10大脅威について、今年も見ていきましょう。
 本情報は、IPAから提供されており、以下のようになっています。
 情報としては、個人と組織で分けて紹介しています。

【個人】
1位 フィッシングによる個人情報等の詐取(前年は1位)
2位 ネット上の誹謗・中傷・デマ(前年は2位)
3位 メールやSMS等を使った脅迫・詐欺の手口による金銭要求(前年は3位)
4位 クレジットカード情報の不正利用(前年は4位)
5位 スマホ決済の不正利用(前年は5位)
6位 不正アプリによるスマートフォン利用者への被害(前年は7位)
7位 偽警告によるインターネット詐欺(前年は6位)
8位 インターネット上のサービスからの個人情報の窃取(前年は8位)
9位 インターネット上のサービスの不正ログイン(前年は10位)
10位 ワンクリック請求等の不当請求による金銭被害(圏外)

【組織】
1位 ランサムウェアによる被害(前年は1位)
2位 サプライチェーンの弱点を悪用した攻撃(前年は3位)
3位 標的型攻撃による機密情報の窃取(前年は2位)
4位 内部不正による情報漏えい(前年は5位)
5位 テレワーク等のニューノーマルな働き方を狙った攻撃(前年は4位)
6位 修正プログラムの公開前を狙う攻撃(ゼロデイ攻撃)(前年は7位)
7位 ビジネスメール詐欺による金銭被害(前年は8位)
8位 脆弱性対策の公開に伴う悪用増加(前年は8位)
9位 不注意による情報漏えい等の被害(前年は10位)
10位 犯罪のビジネス化(アンダーグラウンドサービス)(圏外)

[個人の情報セキュリティ10大脅威]
 基本的に脅威は変わっていません。1位〜9位までは不動って言う感じです。去年から今年にかけて消えた項目は、9位だったインターネットバンキングです。昔と違って現在銀行のシステムがインターネット上に公開されている状況です。セキュリティ的に防御されているとは言え、まだまだ多いと思われます。ランキングには掲載されていませんが、気をつけて下さい。
 ざっと見た印象ですが、2つの要因に分類できます。1つ目はITリテラシーの不足・・・。2つ目は法律の知識不足です。
 ITリテラシーの不足では、ソーシャルエンジニアリングなどの手法により狙われていると言った印象があります。
 法律知識の不足という部分では、2位のネット上の誹謗・中傷・デマ(前年は2位)と10位のワンクリック請求等の不当請求による金銭被害(圏外)の状況からそう感じます。
 
 もし、脅威を減らそうとするなら、ITリテラシーを高め、かつ、法律を知れば、脅威が弱まる、またはなくなるのかもしれません。

[組織の情報セキュリティ10大脅威 〜セキュリティホール〜]
 組織の情報セキュリティは、4つに分類できます。セキュリティホール内部犯行ソーシャルエンジニアリング、そして犯罪のビジネス化という4つです。
 セキュリティホールは、情報処理安全確保支援士などの力を借りて、なくす方向で考えるしかないようです。興味深いのは、サプライチェーンの弱点を悪用した攻撃(前年は3位)が2位にはいっているということ・・・。
 どんな攻撃か解説すると、一般的なモデルと言うことになりますが、子会社から親会社のネットワークにアクセスし攻撃します。なぜ、子会社なのか?それは、規模の小さい子会社は、セキュリティにお金をかけることができず、脆弱性を抱えている現状をうかがい知ることができます。ようは、お金をかければセキュリティを高めることができます。
 ゼロ・トラスト、ようはすべての通信を疑うと言った考え方が主流となってきている現在セキュリティ費用は高くなることはあっても、安くなることはないでしょう?このような状況は、これからず〜っと続くのかもしれません。

[組織の情報セキュリティ10大脅威 〜内部犯行〜]
 内部犯行を語る場合、不正のトライアングルという言葉で解説されることがあります。
 不正のトライアングルとは、3つの要素が揃ったときに、人は不正行為を働くとしています。それは、

動機
機会
正当化

 です。
アメリカの犯罪学者ドナルド・クレッシー氏が提唱した、組織内の要員が不正を起こすメカニズムを分析した理論です。
 それでは、以上の動機、機会、正当化という犯罪メカニズムの脅威を減らす方法について考えてみましょう。

 動機を減らすには、部下とのコミュニケーションを密にし、公私においてどんな悩みを抱え、その悩みを軽減してあげる努力が必要なのかもしれません。
 機会を減らすには、業務運用、システムで軽減する方法が考えられます。
 そして、正当化を減らすには、SPC(サービスプロフィットチェーン)を高めることにより軽減する方法が考えられます。SPCについては、解説すると長くなるので、解説しているサイトを下記に記します。なお、このSPCは中小企業診断士における企業経営理論の試験範囲です。機会がありましたら、ブログに書きます

[組織の情報セキュリティ10大脅威 〜その他〜]
 ソーシャルエンジニアリングは、ITリテラシーを組織として高めるしかないでしょう?セキュリティの考え方を教え、その考え方で行動するということを心がけるしかないです。
 そして、犯罪のビジネスですが、一般社会で騒がれている、オレオレ詐欺とか組織的強盗などの犯罪が、ITの世界にもはいってきた印象があります。今後、注視していきたいと思います。

[あとがき]
 文中にお金をかければ、セキュリティが減るという話をしてますが、残念ながらゼロにはなりません。お金をかけても、知識を持っていても、セキュリティインシデントに遭遇するケースはあります。
 ただ、セキュリティリスクが減るということは事実なので、今までのセキュリティインシデントを分析し、どうしたらいいのかということを、考えていかなければいけません。そして、このようなランキングを見ることにより、限りあるリソースを割り振る比重を考える機会にしてください。

 では、また!

■情報セキュリティ10大脅威 2023(IPA)
https://www.ipa.go.jp/security/10threats/10threats2023.html

■サービスプロフィットチェーン(SPC)とは?顧客と従業員の満足度が企業収益に繋がる仕組みを解説(EmotionTech)
https://emotion-tech.co.jp/column/2019/what_is_service_profit_chain/

2023年11月16日

外部キーの導入を検討する 〜データベース研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクトップパソコン.jpg
 何やってもうまくいかない日が続いています。そこで、ちょっと、生活リズムを変えようと考えています。
 まず、このブログですが、現在、16:00ぐらいから書きはじめて、17:00ぐらいにアップロードしようとしていますが、それを午前に行います。
 それに加えて、午前中は、簿記と開発をしようかなって考えています。今、起きる時間を7時に設定しているのですが、なかなか実現できません。寝る時間が増えれば増えるほど、この2つの割り当て時間が減ります。逆に早く起きれば、時間が増えるので、早く起きるようになると思うのですが・・・?それと、ブログの公開時間を17:00ぐらいに設定していても、なかなかその時間にできません。遅い場合は、午前様になることがあります。そうなると寝る時間が減るので、悪循環になっています。この生活リズムの変更により好循環になるかなって考えていますが、どうでしょうか?明日から試してみます。

[Prototype EVEのデータベース変更]
 以上のような状況で、なかなか開発の進捗がない状態なのですが、明日からやってみたいことがあります。それは、外部キーを設定すること・・・。今まで、すべてのレコードに主キーは設定しているのですが、外部キーは今まで設定していませんでした。理由は、当初、私の開発環境では、利用できなかったから・・・。そのため、導入せずに開発を進めました。その後環境を手に入れたのですが、処理速度に問題を感じなかったため、今まで導入していませんでした。開発当初、主キーが1項目しか指定できなかったり、トランザクションが利用できなかったりいろいろと不都合があり、業務で開発するシステムと比較すると、かなりチープな印象がありました。
 ただ、ChatGPTに以上の改善がいつ行われているのか聞いてみると以下のような回答がありました。

トランザクション     → 2002年1月
主キーに複数の項目を指定 → 2005年3月

開発が2004年からなので、少なくともトランザクションのほうは利用できたはずです。実は、標準MySQLという本に開発環境が一式入っていてそれを利用していたのですが、その本に添付されていたソフトが古かったようです。

【中古】 標準MySQL RDBの理解からWebアプリケーションの開発と運用 / 田中 ナルミ, 阿部 忠光, ソフトエージェンシー / ソフトバ [単行本]【メール便送料無料】【あす楽対応】

価格:743円
(2023/11/16 14:57時点)
感想(0件)



 今から考えるとトランザクションを利用できないとか、主キーが複数指定できないとか、かなり間抜けな開発をしていたものだと思います。
 なお、現在は、最新のソフトを利用することを心がけています。

[外部キーの指定の仕方]
 具体的にはどうしたらいいのでしょうか?ChatGPTに聞いてみました。

#子テーブル名
ALTER TABLE orders
#外部キーの制約名
ADD CONSTRAINT fk_orders_customer
#/子テーブルの外部キーカラム
FOREIGN KEY (customer_id)
#親テーブル
REFERENCES customers (
#親テーブル主キーカラム
customer_id);


以上の通りです。なお、外部キーの制約名なのですが、任意で指定できますが、データベース内で一意に命名する必要があります。利用方法は、後日外部キー制約の変更または削除する際に使用します。データベースの保守やデータベース設計の追跡のために、わかりやすくかつ一意な名前を付けることが一般的だそうです。なお、この外部キーの制約名は必ず付与しなければならないというわけではなく、管理という面から付与するのが普通です。

[あとがき]
 以上により、まずは、Knowlegeシステムから外部キーをしていきたいと思います。以前から遅い遅いと思っていました。その主因として考えていたのは、SQL文そのものです・・・。そのSQL文を見直すという作業は時間がかかるため、安直にできる方法として、外部インデックスを付与する方法を考えつきました。現在、サーバーではなく、WindowsXPが動いていたパソコンでKnowlegeシステムを動かしているのですが、激遅です。他にシステムでは、処理速度が遅くて困っているシステムはないことですし、Knowlegeシステムに外部キーを指定してみてどんな感じになるのか検証をしたいと思います。
 今どき、外部キーを指定していないデータベースシステムなんてないですよね?EVEシステムでは、適切に外部キーを設定していきたいと思います。

 では、また!

2023年11月13日

WinSCPで更新したプログラムの更新日付が変わらない 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
データ.jpg
 本日憂鬱なことがあり、だらだらと過ごしてしまいました。
 まっ、こういう日もあります。

[障害報告]
 ということで、今日は、Studyingの問題数問解いただけで、あまり、開発のほうは手付かずなのですが、ここ数日やっていて問題があった点について報告します。
 Prototype EVEでは、データベースだけでなく、ディレクトリ及びファイルについても管理システムから直接アクセスできるようなインターフェースを用意しています。分かりやすく話すと、Windowsにインストールされている、エクスプローラーのWeb版です。
 それを、今回データベース管理システムを修正するついでに動かしてみたのですが、動かない。アクセス権エラーになります。そういえば、現在のテスト環境をVMWare上で構築したとき、WinSCPでただアップロードしただけでした。それでは、アクセス権エラーになるはずです。
 そのエラーの対応策として、フォルダ・ファイルの所有権をApacheに変更し、アクセス権を所有者及びグループに属するユーザーにフルアクセスできるように変更しました。
 これで、問題がなくなったと思ったのですが、WinSCPでサーバーのファイルを直接修正しようとするとエラーになります。エラーになった後、ファイルを閉じて再表示すると内容が変わっているところからどうも更新はできているようです。
 メッセージをよく見ると、タイムスタンプエラーとなっています。

[インターネットで調べてみると・・・]
 とりあえず、どうしてなのか知識がないので、インターネットで調べまくりました。そして、分かったこと・・・。Linuxってタイムスタンプの更新は所有者しかできないらしい???ただ、ChatGPTに質問すると、そんなことはありませんという解答がありました???現に、ファイルに対する権限を所有者と同じものを持っていて、WinSCPではタイムスタンプを更新しない設定にしてくださいという案内がきています。
 じゃ、ということで、WinSCPでroot権限でログインできないのか調べたところ、できないようですね・・・。セキュリティ的には合格ですが使い勝手が悪すぎます・・・。

[ChatGPTとの対話]
 原因が分からないので、引き続きChatGPTと対話をしてみました。ChatGPTが考える原因に、以下の3つを上げています。


❶ファイルシステムの設定の問題
❷WinSCPの設定の問題
❸ファイルの所有者や権限の問題


 ❷について調査をすると、WinSCPからは「ファイルのタイムスタンプの更新をしない設定にすればエラーになりません」っと回答がありました。現在は❷の設定で運用しています。手順としては、以下の通りです。


1)[メニュー]をクリックする
2)表示したメニューから[オプション]を選択
3)表示した画面から[環境設定]を選択
4)(左画面)[転送]を選択
5)(右画面テキストボックス)[デフォルト]を選択
6)(右画面)[編集(E)]を選択
7)[共通設定]を選択
8)タイムスタンプを保存する(M)からチェックボックスを外す


以上の操作によりエラーメッセージは出力されなくなります。但し、タイムスタンプは変更されません。
 ❸については、ログインするユーザーに、Apacheの権限、Ubuntuでは、www-dataなのですが、そのグループを追加しています。
 では、問題は❶でしょうか?

[タイムスタンプを更新したい]
 やはりタイムスタンプを更新したいということで、❶について深掘りしてみました。問題は、ext4というファイルシステムを採用していないとこのような可能性があるようです。では、ext4とはどういうファイルシステムなのでしょうか?ChatGPTに聞いてみました。


 ext4(Fourth Extended Filesystem)は、Linuxにおいて広く使用されているファイルシステムの一つです。以下は、ext4 ファイルシステムに関する主な特徴や概要です:
❶拡張性と性能向上
 ext4 は、前身である ext3 からの進化により、ファイルシステムの拡張性と性能が向上しています。特に、ファイルシステムのサイズの制限が増加し、大容量のディスクやファイルに対応しています。
❷ジャーナリング
 ext4 はジャーナリングファイルシステムであり、ファイルシステムの安定性と復旧性を向上させます。ジャーナルにより、予期せぬシステムクラッシュや電源の突然の切断などからの回復が迅速に行えます。
❸バックワード互換性
 ext4 は ext3 とのバックワード互換性があります。そのため、ext3 ファイルシステムからアップグレードすることができます。これにより、既存のシステムを ext4 に移行する際の手続きが簡略化されています。
❹大容量サポート
 ext4 は非常に大きなファイルシステムをサポートしており、数エクサバイト(1エクサバイト = 1億ギガバイト)のサイズのファイルシステムを処理できます。
❺データの保存形式
 ファイルやディレクトリのメタデータはBツリー構造を使用しています。これにより、検索や更新の効率が向上しています。

 ext4 は多くのLinuxディストリビューションでデフォルトのファイルシステムとして使用されており、信頼性と性能のバランスを取ったファイルシステムです。


以上です。ただ、以上のファイルシステムを採用しているだけではだめで、mountコマンド等で設定が有効かどうか確認してみます。


# mount | grep ext4
/dev/mapper/ubuntu--vg-ubuntu--lv on / type ext4 (rw,relatime)
/dev/sda2 on /boot type ext4 (rw,relatime)


mountコマンドから見ると、Ubuntuではタイムスタンプの更新に制限をかけていないようです。ちなみに「cat /etc/fstab | grep ext4」で実行した結果からは判断できませんでした。

[あとがき]
 これ以上調べるのは時間の無駄なので、不都合が生じたら深掘りしたいと思います。暫定的な対応として、WinSCPを使用してプログラムファイルを更新する場合、クライアント側にダウンロードして、修正しタイムスタンプが変わったものをサーバーサイトへアップロードするという運用にします。
 Prototype EVEを自宅で開発していた時は、Sambaを使用していました。しかし、今回は、Xserver上にシステムを構築するため、Sambaというわけにはいきません。そこで、採用したのが、WinSCPです。TeraTermだといちいちコマンド打たなきゃいけないし、効率性が失われるので、WinSCPでの開発はマストです。
 ちょっと、うだうだしていて、気分が晴れました。明日からはがんばりましょう!ただ、開発に軸足を置くのか、勉強に軸足を置くのか現在考えています。システムに軸足を置いた場合、一日ってあっという間に過ぎてしまいます。多分勉強する時間は取れないのでしょうね?どうしようかな???

 では、また!!!

■Samba [ソフトウェア研究室](2023年7月02)
https://fanblogs.jp/bahamuteve/archive/343/0

2023年11月12日

WordPress移行作業 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
wordpress.jpg
 開発を進めるのと同時に現在、Xserverの受入準備を進めています。
 第1段・・・。WorldPressの文書を全てPrototype EVEのKnowledgeシステムへ移行しようとしたのですが、そこでまた問題が・・・。

[パスワードが残っていない?]
 早速、pro2grammer.comのWorldPressへログインをしようとしたのですが、ログインできない・・・。いつもだったら、WorldPressにアクセスすると右上部に、「こんにちは、○○さん」というリンクタグが表示され、そのリンクタグをクリックすることによりログインできるのですが、表示されていない・・・。そういえば、WordPressインストール以来、管理者のログイン画面を見たことがありませんでした。しかも、管理者のログインするためのページのURLを忘れている・・・。
 早速インターネットで管理者画面のURLについて調査・・・。
 それにより、ブログのホーム画面のURLに/wp-admin/または/wp-login.phpを付加することにより表示されると判明・・・。
 その通りにしたところ、管理者のログイン画面が表示されたのですが、ユーザIDが表示されていない・・・。
 そのため、以前メモしておいたユーザIDとパスワードを入力してログインを試みるのですが、ログインできない・・・。
 仕方がないので、パスワードを変更しようと、pro2grammer.comの管理者ユーザーのメールアドレスにパスワード更新の依頼を送信したのですが、ここでも問題が・・・。
 2022年12月21日でした。普段利用しているノートパソコンから「システムがスタックベースのバッファーのオーバーランを検出した」というメッセージが表示されました。このバッファオーバーランというメッセージからハッキングの可能性もあると判断し、即刻、OSからインストールしました。普通だったら、バックアップを取っていたのですが、バックアップミスにより、以前のパスワードの情報などは残っていません。ショックです・・・。shareholder.tokyoだったら残っていたのですが・・・。shareholders.tokyoのWordPressの構築に関する記事をブログで調べると、2023年1月に構築していました。OSを再インストールした後だから、情報が残っていたのですね・・・。
 それではということで、pro2grammer.comの管理者ユーザーのメールユーザーをメールクライアントに登録し、WordPressからのメールを受信しようとしたのですが、ここでも問題が・・・。pro2grammer.comでは、SMTP-AUTHを利用しています。SMTP-AUTHを利用するためには、Postfixで管理しているパスワードが必要です・・・。それも現在は分からない・・・。ないない、づくしです・・・。
 最後にたどり着いた方法・・・。それは、WordPressの情報を管理しているMySQLにログインしWordPressの管理者のパスワードを更新するという方法・・・。Apache、MySQLは普段から利用しパソコンのOS再インストール後に情報をすぐに整理し、分かっていたので、これによりWorldPressのパスワードを変更しログインすることができました。
 手順的には以下の様な感じです。


//❶MySQLへ管理者権限でログインする
$ mysql -u root -p
//❷MySQLの管理者ユーザーのパスワードを入力する
Enter password:PassWord
//❸MySQLへ登録されているデータベースを確認する
mysql>show databases;
//❹多分WordPressのデータベースだろうデータベースを指定する
mysql>use wordpress
//❺指定したデータベースのユーザーを調べる
mysql>select user, host from mysql.user;
//❻WordPressのユーザーだと思われるユーザーのパスワードを変更する
mysql>update wp_users set user_pass=md5('New PassWord') where user_login='WordPress User';


WordPressだろうデータベース名とか、WordPressのユーザーだろうユーザー名を忘れていたらアウトでした・・・。まっ、これで、なんとかログインし、公開している情報だけでなく、下書きの情報もWordPressから引き抜くことができました。

[あとがき]
 WordPressのパスワードの管理方法がPrototype EVEと同じような仕様だったらアウトでした・・・。Prototype EVEでは、パスワードのハッシュ値を登録しており、直接更新できません。ただ、システムでハッシュ値を求めてからそれを登録すれば何とかなりますか・・・。EVEシステム公開後、もしかしたらこんなことで悩むユーザーが出てくるのかもしれませんね・・・。ユーザーID、パスワードを忘れたけれど、システムへログインできるハイセキュリティの方法を考える必要があるようです・・・。

 失敗は成功の素!勉強します!

 では、また!

追伸・・・。
本ブログ公開後、pro2grammer.com及びshareholders.comを停止します。

■WordPressのログインパスワードを忘れてしまい、リセットメールも飛ばないときの対処方法(CPI)
https://cloud5.jp/wordpress-password-reset/

■反省会!Windowsの再インストール作業! [ソフトウェア研究室](2022年12月21日)
https://fanblogs.jp/bahamuteve/archive/172/0

2023年11月07日

DB検索ツール 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
データベース操作.jpg
 本日、バッチ処理の各処理、登録、修正、削除処理が正常に動作するかどうか確認していました。その時に、確認するツールとして、Prototype EVEのテキストボックスから、SQL文を実行するツール、DB検索ツールを使用するのですが、そのツールが動かないことが判明・・・。
 通常、TeraTermを使用するのですが、TeraTermで実行した結果は非常に見にくい・・・。きれいに整列していませんからね・・・。ただ、Prototype EVEのツールから実行した結果は、テーブル形式できれいに表示され、何がうまくいっていて、何がうまくいっていないのか、一目で判別することが可能です。ただ、そのツールが動かない・・・。

[DB関連Classがおかしいのか検証]
 まずは、DB関連関数またはClassをまず疑いました。あらかじめどこが悪いのか想定してから、DB検索ツールからの呼び出し元から順番に追っかけてみてみましたが、その想定と違う・・・。
 いろいろな関数、Classを通して検索しその結果を取得しているので、何が何をしているのか忘れていました。

[呼び出し元のDB検索ツールで不整合が・・・]
 まずは、誤解していたところ、忘れていたところの知識を補完してから再度検証した結果、呼び出し元と、新たに作ったDB関連関数、Classとの不整合だということが判明しました。
 DB検索ツールって、SQL文を発行するのですが、発行するのは検索だけではありません。時には、データを追加、更新、削除するときにも使います。そのため、DB検索ツールは、どんなSQL文でも利用できるようにしたのですが、それを忘れていました。ようは、PHP5からPHP8へ移行するに際し、MySQLの検索をPDOにさせているのですが、そのための対応をPrototype EVEのフレームワークで実施しています。DB検索ツールは、汎用的に作ったために、Prototype EVEフレームワークと同様の修正をしなくてはいけなかったのですが、それを忘れていました。

[あとがき]
 基本、バッチ処理の追加、更新、削除処理は正常に動作するようになったと思われます・・・。そのための確認のDB検索ツールなのですが、このツールを使用するのは念のためです。プログラム修正せずに、次に行ってもいいような気がしますが、きちんと確認したいですし、普段使っているツールが使えないのは気分が悪いので、この件は明日修正します。
 意味不明の主要因のバグを改修したので、もう平穏無事にプログラム修正ができるから、セキュリティの話でもしようと考えていましたが、いろいろとあるものです・・・。
 セキュリティの話は、バグ修正とバグ修正の間の平穏無事なときにさせていただきます。

 では、また!

2023年11月06日

多言語に対応する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
webサイト.jpg
 近頃、昼間暖かいし、朝方は寒いしと体調を維持するのが大変です。今朝起きて、簿記2級の学習をしてしばらくして頭痛が・・・。寝れば直るだろうとちょっと寝たら頭がガンガン!午後に頭痛薬を服用して、コーヒーを飲んでから回復しました。
 回復後の午後は、昨日ダメダメだった、企業経営理論の「組織と人材」の情報を一太郎でまとめていました。本日実施予定だった、企業経営理論の「人的資源管理」と「労働関連法規」については明日に繰越します。ということで、本日はまだ開発をしていないのですが、これからやる予定です。

[多言語に対応する]
 今週から何も書くネタがないので、『ゼロからはじめるシステム開発』では、セキュリティについて書くといっていましたが、1つ検討したいことがありました。それは、英語などの多言語に対応させるかどうか
 以前多言語に対応する方法を考えていた時期がありました。Webサイトで多言語に対応させるならこんな方法ならいけるのではって感じです・・・。
 JavaScriptを使用している人だったら、言っていることが分かると思いますが、HTMLで構成されるWeb画面は、画面の頭からエレメントにインデックスが付与されています。同時に、エレメントにインデックスを付与することも可能です。
 その対応と似たような方法を採用し、日本語を英語表記したい項目について、データベースまたはファイルで情報を保持し、ユーザーがダウンロードしたそのイベントで挿入するという方法を考えていました。

[近頃のトレンド] 
 ただ、複数のサイトを見ると、ポータル画面でユーザーを特定し、特定したユーザーが使用している言語のURLに飛ばしているようです。これは、厳格に調査した結果に基づいたものではなく、表示したHTML画面のソースをチラ見して結果得た印象です。
 このような方法を考えなかったわけではないのですが、管理しなければいけない資源が「資源の数×言語数」に膨らみます。考えただけでも大変な気がして仕方がありません。
 では、なぜこのような大変な方法を他のサイトでは採用をしているのか考えてみると、画面の美観を考えてだと思います。それは、同じ意味の言葉でも、言語により文字数が変わります。日本語で素晴らしいは、英語では"Wonderful"といいフランス語は"merveilleux"(男性形)または"merveilleuse"(女性形)です。字数が違うため、画面が開発者の意図したデザインで表示されないということがあるかもしれません。そういう品質重視で考えた場合、言語ごとに画面を用意するというのが正解なのかもしれません。

[EVEシステムでは?]
 以上の検討から、EVEシステムでは、ディレクトリにより言語を変えるという方法で開発を進めていきたいと思います。ただ、データベースでディレクトリ、プログラムを管理するのに、ディレクトリが違うからと言って、プログラムに関する情報を複数登録するなんてのはちょっと冗長的すぎますね?構成管理システムを製造する場合は、ちょっと、一考が必要なようです。

[あとがき]
 本日は、もう時間もあまりないので、雑用的な作業をして、時間が余ったら開発をします。なかなかうまくいきませんね?
 ところで、フランス語・・・。素晴らしいにも、男性と女性という形があるのですか?LGBTの人の人権を認めるために、垣根をとりはらい、同性結婚を認めたりしているようですが、言語のほうは男性、女性の区別が甚だしい状況のようです。
 ちなみに、Bingに「性別が分からないフランス人に、WEB画面を提供する場合、すばらしいと表示する場合、どうしたらいいですか?」と聞いたら、主語に中性的な意味をもってきて、「Vous êtes formidable」と表現すればいいようです。製品のクオリティを高めるためにそこまでやるとしたら、かなりの工数が必要なようです。フランス語の検討はなかったことにしましょう(笑)!

 では、また!!!


2023年11月03日

セキュリティ情報 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 Studyingでは、1次の学習は11月いっぱいで終了し、簿記は、商業簿記が11月、工業簿記が12月目標で勉強を終えようとしているのですが問題が・・・。それは、起きる時間が遅いので、どうしても、期限がきられているタスクを優先してしまい、期限がきられていないタスクが全くできない日が発生してしまう。
 そうです・・・。今日は遅い時間に起きてしまったので、期限を切っていないタスク、システム開発が全く手つかずでした・・・。早起きは三文の得といいますが・・・?
 平日は、株式の取引があるので、9:00には起きるのですが、今日は休日・・・。世間一般は休みというわけで、そんな世間の皆様と一緒の生活になってしまいました。

[セキュリティの話題]
 ただ、システム開発も難題に取り組んでいるとか、いろいろ調査しているとか言った話題があるならいいのですが、バッチ処理の机上デバック及び書式を次期システムのプログラム規約へ修正しているレベルです。そんな状況だと、なかなか、ブログを書くネタがございません。ということで、しばらくの間は、セキュリティの話題をしようかな、っと考えています。

[クローニングシステム]
 それと、Yahooのクローニングを作ると以前から話していますが、セキュリティ情報を収集するクローニングシステムも同時並行的に作ろうかとも考えています。私のセキュリティに関する技術力って既存のセキュリティ対策については知っていますが、ただそれだけです。そんな私と違って、会社に所属しているエンジニアは、実際の攻撃を体験するなど技術的にもっと先進的なことをしているようです。そんなエンジニアと私とを比較した場合、見劣りがします。そんな優秀なエンジニアとの開きを縮める方法が何かないのか考えたのですが、それは、情報ではないかと思うのです。どこで、どんなセキュリティインシデントが発生していて、どのセキュリティインシデントはどんな影響があるのか、1画面でみることができたらいいと思いませんか?そんなインターネット上のセキュリティインシデントを1画面で見ることができれば、優秀なエンジニアの人達と肩を並べることができるかもしれません。
 ただ、そのセキュリティ情報については、独り占めするつもりはなく、幅広く公開していく予定です。そして、多くの情報処理安全確保支援士の方々の役に立てればと考えています。

 インターネットを調べて見ると、Scan Net Securityというサイトがあります。このサイトニュースを主体に情報をまとめていますが、情報処理安全確保支援士の方々への情報提供なので、技術に近い情報にしようかなって、現在は、考えています。

[あとがき]
 なんて、かっこいいことを書いていますが、このタスクには期限がありません・・・。ようは、いつできるか分かりません・・・。
 期限があるタスクは、1日にどのくらいの時間があれば達成できるか分かっているので、その予定のあるタスクをやり終えた後、時間があればあるほどシステムが完成する期間が短くなります。そのように考えた場合、早く起きなければならないようです・・・。

 そうそう、今まで寝付きが悪かったのですが、早く寝る方法を見つけました。それは、布団に入ってから本を読むこと・・・。普通の本だと、30分あれば50ページぐらい読めます。その30分後ぐらいに眠気がやってきます・・・。ただ、昔から起きるのは苦手なのですよね・・・。ニンジンがあれば起きれると思うのですが・・・。ニンジンどこかにないですかね?

 では、また!

■Scan Net Security
https://scan.netsecurity.ne.jp/

■Security NEXT
https://www.security-next.com/category/cat191/cat25

■Tokio Cyber Port
https://tokiocyberport.tokiomarine-nichido.co.jp/cybersecurity/s/anews

■SECURITY HOT TOPICS
https://www.itmedia.co.jp/news/subtop/security/

■Cyber Security .com
https://cybersecurity-jp.com/

■サイバーセキュリティ総研
https://cybersecurity-info.com/category/news/

2023年11月02日

Prototype EVE プログラム改修 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
システム.jpg
 先日の、Prototype EVEにおいて、EVEシステムのDB関連クラス>DBコネクトメソッドを呼びだしていた部分を、New Prototype EVEへ変更してから、製造は凪の状態です。淡々と、予定の作業をこなしています。
 予定の作業について話していなかったので触れると、以下の様なスケジュールでシステム改修を行っています。

@バッチ処理の机上デバック及び書式を次期システムのプログラム規約へ修正
Aデバック
Bシステムインテグレーション

っで、今までPHPから出力されている意味不明のエラーメッセージに対応しながら、ちびちびと@をしていましたが、問題が解決されたため、本日から@の本格対応を行っています。
 そして、Aですが、実際に動かしてみてどうかって感じです。
 Bは、管理用システムから呼び出す、一連の流れの動作確認を行います。

[システム再構築]
 以上の作業が完了後、XServer上のシステムの再構築をします。構築当時No ideaだったので、とりあえずUbuntuでシステムを構築して、Webサーバー、データベース、メールなどを動かしてみましたが、それを再構築します。その後、Prototype EVEをインストールしバッチ処理の運用を開始したいと思います。それと同時に、Yahooクローニング処理の製造に入ります。
 Prototype EVEの机上デバック及びプログラムの清書も順調ですし、片手間でやっている、Aのデバックも現時点問題ありません。そして、XServerでのシステム構築も、一度は構築し、ブログに記録として残しているので、他の予定が順調なら、開発の方も順調に進捗しそうです。

[今日のバグ]
 今日のバグは、以前あった、PDOを使ったデータベースの登録の部分です。
 今回使用している、DB接続コネクタPDOは、MySQLのレコード定義でNULLをOKとしている場合、""はNGで、NULLを挿入しなればならない仕様となりました。
 このバグは一度経験して、対応方法が決まっているので早速NULLを挿入し修正を完了しています。

[Prototype EVEバッチ仕様]
 このようなエラーが発生する原因は、バッチ処理をいろいろな条件を1つの処理で実施しようとしているためです。Prototype EVEでは、画面から以下の条件で登録できるようにしています。

@毎分(1〜1440)
A毎時間(1〜59)
B毎日
C毎週
D毎月
E毎年
F特定日

以上の種別を、PHPプログラムとかコマンドの分類で利用するケースがあったりします。例えば、毎日だったら、曜日は必要はありませんし、毎週だったら、曜日だけ指定すればいいことになります。っということは、画面上に存在しますが、使用しない項目が必ず発生します。その場合、使用しない項目を今までは、""で対応していたのです。

[あとがき]
 今、システムを見ながら、ブログを書いているのですが、@の毎分(1〜1440)ってなんでしょうか?製造した本人が忘れてしまいました。毎分だったら、1〜59の間で表現するような?リリースするまでにはどんなことをしているのか、ソースから確認をしたいと思います。
 ってな状況です。

 では、また!!!

2023年10月30日

システム障害 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 本日の午後から、本来の開発に戻っています。
 ただ、わけの分からないバグが多発・・・。もう、Prototype EVEのバッチ処理を形だけ動かして、EVEシステムの開発に移ろうかと考えていた30日も遅いというか、時計は、既に31日になっています。そんな時間にやっと障害の原因がわかりました。

[今日の障害]
 今日の障害は、2件・・・。
 1つ目は、unsetでセッション変数を削除しようとしていたのですが、明示的にセッションを指定していなかった・・・。PHP5で使用していた、session_unregisterと同じような使用方法をしていたため、エラーになったというもの・・・。これに似たようなことは以前もあったので、すぐにバグを見つけることができました。
 2つ目は、これが分からなかった・・・。結果から言うと、クラスの呼び出し間違い・・・。Prototype EVEのDB関連関数から本来DBコネクトのクラスを呼ぶ場合、New Prototype EVEを呼び出さなくてはいけないのですが、EVEシステムのDBコネクトクラスを呼んでいました。DB関連関数は何回も試験をしていたし、もうバグはないという先入観があったため、バグを見つけるのに時間がかかりました。

[ちょっと心がおれそう]
 分かってしまえば、何だっていうことになるのですが、見つけるまでが大変です。プログラムの中身を把握している私からみたら、わけの分からないエラーメッセージが頻発するし、そのエラーの発生箇所以外の部分では、正常にプログラムが動いています・・・。
 ちょっとぐらいエラーが出ていてもいいから、バッチ処理の最低限のところだけ動かして、EVEシステムの開発に移ろうかとも思ったぐらいでした。ただ、この時間まで粘って良かったです。

 昔、業務でJavaプログラムをEclipseで見たのですが、F5でしたっけ?1ステップずつデバックしていくの???その機能で、デバックしていく場合、自分の所属しているプロジェクト以外のロジックもトレースすることになるうえ、どのくらいの階層になっているのか分からないので、非常にストレスがたまったのを覚えています。しかも、他人のプログラムです。
 ただ、以前大きなプロジェクトで障害が発生したとき、年配のシステムエンジニアの人が、膨大なプログラムをラインプリンタで紙に出力し、ロジックを追っている姿を見たことがありますが、あのときの姿を思い出せば楽になったような気がします。多分、その時の紙に出力したプログラム、年配のシステムエンジニアの人が作ったプログラムではないと思います。業務って大変ですよね・・・。

[あとがき]
 ちょっと、障害続きでなかなかシステム開発が進んでいませんでしたが、明日からは、もうちょっと、進捗が上がるような気がします。まっ、どうなるか分からないけれど・・・。言い訳ですが、オブジェクト指向のプログラムをゼロから作るの今回が初めてなんですよ・・・まだ、土地勘っていうか、プログラム勘がないんだと思います。しばらく、開発を休んでいたこともありますし・・・。これからは、毎日プログラムするようにしようかな?

 では、また!!!

追伸・・・。
 現在、31日ですが、ブログの日付は、30日23時59分59秒でアップロードしています。


タグ:Eclipse Java CLASS php

2023年10月29日

Prototype EVEシステム障害 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
システム障害.jpg
 先日「エンジンを吹かしていきたい」といいながら、中小企業診断士2次試験の今日、まったりと過ごしてしまいました。ただ、収穫はありました。昼間仮眠をとったのですが、かなり深い眠りになったようで、頭の中がハッピーです(笑)。
 といいながら、今まで、Prototype EVEの株式情報ダウンロード処理の仕様を変更していました。

[無尽蔵]
 現在、無尽蔵から株式情報を毎日、crontabを使用しダウンロードさせて頂いています。ただ、このサイト予告なく閉鎖する可能性があるなどの忠告が掲載されているため、このブログで何回か紹介していますが、Yahooから株式情報をダウンロードしようと、EVEシステムの開発を急いでいます。
 ただ、開発が完了するまでは、利用させて頂くしかなく、もし停止されたら大変なことになります。そのような状況の中、2023年10月25日水曜日から株式情報がダウンロードできていない。ようは、ダウンロードエラーとなりシステムが停止している状況です。バグかもしれないと思い、ソースを追っかけたのですが、プログラム的には問題なさそう・・・。じゃ、システムとデータの不整合かと想定し、無尽蔵のデータを見て分かったのですが、ダウンロードした株式情報の銘柄名が入っていない???銘柄名が入っていないのは、ダウンロード後のCSVファイルなので、手動でダウンロードしたところ、銘柄名が入っている。
 おかしいな〜っていうことで、つい先ほどまで、どのロジックで銘柄名が消えるのか調べていました。
 その結果分かったこと・・・。無尽蔵の株式データ、CSV形式なのですが、ZIPで圧縮されています。その圧縮されているファイルを、バッチ処理でシステムを起動しダウンロード後、プログラム内で解凍しているのですが、どうもその解凍時に銘柄名が消えてしまっているようです。こんなことあるのですかね???
 CSVの形式は以下の通りです。

2023/10/25,6525,11,6525 KOKUSAI ELECTRIC,2116,2436,2108,2350,34234200,東証P


当該レコード1レコードだけ表示していますが、同レコードの「KOKUSAI ELECTRIC」という名称が消えてしまうのです。半角だからというわけではありません。他の半角の銘柄名はデータとして取得できています。想像できるのは、KOKUSAIとELECTRICの間の全角・・・?これが入ることにより、解凍時に文字が消えてしまうという事象になっているのかなって想定していますが、今現在原因不明です。

[対応方法]
 今回の問題のだいたいの箇所は判明したのですが、私の作ったシステムから恒久的な対応をすることできるないため、銘柄名が""だった場合、"None"という値を挿入するという暫定的な対応をとることにしました。これにより、先週末までの株式情報をダウンロードすることができました。
 今現在は、企業情報管理テーブル、株式情報履歴管理テーブルとも、正規の名前、「KOKUSAI ELECTRIC」をUPDATE文で挿入し、データ的にきれいな情報になっています。

[あとがき]
 証券コード6525、実は、この障害があった2023年10月25日に上場した会社で、データ受信初日でした。そのため、10月25日にこのようなシステム障害が発生したのですが、今後は、ダウンロードした情報に不足している部分がある場合、データベース、企業情報管理テーブルから持ってくるようになっているので、明日以降は問題なく動作すると思います。
 ただ、この障害、全く経験したことがなく、予想していない部分だったので、時間がかかりました。仮眠で目がさめていてよかったです。

 今日、X(旧ツイッター)で中小企業診断士二次試験の状況について、ログを見たり、会話を聞いたりしたのですが、非常に難しかったようです。生活を改めて、明日から頑張りましょう。明日からが多いような気がしますが(苦笑)。

 では、また!

■無尽蔵
https://mujinzou.com/

2023年10月26日

EVEシステム 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
設計.jpg
 本日、午前から開発に入ろうとしたのですが、VMWareが立ち上がらず、どうしようかなって感じです。そんなところで、特段ブログとして書く内容がないのですが、EVEシステム向けに準備してることがあるので、それについて、本日は、書きたいと思います。

[プロパティとメソッドが同じID]
 先日、使用するシステムを分けるため、Prototype EVEのディレクトリを新規に作成し、他のシステムと分ける作業をしました。先日、Prototype EVEだけでなく、New Prototype EVEそして、EVEシステム用のディレクトリも作成しました。
 そのとき、各システム(Prototype EVE、New Prototype EVE、EVEシステム)を分けたことにより、クラス又は関数の相対アドレスを変更したのですが、その時に驚きがありました。それは、EVEシステム用に作ったクラス内に、同じIDのプロパティとメソッドが混在していたのです。そして、使い方が間違っているとこがあったりして・・・。その事実を受け、クラス、プロパティ、メソッドのIDに接頭辞または接尾辞をつけて明確に別のものとして扱えるように、EVEシステムのクラスを変更しています。なお、既に使用している、EVEシステムのデータベース関連クラスについては、Prototype EVE用のデーターベース関連クラスとしてPrototype EVEへ残すことにしました。
 ちなみに、DB関連クラスがEVEシステム向けのクラスとして成熟した場合、New Prototype EVEで正規のクラスとして利用する予定です。

Prototype_EVE.png
[設計思想]
 以前、Prototype EVE、New Prototype EVE、EVEシステムの関係を右記図1のように書いています。その構成図から、DB関連のクラスまたは関数の構成を図示したものが、図2となります。
 この図から分かるように、今回はEVEシステムとして新(修正後)DB関連クラスとして切り出すということで問題を解決できそうです。そして、後日、新(修正後)DB関連クラスを正規のクラスとして、Prototype EVEに認識させようとした場合、New Prototype EVEだけを修正すればいいことになります。最初、いろいろ検討したことが、ここにきて生きています。
 やはり、事前にいろいろ検討をしてからシステムを開発するって大事だと感じています。まっ、当然なんですけれどね・・・。一人で作っていると、意外とその辺をおろそかにしがちです・・・。以前のPrototype EVEの時がそうでした。

[New Prototype EVEが必要な理由]
 もしかして、このブログを途中から読んでくれている人もいるかもしれないので、New Prototype EVEが必要な理由を書きたいと思います。
 最初は、EVEシステムを作りたいと言うところから始まっています。ただ、Prototype EVEには、今まで利用していた便利な機能があり、同機能を利用しながら、開発を進めたいと思いました。
 普通なら、Prototype EVEから直接EVEシステムの各クラスを呼びだすという仕様にするところなのですが、先ほど述べたように、EVEシステムにはきちんとした設計思想がありました。その設計思想が、2004年から製造したPrototype EVEの設計思想と明らかに違っていたのです。ただ、EVEシステムは製造したいし、どうしようかと考えた結果、EVEシステムをPrototype EVEで利用できるように、New Prototype EVEという緩衝システムを製造することにしました。New Prototype EVEを製造することにより、EVEシステムは既存のシステムからの影響を全く受けることなく、製造することが出来るようになりました。
 問題点としては、かなり、冗長的・・・。デバックが面倒くさいって感じでしょうか?ただ、トータルの製造時間は短縮できていると思います。

[あとがき]
 やっと、VMWareが立ち上がるようになったのですが、今日は、開発はお休みです。現在、11月から始める簿記2級の勉強に向けて、簿記3級の総復習をしています。教材は以前話したとおり、『本気で学ぶ LECで合格る DS日商簿記3級』を利用しています。同ソフト、10日のカリキュラムで構成されており、現在、後半6日〜10日の復習をしています。1日〜5日も間違うところはあるのですが、覚えればなんとかなる問題ばかりなので、後回しです。
 このソフト、2008年に販売されており、購入したのは、2014年です。購入時は現行の法律との違いは気になりませんでしたが、2023年の現在はどうなのでしょうか?その点は、簿記2級の本を購入すれば、分かると思います。
 まずは、今月中に、『本気で学ぶ LECで合格る DS日商簿記3級』を極めます。

 では、また!

タグ:簿記3級 VMWare

2023年10月25日

Prototype EVE開発日誌 −バッチ処理編 修正処理− 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 引き続きPrototype EVEで使用していたバッチ処理を修正しています。いろいろありますね・・・。不整合が、今回PHP5からPHP8へ変更したことにより、噴出しています。

[不整合]
 昨日、今日発見した不整合は以下の通りです。

❶不要な位置にbreakが入っているとエラーになる。例えばif文・・・。
❷HTMLで利用する、コンボボックス内で、SELECTEDを指定しても同行が選択されない。
❸MySQLのNULLを許容している項目に、""でデータの挿入ができなくなった。

 ❶は、単純なミスです。if文にbreak文が入っていて、エラーになりました。PHP5の時はエラーにはなっていません。
 ❷は、サーバーサイトでHTMLで編集し、コンボボックスの当該行にSELECTEDを指定しても、同行が表示されません。一番上の行が表示されています。最初、JavaScriptでオンロードのタイミングで以下のように指定していました。

window.document.FormName.ElementName.options[ComboboxIndex].selected = true;


 その指定で、ComboboxIndex、添え字の指定に誤りを見つけたため、その部分をサーバーサイトで実現しようと、HTMLを編集する方法を採用したのですが、思ったような動作をしません。
 そのため、結局元に戻し、JavaScriptで正しい添え字を設定し、正常の動作にしたという修正をしています。なぜだろう???PHPのバージョンには、関係ないはずなのだが・・・?
 ❸は、PDOの仕様のようです。MySQLでNULLが許容されているなら、そこに何も設定しないのなら、NULLを指定しろというのです。今まで""とNULLは区別なく利用できたのですが、PDOを利用する場合、それを明確に区別し登録しなくてはいけないようです。ちなみに、最初の段階では、PHPからのメッセージに基づき、NULLではなく、イニシャルデータ例えば0を設定していました。しかし、ChatGPTにこの問題を相談したところ、NULLを明示的に指定すればいいことを教わりました。この場合、初期データを設定したいだけだったので、NULLに再修正しています。
 ちなみに、""は文字列で、NULLはデータ型NULLという扱いで全く別の文字コードを使用しています。知っていたんですけれどね・・・・。ちなみに、その違いについて、ChatGPTに聞いてみました。

 プログラムで ""(ダブルクォーテーション内に何も文字がない空の文字列)と NULL は異なるものです。これらは異なるデータ型および値を表現します。

❶""(空の文字列)
・データ型
 文字列 (String)
・表現
 "" または ''
・意味
 文字列データ型で、文字列として空の文字を持つことを示します。つまり、文字列データ型の変数や値が何も含まないことを表します。

❷NULL
・データ型
 NULL
・表現
 NULL
・意味
 NULLは特別なデータ型で、値が存在しないことを示します。NULLは変数やデータベースフィールドに値が設定されていないことを表します。NULLは存在しない値として扱われ、通常のデータ型とは異なります。

 言語によっては、"" と NULL は異なるデータ型であり、異なる比較結果を返すことがあります。例えば、PHPにおいて "" と NULL を比較すると true が返りますが、== で比較すると true が返ることになります。ただし、=== を使用するとデータ型も一致させる必要があるため、"" === NULL は false となります。
 言語やコンテキストによって、"" と NULL の振る舞いは異なりますが、一般的には "" は空の文字列であり、NULL は値が存在しないことを示す特別なデータ型であると考えてください。


厳格に区別する方式が採用されたようです。ちょっと、気になるのは、違うなら、コードで表現した場合、それぞれのコードがあるような気がするのですが、ChatGPTからの回答はありませんでした?

[あとがき]
 かかりっきりというわけではないのですが、いろいろあり時間がかかっています。本日、Prototype EVEの管理システムで、管理者ユーザーのパスワードを変更しましたが、正常に変更できました。バッチ処理以外のシステムを動かしたのは、本日が初めてなので、感動です。
 そうそう、pro2grammer.comへアクセスできなくなっていました。ドメインの有効期限切れです。近頃、クライアントのVMWareで開発をしていのたので、気にしていませんでした。次に来るのはSSLの更新なのですが、それまでには、バッチ処理の製造を完了したいと願っています・・・。

 では、また!!!

タグ:php VMWare NULL

2023年10月22日

新しい方法と進化に向けて 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 今日もハプニングが1つ・・・。
 昨日までの作業、本のPDF化作業において、本のカバーで大きくScanSnap IX1300で読み取れないモノがありました。それについては、EPSONのプリンターに装備されている、スキャナーで読み取ろうとしたのですが、スキャナーのアプリケーションが立ち上がってこない???スキャン自体はEPSONプリンターから実行できるのですが、読み取る範囲が指定できない。

スキャナー A3 富士通 PFU ScanSnap iX1300 最大A3 対応 コンパクト 両面 2つ折り Wi-Fi ドキュメントスキャナ 本の自炊 名刺の整理 レシートで家計簿 FI-IX1300A FI-IX1300ABK

価格:31300円
(2023/10/23 00:38時点)
感想(3件)



 そのため、いつも通り、インターネットで同様の問題を抱えており解決されている記事を検索したところ、ドライバーを削除してから実行すると、うまくいくといった記事を見つけました。信じやすい私としては、その記事どうりにドライバーを削除して実行したのですがうまくいかず・・・。やるならとことんやろうということで、ドライバーと一緒にインストールしたすべてのアプリケーションを削除してやってみましたがうまくいきません。もうここで、1時間以上たっているので、あきらめて開発に入れば良かったのですが、気になるのですよね・・・。このようなことって・・・。ついついドツボにはまりつつ調べてしまいました。その結果分かったこと・・・。管理者権限で実行しないとダメになったようです・・・。だめになったようというのは、以前はクリックすれば起動したためです。ただ、これEPSONのせいではなく、多分、Windowsのセキュリティ仕様が変わったせいだと思われます。Windowsのせいであるかどうか分からんけれど・・・。ただ、予想が当たっているなら、エラーメッセージぐらい表示してほしいですよね???
 この情報インターネットを探してもなく、今現在困っている人がいる可能性があるので、その人たちのために以下にまとめます。ちなみに私が使用しているのは、EP-881AWです。

エプソン プリンター A4 インクジェット 複合機 カラリオ EP-881AW ホワイト(白)

価格:64800円
(2023/10/23 00:40時点)
感想(2件)



❶スタートメニューから、「Epson Scan2」というアプリケーションを表示しマウスオーバー
❷右クリックし、メニューを表示
❸[管理者として実効]を選択
❹[このアプリがデバイスに変更することを許可しますか?]という問いに対して[はい]を選択

以上で起動してきます。もしお困りの人がいましたら、管理者権限で実行することを試してください。

[システム開発]
 かなりの時間がかかりましたが、以上の調査が終わって、早速Prototype EVEのディレクトリを変更することにより動作するかどうか、ちょっとですが、動かしてみました。管理システムには、ログインできました。多分、データベース上のディレクトリ情報を変更して、その変更した情報通り、各プログラムを移動したから問題なく動くと思います。
 ということで、明日以降からバッチ処理を製造していきますが、まずは、従来のバッチ処理の中身を見ていきましょう。

[従来のバッチ処理]
 従来のバッチ処理は、クローニング、データー抽出を1つのプログラムで実行していました。というのは、このクローニング処理は、株式の情報だけを抽出するのが目的だったため、汎用性がなかったのです。

[次期バッチ処理]
 次期バッチ処理は、いろいろなページをクローニング後、データ抽出を実行する流れで製造しようと考えています。これにより、汎用的にシステムを利用することが可能になります。
 以上の作りは、現在はどんな作りになっているのか不明ですが、2000年初頭のGoogleのクローニング処理と類似の処理(『Googleを支える技術』参照)になります。ただ、Googleで採用しているインデックス作成処理をEVEシステムでは実現するのは難しそうです。先にクローニング処理、データ抽出処理を製造しながら仕様の検討を重ねていきたいと考えています。

【中古】 Googleを支える技術 巨大システムの内側の世界 WEB+DB PRESS plus/西田圭介【著】

価格:220円
(2023/10/23 00:40時点)
感想(0件)


バッチ処理.png
 フローチャートで表現すると、右記図のようになります。

 ❶Yahooからひたすらクローニングするプログラム、クローニング処理(仮称)で当該HTMLをダウンロードし、クローニングしたHTMLを「クローニング情報蓄積テーブル(仮称)」へ登録します。
 次に、❷において、ダウンロードしたHTMLから当該項目を、抽出処理(仮称)で抽出し、抽出結果管理テーブル(仮称)に登録します。
 そして最後に検索することを容易にするため、❸のインデックス作成処理(仮称)でインデックスを付与し、インデックス管理テーブル(仮称)へ登録します。

 以前、PHP5でYahooのクローニング処理ができなくなったことを話しましたが、その後PHP8でクローニングの可否についてテストプログラムを作りできることは確認しています。そして、それ以降は、Prototype EVEでのノウハウがあるのでそんなに苦労することはないかなって思っています。

[あとがき]
 『Googleを支える技術』も2000年初めの情報で、もっと素晴らしい技術でバージョンアップしていることが考えられます。ただ、今回のEVEシステムを開発するコンセプトとこの流れがマッチするので、この方法を採用することにしました。なお、製造途中でもっといい方法がありましたら、変更します。

 こんな感じで、現在開発を進めています。

 では、また!!!

2023年10月21日

ChatGPTとバランスの取れたシステム開発 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 やっと、部屋から紙屑がなくなり、自室で生活できるようになりつつあります。もう少しいろいろと整理しなくてはいけないのですが、掃除機をかけて生活できる空間にはなりました。
 これから毎日1時間を片付にあてて、ひきつづき部屋を整理していきます。

[大掃除前のシステム開発]
 今日は、のんびりと掃除をしていたのですが、明日からはシステム開発を再開したいと思います。10日以上も前のことなので、何をしていたのか思い出すのが大変です。確か、データベースで管理しているプログラムの相対アドレスを変更したところまでは覚えているのですが・・・?
 ようは、XServer上に、EVE、Prototype EVE、New Prototype EVEと複数のシステムを構築しようとしていますが、それを1つのフォルダで管理するのは煩わしいということで、まず最初に従来のシステム、Prototype EVEのデータベース上の相対アドレスを変換しました。そのときに、本来の相対アドレス形式で記述されていないプログラムが複数あったことに驚いたところまで覚えています。

[明日から・・・]
 明日からは、まず、相対アドレス変更後の動作の確認をして、うまく動作していることを確認できたら、Prototype EVEのバッチ処理管理システムが正常に動くかどうかの確認に入ります。
 その後は、PHP8でバッチ処理を動かす方法について検証に入ろうと考えています?PHP5でも、バッチ処理を動作させることには成功しているのですが、今みたいにChatGPTもないし聞く人もいなかったので、php.iniを編集して無理やり動かした感があります。今回は、ChatGPTに相談しながら、正しい設定で動作させたいと思います。
 PHP5でPHP史上初めてバッチ処理を利用できるようになったのですが、その当時文献がない上に、インターネット上にも情報がありませんでした。そのため、試行錯誤の上、力づくで設定したっていう感じです。ただ、それでも、うまく動いていましたよ!まっ、なんでもやってみるもんだっていうことです。ただ、PHP開発者の意図に沿ったシステム開発をすべきだと思うので、今回は、ChatGPTに相談しながら開発を進めます。

[あとがき]
 明日のブログですが、久しぶりに開発に入るので、明日も、『ゼロからはじめるシステム開発』から、発信したいと思います。内容としては、データベース上のプログラムの相対アドレス変更後の検証結果と、現時点考えるEVEシステム開発で作るバッチ処理の概要について書きたいと思います。
 前回は、技術的にも未熟で、行き当たりばったりで製造しましたが、今回は、しっかりとした技術、知識、設計思想とChatGPTがあるので、誰でも利用できるシステムの開発をしたいと意気込んでいます。さて、どうなりますか?

 では、また!!!

2023年10月20日

断捨離〜だけど、ソフトは捨てない!〜 Coffee Time


 こんにちは!
 ナビゲータのEVEです。
本.jpg
 やっと、本のPDF化作業が完了しました。
 やってみて、ScanSnap IX1300では、複数の原稿を読み込んでもエラーにはなりにくいようです。以前使用していた、ScanSnap S1500では、その点を非常に厳格にチェックしていたのですが、その点が不満です。そのため、PDF化したファイルのチェックにおいて、かなりのページの抜けが確認できました。見つけるたびに原稿を探しに行って、当該ページを挿入するという作業を行いました。

スキャナー A3 富士通 PFU ScanSnap iX1300 最大A3 対応 コンパクト 両面 2つ折り Wi-Fi ドキュメントスキャナ 本の自炊 名刺の整理 レシートで家計簿 FI-IX1300A FI-IX1300ABK

価格:31300円
(2023/10/21 01:52時点)
感想(3件)



 本の総数から言うと、そのような作業が発生する確率は低いのですが、その対象となった本があった場合は、ちょっとめんどい・・・。抜けているページの原本を探してきて、その原本から何回も追加します。ひどい本は最初からやり直した方がいいような状態・・・。そのため、最初からやり直したのですが、やり直したPDFも完成度はイマイチの状態。。。。
 但し、通常本を購入後すぐに、分解、PDF化、そしてPDF化したファイルと原本を比較します。そのため、通常だったら問題にならないかなと思います。
 ScanSnap S1500のときもそうだったのですが、古い本って基本、変形しているモノがあったり、ちょっと変色しているなどしていて、PDF化する原稿としてはいい状態とは言えないようです。現在、新しく本は手元にはないのですが、購入したら確認してみたいと思います。

[ScanSnapとAcrobat9]
 先日のブログの中で、今回購入した、ScanSnap IX1300には、ScanSnap S1500とは違い、Acrobatがないという話をしました。今回の製品がScanSnap S1500より製品として劣るような話をしましたが、よく調べてみると、Acrobatと同様の機能を、ScanSnap Homeというアプリケーションがに具備していることが判明しました。そのため、Acrobatが添付されていないようです。
 私が製本の時によく使う機能は以下の通りです。

❶PDFに検索機能を付加する
❷ページ抜けの部分をあとで追加する
❸スキャンしたデータが本来の向きに向いていないので、回転させる
❹不要なページがあるので削除する

といった機能なのですが、その機能のすべてを、ScanSnap Homeというアプリケーションが備えていました。
 ❶は、ScanSnap IX1300でスキャンしPDF化するときに同時に検索機能を付加する機能もありますし、それを忘れた場合でも、後で追加することができます。
 ❷❸❹は、当該PDFをScanSnap Homeビューワーで開いて編集することが可能です。

 Acrobatと使い勝手が違うため、最初は使い勝手が悪いように感じますが、PDFに検索機能を付加する場合などは、Acrobatより高速に処理してくれるので、非常に助かります。ただ、検索機能を付加するときのOCRの性能まではまだ調べていません。調べる機会がありましたら、ご報告したいと思います。

[あとがき]
 実は、本をPDF化する以前は、部屋に200〜300本あったビデオから懐かしいビデオをファイルとして取出した後に分解、テープを取出し、ハサミを入れるという作業をしていました。ビデオテープの廃棄作業は、本をPDF化する前に終えており、部屋から既に撤去済み・・・。後は、本とCDということだったのですが、本日で本を片づけることができました。残りはCDだけなのですが、これは、毎日ファイルにする本数を決めて少しずつ作業を進めていきます。理由は、ビデオテープと本を撤去したことによりやっと部屋に寝るスペースが確保することができました。
 今回の作業の目的は、部屋に寝るスペースを確保することだったので、目的は達成したことになります。今週末から本格的に寒くなるようなので、ギリギリセーフって感じでしょうか?ただ、よく考えたら、エアコンつけるだけでいいんじゃねぇって気もしてきましたが、自室で寝れませんし、部屋が汚いと思考回路も整理できません。部屋をきれいにしてよかったのでしょう?

 明日は、原本の始末と、部屋の片付け、そして、1週間、本をPDF化してくれたScanSnap IX1300のメンテナンスをする予定です。本日、ScanSnap IX1300をきれいにすために、エアーを購入してきました。そのエアーで隅々まできれいにします。少なくても10年ぐらい使用したいですからね!大事にしたいと思います。

 開発、勉強は、日曜日から再開する予定です。想定以上に本をPDF化すするのに時間がかかりました。

 では、また!

2023年10月16日

変態・変質者?世間では何が起こっている??? 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
幽霊.jpg
 土曜日から本日にかけて、ちょっと、出かけていました。そこで、嫌な出来事が・・・?

[けつの穴見せたがり男]
 今回、温泉が出るホテルに泊まったのですが、そのホテルでの出来事・・・。体を拭いているのですが、自分のけつの穴を必死にこっちへ向けてくるヤツがいるのです。
 どんな状況か詳述すると、湯船に入っている私に向けて、後ろ姿で、前屈し、股の間からこちらを覗いている状況です。その格好をされると、目が合うのと同時に、きたない成人男性のけつの穴が丸見えです。はっきりいってむかついたので、入っている湯船を変えたのですが、それでも向けてきます。最後は、どんな表現をしたのか記憶が定かではありませんが、かなりの悪態を大声で発したことにより、風呂場から出ていきましたが、怒り心頭の状況でした。
 これって、最初ゴミとか書きましたが、変態ですよね???何が楽しいのでしょうか?まっ、変態にその答えを聞いても出てこないとは思うのですが・・・?

[暇な主婦]
 10月14日のX(旧ツイッター)で、「日本人って本当に暇だよね?家の外に出ると特に感じるよ・・・。人手不足???暇な、そいつら使ってください。」って発言をしましたが、何を言っているのか分かりませんよね?
 どういうことかというと、人を送るために車で出たときのことです。多分主婦だと思います。年齢はだいたい30〜40代ぐらい・・・。そんな女性達が、車の前に飛び出してきて、同じようなポーズを取ります。その行為を同じ人がやるなら分かるのですが、全く知らない人達が行います。危ないので、クラクションを鳴らしたケースもありましたが、本当に迷惑です。駅に人を送って行くのに、以上の行為をした女性が5〜6人ぐらいいました。
 何が楽しくてこんなことをやっているのでしょうか?それと、どこで、打ち合わせをしてこんな芸当ができるのでしょうか?非常に疑問です。

[私の立場になってこの状況を想像して下さい]
 つい最近の2例を挙げましたが、実は外出すると日常茶飯事です。理由が分かりませんし、何を求めているのか全く分かりません。
 もし、あなたが、このような人達に出会ったことを考えて下さい。多分、馬鹿ゴミ変態きちがい?いろいろな表現ができるかと思いますが、そんな印象を持つことができると思います。
 そんな出来事が日常的にあるのです。本当に、やりきれません。

[あとがき]
 YouTubeで書きましたが、私が社会からドロップアウト最大の原因は、プライバシーがないと感じたから・・・。しかし、近頃特に顕著なのですがドロップアウトした効果が全くないです。
 X(旧ツイッター)で書いた内容を再度ここに書きますが、私は、X(ツイッター)、Facebook、A8ブログ、そして、YouTube以外は、私人です。もし、私人であるときの、プライバシーが侵害されたと判断した場合は、個人情報保護法、名誉毀損罪、誣告罪など該当する罪状ですべて訴えます!

 では、また!

2023年10月14日

PDF化した文書のチェック作業 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
本と女性.jpg
 本日本のPDF化した本のチェックをしています。予想通り最初の方は、何かしらの問題があります。その部分を修正しながら、製本をしています。

[PDF製本作業]
 ScanSnap IX1300の問題点というか、最初の段階では、単行本を読み込むのには、設定に問題があり、PDFが分割されたり、画像データになったりと大変な思いをしたのですが、その中で作成されたPDFは以下の様な問題を抱えていました。

@一部頁抜け
A画像頁が正しい向きになっていない

お買い物マラソン中ポイント全品5倍 スキャナー A3 富士通 PFU ScanSnap iX1300 最大A3 対応 コンパクト 両面 2つ折り Wi-Fi ドキュメントスキャナ 本の自炊 名刺の整理 レシートで家計簿 FI-IX1300A FI-IX1300ABK

価格:31300円
(2023/10/14 17:13時点)
感想(3件)



 @ScanSnap IX1300とScanSnap S1500の違いは、ScanSnap S1500複数頁を読み込むとエラーとしてはじいていたのですが、ScanSnap IX1300は普通に読み込んでしまいます。そのため、ScanSnap S1500では非常に多くのエラーが検出されていたのですが、ScanSnap IX1300ではほとんどエラーになりません。ジャムらないという点では、ScanSnap IX1300は性能が上がったのかもしれませんが、今回読み込みスピードが速い原因の違いに、仕様の違いというのがあるようです。そのため、多くはないのですが、今回PDFにした本を再チェックすると、頁抜けするケースが複数ありました。
 Aは、ScanSnap IX1300とScanSnap S1500では仕様は変わらないようです。現在、チェックしながら、正常の方向に回転させて修正しています。

[ScanSnap IX1300]
 ScanSnap S1500は、使用するときだけ、デスクに出していたのですが、ScanSnap IX1300は通常からデスクにおくようにしました。それだけ、ScanSnap IX1300が小さいのです。
 そんな、ScanSnap IX1300のカバーを開けてみると、この3日間の作業で、細かい紙が砂状になって貼り付いています。気づいた時点で、ハケできれいにしたのですが、エアーできれいにした方がいいようです。
 これから、デスクにおいて、かつ、ScanSnap IX1300のふたを開けなくても、手軽にPDFに変換できるので、手元に届いて残す資料などは、すぐにスキャンできそうです。別な所から運んでくると言うステップが1つ入るだけでも、作業的に億劫になってしまいます。今後はそのようなことはなくなるようです。

[あとがき]
 今回作業の途中からですが、検索可能なPDFを作成するという機能を追加しました。ただ、それは、2日目以降なので、それ以前の、54冊は、Acrobatで検索可能なPDFに変換しなければなりません。それもまた、時間がかかる作業です。ただ、食事をするときなど、席を外したタイミングで実行すればいいので、あまり問題にならないでしょう。そうそう、今回のScanSnap IX1300ではAdbe社のAcrobatがソフトウェアとして提供されていません。そのため、以前購入したScanSnap S1500に付いてきたAcrobat9を使用しています。もし、ScanSnap IX1300は高いし、どういう製品かよく分からないから購入するのをためらうという人がいるなら、ScanSnap S1500の中古を購入するといいかもしれません。1万円で販売されており、そこに、Acrobatが付いてくるならお得です。ハードが1ヶ月で壊れてしまっても、Acrobatが手元に残ります。ただ、ソフトは渡さないという人もいるかもしれませんので、内容物については、よく調べた上御購入下さい。
 では、引き続き、PDF化した単行本のチェックをしていきます!
 なお、明日はブログをお休みさせて頂きます。もしかしたら、月曜日もお休みを頂くかもしれません。ご了承下さい。

 では、また!

タグ:ScanSnap Acrobat9

2023年10月13日

PDF化作業完了 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
本棚.jpg
 今日やっと、本のPDF化が完了しました。完了してみて、コレクションが足りないのが気になるのですが、その調査は、本の製本状態をチェックするときに確認したいと思います。

[何がいけなかった]
 今日も、開始当初は昨日と同じ状態で、読み込んだ本により、1つのPDFで出力されたり、そうでなければ、100ファイルぐらいに分割されたりなどして、大変でした。そのため、富士通に電話しようかと思いましたが、思いとどまり、昨日やると言っていた、単行本のサイズに固定するなどやってみましたが、うまくいく場合とうまくいかない場合があります。そのため、再度いろいろいじってみてやっと見つけることができました。設定は以下の通りです。

お買い物マラソン中ポイント全品5倍 スキャナー A3 富士通 PFU ScanSnap iX1300 最大A3 対応 コンパクト 両面 2つ折り Wi-Fi ドキュメントスキャナ 本の自炊 名刺の整理 レシートで家計簿 FI-IX1300A FI-IX1300ABK

価格:31300円
(2023/10/14 02:50時点)
感想(3件)



@ScanSnap Home起動
A[Scan]アイコンまたは[設定]メニューを選択後、設定の中の[スキャン設定]を選択

 表示したダイアログボックスから

B[Scan Home]をダブルクリックし表示した画面において、「原稿種判別]のプルダウンから、[すべての原稿を文書として読み取ります]

以上の設定で、それ以降はなんの問題もなく、全ての単行本をPDFとすることができました。
 この3日間における作業の成果は以下の通りです。

ページ読み込み数 20,886頁
PDFファイル容量 4.45GB
PDFファイル数  121ファイル

ページ読み込み数は今までのブログに書いたとおり、何回もやり返した本もあったので、おおよその数字になりますが、PDFファイル容量、PDF化ファイル数は今回の実績です。非常に疲れました。この作業をしていて、疲れたのは今回が初めてです。

[今後の予定]
 今回のScanSnap IX1300の性能はかなりいいのですが、やはり成果物のチェックが必要です。明日単行本をいっきにチェックし、廃棄する準備をしたいと思います。多分そんなにひどいモノはないと思うので、すぐにチェックは終わると思うのですが、こればっかりは、チェックしてみないと分かりません。この作業今週いっぱい続き、本来の開発及び勉強は来週からの予定です。予定が度々変わり大変申し訳ございません。

[あとがき]
 今回、ScanSnap S1500が故障したことにより、新スキャナScanSnap IX1300を購入して使ってみましたが、性能の良さに驚嘆しました。もし、ScanSnap S1500で今回の作業をしていたら、まだ、終わっていないでしょう?
 途中、くそ〜!なんて悪態をついていましたが、それは、私の調査が足りなかっただけです。継続読み取りとか、ファイルのところから設定を探したのですが、開いたダイアログボックスにあったとはちょっと、間抜けでした。こういう場合、先入観を持たずに、設定項目を1つずつ確認していくというのが作業において正解のようです。次回から気をつけたいと思います。

 では、また!

タグ:ScanSnap

2023年10月10日

できる力 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
会議.jpg
 ScanSnap IX1300のセットアップが終わりました。セットアップしながら動画を撮ったのですが、久しぶりだったので、思った動画を取ることに悪戦苦闘(笑)。セットアップだけなら、30分もかからないのに、動画のために、2〜3時間かかってしまいました。また、動画撮るならなれませんとね・・・。

スキャナー A4 A3 wi-fi Wi-Fi対応 iX1300 FI-IX1300A ScanSnap スキャンスナップ コンパクト 複数 連続 Uターンスキャン リターンスキャン ワンタッチ 手軽 自宅 在宅 テレワーク リモートワーク

価格:34800円〜
(2023/10/10 19:21時点)
感想(2件)



 そんな、ScanSnap IX1300ですが、箱から出してみて驚き・・・。小さい・・・。軽い・・・。そして、使用してももっと驚き・・・。ジャムらない・・・。ScanSnap S1500で本をPDF化する場合、古い本だと、同時に2、3枚吸い込むことが多く、結局1枚1枚いれることもあったのですが、そんなことをしなくても、すいすい読み込んで、PDF化してくれます。
 ただ、気になるのは、機械的に動く部分が多い・・・。ScanSnap S1500は、本を読み込むところだけが機械仕掛けだったので、10年以上も故障せず使用できたのですが、ScanSnap IX1300は、保守契約に入った方がいいかもしれません。
 以上の状況で、あっという間に部屋の本をPDF化できそうなのですが、ちょっと、一休みして、ブログを更新しています。

[資格って重要?]
 つい最近、X(旧ツイッター)で偉そうなことを言ってしまいました。IPAの午前Tの試験で56点で落第してしまった受験生に、修業が足りません的な発言をしてしまいました。確かに、IPAの午前T、Uの試験は、ドリル的に問題を解くことにより正解率が上がります。ただね・・・、点数を取ったからいいシステムができるというわけではないのですよね・・・。システム関連の業界は、資格よりも、論理的な思考や問題を解決する能力を求められます。

[システム開発に向いている人]
 それが、分かっているのに誰が偉そうに以上の発言をしているのでしょうか?2023年07月09日のブログの中でも書きましたが、この業界に向いている人として、プロ棋界の人を上げましたが、それが理由です。知識もある一定のレベルは当然必要なのですが、専門学校に行けば身に着けることができます。

[システム開発の現場(2019年以前)]
 そんな目でシステム業界を見ると、意外とシステム開発に向いていない人が見られます。ただ、そんな人も活躍できる場が現在のシステム業界にはあります。その場とは、ドキュメントを作成する作業です・・・。大きなシステムなら分かりますが、小さいシステムにおいてもです。
 以前にも書きましたが、小さいシステムならアジャイルが最適です。なぜなら、安い費用で受けた場合、ドキュメントを作っても中途半端のモノしかできないケースが多いからです。

[他の業界と違うシステム業界]
 弁護士なら司法試験に合格するということが非常に重要です。それは、資格が取得できないと業務ができないのと同時に、業務を遂行する上で知識が不足している可能性があるからです。
 そんな業界と一線を画すのがシステム業界です。知識があってもいいのですが、目的は、お客様が求めるシステムを動作させ提供することです。その目的を達成するのに、システム業界のいろいろな分野の資格の問題を見ましたが、それで達成されるとは思えません

[できる能力]
 もし、資格を重視するなら別な業界を目指すべきでしょう!システム業界は、システムを開発できてナンボです。そのシステムを開発するのに重要なのは、繰り返しになりますが、論理的な思考と問題を解決する能力です。私も、これからシステムを作り、仲間を求めるタイミングがあるかもしれません。そのとき、資格はチラ見をしますが、何をやってきてどんな経験をして、どんなことができるのかを重視します。

[システムトラブル]
 本日、全国銀行データ通信システム、通称全銀システムで不具合が発生し、11銀行で他行あての振込取引ができない状況となっています。
 その現場でどんなことが行われているか今までの経験に基づいて想像すると、トップマネジメントではプロジェクトリーダー的な人が、障害が発生している部署からの障害状況に基づき、ホワイトボードに向かい状況を整理し、問題の切り分けをしています。
 現場では、ログ解析後プログラム解析をしているという状況でしょう?そして、プロジェクトリーダを中心としたトップマネジメントでは、現場から上がってきた情報に基づき各業務で原因となりそうな所を議論しているという状況だと思われます。
 ただ、とどのつまり仕様書がシステムの現状を反映しているかどうかも微妙な状況で信頼できるのは現場という結論になるような気がします。そのような状況を例にとって考えると、より現場の重要度が高く、かつ、資格は無意味のような気がします。

[あとがき]
 じゃ、資格は全く無意味なのでしょうか?そんなことはありません。知識に基づき問題解決できる場合もありますし、アイディアが生まれる場合もあります。ただ、資格を持っているだけという状況では、この業界は難しいと思います。
 営業ならいいのですが、もし、システムエンジニアを目指すなら、できる能力が必要となるでしょう?

 では、また!

■ファーストペンギン [システム開発研究室](2023年07月09日)
https://fanblogs.jp/bahamuteve/archive/350/0

2023年10月09日

Googleを支える技術 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
SEO.jpg
 『システムエンジニアが目指す中小企業診断士』でもふれましたが、この休み中に家中の本をPDFに変換しようと、部屋中に本を散らかしたような状態にしたところで、本をPDFに変換するためのスキャナ、ScanSnap S1500が故障してしまいました。最初の1〜2枚読み込んだところまではうまくいったのですけれど・・・。3枚目から吸い込まなくなってしまいました。カバーを開けて動作を確認すると大きなローラーがうまく動作していないようです。そのため、この機会にScanSnap S1500購入時に同時に購入した交換パーツの全てを交換してみましたがやはりうまく動作しない・・・。物理的にモータがうまく動かなくなってしまったようです。そのため、昨日夜遅くなってから、新マシンをAmazon経由で購入をしました。機種はScanSnap iX1300・・・。昨日の夜遅く注文したにもかかわらず、本日16:00直前ぐらいに手元に届きました。感謝!感謝!

全品ポイント5倍 10/4 20時〜 スキャナー A3 富士通 PFU ScanSnap iX1300 最大A3 対応 コンパクト 両面 2つ折り Wi-Fi ドキュメントスキャナ 本の自炊 名刺の整理 レシートで家計簿 FI-IX1300A FI-IX1300ABK

価格:31300円
(2023/10/9 17:57時点)
感想(3件)



 ScanSnap iX1300を受け取ってから、床屋に行ってきました。本日届くのが分かっているのに、床屋に行ったのでは、受けとれません。雨が降っている中行って帰ってきて、ちょっとくつろいでから、デスクに向かっています。

[Googleを支える技術]
 以上のような状態で、普通のサラリーマン同様に昨日、今日はお休みを頂いてしまいました。。ScanSnap S1500の故障は本当に想定外でした。
 そのような中、以前読んだ本を参考に、EVEシステムの検討に入っています。その本とは『Googleを支える技術』という本です。実はこの本、私のシステム開発に大きな影響を与えた本です。2008年に出版された本で、新品はもう販売されていないようです。中古ですが、リンクを貼っておきますので、興味がありましたら、御購入ください。

【中古】 Googleを支える技術 巨大システムの内側の世界 WEB+DB PRESS plus/西田圭介【著】 【中古】afb

価格:200円
(2023/10/9 17:41時点)
感想(0件)



[どんな影響?]
 この本を読むまでは、開発や技術には、原理原則があり、その原理原則に反する行為はいけない行為だと思っていました。ただ、この本を読んでから、システム開発において原理原則はないと言うことを知りました。ようは、システム開発は、こうしなくてはいけないという概念がなくなったのです。その効果により、自宅で作るシステム限定になりますが、いろいろな挑戦をするようになりました。
 ただ、この本によるマイナスの効果もあります。それは、自分の考えと違うから間違っているということが言えなくなりました。それは業務限定ですが、プロジェクト的にこれはやっちゃいけないという事はあるはずなのですが、それについて指摘できなくなりました。
 まっ、指摘するのが仕事でなかったと言うこともありますし、技術が多岐にわたるうえ、その技術の細部まで知らないということもあります。先日の複雑なSQLのデメリットについてもそうです。
 複雑なSQLのデメリットについて、なんで、今ブログで書けたのかというと、ChatGPTの存在が大きいです。自分が以前から感じている疑問を入力するとそれに対する解答を的確に提示してくれます。間違っている場合もあるのですが、その解答が論理的で矛盾がなければ正解していると思っています。その解答が私を後押ししてくれます

[あとがき]
 『Googleを支える技術』は、まだ読み終えていないのですが、近日中には読み終え、何かしらの方針が示せればと考えています。
 それと、部屋中に散らかった本のPDF化ですが、明日からにします。せっかく昨日の今日届けて頂いたのですが、今窓ガラスの外はとっぷりと日が暮れ、その状況が私からやる気を奪ってしまいました。申し訳ございません!久しぶりに動画にして見ようかな?

 では、また!

2023年10月06日

すべての情報をでデータベースで管理をする《続き》 〜データベース研究室〜


 こんにちは!
 ナビゲータのEVEです。
データセンター.jpg
 昨日は話が脱線した感じがありました。すみません。分かりにくくなってしまったので、まず最初に昨日何が言いたかったのか、まとめましょう。

[昨日のまとめ]
 昨日、Prototype EVEでは、ディレクトリ情報など、一部の情報をファイルで管理しているという話をしました。そして、同じように多くのシステムがその一部をファイルで管理しています。
 そのように作る理由は、検索速度の向上です。管理情報までデータベースに検索に言った場合、検索速度が低下する懸念があるからです。
 その苦労のひとつとして、各プログラムの先頭で当該プログラムで使用するデータを一括で取得しようとしています。ただ、そのSQLは、非常に複雑な作りとなっているため、目的の意図に反して、逆にシステムの速度を低下させているのではという話をしました。加えて、同プログラムは、複雑なゆえに、ホワイトボックス試験をすることができず、ブラックボックス試験のみでリリースしている危険性を指摘しています。
 そのような現状を踏まえ、現在我々が作るシステムでは、データベースですべての情報を管理するのは難しいかもしれません。
 ただ、我々がよく知るOracleは、そのシステムのほとんどをデータベースで管理しています。なぜそんなことができるのでしょうか?
 今日は、データベースであらゆる情報を管理する方法について検討をしたいと思います。

[全ての情報をデータベースで管理する]
 全ての情報をデータベースで管理するためには、どんなことを注意したらいいでしょうか?いろいろ考えを巡らせるのですが、やはり、検索、登録、変更、削除というデータベースの基本的な速度が早いことが求められます。
 以上のことを考えた場合、Oracleは自社で製造しているため、その特性をよく理解し、製造していると思われます。だから、早いといえます。ただ、我々の場合業務で使用するのは、Oracleだけではないので、一般的なデータベースで速さを求めるためには、どんなことに気を付けたらいいでしょうか?本日も、ChatGPTに聞いてみました。

❶データベースの検索速度を向上させるためには、以下のポイントに注意することが重要です。
@インデックスの最適化
 インデックスはデータベースの検索速度を向上させるための重要な要素です。適切な列にインデックスを作成し、クエリの高速化を図りましょう。ただし、過剰なインデックスはデータベースのパフォーマンスに悪影響を及ぼす可能性があるため、適度に使用しましょう。
Aクエリの最適化
 クエリを効率的に書くことが重要です。不要な列を取得しないようにし、WHERE句やJOIN句を適切に使用して結果セットを最小限に抑えましょう。また、サブクエリや複雑な結合を避けることも検索速度向上に役立ちます。
Bハードウェアとインフラの最適化
 データベースサーバーのハードウェアやインフラストラクチャを最適化しましょう。CPU、メモリ、ストレージなどのリソースが十分であることを確保し、適切なキャッシュ設定を構成しましょう。
Cクエリのキャッシュ
 クエリの結果をキャッシュして、同じクエリが複数回実行される場合にデータベースへのアクセス回数を減らしましょう。一般的に、変更頻度の低いデータに対するクエリをキャッシュすることが有効です。
Dパーティショニング
 大容量のテーブルを複数のパーティションに分割することで、データの管理や検索速度の向上が可能です。時系列データなどの特定の基準に基づいてパーティションを設定することが一般的です。
Eインメモリデータベースの検討:
 インメモリデータベースはデータをメモリ内に保持するため、ディスクアクセスの遅延を回避し高速な検索を実現します。ただし、メモリの容量に注意が必要です。
Fクエリのログとモニタリング
 クエリの実行ログを収集し、データベースのパフォーマンスをモニタリングしましょう。ボトルネックや問題を特定し、最適化の余地があるかどうかを把握します。
Gキャッシュ戦略
 アプリケーションやデータベースレベルでのキャッシュ戦略を確立しましょう。キャッシュを使用することで、一部のデータを高速に提供できます。
Hインデックスの再構築と定期的なメンテナンス:
 インデックスの再構築やデータベースの定期的なメンテナンスを実施し、パフォーマンスを維持しましょう。特にデータの増加がある場合、インデックスの再構築が必要です。

 データベースのパフォーマンス向上は継続的なプロセスであり、データベースの設計、クエリの最適化、ハードウェアのアップグレードなど、さまざまな要因に注意を払うことが重要です。


以上は、データベース一般に言えることなのですが、Oracleに絞った場合、どんなことに注意しなければならないのでしょうか?引き続き、ChatGPTに聞いてみました。

❶Oracleデータベースに特化した場合、以下の点を考慮に入れることが特に重要です

@Oracleの最適化機能を活用
 Oracleデータベースは高度なクエリ最適化機能を備えており、クエリプランの最適化を自動的に行います。しかし、クエリヒントやプロファイリングなどの手動最適化手法を使用して、クエリの実行計画を調整することも考慮しましょう。
APartitioningとCompressionの活用
 Oracleでは、データをパーティション化して管理する機能が豊富です。時系列データやリージョン別データなど、適切なパーティショニング戦略を選択し、パフォーマンスを向上させましょう。また、データ圧縮もディスクスペースの節約と検索速度向上に役立つことがあります。
BOracle Real Application Clusters (RAC)の使用:
 高可用性とスケーラビリティを必要とする場合、Oracle RACを検討しましょう。RACはデータベースを複数のノードに分散し、負荷分散と障害耐性を提供します。
Cデータの圧縮と分割
 大容量のデータを効果的に管理するために、Oracleのテーブルパーティショニングおよびデータ圧縮機能を活用しましょう。これにより、データの効率的な格納とアクセスが可能になります。
DOracle Enterprise Managerの使用
 Oracle Enterprise Managerは、データベースのパフォーマンスモニタリング、診断、チューニングをサポートする強力なツールです。データベースの健全性を維持し、問題を早期に検出できます。
EOracle Advanced Queuing (AQ)の活用
 メッセージキューイングおよびイベントドリブンアプリケーションにおいて、Oracle AQを使用してデータベース間通信とイベント処理を最適化できます。
FSQLチューニングアドバイザとSQLプロファイリング
 OracleデータベースにはSQLチューニングアドバイザとSQLプロファイリングツールが含まれており、クエリのパフォーマンスを改善するのに役立ちます。これらのツールを活用して、問題のあるSQLステートメントを特定し、最適化を行いましょう。

 Oracleデータベースの特徴を活かしてパフォーマンスを向上させるために、上記のポイントを考慮することが重要です。Oracleは非常に強力で多機能なデータベースエンジンであり、適切に最適化および構成することで高性能なデータベース環境を構築できます。


やはり、Oracleに特化した項目があるようです。ただ、各項目を個別に見ると、結局のところ、最適化監視チューニングということになるようです。最適化の対象には、ソフト、ハード、ネットワークあり、最適化後に監視し、適時チューニングするというのが適切な運用だといえるでしょう?ただ、マンパワーがないなか、難しいとは思います。

[それ以外に求められるもの]
 以上はChatGPTからの推奨なのですが、それ以外にはどんなことがあるでしょうか?私が提案したいのは、単純なクエリを複数回発行し結果を求める方法でいいんじゃない?っていうことです。複雑なクエリを作り込むと、製造的には、テストに時間がかかりますし、データベース的には、評価に時間がかかります。評価については、昨日話した通り、検索結果の再利用は難しいと思われます。

 私も、複雑なクエリを作りますが、管理システムまたはバッチ処理に限定しています。理由は、使う人が限定されるとか、毎日ルーチンワークのように同じ作業を行うからです。以上の場合なら、問題がないのではと考えています。それ以外は、単純なSQLを複数発行し最終的な結果を求めています。
 ただ、このような発言をして思うのは、私ができないから他の人もできないともいえず、できる人はできますものね・・・。難しい問題です。ただ、幸運にもOracleには、「@Oracleの最適化機能を活用」があります。これを利用すれば、多くの人が複雑なクエリも、最適なものとして製造できるのかもしれません。
 ここまで書いてなんなのですが、私は、単純なプログラムを多用する手法を今後も利用したいと思います。

[あとがき]
 以上のことをすべてやったから、さぁ、データベースですべての情報を管理しましょう!っていいたいのですが、今までの検討だけでは、難しいと思われます。やはり、ファイル管理する部分が多く、その量は減らないと思います。
 ただ、ファイルで管理した場合、当該プロジェクトだと、プログラム変更にあたり、事務手続きがやたらめんどくさくなる場合があります。マスタテーブルの変更なら、そんなわずらわしさはないでしょう?
 だから、データベースで管理したいと思うのですが、PHP限定で考えた場合、各プログラムの頭で、必ず、クラスのインポートが行われます。それを考えたら、そこに環境を管理するファイルが1つ増えたからと言って何か問題になるとは思えません。ただ、ファイルを読み込むのって、メモリ、キャッシュメモリと比較するとかなりの時間がかかるのは知っています。
 昔のシステム、汎用機になりますが、各システムで利用するデータ、例えば、元号とか、本日の日付とか言ったものは、メモリで管理していました。システムが起動してきたとき、同変数を読込、メモリにローディングしておくのです。Windowsだったら、環境変数っていえば分かりやすいでしょうか?

 なんて、いろいろなことを考えていたら、もっと検討する時間が必要なようです。EVEシステム製造時までには決めたいと思います。

 では、また!

2023年10月05日

すべての情報をデータベースで管理をする 〜データベース研究室〜


 こんにちは!
 ナビゲータのEVEです。
データ.jpg
 まだ、動作するかどうか検証をしていないのですが、その前にやることがありました。昨日話したとおり、Prototype EVEでは、構成管理はしていないのですが、コンロールファイルでディレクトリを管理していました。そのため、今回システムをフォルダ毎に分けるという判断をしたため、そちらの方も修正しなくてはいけません。ただ、覗いてみて拍子抜け・・・・。ほとんどが相対アドレスで管理しており、絶対アドレスで管理しているのはバッチ処理用の部分だけ・・・。ただ、そちらも、上位の階層で管理していたので、ほとんど修正する必要はありませんでした。ただ、ここで、考えさせられる問題を思い出しました。

[ディレクトリ管理はどこで?]
 Prototype EVEは、先ほど話したとおり、ファイルで管理しています。今まで複数のプロジェクトに参加しましたが、やはり、ファイルで管理しているところが多いように感じています。ただ、ほとんどの情報をデータベースで管理している有名なシステムがあります。それは、皆さんも知っていると思いますが、Oracle・・・。

[Oracle]
 現在、世界最高峰のデータベースです。Oracle6では問題が多々あった(私が以前聞いた話です)そうですが、私が初めて利用した、Oracle8iでは、かなり洗練されたイメージがあります。
 Oracleと他のデータベースを比較した場合の強みは、高セキュリティ高可用性スケーラビリティ、そして特に他のデータベースとの差別化ができていたのは、行ロックでした。
 近年、多くのデーターベースが行ロックできるようになりましたが、つい最近というイメージです。SQLServerも2005年からできたという話がありますが、不完全で完璧な製品を提供できるようになったのは、他のデータベースと同様です。
 そのため、Oracleを多くのデータベースエンジニアが選択し、導入、利用しています。

 そんな世界でNo1と思われる、Oracleなのですが、ほとんどの情報をデータベースで管理しています。本で読んだ、Oracleのエンジニアから聞いたという分けではなく、管理テーブルをひたすら検索して得た印象です。

[データベースですべての情報を管理するうえでの問題点]
 データベースですべての情報を管理するうえでの問題点、それは、検索速度です。
 多くのプロジェクトでは、複雑なSQLを利用しているケースが非常に多いのです。簡単なSQLでシステムを製造しているプロジェクトは正直おめにかかっていません。そのため、1つのSQL文を発行すると、OracleがSQL文を解析するのに時間がかかり、かなりの時間を要します。
 そのような作りをしている大きな原因が、やはり、検索速度です。何回もSQLを発行すると時間がかかるため、1回で済ませようとしているようです。そして、Oracleの場合1度発行したSQL文は再利用され、検索速度が速いというのです。
 ただ、ここで疑問なのが、「1度発行したSQL文」という部分です。私の考え方では、全く同じSQLでないと再評価の対象となります。それは、Oracleは以下の流れでSQL文を評価しています。

❶SQL文をハッシュ化します
❷同ハッシュから管理アドレスを探します
❸管理アドレスにデータが格納されていた場合、その結果をユーザに返却します

という流れで、検索速度の速さを実現しているという認識です。そのため、複雑なSQL文の1箇所でも変わった場合、ハッシュ値が変わってしまい、再評価の対象になると考えています。
 というのは、私の意見なのですが、実際のところはどうなのか、ChatGPTに聞いてみました。

 OracleデータベースがSQL文を評価するプロセスは、簡単に言うと次のようなステップで進行しますが、少し詳細を加えて説明します:

❶SQL文の構文解析と構造解析
 最初に、Oracleデータベースは受け取ったSQL文を解析し、その文の構文と構造を理解します。これにより、どのテーブルにアクセスし、どのデータを取得または変更するかを把握します。
❷クエリ最適化
 解析されたSQL文は、クエリ最適化フェーズに進みます。このフェーズでは、最適な実行計画を決定するために、異なる実行パスやインデックスの選択などの選択肢が評価されます。最適な実行計画を選択することで、クエリの性能が最大化されます。
❸実行計画のキャッシュ
 SQL文の実行計画は、キャッシュに格納されることがあります。これにより、同じSQL文が再度実行される場合、実行計画を再計算する必要がなくなり、クエリの実行が高速化されます。このステップは、SQL文をハッシュ化してキャッシュ内で検索することで行われます。
❹データアクセス
 実行計画が確定したら、実際のデータアクセスが行われます。これは、テーブルやインデックスからデータを読み取る、またはデータを更新するステップです。
❺結果の返却
 データベースがデータアクセスを実行し、必要なデータが取得されたら、その結果がユーザに返却されます。これには、クエリの結果セットや更新の成功または失敗に関する情報が含まれます。

 要するに、SQL文のハッシュ化はクエリ最適化の一部であり、管理アドレスを特定するという簡略化された概念はOracleの内部動作を正確に反映しているわけではありません。Oracleデータベースの内部プロセスは非常に複雑で、パフォーマンスを最適化し、データを効率的に取得するために多くの最適化ステップが組み込まれています。


 ちょっと、分かりずらいので、再度、SQL文を1箇所でも変更した場合、再評価の対象となるかどうか、聞いてみました。

 SQL文が変更されると、通常、新しいSQL文が再評価の対象となります。OracleデータベースはSQL文のテキスト全体をハッシュ化し、このハッシュ値を使用してクエリキャッシュ内での検索を行います。異なるSQL文には異なるハッシュ値が生成されるため、同じSQL文であっても1か所でも異なる場合、新しいハッシュ値が生成されます。
 このため、同じクエリを再度実行する際に、データベースは新しいSQL文に対してクエリ最適化を実行し、新しい実行計画を決定します。したがって、SQL文の1か所でも異なる場合、データベースは新しいSQL文を評価し、新しい実行計画を生成します。
 ただし、一部のSQLクライアントやアプリケーションは、クエリキャッシュを無視してSQL文を実行する設定になっていることもあります。この場合、SQL文が変更されてもクエリキャッシュの再評価は行われません。したがって、SQL文の変更が正しく反映されることを確認するために、適切な設定を行う必要があります。


ということは、プレースフォルダで値を変更しているSQL文は常に再評価の対象となり、以前検索した結果が再利用されることは期待できないと考えたほうがいいようです。

[デバックできないSQL]
 常に再評価がありそうだという複雑なSQLですが、プログラムのようにデバックができません。但し、プログラム同様に分岐的な記述なども可能です。
 プログラムで言ったら、デバックがないプログラムを目検で確認するようなモノです。そんな行為はどのプロジェクトも許可しません。ただ、SQLは、どのプロジェクトでも認められています。
 しかも、試験をする場合、ホワイトボックス試験の難易度がかなり高くなります。そのため、ブラックボックス試験しか実施していないと思われます。

 そんなプロジェクトで、複雑なSQL文を見ながらかなり、不安を覚えた記憶があります。

[あとがき]
 本日は、システム情報をデータベースで管理するのは問題があり、その大きな問題が検索速度という話をしました。但し、冒頭にも書きましたが、Oracleは、データベースでほとんどの情報を管理しているようです。では、なぜそんなことができるのでしょうか?明日は、「システムエンジニアが目指す中小企業診断士」を書く予定でしたが、変更しこの続きを書きたいと思います。

 では、また!

2023年10月04日

EVEシステム製造再開 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
データベースシステム.jpg
 まだまだ波に乗れない、プロジェクトです。各タスクの時間配分が分かりません。といいながら、今日はいやなことがあったなど、いろいろな理由があり、今日は何も手つかずの状態なのですが・・・。明日から、またがんばります。

[EVEシステムの製造]
 今週から、開発に入る予定だったEVEシステムの開発ですが、今日からやっと手をつけました。それは、プログラムの管理アドレスを変更する。
 Prototype EVEでは、構成管理はしていないのですが、各プログラムの情報はシステムで管理しています。理由は、各プログラムへのアクセス権を管理しているためです。一般の方が自由にアクセスできるプログラムと、管理者のみにアクセスさせたいプログラムってありますよね?そのプログラムをシステムで管理するために、アドレスをシステムで管理しています。
 最初に導入したのは、Oracleのロールのように管理する方法・・・。ただ、途中からロールだけでなく、アクセスレベルをつけました。ロールへのセキュリティレベルをつけたのです。これにより、どのロールがどのようなセキュリティレベルにあり、どんな人にアクセスさせたいのか明確にしました。

[なんでプログラム管理アドレスを変更する]
 プログラムの管理アドレスを変更する理由は、1つのサーバーで複数のシステムを動かそうとしているためです。それは、Prototype EVEと、EVEシステム・・・。当初New Prototype EVEを作る過程で、ログインシステムを共存させるのですが、最終的には、ログインシステムを分けます。そう考えると、同じフォルダに、混在させるのは開発の混乱を招きます。

[手順]
 以下の手順で、各プログラムのアドレスを変更します。

@環境バックアップ
 仮想環境のスナップショットをとる。
AMySQLログイン
B管理ディレクトリ調査
 管理ディレクトリの調査を行う。

#select distinct(dirItem) from ProgramTable;


Cディレクトリ比較表作成
 Bの結果から、旧ディレクトリと新ディレクトリの対比表を作成します。
D調査結果に基づきUPDATE文を作成

#update ProgramTable set dirItem = "[新アドレス]" where dirItem = "[Cで調査した結果]"


Eディレクトリ変換
 Dで作成したupdate文で、一括変換を実施する。
F動作検証
 システムがきちんと動作するか、各プログラムを実行する。

[あとがき]
 本日Eまで実行しました。やってみて、驚いたこと・・・。正確に入力されていると考えていたディレクトリ情報にいろいろな記述があった???
 このディレクトリ情報が正しく入力されていないと、きちんと動作するわけがないのだが・・・・?
 まっ、調べるのは後回し・・・。じゃ、ディレクトリ情報に基づき、プログラムを移動し、動作検証を行います。

 では、また!
タグ:PHP8

2023年10月01日

ジャニーズ事務所 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
コンサート.jpg

 2023年5月16、18、21、22日と複数日ジャニーズ事務所の性加害問題を取りあげてきましたが、落ち着いたようです。責任の所在について明確になり、今度は補償の問題に入っています。ただ、まだ、問題がいくつかあるようです。

[現在の問題]
 現状どんな問題があるのでしょうか?

@社長の問題
A社外の人間が検証していない
B社名の問題
C補償の問題

 @Aは、内部の人間だけで今回の問題を片付けようとしているところに問題があると考えています。社内で今まで問題ないと考えていたその思考が今回の問題を適切に処理できるとは思えません。社外の人間がリーダーシップを取りこの問題を解決して欲しいと思っています。@Aの行動は、このような大きな問題を長い間放置してきたにも関わらず、まだジャニーズ事務所を残したいと考えているようにしか思いません。タレントは別の事務所に移籍したり、独立すればいいだけの問題で、別にジャニーズ事務所がなくなってももうどうでもいいと思うのですが???
 Bは、@A同様なのですが、なんで、この状況においてまでジャニーズという名前を残そうとするのか理解できません。正直言って、ジャニーズと聞いたからといって、ジャニー喜多川氏を思い浮かべることはないのですが、犯罪者の名前を社名として残そうとしている神経が良く理解できません。
 Cは、過去に遡り、法律の枠を越えて補償をすると社長である東山さんが公言しています。ジャニー喜多川氏は、今回同様の犯罪を海外でも犯しており、被害者の方々は海外の裁判所でも訴えている状況です。海外の場合、犯罪の時効がないケースがあり、しかも、犯罪に対する賠償額は日本で考える金額から見ると法外です。そのような見方で見ると、ジャニーズ事務所をつぶさないための措置に感じて仕方がありません。重ね重ねになりますが、残す必要はないと思うのですが・・・?
 それと、今回補償額についてどうやって決めるのでしょうか?1晩いくら?・・・。被害者はそれを聞かれるのもいやだと思っていると思うのですが・・・?適切に取り扱ってほしいです。

[テレビ及びマスコミの罪]
 この問題を提起したとき、ジャニー喜多川氏を糾弾するのと同時に、当サイトでは、テレビ及びマスコミに対しても強い口調で避難しました。
 2000年初めに、ジャニー喜多川氏は、性加害の問題で裁判で有罪になりました。それにもかかわらず、マスコミは何も対応を取ってこないというか、その後もジャニーズ事務所を冗長するような対応を取ってきたからです。
 それについて、複数のテレビ局から以下のようなコメントが出てきました。その一部について御紹介したいと思います。

❶男性の性加害がそんな重大な犯罪だとは思わなかった。
❷視聴率がほしかった。
❸社内においてジャニーズ事務所は、アンタッチャブルのような状態だった。

 今回の問題正直って、男性だけで終わるとは思っていません。以前、モデルのマリエさんが、出川哲郎氏から島田紳助氏への枕営業をすることを進められたというニュースが流れていましたが、このジャニーズ問題から想像すると、氷山の一角でしょう?氷山の一角しか報道されてきていない、女性への性加害の問題は、ジャニーズ問題が大きくなっても出てきていません。全くなかったならいいのですが、今までマスコミ関係のニュースを複数見てきていますがそんなことはないだろうと思っています。そんな印象をもっている私としては、❶は言い訳の何物でもないと思っています。次に女性への性加害の問題が報道された時の言い訳が楽しみです。
 ❷❸の意見を聞くと、その当時のジャニーズ事務所の芸能界への影響力の強さがうかがえます。ただ、NHKまでいっているのは納得できません。我々が支払っている受信料でなりたっているのでしょう?受信料を返してください

 マスコミが社会的機能を適切に果たさなかったために、多くの被害者が出ました。その辺を、もっとよく考えてほしいです。

[あとがき]
 いろいろな企業がジャニーズ事務所のタレントを使わない方向で動いています。ただ、違和感を感じるのは、ジャニーズ事務所にも問題はあるのですが、主原因は、ジャニー喜多川氏です。その本人が生きていれば当然このような行動をとるべきだと思うのですが、もうすでに死んでいます。体質的にまだ問題があるのかもしれませんが、遅きに失ったという印象は否めません。

 では、また!

■故ジャニー喜多川氏の報道について [Coffee Time](2023年5月16日)
https://fanblogs.jp/bahamuteve/archive/298/0

■クローズアップ現代「故ジャニー喜多川氏の性犯罪の報道」の違和感 [Coffee Time](2023年5月18日)
https://fanblogs.jp/bahamuteve/archive/300/0

■スターになるということ〜故ジャニー喜多川氏の事件を受けて〜 [Coffee Time](2023年5月21日)
https://fanblogs.jp/bahamuteve/archive/303/0

■この事件の責任はどこに? 〜故ジャニー喜多川氏の事件を受けて〜(2023年5月22日)
https://fanblogs.jp/bahamuteve/archive/304/0

2023年09月30日

ラグビーワールドカップ2023 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
ラグビー.jpg
 ワールドカップサッカー、WBCときて、今度は、ラグビーです。現在、フランスで、各国の選手が死闘を繰り広げています。死闘は言いすぎですか?
 ただ、死闘といってもいいぐらい、選手だけでなく、ファンも真剣です。この予選ですが、約1カ月間続くそうです。ながって思いましたが、タックルの様子を見ていると、サッカーや野球などと違い、1試合1試合の間隔をあけないと、かなり辛いのでしょう?

[日本代表の戦績]
 現在、日本代表は、3試合行い、2勝1敗といった状況です。

日本 vs チリ:42-12(勝利)
日本 vs イングランド:12-34(敗北)
日本 vs サモア:28-22(勝利)
 
イングランド戦は、ちょっと不運な判定から、ペナルティゴールを奪われ、日本は1名少ない人数で戦うことになりました。その結果が、12-34です。この判定がなければ、結果は同じだったかもしれませんが、もっと、いい試合になったような気がします。

[サッカー観戦や野球観戦との違い]
 正直言って、ルールがいまいち分かっていません。サッカーもルールに関してはあやしいところがあるのですが、そのサッカーよりもラグビーは分かりません。一応判定があるたびに、その判定の解説がテロップで出るのですが、そのルールが多岐にわたる上に、その判定が2度紹介されることがまれなようで、なかなかルールが頭に入っていきません。そんなところが、野球観戦やサッカー観戦との違いでしょうか?
 五郎丸元選手の解説によると、基本ラグビーは陣地取をしているそうです。陣地取をしているんだな〜ぐらいの間隔で見ていると、気楽に見ることができます(笑)。

[ラグビーワールドカップ2023の見どころ]
 ゴールキックなんか見ていてドキドキしますね?真正面から見ると大きな長方形に相当するゴールなのですが、角度が少しでもずれると、ゴールする面積が狭くなります。そのような状況の中、日本の、ゴールキッカー松田選手のゴールの成功率は、90%以上です。ゴールキックを失敗したのは、私が知る限り今回の大会では、サモア戦の1回だけです。
 そして、スクラムやタックルは他のスポーツにはない、格闘技をほうふつさせるものがあります。そんな、男と男のぶつかり合いも、ラグビーの見どころでしょう?
 ちょっと、目先を変えれば、オセアニアから出場した国々の、試合前の舞と言ったらいいのでしょうか?それも、見ものですよ。楽しむところ満載です!

[今後の予定]
 今後の予定は、グループD 2位の日本はあとアルゼンチン戦を残すのみです。そして、グループD 1位イギリスが全勝で、後はサモア戦を残すのみとなっています。2位まで決勝進出の権利があるそうなので、次のアルゼンチン戦には是非勝って自力で決勝に進出してほしいです。なお、アルゼンチンとの過去の戦績について、調べると、以下のような状況のようです。

1993年 5月15日: 日本 27−30 アルゼンチン
1993年 5月22日: 日本 20 - 45 アルゼンチン
1998年 9月15日: 日本 44 - 29 アルゼンチン
1999年 10月16日: 日本 12 - 33 アルゼンチン
2005年 4月23日: 日本 36 - 68 アルゼンチン
2016年 11月5日: 日本 20 - 54 アルゼンチン

 これまでの戦績は、1勝5敗となっており、世界ランクは、アルゼンチンは8位、日本は10位です。直近試合はない上、世界ランク8位と10位の戦いです。面白いものとなるでしょう?

[あとがき]
 ここ数年、日本がいろいろなスポーツの分野で強くなり、面白くなってきました。いろいろなところでストレスが発散できて、いいですね!

 では、また!

■日本対アルゼンチンのラグビー対戦成績!2023年W杯注目選手は?(まるごとニュージーランド)
https://marugotonz.com/japan-argentina-rugby-results/ 

2023年09月27日

フレーム分割する場合のセキュリティについて考える 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
マトリックス.jpg
 現在、中小企業診断士の勉強が軌道にのらないため、そちらを優先的にやっています。そんな中小企業診断士の勉強ですが、今週中には軌道にのせる予定で、プログラム開発は、その軌道にのった後、ということは来週から再開します。

[画面分割]
 現在中止中のプログラム開発ですが、1つ決めたことがあります。それは、管理者画面については、EVEシステムもPrototype EVE同様3画面のフレーム分割で製造することにしました。ただ、従来、Prototype EVEでは、FRAMEタグを利用していたのですが、現在は非推奨です。セキュリティ的に問題があるというのです。そこで、後継のタグとして推奨されているのが、IFRAMEタグ・・・。ただ、IFRAMEタグを利用すれば、すぐにセキュリティが得られるかというとそういう分けではなく、実装すべき機能があります。

[IFRAMEのセキュリティ]
 それでは、どんなセキュリティがあるのでしょうか?どんなセキュリティがあるのか、ChatGPTに聞いてみました。



 iframeのセキュリティを向上させるためには、以下の方法やベストプラクティスを考慮することが重要です。

X-Frame-Options ヘッダーの使用
 サーバーサイドで X-Frame-Options ヘッダーを設定することで、特定のドメインからのiframe埋め込みを制限できます。DENY オプションは、すべてのドメインからのiframeを拒否し、SAMEORIGIN オプションは同一オリジンのみを許可します。

X-Frame-Options: SAMEORIGIN(DENY)


Content Security Policy (CSP)
 CSPを使用して、どのドメインからのコンテンツを読み込むことが許可されているかを指定できます。これにより、不正な埋め込みやスクリプトの実行を防ぐことができます。

Content-Security-Policy: frame-ancestors 'self' example.com


❸iframeの属性を検討:
 sandbox 属性を使用して、iframe内で実行できる操作を制限できます。また、allow-scripts や allow-same-origin などの属性を使用して、特定の動作を許可または制限できます。

<iframe src="https://example.com" sandbox="allow-scripts allow-same-origin">


❹セキュアな通信
 iframe内のコンテンツを提供する際、HTTPSを使用して通信を暗号化しましょう。これにより、データの盗聴や改ざんを防ぎます。
❺クリックジャッキング対策
 クリックジャッキング攻撃を防ぐために、iframeに不透明な要素を重ねて表示させ、ユーザーが誤ってクリックできないようにすることを検討してください。
❻フレーム内コンテンツの信頼性確保
 iframe内で表示するコンテンツは信頼性のあるソースから提供されるべきです。信頼性のないコンテンツをiframeに埋め込むことはセキュリティリスクとなります。
❼セキュリティアップデート
 使用しているブラウジングコンポーネントやフレームワークについて、最新のセキュリティアップデートを確認し、適用することが重要です。

 これらの方法を組み合わせて、iframeのセキュリティを強化できます。セキュリティに関する最新のベストプラクティスやセキュリティアップデートを追跡し、常に最良のセキュリティプラクティスを採用することが重要です。



[実装の検討]
 ❶から順をおって見てみましょう!
 ❶は、情報処理安全確保支援士の試験では、クリックジャッキング攻撃の問題でよく見る防御方法です。実は、情報処理安全確保支援士のテキストには、以下の内容で書かれています。

DENYオプション:すべてのドメインからのiframeを拒否
SAMEORIGIN オプション:同一オリジンのみを許可
ALLOW-FROM uri:ページは指定されたオリジンuriのフレーム内でのみ表示

私が以前勉強したときは、ALLOW-FROMがあったのですが、現在これは廃止され、新しいバージョンのブラウザはサポートもしていないそうです。そのため、ChatGPTは、ALLOW-FROMはないと断言しています。現在からセキュリティを勉強する人は、DENYとSAMEORIGINを知っていれば問題ないでしょう!
 そんな、X-Frame-Optionsについて、情報処理安全確保支援士のテキストでは、具体的な設定方法は記述していません。では、どのように設定したらいいのか、ChatGPTに聞いたところ、以下のような回答がありました。設定箇所は、HTMLソースではなく、apache.conf、httpd.confまたは.htaccessに設定します。
 記述方式は、下記の通りとなります。


<VirtualHost *:80>
# 他の設定...

Header always append X-Frame-Options SAMEORIGIN(DENY)
</VirtualHost>



 ここまで分かれば、すぐにでも設定できそうです。ただ、気を付ける点は、Apacheを再起動しないと設定が有効になりません。本番機などに設定する場合、お客様のことを考え再起動を後回しにしてしまうということが考えられます。再起動を忘れないでください。

 続きまして、❷のContent Security Policy (CSP)なのですが、どのように設定したらいいでしょうか?実は、この設定方法初めて見ます。
 ChatGPTに聞いたところ、設定箇所は、X-Frame-Options同様に、apache.conf、httpd.confまたは.htaccessに設定します。
 記述方式は、下記の通りとなります。


<VirtualHost *:80>
# 他の設定...

Header always set Content-Security-Policy "frame-ancestors 'self' example.com"
</VirtualHost>



この設定も、記述したからすぐに有効になるのではなく、Apacheを再起動しないと有効になりません。本番機に設定する方は気を付けてください。

 つづきまして、❸なのですが、これは、htmlのソースに記述します。これも実は初めて見る記述です。記述は、上記の通りなのですが、これ以外にもスペースで区切ることによりいろいろな設定ができるようです。以下に一覧で記述します。

■allow-scripts
 allow-scripts を設定すると、iframe内でスクリプトが実行できるようになります。これにより、JavaScriptコードがiframe内で実行できます。
 ただし、外部のJavaScriptリソース(外部スクリプトファイル)の読み込みは無効になり、iframe内でのJavaScriptは同じオリジン内のリソースに制限されます。
 この設定を使用する場合、注意が必要で、信頼できないサイトからのiframeを許可しないようにすることが重要です。外部のスクリプトがiframe内で実行できると、セキュリティリスクが高まります。
■allow-same-origin
 allow-same-origin を設定すると、iframe内のコンテンツは同じオリジン(同じドメインとプロトコル)からのみアクセスできます。他のオリジンからのアクセスはブロックされます。
 この設定は、iframe内のコンテンツが親ウィンドウと同じオリジンであることを確実にするために使用されます。これにより、同一オリジンポリシー(Same-Origin Policy)によるセキュリティ制約が強化され、外部からのアクセスや攻撃を防ぎます。
 ただし、同一オリジン内であっても、allow-same-origin を設定することで、iframe内のコンテンツは親ウィンドウ内のコンテキストと同じように操作できます。注意が必要です。
 これらの属性を組み合わせて使用することで、iframe内のコンテンツのスクリプト実行を制御し、同一オリジンポリシーに従ったセキュリティを強化できます。ただし、これらの属性を使用する際には、セキュリティ上のリスクに対する十分な注意が必要です。
■allow-forms
 埋め込まれた文書からのフォーム送信を有効にします。
■allow-modals
 埋め込まれた文書からモーダルウィンドウを開くことを可能にします。
■allow-orientation-lock
 埋め込まれた文書が、スクリーンの方向をロック可能にします。
■allow-pointer-lock
 埋め込まれた文書が Pointer Lock API を使用可能にします。
■allow-popups
 埋め込まれた文書からのポップアップを有効にします。
■allow-popups-to-escape-sandbox
 sandbox 属性が付与された文書が、新しいウィンドウを開いた時、サンドボックスが継承されないようにします。
■allow-presentation
 埋め込まれた文書がプレゼンテーションセッションを開始できるようにします。
■allow-top-navigation
 埋め込まれた文書から別のブラウジング・コンテキストを指しているリンクを有効にします。
■allow-top-navigation-by-user-activation
 埋め込まれた文書が最上位のブラウジング・コンテキストに移動できるようにします。ただし、ユーザーの操作によって開始されたものに限ります。
■allow-downloads-without-user-activation
  ユーザーによる操作のないダウンロードを許可

以上です。
 セキュリティだけのことを、考えた場合、allow-same-originの設定は必須で、それ以外は任意に設定することになりそうです。
 なお、allow-scripts、allow-same-originはChatGPTから、allow-downloads-without-user-activationは、Qiita引用させて戴せていますが、それ以外については、W3 Watch Referenceからの引用となります。

 ❹のセキュアな通信については、2つの考え方があります。

@セキュア属性を指定する
A通信時にhttpsを強制する

 @については、情報処理安全確保支援士のテキストに記述がありますが、具体的な設定方法がありません。また、ChatGPTに聞いてみましょう。
 設定の方法は、クライアントとサーバーサイト両方またはいずれかで設定します。クライアントは、JavaScriptを使用する方法で、サーバーは、サーバーサイトプログラムを利用する方法です。当サイトでは、PHPを利用していますので、サーバーサイトプログラムについては、PHPについてChatGPTに聞いてみました。
 以下は、JavaScriptでセキュア属性を付けた場合のプログラムです。


<!DOCTYPE html>
<html>
<head>
<title>JavaScriptでCookieを設定</title>
</head>
<body>
<script>
// Cookieを設定するJavaScriptコード
document.cookie = "mycookie=myvalue; secure";
</script>
</body>
</html>



 以上のやり方は、ページ読みこみ時にセキュア属性が設定されます。なお、これ以外の方法もありますが、このブログでは割愛させて頂きます。
 続きましては、PHPでセキュア属性を実現する方法です。

<?php
// セキュアなCookieを設定する
setcookie("mycookie", "myvalue", 0, "/", "", true, true);
?>


 なお、以上の設定は、http通信とhttps通信が混在しているサイトで有効です。そのため、以上の設定をする場合、クッキーIDと値をクライアント、サーバーサイトで設定する必要があります。
 調べて初めて分かりましたが、暗号化されているとはいえ、クッキーIDと値が固定になる、または、知られるのはセキュリティ的に問題があると考えます。できれば、HSTS (HTTP Strict Transport Security) を利用したほうがいいようです。
 続きまして、HTTPSを強制する方法です。この方法は、Apache、サーバーサイトアプリケーション(当サイトではPHP)両方で設定する必要があるようです。以下は、Apacheのapache.confまたはhttpd.confへ記述した場合の例となります。


<VirtualHost *:80>
# 他の設定...

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>



 続きまして、サーバーサイトプロログラム、PHPへの記述です。多分フレームワークから製造した場合、各プログラムで必ず読み込まなければいけないプログラムはありませんか?もしありましたら、同プログラムに記述し実行してください。


<?php
// 現在のプロトコルがHTTPSでない場合、HTTPSにリダイレクト
if ($_SERVER['HTTPS'] !== 'on') {
$redirect_url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: $redirect_url");
exit();
}
?>



 ❺のクリックジャッキングへの対策ですが、ここに書かれている内容そのものがクリックジャッキングです。ようは、やられる前にやれということでしょうか?これについては、設定方法が思い浮かばないので、宿題とさせていただきます。
 ❻については、❶〜❹の設定することにより、信頼できるサイト、または信頼できるコンテンツが指定することができるので、あえて改めて何かする必要はないと思われます。
 ❼は、定期的に気をつけた方がいいですね?どんなソフトを使っているのか把握し、そして、同ソフトの更新の有無を定期的に確認するという作業が必要になります。

[あとがき]
 実は、調べる前、X-Frame-Options ヘッダーの使用ぐらいしか考えていなかったのですが、現在いろいろな方法があるのですね?情報処理安全確保支援士のテキストでは、X-Frame-Optionsヘッダーしか紹介されていません。これから、いろいろ新機能などを導入していきますが、まず最初にChatGPT様にお伺いを立ててからシステム開発するべきだということを強く感じました。
 以上の設定をすべて実行すれば、最高なセキュリティが得られるかもしれないと思った方がいるかもしれません。設定は、可能なようなのですが、注意が必要です。ChatGPTは以下のような注意を促しています。

 上記の❶から❹のセキュリティ設定を実施することは、ウェブサイトのセキュリティを向上させるために一般的な手順です。これらの設定はウェブアプリケーションやウェブサイトのセキュリティを強化し、特にクロスサイトスクリプティング(XSS)攻撃やクリックジャッキング攻撃などのセキュリティリスクに対処するのに役立ちます。
 ただし、これらのセキュリティ設定を適切に実装する際に注意すべき点がいくつかあります。

@設定のテスト
 セキュリティ設定を変更する前に、これらの変更がサイトの正常な動作に影響を及ぼさないかどうかをテストしてください。特に、CSP(Content Security Policy)の設定は、誤った設定がウェブサイトの機能に問題を引き起こす可能性があるため、注意が必要です。
ACORS (Cross-Origin Resource Sharing)
  ❶と❷の設定によって、特定のドメインからのコンテンツ読み込みを制限することができます。ただし、必要な外部ドメインからのコンテンツを正しく許可するために、CORSポリシーを適切に設定する必要があります。
BHTTPSの適切な設定
 ❹でセキュアな通信を強制する際には、ウェブサイト全体がHTTPSで提供されていることを確認してください。また、SSL/TLS証明書の適切な設定も行う必要があります。
Cブラウザ互換性
 各ブラウザがこれらのセキュリティヘッダーをサポートする方法や動作が異なることがあるため、互換性を確認してください。特に古いブラウザやバージョンが問題となる場合、適切なポリフィルやフォールバックオプションを検討することが重要です。

 以上の注意点を考慮し、適切なテストと監視を行いながら、これらのセキュリティ設定を実装することで、ウェブサイトのセキュリティを強化できます。セキュリティは継続的なプロセスであるため、定期的な評価とアップデートが不可欠です。


 新たに、CORSが出てきました。これを導入する目的を、詳しく解説すると以下の通りとなります。以下は、ChatGPTからの回答です。


 CORS(Cross-Origin Resource Sharing)は、ウェブアプリケーションにおいて、異なるオリジン(ドメイン、プロトコル、ポート番号の組み合わせ)からのリクエストに対するセキュリティ制御を提供する仕組みです。CORSを実装することで、以下のことが実現されます:

❶セキュリティ制御
 CORSは、クロスオリジンのリクエストを制御するためのセキュリティメカニズムです。同一オリジンのリクエストと比較して、クロスオリジンリクエストにはセキュリティ上のリスクが伴う可能性があります。CORSにより、不正なドメインからのリクエストを防ぎ、クロスオリジンのセキュリティを向上させることができます。
❷同一オリジンポリシーの緩和
 ウェブセキュリティの観点から、通常、異なるオリジンからのリクエストはブラウザによって制限されます。しかし、CORSを使用することで、特定のオリジンからのリクエストを許可し、同一オリジンポリシーを緩和できます。
❸クロスオリジンリクエストの許可
 クロスオリジンのリクエストを正当なものとして許可する場合、サーバーからのレスポンスヘッダーにCORSヘッダーを含めることで、ブラウザによってクロスオリジンリクエストが許可されます。これにより、異なるオリジンのウェブサイトからデータやリソースを取得することができます。
❹特定のオリジンの制限
 CORSを使用して、特定のオリジンからのリクエストを許可または制限できます。これにより、信頼性のあるオリジンのみがアクセスを許可され、他のオリジンからのアクセスを拒否することができます。
❺クロスオリジンスクリプトの実行制限
 クロスオリジンスクリプトの実行を制限できます。CORSポリシーに違反する場合、ブラウザはスクリプトの実行をブロックします。

 CORSは、ウェブアプリケーションのセキュリティを向上させ、クロスオリジンのリソース共有をコントロールするための重要なツールです。適切に構成されたCORSポリシーは、不正なリソースアクセスやクロスサイトスクリプティング(XSS)攻撃からウェブアプリケーションを守るのに役立ちます。


 どうも、これも設定しないといけないようです。
 具体的には、どうやって設定するのでしょうか?引き続きChatGPTに聞いてみました。設定場所は、apache.conf、httpd.confまたは.htaccessに設定します。なお、.htaccessへ設定する場合は、<IfModule mod_headers.c>は不要です。



<IfModule mod_headers.c>
# クロスオリジンのリクエストを許可する
Header set Access-Control-Allow-Origin "*"

# 必要に応じて他のCORSヘッダーを設定する
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Credentials true
</IfModule>



 今回、長々と調べましたが、理由は、時間の節約です。今日は非常に時間が取られましたが、後日はこのサイトに書かれている情報を見るだけでpro2grammer.comのセキュリティを確保することが可能になります。
 現場にいる人もこのサイトを参考に、是非、ChatGPTを活用し、セキュリティの高いシステムを製造してください。

 では、また!

■sandbox 属性(W3 Watch Reference)
https://reference.hyper-text.org/html5/attribute/sandbox/

■【HTML】iframeのsandbox属性について(Qiita)
https://qiita.com/mzmz__02/items/f1187e86c175de5aec0b

2023年09月26日

アキラとあきら 〜Coffee Time〜


 こんにちは!
 ナビゲータのEVEです。
ウォール街.jpg
 マイナポイントの締切が、2023年9月30日と近づいています。皆さん、手続き、お済になりましたでしょうか?まっ、国の借金を減らす観点から言ったら、もらわない人が多い方がいいのかもしれませんが、ここで、国の借金が1、2万増えたからと言って大勢には影響はないでしょう?ただ、「ちりも積もれば山となる」ということわざもありますが・・・。

[PayPayカード]
 今回私は、PayPayからマイナポイントを申し込みました。その時の登録としては、銀行口座を指定するところがあったので、直接銀行からの引き落としだと思っていました。しかし、つい最近分かったこと・・・。PayPayカードというクレジットカード経由で、マイナポイントを申し込んでいたようです。
 ただ、ちょっと、疑問・・・。私は、現在、社会からドロップアウトしている状態となっています。一応株式で利益を挙げようとしていますが、ロシア・ウクライナ戦争が開始される数カ月前から、決算がいいにもかかわらず、ぐんぐん株価は下がり手持ちの株は、ロシア・ウクライナ戦争以前の半分の価値になっています。途中で売れば良かったのですが、決算が良かったため、いつかは上がるだろうと甘い考えでいたため、現在のような事態を迎えています。
 以上の状況から単刀直入に言うと、現在の私は、無職の上に無収入という状況です。にもかかわらず、クレジットカードが作れるなんて・・・?やるじゃん、PayPay!まっ、マイナポイントとして申し込んだので、審査を甘くしてくれたのかもしれませんが、ちょっと、驚いてしまったので、思わずブログに書いてしまいました。

[アキラとあきら]
 そんな驚きがあった完全休暇中、恒例のPrime Videoを見ました。それが、「アキラとあきら」です。2017年のドラマを2022年に映画化しています。
 私は、映画のほうを見ました。

 期待以上に面白かったです。この作品の原作が、あの半沢直樹などの銀行にまつわる小説を書いている、池井戸潤さんの作品となります。だから、面白くないはずはないだろうとは思いましたが、予想以上に面白かったです。

 内容的には、階堂彬(演:横浜流星)と山崎瑛(演:竹内涼真)の2人の運命を強く感じさせる内容となっています。少年時代、同じ銀行への入社、入社での伝説の模擬研修のバトル、そして倒産しそうな会社の社長となった階堂彬を山崎瑛が救済するなどなど・・・。その運命がドラマチックに、ひきつける内容となっていました。
 ネタバレになるのでこれ以上は書きませんが、多くの人が星5つ、または4つをつけて評価しています。もし、お時間がありましたら、見てください。感動できるはずです!

[あとがき]
 調子が悪かった体ですが、休んだことによりというか、多くの時間を睡眠にあてたことにより復調した感じがします。ただ、まだ体力が戻っていませんね・・・。何をするのにも疲れてしまいます。だから、何か1つ作業をするごとに1時間位休んでしまう状況です。これから、体力も取り戻していきましょう

 では、また!

■アキラとあきら(2022年映画:Amazon Prime)
https://www.amazon.co.jp/gp/video/detail/B0B7BKJ653/ref=atv_dp_share_cu_r

■アキラとあきら(2017年ドラマ:Amazon Prime)
https://www.amazon.co.jp/gp/video/detail/B07X9CJZ7Z/ref=atv_dp_share_cu_r

2023年09月20日

Salt値 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 引き続きバッチ処理システムの解析、バグ修正、バージョンアップをしています。やっぱり、問題となるのは、連想配列の部分・・・。Prototype EVEでは、連想配列を多用していて、いろいろなところでエラーが出るうえに、関数をまたぐエラーの場合、ちょっと、解析に時間がかかってしまいます。

[Prototype EVEのセキュリティ的な問題]
 バッチ処理システムだけでなく、それ以外のシステムも、Prototype EVEを利用することになりそうです。ただ、セキュリティ的に何点か問題があります。

 まず、1つ目は、Salt値をシステム共通のものを利用している。

 Salt値の仕組みは、システムを改修する予定です。
 Prototype EVEでは、ユーザが初回ログインすることにより、パスワードのハッシュ値を求め、そのハッシュ値をシステムへ登録します。Salt値は、ユーザがログインするときに、パスワードのハッシュ値とSalt値を文字列連結した値から、ハッシュ値を求める時に利用しています。ただ、今後は、そうでない運用を考えており、3つのモードを用意しようと考えています。
 1つ目は、パスワードをそのままデータベースに格納するモード。これは、管理者が初期ユーザID、パスワードを登録する際に利用します。
 2つ目は、従来通りの運用・・・。
 3つ目は、ユーザ個別にSalt値を設定し運用する方法です。

 1つ目の運用はあるかどうか不明ですが、今後ビジネス的に利用するということを考えると、こんな運用しているところありませんか?管理者がユーザIDとパスワードを登録し、そのユーザIDとパスワードをユーザに知らせます。ユーザは、初回のログインにおいて、ユーザがパスワードを入力すると、従来の流れでハッシュ値を求め、データベースにハッシュ値が登録されるという流れになります。
 2つ目は、いきなり、ユーザ個別のSalt値を導入して、ログインできなくなったというのは困るので、当初は従来の運用を残します。そして、ユーザ個別に、3つ目のSalt値を利用する運用に移行するという流れにしようと考えています。

[あとがき]
 現在、いろいろシステムを作ることを考えていますが、同システム自分だけでなく、多くの人に利用してもらおうと考えています。その場合、やはり注意しなければならないのが、セキュリティ・・・。せっかくそのために知識を身に着けたので、身に着けたセキュリティに加え、自分で考えたセキュリティもシステム化していきたいと思います。
 以前も話しましたが、Salt値ストレッチングもセキュリティの本に書かれる前からやっていました。そういう意味では、先駆者的なことを今までしてきています。今後も、そんなシステム開発をしていきたいと考えています。

 では、また!

2023年09月19日

Prototype EVEの改修状況 〜バッチ処理 プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 Prototype EVEへログインでき、やっと、本格的にEVEシステムの開発に入ろうとしています。
 EVEシステムの最初のプログラムは、Yahooクローニングシステム(仮称)と考えているのですが、本日は、そのクローニングシステムを動かすシステム、Prototype EVEのバッチ処理システムをPHP8で動作するように改修中です。
 その過程において、PHP5では動作するのだけれど、PHP8では動作しないロジックがありました。それは、連想配列・・・・
 従来は、いきなり、変数にカッコを付けて、その中に連想配列の名称を入力してもエラーにはならなかったのですが、PHP8ではそれは許されていないようです。バージョンアップにともなうエラーは本日の時点ではこのぐらいでしょうか?

$item_array = array(); ←❶新規追加部分

$item_array['element'] = 1; ←❶をしないとここでエラーになります



[Prototype EVEのバッチ処理]
 以前、バッチ処理はcrontabで使用する情報を画面から入力し、その情報に基づきcrontabを作成するだけでいいから、バッチ処理を自動化するなんて簡単だなんて言った記憶がありますが、前言撤回です。このPrototype EVEのバッチ処理システムは、2013年に作ったのですが、思った以上に面倒なことをしています。
 従来は、このバッチ処理システムに、PHPで作成したバッチプログラムだけを登録することを想定し製造したのですが、今回、bashで動くバッチプログラム、ウイルスチェックプログラムも画面から入力しようとしているのですが、悪戦苦闘しています。思った以上に凝った作りになっているため、解析に時間がかかっています。
 現在、EVEシステムのプログラム開発仕様に基づき、各ロジックを整形しながら、解析しています。ここでがんばれば、EVEシステムでそのまま利用できるかもしれない・・・・って考えています。

[XServerでビジネスを・・・]
 XServerにシステムを作ろうとした一因は、何かしらのビジネスを始めようと思ったから・・・・。最初は、プログラミングの教育システムを作ろうとしたのですが、いろいろなブラウザを使用しているユーザーに使い勝手のいいプログラムを作る自信がなくなったため、諦めました。リソース不足です・・・。ただ、ビジネスはあきらめていません。現在、Prototype EVEの仕様を確認しながら、どんなことができるか考えている最中です。これから、いろいろシステムを作っていくのですが、先立つものが必要です。

 お金を払ってもいいと思う、質のいいシステムを作りたいと思いますそのときは、EVEシステムがある程度完成している時でしょう?

[あとがき]
 よく考えたら、ウイルスチェックバッチ処理もPHPのプログラムから実行したほうがいいかもしれませんね?PHPのプログラムから実行すれば、制御が簡単ですし、詳細なログも取ることが可能になります。ただ、PHPからシェルを起動するのは、第三者の悪用を考えるとできるだけ避けたいところです。
 シェルからバッチ処理が実行されたら、自分のメールアドレスにメールを送信するなど対策はあるのですが、メールを受け取っても気づかない場合もあるし、悩ましいところです。

 まっ、とりあえず、Prototype EVEのバッチ処理システムでbashを起動できるように仕様を変更はしたいと思います。

 では、また!

2023年09月16日

Prototype EVE管理システムへのログイン成功 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 お休みを返上しブログを更新します。
 っというのは、やっと、Prototype EVEの管理システムへログインできました。

[今日の問題]
 発生しているエラーについて、原因特定に困っているものについては、昨日までにやっつけていたので、今日は、ロジックをひたすら追っかけました。
 結局問題となった箇所は、Prototype EVEのフレームワークから、Prototype EVEへの返却値が以前と変わったことによる不整合・・・。EVEシステム、New Prototype EVEはオブジェクト指向のプログラムで、返却値は常に、tureまたはfalseとしています。しかし、Prototype EVEのフレームワークでは、正常時は、true、""だったらり、異常時は、エラーメッセージ、エラーステータス、falseだったりと、各プログラムでまちまちだったので、そのまちまちの部分を揃えるのに時間がかかりました。結局旧ソースを右画面に、新ソースを左画面に持ってきて、見比べながら修正し完了しました。

[ログイン後のエラー]
 ログイン後、エラー頻発です。原因は、使用関数を格納しているファイルのインポートする部分・・・。
 PHP5までは、フレーム分割された分割ごとに単独で認識していたようなのですが、PHP8では、フレーム全体でインポートの有無を確認しているようです。早速3分割されたログイン直後の画面のプログラムインポートを、requireからrequire_onceへ変更しました。

[今後の予定]
 とりあえず、明日は、Prototype EVEの管理システム群をいっきにrequireからrequire_onceへ変更します。直近使用するバッチ管理システムを動かしてみて、使えるようだったら、Yahooクローニングシステムの製造に入ります。
 現在、ログイン直後の画面から各システムへ変遷しようとクリックすると、とりあえず、エラーメッセージが表示される状態なので、どんな修正になるのか想像できません。まっ、今日のところは、一区切りついたことに喜びを感じながら終えたいと思います。

[あとがき]
 片手間でやっていたということもありますが、時間がかかりました。最後は、がまんできず、かかりっきりでプログラム修正することにより、やり切りました。
 基本プログラミングは好きなのですが、わけの分からなエラーメッセージで作業が止まる場合は、ストレスがたまります。
 ただ、今まで、できなかったことはありません。1996年以前なら分かりませんが、今インターネットで調べれば、何かしらの答え、ヒントがありますから非常に助かります。
 そんなインターネット時代に感謝です。

 では、また!

2023年09月15日

ログインの挑戦 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 今日は、Prototype EVEへのログインの進捗がほしいということで、朝からプログラムをいじっていました。ただ、以下のメッセージのために前進できません。


#Uncaught Error: Call to a member function



インターネットで色々調べてみたところ、Callするプログラム内で致命的なエラーが発生しているか、Callするプログラムが定義されていないとのこと・・・。Callするプログラムがないということはないと思うのだが・・・?

[システム呼び出し間違い?]
New_Prototype_EVE.png
 基本Prototype EVEから呼び出すメソッドは、New Prototype EVEなのですが、勘違いにより、EVEシステムが呼び出されていたことが以前ありました。New Prototype EVEはEVEシステムのメソッドを継承しているのですが、テーブルロックやテーブルアンロックのように、New Prototype EVEに定義されているけれど、EVEシステムには定義されていないメソッドは複数あります。それかもしれないっと思い、プログラム1つ1つ確認してみましたが、違いました。残念・・・。

[セッション変数の定義]
 Prototype EVEでは、New Prototype EVEで作成したDBインスタンスをセッション変数にセットしプログラム間で引き継いでいます。同一セッションでしたいなどのニーズがあるので、この方法採用したのですが、複雑になりすぎました。なんか、簡単にバグを見つける方法がないかな〜っていうことで、いろいろ考えたのですが、思いつかなかったため、まず最初にエラーとなっているプログラムファイルを単独で動作させて見て原因を探してみました。そうしたところ、エラーにならない・・・?そうだよね・・・。単体でデバックしてから結合しているんだから、単体ではエラーにならないよね・・・。
 結局長いプログラムを順をおっていったところ、やっと分かりました。セッション変数を受渡しをしている各プログラムの共通の部分で、誤った使い方をしていました。共通と言っても同じロジックを各プログラムでもっていたので、1つ1つプログラムの当該箇所を検索し修正し先ほど完了しました。
 普通共通関数などにしておくものなのですが、開発当初はこんなに多く使われていると想定していなかったため、各プログラムに同じロジックを作り込むことになってしまいました。それと、10行程度のロジックだしね・・・。ただ、保守性も考えたら、動くことを確認したら共通化することを検討したいと思います。

[テーブルロック、テーブルアンロック]
 テーブルロックメソッドとテーブルアンロックメソッドは、単体で試験を終え今回初めて結合したのですが、以上のエラーがなくなっても、同ロジックでエラーになります。またか・・・、って感じなのですが、これは、ケアレスミス・・・。テーブルロック、テーブルアンロックに使用するのは、データベース接続変数なのですが、ステートメントで、テーブルロック、テーブルアンロックをしようとしていました(笑)。単体でエラーにならなかったのはなぜなんだろうか?

[あとがき]
 以上の作業を本日実施し、ログイン画面でエラーにならないところまで確認できました。そんなに時間をかけるつもりはなかったのですが、朝から夕方までかかってしまいました。本日の予定がすべて飛んでいます。まっ、進捗欲しかったから仕方がないんだけれど・・・。ただ、まだログインまでできていないのは残念です。

 ブログですが、日曜日までお休みを頂きます。次ブログ更新は、日曜日もしかしたら月曜日になるかもしれません。

 では、また!


2023年09月12日

911 〜CoffeeTime〜


 こんにちは!
 ナビゲータのEVEです。
マンハッタン.jpg
 2023年9月8日にブログをアップロードしてから、頭痛がひどくなりしばらく何もせず、寝ては食事をしてという生活をしていました。9月7日までは何となく頭が痛く体がだるいと言った症状だったのですが、9月8日以降は本格的な風邪の症状です。頭痛、咳と喉の痛みがひどい状況でした。それから3日過ぎ、頭の激痛がなくなり、咳もほとんど出なくなりました。喉の痛みも何となく痛いかなっていうレベルになったのですが、現在椅子に座ってブログを一太郎にタイピングしているのですが、じっとりと汗をかいています。クーラーを付けているんですけれどね・・・?やっぱり、風邪のせいでしょうか?
 具合がここまで悪くなったのは本当に久しぶりです。だから、本当に、健康って大事だなって感じています。

[9月11日]
 昨日、9月11日という日は、今でも記憶に残っていますが、ワールドトレードセンターへハイジャックされた2機の旅客機が突っ込み大勢の人が死んだ日になります。もう、あれから、20年以上経ったことに、このブログをつけている現在驚いています。
 私はその当時、SCMシステムを作っていました。客先から誰もいない事務所に1人で戻ってきたのは22時過ぎだったと記憶しています。そして、当日の事後処理を終え、くつろいでから帰ろうと休憩室でテレビを付けたときは、多分23時過ぎでした。
 付けたテレビにいきなり、ビルディングに飛行機が突っ込んでいく映像が映し出されました。今日は、23時過ぎまで映画やっているのかなって思ったその映像は、後に911と言われるテロリストによる攻撃の映像でした。その映像を見た直後にやったこと・・・。それは、アメリカにいる友人とコンタクトを取ること・・・。その当時まだチャットと呼ばれるインターネットの連絡手段が残っており、そのチャットによりシアトルで翻訳の仕事をしているリサと連絡を試みました。
 チャットとは、ポケベルを鳴らすように便利に呼び出せるモノではないので、連絡を取ることができる保証はなかったのですが、一声、声をかけたら話すことができました。声と言っても、ウェッブの画面から文字列を打ち込んでしゃべるのですが、その打ち込まれた文字列からかなり興奮していることを感じることができました。
リサは、テレビから流れる情報を基に現状を解説してくれたのですが、正直言ってよくわかりませんでした。ただ、混乱しているその状況は、その会話から分かりました。

[あとがき]
 私の2001年9月11日は、以上のような感じでした。仕事自体もかなりこんつめてやっていたこともあり、この時の記憶は鮮明に覚えています。
 後に、911のリポートを見たのですが、リサはテレビで流れている状況について正しく解説してくれたようです。そんなリサとも、彼女が結婚してから疎遠になり、現在は連絡を取っていません。

 他人事ではあるのですが、非常に興奮し悲しかった事件でした。御巣鷹山の日航機墜落とかいろいろな事故とか事件がありましたが、この事件は他人事ではないような気がしています。なんか、当事者意識がありました。

 多分この事件は一生忘れることはないでしょう?

 では、また!

2023年09月08日

New Prototype EVEテーブル、テーブルアンロック 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティプログラム.jpg

 健康が重要と、2日間連続して書いたのに、今日頭痛と咳です・・・。
 今朝寒かったですよね???台風が来ているのだから、天候が悪くなり気温が下がりそうだということが分かっていたのに、起きたら裸でした・・・。昨日中小企業診断士試験の結果が判明し今日から仕切り直しだと思っていたのに残念です。

[プログラム製造]
 頭痛と咳が出ていても、プログラムは製造可能です。中小企業診断士の勉強とか何か覚えるとか理解しなければいけない問題を解いているときは致命的なのですが、プログラム製造はできてしまうのですよね・・・?ということで、今日はプログラム製造しては休み、休んでいる最中は映画を見るなどをしていました。

[PHP8テーブルロック、テーブルアンロック]
 プログラム製造なのですが、先日に引き続きテーブルロック、テーブルアンロックのロジックをプログラミングしています。最初、EVEシステムに追加するという話をしていたのですが、検討の結果、New Prototype EVEに追加することにしました。
New_Prototype_EVE.png
 はじめて私のブログを見る方もいると思うので、Prototype EVE、New Prototype EVE、そしてEVEシステムの関係を書くと、Prototype EVEは、2004年から製造を開始したシステムで、つい最近2020年まで機能を追加していました。ただ、Prototype EVEは、PHP5上で製造したため、PHPの最新版Version8の機能は使えません。そのため、当初は、Prototype EVEシステムをバージョンアップすることにしたのですが、PHP5からPHP8へバージョンアップするには、データベース周りのロジックを大幅に変更しなければなりません。加えて、Prototype EVEは2004年から製造している古いシステムなので、調査をした結果、セキュリティ、ロジック等古く使えないということが判明したため、この段階でPrototype EVEを廃棄することにしました。以上の検討を経て、EVEシステムを新規で製造することにしたのですが、EVEシステムを製造するに際し、今まで便利に利用していたデバックシステム等が利用できないことに不便さを感じ、Prototype EVEのロジックを変更することなく、PHP8にバージョンアップすることにしました。そのために、EVEシステムとPrototype EVEシステムのミドルウェア、New Prototype EVEを製造しているという状況です。EVEシステムはオブジェクト指向で作ったシステムで、New Prototype EVEは、EVEシステムが親で、New Prototype EVEが子といった関係になります。

[New Prototype EVE=ミドルウェアの開発のメリット]
 この開発手法のメリットは、新システム、EVEシステムでは、Protype EVEを全く意識することなく最新のロジックで記述できるということです。デメリットは、本来作る必要がない、New Prototype EVEを製造しなくてはいけないということなのですが、New Prototype EVEを製造する部分は、現在の見通しでは、データベース周りだけで済みそうです。EVEシステム、New Prototype EVEのデータベース関連プログラムの製造は終わりPrototype EVEへのログインを試みている状況です。
 その最後の難関が、データベースロックとデータベースアンロック・・・。今まで、EVEシステムで使用しないから、Prototype EVEシステムでその機能を実現しようとしていましたが、よく考えたら、当初は、Prototype EVE上で新規関数を作るということは想定していませんでした。その当初の考え方に則ったら、New Prototype EVEに製造し、その製造したメソッドをPrototype EVEから呼び出すという流れが適切だと考え、現在対応中です・・・・。前回は、EVEシステムと言っていましたが・・・。検討不足でした。

[あとがき]
 以上の検討不足は他の部分にもおよび現在まだログインテストまで、できていない状態です。もし可能なら、このブログアップロード後実施したいと思います。
 季節の変わり目は本当に健康維持が難しい時期です。皆様も、お体にお気をつけください。

 では、また!

2023年09月05日

テーブルロック 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
新型コロナウイルス.jpg
 中小企業診断士試験当日から体の調子が悪いと昨日まで言い続けていましたが、原因が分かりました。状況証拠ですが、多分コロナです。状況証拠というのは、検査をしていないから・・・。治ってから病院にいくのは間抜けですし、まっ、多分そうだっただろうと言うことでこれで終わりにしたいと思います。
 試験当日までの約3、4週間、睡眠時間4〜5時間で生活し、試験2日目の前日は、3時間ぐらいで試験会場に向かったため、多分寝不足だとばかり思っていたのですが・・・。
 コロナに感染したのは多分中小企業診断士試験の1日目・・・。試験2日目には頭痛がする上に目がちかちかしていましたからね・・・。健康な生活を送っていないと病気だと言うことさえ気づかないと言うことなのでしょう?
 新型コロナの病状を調べて見ると、潜伏期間が1〜14日間で、感染から5〜6日で発症するというのですから、感染した翌日に発症したということになります。現在家でほとんどの時間を過ごしているため中小企業診断士試験ぐらいしか感染した場所がおもいつきません。
 体が弱っていたせいでしょうか?発症までの時間が短すぎます。もしかしたら、新型コロナではないかもしれませんが、はじめての症状だったためそんなことを考えてしまいました。
 昨日のブログにも書きましたが、やはり、健康は大事です。

[プログラム開発]
New_Prototype_EVE.png
 テーブルアンロックについて調べて見ましたが、やはり、分かりませんでした。
 そこでどうするのか検討したのですが、今までEVEシステムではテーブルロックは使用しない予定なので、Prototype EVE上で実現しようかと考えていましたが、EVEシステムのデータベース関連クラスにテーブルロックと、テーブルアンロックのメソッドを追加することにしました。ChatGPTとかBingからの解答ではできないはずがないのです。
 そのため、実処理を行う、EVEシステムに追加し、その関数をPrototype EVEから呼びだすことにしました。
 本日テーブルロックメソッドを製造しました。明日試験をしようかなって考えています。

[テーブルロックの仕様]
 PHP8、MySQL、PDOの組合せでは、以下のモードが利用可能だと、ChatGPTは言っています。


 MySQLの LOCK TABLES ステートメントには、テーブルをロックするためのさまざまなモードがあります。一般的なモードには以下のものがあります。

❶READ
 テーブルを読み取り専用でロックします。他のクライアントは読み取りロックを取得できますが、書き込みロックを取得することはできません。これは複数のクライアントが同時にテーブルを読み取ることを許可しますが、書き込み操作をブロックします。
❷WRITE
 テーブルを書き込み専用でロックします。他のクライアントは読み取りも書き込みもできません。これはテーブルに対する排他的なロックです。
❸LOW_PRIORITY_WRITE
 低優先度の書き込みロックを取得します。他のクライアントが読み取りロックを取得している場合、低優先度の書き込みロックを取得しようとするクライアントは待機します。一般的な書き込みロックよりも低い優先度です。
❹HIGH_PRIORITY_WRITE
 高優先度の書き込みロックを取得します。他のクライアントが読み取りロックまたは低優先度の書き込みロックを取得している場合でも、高優先度の書き込みロックを取得しようとするクライアントは他のクライアントをブロックします。

 これらのモードを使用して、テーブルに対する適切なロックを取得できます。選択肢は、特定のユースケースやアプリケーションの要件に応じて異なる場合があります。ロックモードを選択する際には、同時実行性やパフォーマンスへの影響を検討することが重要です。


 なお、ChatGPTがいうには、トランザクションと併用はできないようです。使用するにしても特殊な状況でしか利用できず、今回のプロジェクトならPrototype EVEで利用するぐらいしかないと思われます。

[あとがき]
 Prototype EVEの改修時以外しか利用できないとは思いましたが、テーブルロック、テーブルアンロックの機能を十二分に利用できるようにメソッドは作成します。どこで何があるか分かりませんからね・・・。今日作ったテーブルロックメソッドも、想定以上に長くなってしまいました。
 多分公開してもテーブルロックのロジックは利用されないと思われるので、公開しませんが、ご要望がありましたら、公開します。

 では、また!

2023年09月04日

Prototype EVEへのログイン 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 やっと、プログラムを製造できるまで体が復調しました。体というか、頭と言ったらいいでしょうか?最初寝不足かもしれないと話していたのは、そのせいです。ただ、この1週間の観察から風邪だと判断しました。今日のような雨模様の日などをエアコンを使わず、汗を流しながら、デスクに向かっています。
 そのかいもあって、やっと復活です。まだ、100%ではないのですが、プログラムを見ても頭痛がするなんてことはなくなりました。20日間以上ですか・・・。この症状・・・。
 改めて、健康って大事だなって感じています。

[Prototype EVEの修正状況]
 PHP5からPHP8へデータベースへのアクセス方法を変更し、システムへのログインを試みていますが、warningとfatal errorの嵐です。データベースのロジックを変えただけだと思っても、その判定方法とかいろいろ変えているので、以前のロジックが再現できていないようで、悪戦苦闘しています。本日の、PHP5とPHP8との違いによりエラーになった個所は以下の通りです。



//SQL文の作成
❶$sql = "select * from a_table";

//クエリーの取得
❷$row = mysql_query( $p_sql );

//検索結果の判定
❸$r = mysql_error();

//エラーが発生しているかどうか判定
❹if ( $r != "" ) {
//エラーが発生している場合
return "エラーが発生しています。";
}

//検索結果をサーバーサイト変数へ設定します
❺$_SESSION['sb'] = $row['b'];



以上のロジックにおいて、検索結果が0件の場合、PHP5では❺においてエラーになりませんが、❷〜❹のロジックをPHP8に書き換えたうえで実行するとPHP8では❺がエラーになります。まっ、このようなケースの場合、普通エラーにすべきだし、プログラミングにおいて配慮が足りないな〜って感じがします。以上のエラーロジックを本日修正し完了しました。
 そして、以前使っていた、session_unregisterがPHP8では利用できなくなりました。そのロジックがあるとエラーが発生します。そのため、unsetに修正しました。変数を削除するという意味では同じかな?ただ、session_unregisterと違いunsetはセッション変数だということを明示的に書かないと通常の変数の値が削除されるので、その辺は注意が必要です。

[あとがき]
 以上の修正が終わり、やっと、ログイン後の画面が表示されたのですが、1箇所warningがあります。そう、データベースのunlockの部分・・・。どのサイトでも利用可能といっているので、使い方が悪いのだと思います。unlock以外は、warningとfatal errorがなくなったので、明日は本腰を入れて調査します。進捗は現在2日遅れです。まだ、取り返すことができそうです。

 では、また!


2023年09月01日

情報処理安全確保支援士試験午前U 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。

2024年度版 ALL IN ONE パーフェクトマスター 情報処理安全確保支援士 [ TAC株式会社(情報処理講座) ]

価格:3,080円
(2023/9/1 18:34時点)
感想(0件)



勉強.jpg
 昨日、情報処理安全確保支援士の講習を終えたのですが、その講習には技術的な話があまり書いてありません。概念的な話題が主として書いてありました。その講習を受けながら、思い出したのが、中小企業診断士の経営情報システムの問題・・・。
 例えですが、中小企業診断士の経営情報システムの問題は、例年、ITパスポートのような問題が出題されていたのですが、今年からいきなり情報処理安全確保支援士の試験で出題されるような問題になりました。試験当時のブログでも書きましたが、最初の数問は冷や汗です。例えではありますが、その当時の認識では、中小企業診断士で出題される問題は、ITパスポートレベルの問題なので、勉強せずとも合格点はとれるだろうっと思っていたところに、いきなり情報処理安全確保支援士で受けるような難しいと思えるような問題が出題されるのですから・・・。
 受験後のブログでも書きましたが、IPAの試験をまた受験しようと思っています。次に受験するのはネットワークスペシャリストかなって思っています。ネットワークってセキュリティとは切っても切れない関係にあり、情報処理安全確保支援士の試験にも頻出されています。

[情報処理安全確保支援士 午前U]
 情報処理安全確保支援士の試験は、午前T、午前U、午後T、午後Uと4分野に分かれ出題されていましたが、その中でも午前Uの問題は比較的簡単です。午前T(ITストラテジスト試験、システムアーキテクト試験、ネットワークスペシャリスト、ITサービスマネジメント、情報処理安全確保支援士共通試験)の方が難しいぐらいです。ただ、セキュリティに特化した問題があり、慣れが必要かもしれません。そのような問題を、平成21年〜令和4年春まで解いていたのですが、令和4年秋から解いていなかったので、ネットワークスペシャリストの試験を受験する前に、トライしてみることにしました。

[令和4年秋 試験結果]
試験結果.png
 結果は72点でした。微妙です・・・。まっ、過去問を解いていても、80点以下を取ることはあるのですが、普通は80点以上です・・・。80点以上が普通というのは、もう、過去形かもしれません・・・。ポカして間違った問題もあるのですが、知らなくて、消去法で解いた問題もあるので、まっ、この点数が、現在の私の実力なのでしょう?

[今後の予定]
 とりあえず、以下の情報処理安全確保支援士の問題は解きたいと思います。

午前U 令和5年春
午前T 令和4年秋、令和5年春
午後T 令和5年春
午後U 令和5年春

 令和4年の午後T、Uは時間があったらやりたいと思います。午後Tは隙間時間で出来るのですが、午後Uはガッツリと時間が取られるので・・・。
 数日後になりますが、間違った問題について解説等したいと思います。
 
 私が過去にどんな感じで問題を解いているのかは、YouTubeで公開していますので、もし、よろしければご覧下さい。慣れてくると、YouTubeの動画でみるのと同じぐらいの感じで解くことができます。

 まっ、慣れって言うことですかね?

 では、また!!!

■ゼロからはじめるシステム開発(YouTube)
https://www.youtube.com/channel/UCnmeBUw8wGo34tttvxf0J-Q

2023年08月31日

情報処理安全確保支援士講習 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
オンライン講習.jpg
 本日、情報処理安全確保支援士講習を終わらせました。というのは、最後の単元6は、倫理とコンプライアンスだったのですが、資料をさっと目を通しただけで、最後単元末の試験を実施してすべての講習を終了させています。倫理とコンプライアンスが去年と大きく変わるなんてありえませんからね?以下が、単元の最後にあった試験の結果です。

■単元末の試験結果
単元1:
 1回目 4/5
 2回目 4/5
 3回目 5/5
単元2:
 1回目 4/5
 2回目 4/5
 3回目 5/5
単元3:
 1回目 1/5
 2回目 4/5
 3回目 4/5
 4回目 5/5
単元4:
 1回目 2/5
 2回目 3/5
 3回目 5/5
単元5:
 1回目 4/5
 2回目 5/5
単元6:
 1回目 4/5
 2回目 4/5
 3回目 4/5
 4回目 4/5
 5回目 3/5
 6回目 5/5

 最後の単元6は、本文を読んでいないから、こんなに、何回も再試験を受講したわけではなく、文章の最後の、『「正しい」|「誤っている」ものを選べ」』という指示を見誤った結果です。それと、倫理とかコンプライアンスだったからなめていたかもしれません。
 気になったのが、問題の途中で、最後の、『「正しい」|「誤っている」ものを選べ」』の「正しい」と「誤っている」の記述が入れ替わった問題があったような気がします。 1問間違えた、次!って受けたその問題の最後の、『「正しい」|「誤っている」ものを選べ」』が逆になっている問題が2問ほどありました???気のせいでしょうか?芸が細かすぎます。

[講習における問題の傾向]
 去年との違いは、今年から、問題に対する答えを全て選べという問題が出てきました。そのため、去年は、1発でパスした単元もあったのに、今年はなかったです。問題自体は難しいものはなかったような気がします。ただ、それ覚えていないよ〜っていう問題はありましたが・・・。

[去年と今年の違い]
 今年の講習は、去年の講習と違い、システムライフサイクルの記述が多いような気がしました。去年は記述としてあったような気がしますが、強調する形での紹介ではなかったような気がします。
 それ以外について強いて言えば、参照する資料が減ったぐらいでしょうか?まっ、去年講習を受講し1年しかたっていないから、こんなものでしょう?

[あとがき]
 なお、2023年8月28日のブログで境界防御を、ペリメトリーセキュリティと紹介しましたが、正しくは、ペリメーターセキュリティです。この場を借りまして、訂正させていただきます。
 そして、最後に、今回講習を受けて、講義の中で説明がないのだが、私が知らなかった用語を抽出しました。私が知らない、または忘れてしまった用語で、何の説明もなく、公用語と同じように使用されているのに違和感を感じ、まとめています。今後の参考としてください。

 じゃ、倫理とコンプライアンスこれから読もうかな(笑)。
 では、また!

ラテラルムーブメント
 ラテラルムーブメントは「Lateral Movement(横方向への移動)」を意味します。企業や組織のネットワークに侵入したマルウェアが、OSの正規の機能を悪用して、内部の偵察や資格の窃取を行う攻撃手法のことです。攻撃プロセスにおける感染拡大のフェーズで実行されます。
・Cyber Security.com
 https://cybersecurity-jp.com/column/33244

オンプレミス(on-premise)
 サーバーやソフトウェアなどの情報システムを、使用者が管理している施設の構内に機器を設置して運用することをいう。プレミス(premise)は「構内」「店内」の意味。 「自社運用」ともいう。プレミス、OnPと表記されることもある。
・Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9

リファイメント
 リファインメントとは、プロダクトの認識合わせやプロダクトバックログの詳細化をするためのイベントです。
 プロダクトオーナーと開発者が継続的に実施するプロセスであり、プロダクトバックログアイテムの内容や優先順位、見積り(ストーリーポイント)などを情報を確認し、プロダクトバックログアイテムを詳細化します。
・Hello Scrum
 https://do-scrum.com/refinement/

SOC(Security Operation Center)
 システムの名前ではなく、企業内に設置されたセキュリティ部門やチームのことです。「ソック」と呼ばれており、主にIT機器やネットワークなどの監視・分析とサイバー攻撃の検知を行います。
・GMO Internet Group
 https://www.gmo.jp/security/cybersecurity/soc/

レジリエンス
 困難な状況やストレス、失敗などに直面しても、自己回復力や適応力を持ち、精神的な弾力性を維持する能力のことです。この能力があることで、個人や組織は挫折から早期回復し、新たなチャンスや成長の機会をつかみ取ることができます。また、レジリエンスはストレス耐性やメンタルヘルスを改善する効果もあります。
・ポジティブサイコロジースクール
 http://positivepsych.jp/about_resilience.html

MSS(MSS(Managed Security Service)
 企業や組織の情報セキュリティシステムの運用管理を、社外のセキュリティ専門企業などが請け負うサービスのことです。自社でセキュリティの専門家を採用・養成することが難しい場合などでも、専門家へとアウトソースすることができます。
・NRI Secure
https://www.nri-secure.co.jp/glossary/mssp

2023年08月28日

セキュリティインシデント 〜情報処理安全確保支援士講習 セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
オンライン講習.jpg

2024年度版 ALL IN ONE パーフェクトマスター 情報処理安全確保支援士 [ TAC株式会社(情報処理講座) ]

価格:3,080円
(2023/8/27 18:05時点)
感想(0件)



 本日も、情報処理安全確保支援士講習を受講しています。単元1で早速、既に解決済みではありますが、セキュリティインシデントの報告資料がありました。記憶に新しいところでは、CAPCOMなんかもその一例として紹介されていますが、本日は、国立研究開発法人産業技術総合研究所(以降「産総研」)で発生した。標的型攻撃を深掘りしてみたいと思います。

[どんな事例]
 産総研で発生したのは、標準的な標的型攻撃です。クラウド上のメールシステムから社内に、時間をかけて侵入し、同研究所の個人情報及び研究成果等を搾取したという事件です。

[事件の印象]
不正侵入.png

 まっ、多くの組織でみられるような体制で、その体制の脆弱性を利用され侵入された事件だと思いました。ただ、CSIRTを整備し、かつ、NISC、JPCERT/CCなどと密に連携しているという記述からは、ちょっと、想像できない事件です。

[今回の問題]
 資料の全ての情報を網羅するのは難しいので、対策から見た今回の事件について考察してみたいと思います。以下が、2017年に発生した事件対応です。


【応急的な対策】
❶メールシステムへのログイン
 メールシステムへのログインについては、外部からはVPN 接続を必須とする運用とし、さらに、内部ネットワークからログインする場合でも、一定期間ごとに二段階認証を求めるよう認証方式を強化した。
❷ファイアウォール内から外部へ接続するサーバ
 用途と通信先を精査し、必要性と安全が確認できないサーバ等は全て遮断した。
❸管理者パスワードの作成及び保管方法、並びにファイル暗号化時の鍵の作成方法及び保管方法
 有効なパスワードの設定方法、管理方法を検討し、情報基盤部で運用開始するとともに、外部委託業者に周知・徹底した。
❹外部委託業者の老朽化したサーバ
 老朽サーバは廃止し、最新の OS を載せた新規のサーバに交換した。
❺脆弱性が指摘された NAS使用を中止し、研究部門から回収した。
❻統合ネットワーク監視
 既に導入していた統合ネットワーク監視における SIEM の自動検知ルールを見直し、不正な通信が内部で発生した場合にもすぐに検知できるよう、内部通信の監視を強化した。
❼管理用ネットワーク内のサーバのアクセス制限
 全てのサーバにアクセス権限を設定するとともに、分離用のネットワーク機器を新たに追加し、これによって業務用ネットワークを研究用ネットワークから切り離した。

【今後取り組む抜本的対策】
⓫ 多要素認証等の強固な認証技術を、内部システムのうちイントラ基盤システム等の重要なシステムにも導入し、破られにくく、かつ攻撃が検知可能な認証システムを導入する。
⓬研究用ネットワークをセグメント分離できるネットワークを構築する。さらに、セグメント間の通信を制御できるようネットワーク構成を抜本的に見直す。
⓭侵入や拡散の即時検知のため、内外を通過するファイアウォールの監視、セグメント間の内部通信監視を導入する。
⓮重要システムにおいては、必要十分なログを蓄積し、不正なアクセスの分析・解析ができるシステムを導入する。また、侵入時にログ等の証跡が消去されないよう、ログの冗長化や遠隔保存等の仕組みを導入する。

出展元:国立研究開発法人 産業技術総合研究所


 以上の対策を取っているのですが、気になるのが、❶メールサーバーです。
 攻撃を受けた当時なのですが、このメールサーバーは外部(クラウド)にあるうえに、同メールサーバーへのログイン情報が内部ネットワークと常に連動していたのです。この内部ネットワークの認証情報との同期は、ハッキングされたらすぐに内部で自由にいろいろなリソースにアクセスできることを意味しています。
 ただ、リリース当初は、VPNにより内部ネットワークの位置づけで使用していたようです。しかし、利便性の向上からVPNを廃止しインターネット上に露出することにより発生しています。VPNの使い方とか、VPNの解除後の状態が想像通りか不明ですが、想像通りなら、誰か止める人はいなかったのでしょうか?
 IPAの午後の試験では、メールサーバーは、DMZ上にあるメールサーバーと、内部メールサーバーの2種類のサーバーがあるのが通常です。このような構成にする理由は、メールアドレスを直接攻撃されないためです。産総研では、認証サーバーとメールサーバがどう運用されていたか、詳細な記載がないので憶測でしか語れないのですが、多分、認証サーバーがインターネットに露出する形で運用されていたと想像されます。
 ペリメトリーセキュリティペリメーターセキュリティという観点からいうと、このような運用は考えにくいです。ただ、現在は、ゼロトラストが主流となっています。時代を先取りしていたということでしょうか?そうだとしても、ハッキングされている状態では、無理があったネットワーク構成だったということでしょう?

[他に気になる点]
 PDFのページとしては50ページあり、短い時間では読み切れていないかもしれませんが、読んで以上のようなことを感じました。見直し後のネットワークですが、多要素認証等の強固な認証技術を主要なシステムに導入するといった記述が気になりました。社内に複数のシステムがある場合、シングルサインオンを導入している企業もあるのに、本来の仕事に影響しないかちょっと、気になりました。
 あと、ログなどの監視体制を充実し、かつ、組織のネットワークをセグメントに分離するという記述がありますが、かなり、運用に負荷がかかる体制となっています。人員が確保できればいいのですが、このような場合導入しただけというケースも見てきたので、どうなっているのかな?っと気になりました。

[あとがき]
 攻撃から、搾取されている状況まで後日このような形で報告できる体制になっているのは、非常に驚きました。今まで私が務めた会社では難しいと感じたからですが・・・。まっ、国立の研究機関ですから当然ですか(笑)?
 結果論でいうのは簡単なのですが、日々の多忙な業務をこなしたうえで、体制を作る難しさは非常に分かります。今回のケースからいろいろなことを学ぶことができ、事件をこのような形で報告していただき大変感謝しています。
 今後のシステム開発に役立てたいと思います。

 では、また!

■産総研の情報システムに対する不正なアクセスに関する報告(国立研究開発法人 産業技術総合研究所)
https://www.aist.go.jp/pdf/aist_j/topics/to2018/to20180720/20180720aist.pdf 

2023年08月27日

情報処理安全確保支援士講習 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
勉強.jpg
 情報処理安全確保支援士の講習を受けています。

2024年度版 ALL IN ONE パーフェクトマスター 情報処理安全確保支援士 [ TAC株式会社(情報処理講座) ]

価格:3,080円
(2023/8/27 18:05時点)
感想(0件)



この講習を受けるに際し、私がしていること・・・。それは、各ページのハードコピーの取得と、ページにあるリンクから資料をダウンロードすること・・・。ダウンロードできないページは、今年は、URLのみを取得するようにしています。他にもやることもあり、時間がありませんからね・・・。
 去年をそのうえ、各講義の資料を一太郎で図式化してまとめていました。今年は、ちょっと、そこまでできそうもありません。

[今年資料をまとめていて気づいたこと]
 去年は、ダウンロードした資料の量の多さから、その容量を報告していましたが、今年は、以上のような作業状況なので、ダウンロードする資料の量も少なく講義の準備は短時間で済みそうです。
 作業をほぼ終えようとしている中、気づいたことがありました。去年は、便利なツールや資料があったことに気づくことができたのですが、今年はほとんどない・・・・。そういえば、この資料は今年はどう書いてあるんだろうとか見るのですが、今年の講義にはその記述がありません。去年、無駄かもしれないと思いながら、焦燥感を漂わせて行っていた作業は、無駄でなかったことが今年分かりました。
 無駄でないと分かっても、いずれかのタイミングで削除しなくてはいけません。去年のダウンロードした資料は、700M弱、で今年は、400M弱になりそうです。まっ、最悪、Blue-rayにでもやきましょうか?

[内容的にはどうなの?]
 最初の書き出しの部分は、情報処理安全確保支援士に期待される役割と知識について、社会の状況や組織との関係を交えながら書かれています。まだ、単元1を読んでいる最中なので、何とも言えませんが、特段珍しい内容ではなく、単元1は、資料がきちんとそろっていることを確認したうえで、資料を読み、単元の試験を受けて終えることができそうです。
 昨年、単元試験は、全ての資料を読み込み、一太郎に資料の内容をまとめたうえで、受けたのですが、今年は読み終えた段階で受けます。昨年は初めてということもあり、かつ、試験を受けた人が難しかったとか言っている人がいたので、そうしたのですが、まっ、そこまでではないかなって感じです。
 試験問題は単元ごとに5問ずつ出題され、5問すべて正解しなければいけません。1問でも間違えれば、再試験です。その再試験も、受けた問題がそのまま出題されるわけではなく、シャッフルされて出題され、ひどい時は、5問すべて新たな問題になっている場合もあります。試験問題が難しかったと話している人は、多分その出題の仕方が難しかったと言っているのだと思いますが、問題の数は無限にあるわけではないでしょう?何回かやっていれば、合格すると思われます。これから、初めて講習を受ける人がいましたら、気軽に試験を受けてください。

[あとがき]
 中小企業診断士の二次試験の勉強と、情報処理安全確保支援士の講習で、プログラム開発がおろそかな状況です。やっと、体が復調してきたので、そっちも頑張っていきたいと思います。
 具合が悪い理由は、以前、寝不足だと話していましたが、風邪だったようです。クーラーの温度を上げ、寝るとき気を付けるようにしたら、復調してきました。クーラーの温度の下げすぎには気を付けてください

 では、また!

2023年08月24日

福島原発ALPS処理水放出開始 〜Coffee Time〜

 こんにちは!
 ナビゲータのEVEです。
原発.jpg
 ちょっと、体調がすぐれない日々が続いています。ただ、今日が一番体調がいいようです。今まで、寝不足だとかいっていましたが、どうも、風邪のせいだと結論に達しました。冬の風邪と違い、夏風邪が治りが悪いです。治ってきたと思っても、エアコンの冷気を浴びて、再度悪化すると言うことを繰り返している状況だと分析しています。熱帯夜が続いているため、エアコンを止めれないしどうしていいのか分からない状態です。何か治すのにいい方法がありましたら、教えて下さい。

[福島原発ALPS処理水放出開始]
 福島原発ALPS処理水放出が本日13:00から開始されました。決まってから放出が早かったですね・・・。
 この報道を受けて、中国は日本からの海産物の輸入の全面禁止を決めています。人々が気分的に食べるのが嫌になったというなら分かるのですが、国として全面的に禁止するのは納得できません。

[モノは考えよう]
 中国では、つい最近まで野菜は洗剤で洗って食べていたって知っていますか?ここ数年はあまり聞いていませんが、中国国内は、工業用排水による汚染が進んでいるという状況について聞いています。ただ、その野菜については、何の検査もしていません。そのような状況から考えると、いろいろな検査を経て出荷される日本の海産物はかなり安全だと言えます。

[日本でもかつてはあった]
 犬王という映画を見ようと、Amazon Primeのリンクタグを押下すると、「MINAMATA−ミナマタ−」という映画を見つけてしまいました。今中国の公害について触れましたが、かつては、日本にも同様な公害がありました。それについて、本日は、Bingで調べてみました。

 1950年代後半から1970年代の高度経済成長期において、工場などから発生した有害物質(公害)によって公害病が引き起こされました。四大公害病とは、以下の4つのことをいいます。

❶イタイイタイ病
❷水俣病
❸四日市ぜんそく
❹新潟水俣病(第二水俣病)

それぞれの公害病について、詳しい発生年月は以下の通りです。

❶イタイイタイ病: 1910年代から1970年代前半に発生しました 。
❷水俣病: 1953年頃に発生しました(正式に確認されたのは1956年です) 。
❸四日市ぜんそく: 1959年頃に発生しました 。
❹新潟水俣病(第二水俣病): 1965年に発生しました 。

【情報提供元】
1. nihonsi-jiten.com
2. geography-trip.com
3. ja.wikipedia.org
4. ja.wikipedia.org


 以上のような公害発生時日本では、一切検査することなく汚染した魚などを販売し被害を拡大させました。そのような状況を考えれば、他国、他地域で販売されている食材より、日本で検査を受けた食材はかなり安心であるといえます。

[トレーサビリティ]
 2000年に入ると、忘れかけている人もいるかもしれませんが、狂牛病という病気が話題になりました。イギリス発祥のこの病気は、牛肉をたべると人間の脳がスポンジ状になるという病気でした。これは、病気になった牛の肉を健康な牛に食べさせることにより発生したのですが、当時、企業による牛肉偽装事件の発生も相次ぎ、畜産業や精肉店などの食肉関連産業、食品加工業や外食産業、スーパーマーケットなどの流通業、そして一般消費者を巻き込んで、食の安全が問われた一大問題となりました。
 これによって発達したのが、トレーサビリティです。どこで、誰が生産したのかトレースできる仕組みです。近年食の安全について、全世界で関心を集めていますが、そのシステムは完全ではありません。

[あとがき]
 今回の、ALPS処理水の排出は非常に残念なことではありますが、きちんと検査をして出荷しているという状況から、悲観する必要はありません。以上のようなことを考慮に入れた場合、いろいろな販売の方法があります。
 なお、以前のブログで汚染水という言葉を使用していますが、そのままにしておきます。その当時は、そのような報道であったということです。

 では、また!

追伸・・・。
 MINAMATA−ミナマタ−(字幕版)ですが、まだ見ていません。後日拝見させていただきます。

■MINAMATA−ミナマタ−(字幕版)
https://www.amazon.co.jp/gp/video/detail/B09QFT2SD9/ref=atv_hm_hom_c_bCxerx_HS1ea34a_1_1?jic=16%7CCgNhbGwSA2FsbA%3D%3D

■福島原発冷却水の海への放出 [Coffee Time](2023年7月5日)
https://fanblogs.jp/bahamuteve/archive/346/0

2023年08月23日

テーブルのUNLOCKの方法は? 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
PHPProgram.png
 Prototype EVEなのですが、まだログインできていません。その言い訳を本日はさせていただきます。

[UNLOCK]
 テーブルのUNLOCKができません。既存のロジックではエラーになるのです。試験の時はエラーになった記憶はないのですが・・・。そもそもここのロジック試験したかどうか怪しい・・・。mysqlの拡張モジュールからPDOへ書き換えた形跡はあります。もしかしたら、コピペしただけだったかもしれません。
 そんなことを調べていても仕方がないので、ChatGPTに、データベース(MYSQL)のLOCKの解除方法について聞いてみました。



<?php
// データベース接続情報
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

// データベース接続
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "データベース接続エラー: " . $e->getMessage();
die();
}

// ロックの取得
$pdo->beginTransaction(); // トランザクション開始
$pdo->exec("LOCK TABLES your_table WRITE"); // ロックを取得

// ロックされたデータの操作(ここで必要な処理を実行)

// ロック解除
$pdo->exec("UNLOCK TABLES"); // ロック解除
$pdo->commit(); // トランザクションをコミットして確定

// データベース接続を閉じる
$pdo = null;
?>




これは、ChatGPTからもらったソースなのですが、そのソースの赤字の部分だけ頂いて、Prototype EVEに移植してみました。これでもうまくいかない・・・。LOCKではエラーにならないのですが、なぜ???追加で、Bingにも同じ質問をしましたが、同じ解答でした。
 エラーつぶしてからになりそうですが、ChatGPTのソースが現在の環境で動作するかどうかの試験が必要なようです。動作するなら、Prototype EVEの問題だし、そうでなければ、そのそもChatGPTのロジックが使えないと言うことになります。予想外のところで時間が取られています。

[継承先(子)から継承元(親)のPrivate変数が見えない]
 子にはない親のPrivate変数の内容を参照するのですが、思った内容に変更されていません。おかしいな〜っていうことで、イベント発生ポイントからプログラムを順におって内容を確認したのですが、やらかしていたようです。

 PHPでは、子から親のPrivate変数が見えません。

それを知っているにもかかわらず、子から親のPrivate変数へシャドーコピーしているロジックがありました。ただ、そのロジックはエラーにはなりません。そのロジックが無効になり、値が変更されないだけなのです。ロジックが長い上に、それ以外にもエラーがたくさん出ている現状なので、時間がかかりました。
 修正方法としては、親にPrivate変数へ値を設定するメソッド(setter)を新規追加し問題は解決されています(参照する場合はgetterを利用します)


[あとがき]
 大きなバグは以上の2点でしょうか?他は、単純なエラーです。エラーもしくはワーニングの箇所が特定できればすぐに修正できるモノばかりです。
 これから、本日もログイン試験を実施しますが、まず最初に現在出力されている、エラーもしくは、ワーニングをつぶすことに注視したいと思います。前回、PHP5とPHP8は相性がよくエラーもしくはワーニングがあまり出ないという話をしましたが、勘違いだったかもしれません。

 では、また!!!

2023年08月20日

ログイン試験、そして。。。 〜システム開発研究室・セキュリティ研究室〜

 こんにちは!
 ナビゲータのEVEです。

 今日から、PHP8で動作する、Prototype EVEへのログイン試験を実施しています。
 試験の最初っから、使用していないと思っていた関数が利用していることが判明したり、躓いてはいますが、まっ、想定の範囲内です。
 PHP4からPHP5へのバージョンアップの際には、いろいろなところで、エラーまたはワーニングが表示されましたが、修正時のバグを除けば、本日のバージョンアップのワーニングは、1件だけでした。2段またぎのバージョンアップですが、思ったより、PHP5とPHP8は互換性がいいようです。まっ、まだ試験をはじめたばかりですが(笑)
 どんな、ワーニングだったかというと


//PHP5ではワーニングになっていないロジック
//変数定義

$a = "";

//手続き部
$a[0] = "test";


 まっ、ロジックが明らかにおかしいのですが、PHP5ではワーニングになっていませんでした。そして、修正後は、

//PHP8にて修正
//変数定義

$a = array();

//手続き部
$a[0] = "test";


って感じになっています。まっ、普通PHPでプログラミングするなら修正後のロジックですよね?昔、勢いのまま製造していたので、おかしいロジックを作り、そのまま残していたのだと思います。
 まだ、ログイン試験を始めたばかりなので、今後エラーまたはワーニングが出る可能性がありますが、時間が許す限り報告したいと思います。私みたいな人いるかもしれませんからね(笑)。参考にできるところがありましたら、御利用下さい。

[情報処理安全確保支援士講習]
セミナー.jpg
 今年も、情報処理安全確保支援士講習の時期がやってきました。去年より、受講が遅れています。2023年9月30日期限ですが、できれば、今週中に終えたいです。まっ、希望ですが・・・。
 そして、今回の講習で重要とされる内容については、かいつまんで御紹介したいと思います。また、IPAも著作権がかなりうるさそうなので、私の意訳がかなり入りますが・・・?ご容赦ください。

 本日はこの辺で!

 では、また!

2023年08月19日

2023年8月18日金曜日の憂鬱 〜システム開発研究室・株式市場研究室〜


 こんにちは!
 ナビゲータのEVEです。
不況.jpg

 本日から、ログイン試験に入ります。昨日気づいたのですが、残った関数がバッチ処理で利用されているモノでした。PHPでは、バッチ処理においてセッションは利用できません。それは、今まで1人で作っていた実体験からなのですが、その実体験が本当なのかどうか調べてみたくなりました。そんな時には、今ならChatGPTがあります。以下がChatGPTからの回答です。


 PHPのバッチ処理においてもセッションは利用することができますが、注意が必要です。セッションは通常、ウェブアプリケーションのユーザーセッション管理に使用される機構ですが、バッチ処理では異なる環境やコンテキストで実行されるため、いくつかの考慮事項があります。

セッションをバッチ処理で利用する際の注意点:

❶セッションの開始と終了
 ウェブアプリケーションとは異なり、バッチ処理ではセッションが自動的に開始されない場合があります。セッションを使用する前に session_start() 関数を呼び出してセッションを開始する必要があります。また、セッションを使用後に session_write_close() 関数を呼び出してセッションを終了することが推奨されます。
❷セッションの保存場所
 バッチ処理はコマンドラインで実行されることが多く、ウェブサーバーとは異なるコンテキストで実行される場合があります。そのため、セッションの保存場所を適切に設定する必要があります。セッションデータをファイルに保存する場合は、保存ディレクトリのパーミッションに注意が必要です。
❸セッションの有効期限
 セッションは通常、一定期間の無操作状態が続くと自動的に破棄されるように設定されています。バッチ処理では長時間実行される場合があり、セッションの有効期限を適切に設定することが重要です。
❹セッションのロック
 複数のプロセスが同時にセッションを操作する可能性がある場合、セッションデータの競合やロックの問題に注意する必要があります。

 総じて言えることは、バッチ処理においてセッションを利用する場合は、ウェブアプリケーションとは異なるコンテキストや要件を考慮し、適切な設定や処理を行う必要があるということです。


使えるんだ・・・。以前はどうかなっていうことで、PHP5の時はどうか聞いてみたのですが、使えると回答がありました・・・。使い方が悪かったようです・・・。
 ただ、今から使えるようにいろいろいじるのはいやなので、ここでPrototype EVEの修正はひとまずやめ、ログインの試験に入ることにしました。バッチ処理はログインには関係ありませんし、ログイン後、最初に作るシステムはバッチ処理ですが、EVEシステムとして製造する予定です。まっ、そろそろ、修正に飽きてきましたし、ここまでにしたいと思います。 ログイン試験の結果については、ちょっと、お待ちください。

[中国恒大集団がNYで破産申請]
 今週に入ってから、日本の株式市場が急落しています。その原因はどうも、中国不動産事情によるものらしいです。


[北京 11日 ロイター] - 中国は、地方政府のインフラ投資会社である融資平台(LGFV)の債務などバランスシートに掲載されない債務を返済するために地方政府が債券発行を通じて約1兆元(1400億ドル)を調達することを認めると、米ブルームバーグ・ニュースが複数の関係筋の話として11日に報じた。

出展元:ロイター

 もうちょっと詳しく話すと、融資平台という融資のプラットフォームに相当する会社に1,400億ドル(日本円にして1,300兆円?)の負債があり、同負債の1.5%にあたる20兆円を地方政府が、引き受けなければならない事態になりそうだとの報道です。

 このような危険な話ですが、かなり前からあって、以上の話は不動産限定ですが、金融機関も似たような状態と認識しています。
 このような状況に対して、中国政府は、改革を進めているが時間がかかるだろうと話しています。

 そのような報道があった1週間後の2023年8月18日に、48兆円の負債を抱えて恒大集団の倒産です。中国政府は助けようという態度は一切見せておらず、インターネット上では、リーマン(負債総額60兆円)に対するアメリカ政府の対応と同じだといっているサイトもあります。
 ただ、この報道を受けて、NW株式市場にはそよ風が吹いています。織り込み済みと言うことでしょうか?ただ、報道があった数日後に暴落すると言うこともあります。

 今後注視が必要です。

 では、また!

■中国、隠れ債務返済へ地方政府に1400億ドルの債券発行認める=報道(ロイター)
https://jp.reuters.com/article/china-debt-lgfv-idJPKBN2ZM0CE

■恒大集団が米国で破産申請、中国経済への影響は? 仮想通貨・金融市場も警戒
https://coinpost.jp/?p=477865


2023年08月16日

システム開発スケジュール 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラムコード.jpg
 本日は、Prototype EVEを修正することを中心に一日を過ごしました。ただ、中小企業診断士の試験以降微妙に頭痛があって、やすみやすみの状況です。前ブログで全快したっといったような話をしましたが、もうちょっと時間がかかりそうです。
 現在は、頭痛薬とコーヒーをがぶ飲みすることにより、普通の生活を送ることができるようになり、かつ、週末までにPrototype EVEの修正が完了できそうだというレベルまできています。

[構成管理システム]
 旧ツイッターでつぶやきましたが、昨日の予定に構成管理システムを含めるのを忘れました。実は、EVEシステムでは構成管理システムがかなり重要な位置をしめます。プログラムは当然として、データベース、テーブル、カラムといった、システムで使用するすべてを構成管理システムで管理しようとしています。
 これにより、システム的な矛盾を見つけ出し、攻撃等を受けている場合、その攻撃を瞬時に見つけることを目的としています。
 加えて、今までの公私ともに製造していたシステムは、必ずといっていいぐらい文書を作成してきました。それは、二度手間、三度手間を生み、その手間によりバグを発生しさせていたという部分は否めません。そのため、本来文書で作るその情報がそのままシステムで管理できるようになれば、その問題は解決できるでしょう?製造期間を2カ月弱を予定していますが、多分ですが、もっとかかります。この予定は、中小企業診断士の試験との関係で、このようなスケジュールとなっています。今年中に受かっていれば、そのような配慮はいらないのですが・・・。

[ログ管理システム]
 ログ管理ステムも追加させていただきました。今までは、ログをあまり見たことがなかったのですが、公開するといった段階で、必要性を感じています。というのは、メールシステムを公開しようとしたとき、メールシステムにログインしようと世界のいろいろなところからアクセスしてきているのを確認しているのです。手法としては、多分どこかのサイトから窃取してきたユーザIDとパスワードでログインするような試みです。ログインは成功していないので、放置状態ですが、そのような行為が発生し、ログインが成功した場合警告を発信する、またはそのような行為を行っているIPを制限するなどの機能を追加しないと、他の人に利用してもらうのは難しいでしょう?

[あとがき]
 性格として他人の真似をするのはいやなタイプなので、今まで見たことがないシステムが製造できたら自己満足できると思います。ただ、使い勝手とか独りよがりにならないようにしないといけないな〜っとも考えています。どうしましょうか?

 では、また!