FidonetサイトのNode.js:定期刊行物の自動化

一部のfidoshnikは、特定のFidonetエコー会議で数日ごとに同じメッセージ(同じテキストファイル)を定期的に発行する必要に直面しています。



たとえば、モデレーター(または職務の分配に応じてモデレーター)は、週に1〜2回、自分のルールをエコー会議入れる必要があります。 少し異なる(しかし、まだ似ている)例は、いくつかのFAQのサポートを引き継ぎ、テーマに関連する1つ以上のエコー会議で公開しているfidosです。 (Fidonet.Historyのエコーでは、FAQに質問と回答で表されたFidonetの独特の履歴が含まれています。SU.IP.Point-SU.FidoTechで新しいポイントを獲得しているノードのリストのエコーで表されています。特定のソフトウェア製品専用のエコー会議では、FAQで構成方法などが説明されています。



ノード(またはポイント)が同じコンピューターで継続的に実行されている場合、そのような公開は単純で巧妙な方法で自動化されます:ファイルをcronデーモン (UNIX系システム)または他のシステムの類似物のタスクリストに公開します。



Fidonetシステムが同じコンピューターで動作しない場合(結局、あるワークステーションから別のワークステーションにFidonetソフトウェアのセットをディスケットに一度ドラッグしたが、最近はフラッシュドライブにドラッグするfidotniksがいます)または少なくとも連続して動作しません(しかしフィードの送信、受信、読み取りを希望する場合は、fidoshnikによって時々起動されます)、出版物の規則性はサービス(デーモン)ではなく、それ以降に何日も経過したかどうかをチェックする単純なプログラムによって提供されます それを公開vdrugoryad時間であることを保証するために、必要に応じて最後のファイルが投稿されました。



今日は、Node.jsエンジンがこのタスクをどのよう実現できるかを見ていきます。



まず、この問題の重要な部分はすでに解決されていることに注意してください。



ファイルを公開するには、 hpt postコマンドをHuskyソフトウェアスイートからHPT エコープロセッサに与えるだけです。 (同様のコマンドは、他の一般的なFidonetエコープロセッサにも存在します。)



そのようなパブリケーションの日付と時刻を保存(記憶)するには、ファイルに関連してtouchコマンドを与え、最後の変更の日付を更新するだけで十分です。 UNIXライクなオペレーティングシステムには通常、このコマンドが既製の形式で含まれており、Windowsの場合はSourceForgeのunxutilsサイトからダウンロードできます。



したがって、反対のタスクを実行するチームのみを構成します。コマンドラインは、指定されたファイルの経過日数を読み取り、特定の経過時間と比較できます。 この目的のために、 Node.jsには次のJavaScript 使用します



var fs = require('fs'); var clog = console.log; if (process.argv.length < 3) { clog('Usage:'); clog(' node agedays "filename" [N]'); clog(''); clog('Parameters:'); clog(' filename -- name of the file which age (in days) is checked'); clog(' N (optional) -- if file is N days old (or older),'); clog(' errorlevel 1 is set'); } else if (process.argv.length == 3) { try { var msec = (new Date()).getTime() - fs.statSync(process.argv[2]).mtime.getTime(); var days = msec / 1000 / 60 / 60 / 24; clog('File "' + process.argv[2] + '" is ' + days + ' days old.'); } catch(e) { clog('File "' + process.argv[2] + '" cannot be opened.'); } } else { try { var msec = (new Date()).getTime() - fs.statSync(process.argv[2]).mtime.getTime(); var days = msec / 1000 / 60 / 60 / 24; if( days > (+process.argv[3]) ) { process.exit(1); } else { process.exit(0); } } catch(e) { clog('File "' + process.argv[2] + '" cannot be opened.'); process.exit(2); } }
      
      





このスクリプトを保存し、 agedays.jsという名前を付けたので 、スクリプトを実行してファイルの経過時間を調べ 、この経過時間を所定の数値と比較する機会を得ます。 次に、areas.cfgファイルに対するWindowsでのこのようなアクションの例を示します。



[年齢のスクリーンショット]



このようなツールを(エコープロセッサtouchに以前使用できた2つに追加すると、最終的にバッチファイル(オペレーティングシステムコマンドを含むファイル)を作成できます。 バッチファイルは、1つ以上のファイルをFidonetで定期的に発行するタスクを実行します。 以下は、Windowsで私のサイトで使用されるバッチファイルの例です。



 @echo off :checkmonth node agedays NodePost\monthly._flag 30 if errorlevel 1 goto monthly goto checkweek :monthly \utils\unxutils\touch NodePost\monthly._flag hpt post -nf "Mithgol's Wishlist Robot" -s "   " -e "Ru.GoldEd" -z "Mithgol's NodePost" -o "FGHI Global Headlight Ignited" -f loc NodePost\GED_Wish.txt goto checkweek :checkweek node agedays NodePost\weekly._flag 7 if errorlevel 1 goto weekly goto end :weekly \utils\unxutils\touch NodePost\weekly._flag hpt post -nf "Moderator of Ru.Fidonet.Yo" -s "*** Rules" -e "Ru.Fidonet.Yo" -z "Mithgol's NodePost" -o "FGHI Global Headlight Ignited" -f loc NodePost\YoRulez.txt hpt post -nf "Moderator of Ru.Russophobia" -s "*** Rules" -e "Ru.Russophobia" -z "Mithgol's NodePost" -o "FGHI Global Headlight Ignited" -f loc NodePost\PhobRule.txt hpt post -nf "Moderator of Ru.Russian.1916" -s "*** Rules" -e "Ru.Russian.1916" -z "Mithgol's NodePost" -o "FGHI Global Headlight Ignited" -f loc NodePost\rule1916.txt goto end :end
      
      





このようなバッチファイル(この例ではNodePost.cmdと呼ばれます )は 、HPTと同じディレクトリに配置してそこから実行するのに最も適しています。これにより、 hpt postコマンドは作業ディレクトリでHPT構成ファイル見つけることができます。 バッチファイルによって発行されたファイルをNodePostというサブディレクトリに配置しました。 フラグファイルもそこにあり、その唯一の目的はtouchコマンドタッチし、 agedaysコマンドでチェックすることです



ソースコードを見ると、このバッチファイルは、Ru.GoldEDの1つのファイルの毎月(30日ごと)の発行と、司会者に代わって3つのFidonetエコー会議のルールを持つ3つのファイルの毎週(7日ごと)の配布を提供しています( ...のモデレーター。)。



「hpt post」という単語で始まるコマンドラインは十分に長く、Habrahabrに表示されるときにおそらく自動的に折り返されますが、実際にはそのような各コマンドは1行で記述されます。 (このような転送後に隣のチームとマージしないように、各「hpt post」コマンドの上下に空行を1つ追加しました。) 「-nf」パラメーターの後に、送信者の名前が書き込まれ、その下にファイルがエコー会議に送信されます、および「-e」パラメータの-このエコー会議のエコータグ。 パラメータ「-s」、 - z および「-o」の後に、目的のメッセージヘッダー、そのティアラインおよび発信元が記録されます。 「-f loc」パラメータは、メッセージが「ローカル」と見なされ(このFidonetステーションで正確に作成され)、その後エコープロセッサによって他のFidonetノードへの発信としてパックされるために絶対に必要です。 最後のパラメーターは、公開されるファイルの名前です。



(一般的なHPTの代わりにFidonetで別のエコープロセッサを使用する場合、このすべての情報により、 「hpt post」をソフトウェアに適したコマンドの呼び出しに簡単に置き換えることができます。)



上記のソリューションのほとんどの要素(Node.jsエンジン、agedaysスクリプト、タッチコマンド、HPTエコープロセッサ)もマルチシステム (クロスプラットフォーム)であるため、Windowsから別のオペレーティングシステムに転送する場合は、バッチファイルを書き換えるだけです。



スクリプトagesdays.js 無料のMITライセンスの下でGithubに投稿しました。これ私の話は終わりです



All Articles