~~NOTOC~~
---json
{
"canonical":"projects:big-model",
"title":"パソコン通信ホストプログラム BIG-Model を Perl で作ってみます プロジェクトページ",
"description":"パソコン通信ホストプログラム BIG-Model を Perl で作ってみます プロジェクトページ"
}
---
\\
====== BIG-Model ======
\\
BIG-Model はパソコン通信の黄金期(1980年代頃)に普及したパソコン通信ホストプログラムです。\\
画像検索すると海外のモデルさんとかが出るのですが、ここで扱う題材とは全く関係ありません。\\
詳細は発売元の[[http://www.netcomplex.co.jp/html/bm.html|ここ]]で紹介されていたり、用語辞典の[[https://www.wdic.org/w/TECH/BIG-MODEL|ここ]]あたりで解説されています。\\
{{:projects:big-model:chat.png?nolink}}
\\
===== 概要 =====
パソコン通信ホストプログラム「 BIG-Model 」を Perl で作ってみます。\\
元々は「 BIG-Model を node.js で作ってみる」ために Perl で作成した動作検証用のサンプルプログラムをパッケージ化するためのプロジェクトとして始まりましたが、のちに、このサンプルプログラムからコアシステムとアプリケーションに分離することになり、コアシステムは BBS.pm 、 BIG-Model はアプリケーションとしてそれぞれ独立して製作することになりました。\\
このページでは 製作物の頒布や製作でまとめた関連資料などを公開しています。\\
このコンテンツは BIG-Model アプリケーションのホストシステム管理者(アドミニストレータ)、ホストシステム利用者(ユーザ)、BIG-Modelアプリケーションの開発者(デベロッパ)を対象としています。\\
サーバアプリケーション開発者向けコンテンツは[[projects:bbs_pm:|BBS.pm プロジェクトページ]]をご覧ください。
\\
===== お知らせ =====
{{changes>ns=projects:big-model:blog&excludedpages=.:blog:start&count=5&type=create,edit,minor&render=list(nosummary)}}
全ての記録は[[projects:big-model:blog:|こちら]]をご覧ください。
\\
===== これまでの様子 =====
もともとは、Nifty-Serveの復活がきっかけ。
しかし、このときBIG-Modelを作る構想はなく、クローンの候補として、NIFTY-Serve、日経MIX、WWIVを挙げたが、NIFTYはすでに復活していたし、WWIVは今でも継続中(ダウンロードして運用も可能)だったので採用しなかった。日経MIXに至っては資料が全く入手できなかったので採用しなかった。そんな中、ヤフオクでBIG-Modelが出品されていて、入札し落札。技術的な資料も十分揃っていたので採用の決め手となった。
NIFTY-Serveがnode.jsで作られていたので、解説本を買って練習がてらチャットを作成したが、いまいちよく分からなくモチベーションも上がらなかったのでPerlで作ることにした。
ソケットの原理もあまりよく分かってなかったのでネットで調べたりハードディスクを漁るうち、10年以上前にBrian(Wired/webmonkey)が解説していた[[https://web.archive.org/web/20041206034034/http://webmonkey.wired.com:80/webmonkey/97/18/index2a.html?tw=programming|チャットプログラム]]のキャッシュを発見。(←原点)
Perl式オブジェクト指向プログラミングの練習がてら、Brianのチャットプログラムをモジュール化。そこからユーザ登録や削除など管理ができるようにデータベースをつなげたりしてユーザ管理モジュールを作成。
すでにnode.jsのことは遙か彼方。
落札したBIG-Modelのマニュアルから仕様を確認、所有の実機がすでにジャンク状態なのでエミュレータで動かしながら確認。
コールバック、ハンドリングなどよく分からない仕組みも盛り込みながら、データの入出力とソケットの処理が完成。
チャットはモジュールとして完成していたので、メニュー、メール、掲示板などほとんどをモジュール化。
BIG-Modelの大半の処理のモジュール化を完了。時代にそぐわないような機能を改良している最中で開発を一時停止。
しばらくしてまた開発を再開。モデムエミュレート(ソフトフロー制御とか転送速度調整とか)ができたらと思いながら、コードを見渡してみると、拡張の余地がないほどガチガチに作っていたようで、拡張性を高めるため、システムを一から見直す。
新システムの見直し完了。コアシステムはBBS.pmとして生まれ変わる。従来はコアシステムに不足している処理をユーティリティに書いて賄っていたため、それらを全て新たなモジュールとして補い、コアシステムとユーティリティが干渉しないようにした(要するにユーティリティを全くロードしなくてもコアシステムのみでシステムを正常に動作可能)。
また、コアのメンテナンスが容易になったことやユーティリティも簡単に作成できるなどのメリットを得る。
並行して、予定していた汎用メッセージのgettext化(多言語化ではないがマルチメニュー化が実現したので多言語化も実現可能)とアクセス権限は実機を再検証し忠実な権限ルールに修正。
転職、引っ越し、いろいろ訳あって、1年ほど活動停止。仕事主体で、活動はおろか、余暇活動がほとんどできなかった。
コロナウイルスの影響で地元に戻ることになり活動を再開。しかし、リポジトリの更新途中で広範囲に変更、それに伴う問題を解決しないまま活動を停止してしまったため、復活はほぼ壊滅的。リポジトリから再開しようと思ったがこれも正常に動作せず、断念。
時間を費やして、構想メモやサンプルなど、分別しながら廃棄。整理、Bitbucketのリポジトリと統合しながら、新機能の追加を盛り込み構築中。
モデムエミュレーションの速度調節機能は何度か断念したものの、実装完了。代償として、送信手法が非常に煩わしくなる。フロー制御はアプリケーション側の処理と割り切ったので、BBS.pmは完結。
プロジェクトに問い合わせがあり回答。問題の焦点が違ったが、自分なりに考えて回答。1人でも興味を持って下さる方が、モチベーションを維持向上することを実感。どうもありがとう。前述、正常動作するパッケージやリポジトリはいまのところ一つもないため、完全動作するパッケージのリリースを目標に活動中。せめても動いている様子が見えないと共感も批判もできないよね。
かなり進んだのでドキュメント作成をちょっぴり再開。動作の様子をビデオにしてtwitterで公開。
運用しているDokuikiで不具合が発生。レンタルサーバのphpがバージョンアップしたため、古いバージョンのDokuwikiが通用しなくなったことが原因。コンテンツのデータは残っているので、カレントバージョンでシステムを立て直すことに。
毎日終日灼熱地獄。
\\
===== これからの予定 =====
* モデムエミュレーションの実装を予定しているが、まだ未着手。当時はホストのモデムドライバでデータの制御をしていたが、それをホストプログラムに組み込む。メリットは表示スピードにウェイトをかけることで流し読みが可能になったり、懐かしさが倍増するとか。断念しました。\\
* モデムエミュレーションの実装は完了しましたが、一部不具合が出ているようでしばらく様子見です。\\
* 通信プロトコルの導入。なんか気になるので入れる予定。実用的を考慮してZMODEM。\\
* SSHの標準対応は当然なのはわかるけど、いまはその段階でないのは心得ている。\\
* node.jsで作ってみることは、忘れていない。\\
\\
===== ちょっと興味が出ました? =====
* 焦らず、急かさず、ゆる~くお付き合いください。
* ご協力いただける方を募集しています。
* BIG-Model/98(バージョン4.0c以降・回線数は2回線(Personal)以上)を所有している方で、マニュアルやソフトを譲っていただけるか貸与していただける方がおられましたらご連絡ください(有償での提供をご希望の場合は相談させてください)。
* BBSの過去ログ(コンテンツの内容ではなく、操作の挙動が現れているログ)をご提供いただける方がおられましたらご連絡ください。ニフティサーブ、PC-VAN、ASCIINET、サンデーネット(TownBBS)あたりは、特に希望します。
* アドバイス、アイデアなどがありましたらコメントに追加してくださるとフォローしますので、よろしくお願いします。
\\
===== ダウンロード・リポジトリ =====
[[https://bitbucket.org/naoit0/big-model/|「Perl で BIG-Model を作ってみる」リポジトリページ]]
\\
===== マニュアル =====
* [[.:manual:|マニュアル]]
* [[.:manual:admin:|ホストシステム管理者(アドミニストレータ)マニュアル]]
* [[.:manual:user:|ホストシステム利用者(ユーザ)マニュアル]]
* [[.:manual:devel:|ホストシステム開発者(デベロッパ)マニュアル]]
\\
===== コラム =====
* [[.:column:|コラム]]
\\
===== パッケージ構成 =====
* [[.:docs:db:|DB (データベースアクセスモジュール)]]
* [[.:docs:system:|System (システムモジュール)]]
* [[.:docs:generic:|Generic (汎用モジュール)]]
* [[.:docs:utilities:|Utilities (ユーティリティモジュール)]]