「エラー」を含む日記 RSS

はてなキーワード: エラーとは

2022-08-03

お前らカルト宗教叩きまくってるけどパワプロの栄冠ナインではカルト宗教高校が最強だから

根暗オカルトマニアの生徒を集め、元はやんちゃで元気いっぱいな生徒も占い師に頼んで洗脳させて根暗オカルトマニア転向させて、

チーム一丸となって相手選手エラーしまくるように呪いをかけるのが最強なんだから

anond:20220803122025

 

ここら辺はRustの用途上ああなるのはやむを得ない感じがあるけど

 

 

 

これはRustの用途から考えてマジでうんちだよね

Rustの嫌いなところ

2022-08-02

我が家食卓には、大きな深皿が置いてあり

そこにせんべいやらチョコレートやらビスケットやらがのっかっている

これらの菓子家族めいめいに補充し、めいめいに消費される

しばらく前からこの皿に「あわだま」という飴が加わるようになった

名前の通り炭酸を溶け込ませた飴玉である

誰が補充しているのかは知らぬ

先日、そのあわだまを食べようと個装の袋を破くと、中から2つの飴玉が出てきた

鶏卵双子は、おそらく両手の指の数より多く見た覚えがあるが、飴玉の双子は初めて見た

これは企画されたギミックなのか、製造・包装時のエラーなのか

得した気分であるが、多分、個装をまとめる袋全体では同じ重さなのだろうな

Teamsに不具合が出ているようだけど、全国的にはあまりニュースになっていない理由

不具合理由:Teamsプロキシ経由のアクセスを非推奨だから

いままではプロキシ経由でもTeamsを使えてたけど、今月に入ってからMSの方で使えなくしているっぽい

なので、一定以上の規模の会社だとプロキシサーバを使っていることが多いけどその会社はTeamsをほぼ使えなくなってる

同様の理由OneDriveや365の認証エラーになることが多い

プロキシじゃなくてファイアウォール使ってたところは大丈夫なんだろうな

弊社はうんこ情シスのおかげでTeamsを使えなくなってます

2022-08-01

anond:20220731183342

自動安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋) 

/**************************************

以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>

//CSVファイルが置かれてるディレクトリパス投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";

const CSV_DIR =

'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';

//ファイルパスCSV絶対パスで、拡張子必要。iimは相対パスでよく、拡張子不要

const FILE_PATHS = {

//投稿文が書かれたCSVファイル

textCsv: CSV_DIR + 'textNoAnker.csv',

//レス投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。

replyTextCsv: CSV_DIR + 'textReply.csv',

};

const SETTINGS = {

//投稿後の基本待ち時間

baseWaitTime: 5,

//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ

waitTimeRange: 5,

//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)

waitTimeForAvoidingPunishment: 60 * 30,

//メール

mail: 'sage',

//名前設定

nameSettings: {

//名前名無しなら''。

name: '',

//以下、偽装ワッチョイ設定。浪人ワッチョイを非表示にしてるときだけtrueにしてね。

//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。

nickname: false,

//妙なニックネームの後に付く8桁の文字列ランダムで決めて付加するかどうか。

korokoro: false,

//IPランダムで決めて付加するかどうか。

ip: false,

//地域ランダムで決めて付加するかどうか。

area: false,

},

postSettings: {

//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。

noAnkerPost: false,

//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrue場合投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。

replyPost: true,

//最初に取得するアンカー無し投稿CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力

noAnkerPostTextCsvStartRow: 1,

//最初に取得する返信用投稿CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力

replyPostTextCsvStartRow: 1,

//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。

textCsvLoop: true,

//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。

minAnker: 895,

//返信する場合名前に以下の文字列を含む投稿アンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列複数指定可能指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能

filterNames: [],

//↑とは逆に、名前に以下の文字列を含まない投稿アンカーをつけて返信する。↑と併用も可能

filterNamesNotIncluded: [],

//返信する場合、本文に以下の文字列を含む投稿アンカーをつけて返信する。

filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],

},

//自分IPアドレス確認VPNとかでIPを変更してマクロを動かしてるとき、突然VPN作動しなくなってIPが元に戻ったときマクロを止めるためのもの

ipSettings: {

//自分現在IPアドレス確認をする。

checkIp: true,

//以下の文字列自分現在IPアドレスに含まれている場合マクロを一時停止する。基本的自分の本当のIPアドレス入力

avoidTheIp: '133.206.99.224',

},

//浪人設定。最後動作確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないか確認できずわからない。

roninSettings: {

//浪人ログインしてるかどうかをチェックするかどうか。trueらするfalseならしない。trueにしていてもし浪人ログインしていないことを確認したらログインしにいく。

checkLogin: false,

//浪人ログインメールアドレス

mailAdress: 'abc@def.com',

//浪人ログインパスワード

password: '1234',

},

//false: run()実行させず(デバッグ用)

run: true,

//true: 投稿処理だけしない デバッグ

skipPost: false,

};

/**************************************

設定箇所終わり。

書き込めない時の早見表 - 5ちゃんねるwiki

https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>

/**************************************

メモ

クラスフィールド宣言できない。

・NULL演算子(??)は使えない。論理積(&&)は使える。

オブジェクトの分割代入はできない。

・importはできない。 <h3>o- *************************************/</h3>

/**************************************

関数 <h3>o- *************************************/</h3>

/**

* ここから始まる。

*/

function run() {

//設定ミスがないか調べる。

checkSettings();

var _TextCsvCursors = new TextCsvCursors(

new TextCsvCursor(

SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0

? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1

: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,

FILE_PATHS.textCsv,

SETTINGS.postSettings.textCsvLoop,

),

new TextCsvCursor(

SETTINGS.postSettings.replyPostTextCsvStartRow > 0

? SETTINGS.postSettings.replyPostTextCsvStartRow - 1

: SETTINGS.postSettings.replyPostTextCsvStartRow,

FILE_PATHS.replyTextCsv,

SETTINGS.postSettings.textCsvLoop,

),

);

var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);

const _MyPosterName = new MyPosterName({

name: SETTINGS.nameSettings.name,

});

//スレURL指定

const _ThreadUrl = openPromptThreadUrl();

//ループ

while (true) {

//IP確認する設定なら、それをする。

SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();

//スレを開く

openUrl(_ThreadUrl.fullUrlHttps());

//浪人ログインする設定なら、浪人ログインしているかどうかを確認し、していなければログインしにいく。

if (SETTINGS.roninSettings.checkLogin) {

if (!checkRoninLogin()) {

loginRonin();

continue;

}

}

//投稿に使うテキスト取得。

const p = (function () {

if (SETTINGS.postSettings.replyPost) {

//返信あり設定の場合。返信対象が無いか調べる。

const targetAnkerNumber = createPostDOMList()

.filterPostnumberHigher(_LoopStatuses.currentMinAnker())

.filterByPostername(SETTINGS.postSettings.filterNames)

.filterByPosternameNotIncluded(

SETTINGS.postSettings.filterNamesNotIncluded,

)

.filterByText(SETTINGS.postSettings.filterText)

.lowestPostNumber();

if (targetAnkerNumber !== null) {

//返信対象があったのでアンカー付き投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);

messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);

return {

...r,

updatedLoopStatuses:

_LoopStatuses.updateMinAnker(targetAnkerNumber),

};

}

}

if (SETTINGS.postSettings.noAnkerPost) {

//返信対象無し、或いは返信しない設定の場合アンカー無し投稿文を作る。

const r = _TextCsvCursors.takeNextRowTextAsNoAnker();

messageDisplay('返信対象無し。アンカー無し投稿。');

return {

...r,

updatedLoopStatuses: _LoopStatuses,

};

}

return null;

})();

if (p) {

//投稿

postThenCheckError(

_ThreadUrl.serverName(),

_MyPosterName.randomize({

nickname: SETTINGS.nameSettings.nickname,

korokoro: SETTINGS.nameSettings.korokoro,

ip: SETTINGS.nameSettings.ip,

area: SETTINGS.nameSettings.area,

}),

SETTINGS.mail,

p.text,

);

//_TextCsvCursorsと_LoopStatusesを更新

_TextCsvCursors = p.updatedTextCsvCursors;

_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();

messageDisplay([

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

} else {

messageDisplay([

`返信対象が現われるのを待機中...。`,

`投稿回数: ${_LoopStatuses.currentPostCount()}`,

`minAnker: ${_LoopStatuses.currentMinAnker()}`,

`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,

`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,

]);

}

//短時間で連投しまくると規制されるので一定時間待機。

wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));

}

}

/**

* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。

* @param {string} serverName サーバー

* @param {MyPosterName} _MyPosterName

* @param {string} postMail メール

* @param {MyText} _MyText

* @param {number} retryTimes

* @returns {void}}

*/

function postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes = 0,

) {

const r =

retryTimes === 0

? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(

postTo5chTread,

postConfirm,

)

: new ValuesOfPost(

serverName,

_MyPosterName,

postMail,

_MyText,

).postSubstring(retryTimes, postTo5chTread, postConfirm);

if (r) {

back();

return;

}

//エラーページに飛ばされた。エラー情報取得。

wait(7);

const error = createPostErrorMessage().analyze();

messageDisplay(error.message);

if (error.order === 'KILL') {

kill();

} else if (error.order === 'SKIP') {

return;

} else if (error.order === 'TRUNCATE') {

back();

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes + 1,

);

} else if (error.order === 'WAIT') {

wait(SETTINGS.waitTimeForAvoidingPunishment);

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

} else if (error.order === 'LOGIN') {

//動作未確認

return postThenCheckError(

serverName,

_MyPosterName,

postMail,

_MyText,

retryTimes,

);

}

return;

}

/**

* 現在IPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。

* @returns

*/

function checkCurrentIpNotTheIp() {

//IP確認ページへ飛ぶ

openUrl('https://www.cman.jp/network/support/go_access.cgi');

const _IpAdress = createIpAdressFromCMan();

if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {

pause('現在IP指定した値が含まれていることを確認。');

//ポーズ解除したならもう一度確認しに。

checkCurrentIpNotTheIp();

}

return;

}

/**

* 設定に致命的な問題が無いか検査

* @returns

*/

function checkSettings() {

if (

SETTINGS.postSettings.noAnkerPost === false &&

SETTINGS.postSettings.replyPost === false

) {

return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&

SETTINGS.postSettings.replyPostTextCsvStartRow < 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',

);

}

if (

SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||

SETTINGS.postSettings.replyPostTextCsvStartRow === 0

) {

return kill(

'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',

);

}

}

/**

* 入力フォームを表示して入力されたスレURLを受け取る。

* @returns {ThreadUrl}

*/

function openPromptThreadUrl() {

const url = prompt('スレURL入力');

return new ThreadUrl(url);

}

/**

* 開いてるスレレス全て読み取ってPostListインスタンスを作って返す。

* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。

* createPostDOMListを使う。

* @returns {PostList}

*/

function createPostList() {

const posts = window.document.getElementsByClassName('post');

return new PostList(Array.from(posts).map((e) => new Post(e)));

}

/**

* 開いてるスレレス全て取得してPostDOMListに格納して返す。

* @returns

*/

function createPostDOMList() {

const posts = window.document.getElementsByClassName('post');

var arrPostDOMList = [];

for (let index = 0; index < posts.length; index++) {

//HTMLCollectionからElementを1つずつ抽出して配列に。

arrPostDOMList.push(posts.item(index));

}

return new PostDOMList(arrPostDOMList);

}

/**

* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。

* @returns {PostErrorMessage}

*/

function createPostErrorMessage() {

return new PostErrorMessage(

window.document

.g Permalink | 記事への反応(0) | 15:40

2022-07-29

なんで駆け出しエンジニアさんはエラーメッセージログも見ないでずっとエラー解決できないでいるの?

エラーメッセージにはっきり原因が書いてあるんだけど…

2022-07-27

ゲームの保存について思う事

https://wired.jp/membership/2022/05/28/gritty-underground-network-bringing-japan-arcades-to-us/


上の記事の内容はふんわりというか特定ジャンルに特化したことを書いてはいないけど、基板関連を収集してる自分からすると海外勢の保存活動(メーカーからすると海賊版のような物だけど)に助けられている状態だと強く感じてます

お金を出せば解決するなら払いますが、物自体バラバラになってたり何が足りないかすらわからないことが多いです。


日本人がリペアに対して弱いというわけじゃなくて、身内に対しても情報を公開してくれなくて修復の可能性すらわからないので廃棄される。

あとはゲームジャンル(レースだったり音ゲーだったり)でクラスタが分かれていてお互いに情報が共有されなくて知識が集まらない。


ジャンルが違えば使える情報ってないんじゃね?と思うかもしれないけど、ジャンル関係なく同じハードウェアが使われていることも少なくて

シューティングゲームではエラーが出るけどレースゲームROMを起動させたら解消するとか少なくない。

その程度の事も共有されないほ閉鎖的なクラスタばかりだし、棺桶に基板を入れたいようにしか見えない人が買い占めている。



まぁあとはtwitterなんかで"ゲームの保存"を理由海賊版を自慢している人は全く役に立ってない。


ツイート斜め読みしただけなので深くは分からないけど某議員ゲームの保存を言ったそうだけど期待しています

ACCSだけでなく所謂ガラケーゲームサービスでも既に復元不可能タイトルは少なくないし、メーカーも無くなり権利問題だけでなくデータも残ってない物も多いです。

ネット上にサービス存在したって情報すらない物もある。


カセットCDを入手したら子供の頃好きだったもの出会える時代はすでに終わっているし、2022年現在だとオンラインじゃないと動かないゲームも少なくないです。

クソリメイクでもそれをできる権利者が残っているだけでもありがたいし羨ましいです。

個人がいつでもアクセスできる物までは望まないですが、10年後も惚れた作品に触れることができる可能性を残すことだけでもやってほしいと思いますね。

anond:20220727132337

警告を黄色で表示したりエラーを赤で表示することがアジア人ネイティブアメリカンへの差別だと言ったところで誰も相手にしてくれないのがアメリカ左翼

2022-07-26

anond:20220726181257

そのOSエラーにどれだけ遭遇するかだな

まり遭遇しない(国民生活に影響がない)なら国民の議題の優先度としては下がっていく

anond:20220726180950

経済外交その他、立法に関わる姿勢などが、カルト宗教配慮して決められたら大問題なんだがな。普通にOSの致命的なエラーって感じ。

2022-07-25

anond:20220725174251

湿った紙は機械の敵なので

エラー出て画面真っ赤になります

「ちょ、それ入れんのやめてくれる!?」みたいなこと言われますわ。

2022-07-22

anond:20220722134831

「えーっと、SELECT * FROM kaisya ...っと・・・あれ!すみません先輩、これエラーなっちゃうんですけど」

2022-07-21

ワイ、撃沈する

明らかなエラーはなかったけど相手は終始つまらなさそうやったわ。

終わりや終わり

anond:20220721085737

2022-07-20

anond:20220720135729

カルトにずっぽりの政権って、最悪のリスクだと思うんだけどそうではないのか。議員秘書たちが重要機密をカルトに持ち出したり、海外に持ち出したりする最大級セキュリティホール放置するのって、賢い行いと言えるんだろうか。それこそ政権担当能力に致命的なエラーがあるのでは。

2022-07-19

anond:20220719145503

占いを作る側にまわるとまじで糞だなーと思うよ。

どうやって作るかというとですね、

今日あなた運勢: 乱数を生成して3で割ったあまりが0だったらこ大吉、1だったら吉、2だったら凶

今日ラッキーカラー: 乱数を生成して10で割ったあまりが0だったら赤、1だったら青、2だったら緑、3だったら、、、、

みたいな感じで作るんですよ。そこに人の手は介在していないし、なんなら途中でシステムエラーが出ちゃったらもう一回やり直して作り直し。

これを信じるってのがわからない。

中国ITエンジニアって一流大卒なんだな

日本エンジニアが何かしら技術ブログを書くとき、6割ぐらいの人が参考文献や出典を書かない

でもそれはちゃんとした大学を出てないからだと思っている

大学論文レポートを書いてないか文章の書き方を知らない

書き方を知らないから書かないのは仕方ないと思っている

 

https://zhuanlan.zhihu.com/p/318769754

これはn=1でしかないけど中国中国しかないオープンソースプロジェクトを見ていた

エラーが出て使い方を見るために本人のブログに飛んで行ったら日本企業が書いた一記事リンク付きで参考として乗っていた

俺の知ってるOSSの人三人ぐらいはこういうことをしていない

他のOSSを引っ張り出して俺のほうが明らかにはやいよwみたいなのを書いてることは多々あるけど、ブログ等にソース記載されてない

 

参考にしたものがあるならいちいち記入してほしい

参考文献が書いてあるとぐっと信頼度が上がる

2022-07-18

ERROR: このスレッドにはもう書き込めませんでした。[erocomic]

なぜか質問スレで書き込もうとするとこのエラーが出る

↓てなわけで誰か代わりにタイトル教えて…

https://i.imgur.com/TN0Jtzg.jpg

UNIX 哲学」についていくつか

名著「UNIXという考え方 - UNIX哲学」は本当に名著なのか? 〜 著者のガンカーズは何者なのかとことん調べてみた - Qiita

この記事はよく調べてあるなぁと思う反面,事実関係の間違いも多く当時の空気感など欠けていると思う部分がいくつかある。事実関係に関しては追い切れないので参考文献を挙げるにとどめておくが,空気感のほうはいくつか書いておく。なお当該記事の「当時と今では状況が全然違うんだから安易に『UNIX 哲学』とかいうな」という主旨には大賛成である

参考文献

初期の UNIX歴史について興味がある向きには次の書籍お薦めする。

Peter H. Salus『A Quarter Century of UNIX』(1994, Addison-Wesley Publishing)

和訳の『UNIXの1/4世紀』(Peter H. Salus, QUIPU LLC 訳, 2000, アスキー) は絶版のうえ訳も微妙なので薦めづらいが,原書The Unix Heritage Society (tuhs) で PDF が無償公開されているので,英語が苦にならないのなら読んでみるといい。

また同じく tuhs で無償公開されている Don Libes and Sandy Ressler『Life with UNIX』(1989, Prentice Hall)を読めば80年代終りの UNIX の状況(XENIX についてもしっかり言及されている)や利用者目線での雰囲気もある程度判るだろう。

哲学

記事で一番気になるのが「哲学」という語の捉え方。この言葉の強さに引きずられているように読める。でもこれ,当時は設計基本的な考え方くらいの意味でわりとよく使われていた言葉なんだよね。たとえば米 BYTE 誌のアーカイブを “philosophy” で全文検索するとこんな感じ。

https://archive.org/details/byte-magazine?query=philosophy&sin=TXT&sort=date

ほぼ毎号のように出現していたのが判るだろう。

もっとも猫も杓子も「哲学」を振りかざしていたわけではないし,UNIX開発者たちが「哲学」の語を好んで使っていたのも間違いないように思う。傍証の一つが AT&T定期刊行物『The Bell System Technical Journal』の1978年7, 8月号だ。元記事言及されているマキルロイの Forword の初出がこれで,ネットのアーカイブから PDF が入手できる。

この号は二部構成になっていて第一部が Atlanta Fiber System に関する論文12本(全172ページ),第二部が UNIX に関する(Preface や Foreword を含む)論文22本(全416ページ)となっている。さて前述の PDFOCR されているので “philosophy” で全文検索してみると8箇所見つかる。これが見事に全部 UNIX論文なのだ。もちろん論文性質もページ数も違うからこれだけで確定的なことはいえないが「日常的に使っていたんだろうなぁ」という推測は成り立つだろう。じつはマキルロイ哲学とされている部分は “Style” であり “philosophy” の語は一切使われていないというのもちょっと面白いUNIX開発者たちがなぜ「哲学」という語を好んだか正確なところは判らないが,それまでにない新しい考え方に基づいた OS を開発しているという意識があれば,そういう言葉を選ぶのが自然時代だったことは間違いない。

UNIX認知され拡がっていく過程で「哲学」も知られるようになっていった。自分が好むものの良さを他人にも識ってもらいたい,あわよくば他人もそれを好むようになって欲しいという布教活動は今も昔を変らないわけで「哲学」はその便利なツールとなったわけだ。元記事ではガンカースの著作を「外部の人間が後から打ち立てた哲学」と表現しているが,そんなたいしたものではない。マキルロイ論文に影響を受けた布教のためのああい説教は到るところにあった。たとえば前掲の『Life with UNIX』にもしっかり Philosophy の項がある。また日本最初期の UNIX 解説本のひとつである村井純井上尚司・砂原秀樹『プロフェッショナル UNIX』(1986,アスキー)には冒頭次のような一節がある。

オペレーティングシステムは,コンピュータを使うものにとっての環境形成する基盤であるから,そのうえで生活する者の個性尊重し,より良い環境へと作り上げて行く課程を支援するような素材を提供するソフトウェアでなければならない。この主張こそが,UNIXオペレーティングシステムとしての個性ではないだろうか。

 

    プロフェッショナル UNIX村井純井上尚司・砂原秀樹,1986,アスキー)p 3.

「より良い環境へと作り上げて行く課程を支援するような素材を提供するソフトウェア」とはテキストを入出力フォーマットとする単機能コマンド群のことで,これらをパイプでつなげたりシェルスクリプトでまとめたりすることで「そのうえで生活する者の個性尊重し」た「より良い環境へと作り上げて行く」ということだ。こういった説教はありふれたものであった。たんにそれを「哲学」の語を用いて書籍にまとめたのが,たまたまガンカースだったというだけのことである

そしてじつは UNIX場合布教活動とはべつに「哲学」を広めなければならない切実な理由があった。これを説明するのは非常に面倒くさい。当時と今ではあまりにも環境が違うのだが,その違いが判らないと切実さが伝わらないからだ。マア頑張ってみよう。

UNIX の利用環境

UNIXPDP というミニコンピュータミニコン)上に開発された。このミニコンを使うためには専用の部屋に行く必要がある。その部屋は,もちろん場所によって違うわけだが,マアおおよそ学校教室くらいの大きさだ。長机が何列か並んでおり,そのうえにはブラウン管ディスプレイキーボードを備えた機器が等間隔に置かれている。壁際にはプリンタが何台かあるだろう。通っていた学校コンピュータ室などと呼ばれる部屋があったならそれを思い浮かべればだいたい合ってる。ただし置かれている機器コンピュータではなくコンピュータ接続するための端末装置ターミナル)だ。端末装置キーボードで打った文字コンピュータに送られコンピュータが表示した文字がそのディスプレイに表示される。現在 UnixOSCLI を使うときターミナルとか xterm という名のアプリケーションを用いるがこれらは端末装置エミュレータで,もともとは実体のある装置だったわけだ。

さてコンピュータ室にたいていは隣接するかたちでマシンルームなどと呼ばれる六畳くらいの部屋がある。窓ガラスで仕切られたこの部屋には箪笥洗濯機くらいの大きさの装置が何台か置かれている。これがコンピュータ本体だ。もっとコンピュータが何台もあるわけではない。この箪笥CPU でそっちの洗濯機ハードディスク,あの机に置かれているタイプライタ管理コンソールといった具合に何台かある装置全部で一台のコンピュータになる。どこが〝ミニ〟だと突っ込みたくなるかもしれないが「六畳で収まるなんて,なんてミニ!」という時代お話だ。

端末装置それぞれからUSB のご先祖様の)RS-232 という規格のアオダイショウみたいなケーブルが伸び,マシンルームに置かれたターミナルマルチプレクサと呼ばれるスーツケースに台数分のアオダイショウが刺さってコンピュータとの通信を行う。コンピュータと多数の端末装置を含めたこれら全体をサイトと呼び,root 権限を持って管理業務を行う人をシステム管理者あるいはスーパーユーザと呼んだ。

結構上手に説明できたと思うのだが雰囲気は伝わっただろうか。ここで重要なのは一台のコンピュータを数十人が一斉に使っていたという事実だ。洗濯機とかアオダイショウとかは,マアどうでもいい。

自由不安定OS

当時の UNIX評価一言で表すと〝自由不安定OS〟となる。メーカお仕着せではなく自分好みの「より良い環境」を作りあげる自由さらに他のメインフレームミニコンOS に比べると一般ユーザ権限でできることが圧倒的に多かった。そしてその代償が不安定さ。今では考えられないが UNIX のその不安定さゆえにプロOS ではないと考える向きは多かったし「でも UNIX ってすぐ落ちるじゃん」というのは UNIX アンチ定番ディスりだった。UNIX の落とし方,みたいな情報がなんとなく廻ってきたものだ。

こういった雰囲気を鮮やかに伝えてくれるのが,高野豊『root から / へのメッセージ』(1991,アスキー)だ。当時アスキーが発行していた雑誌UNIX MAGAZINE』に連載されていた氏のエッセイ1986年11月から1988年10月掲載分までをまとめた書籍である。著者の高野氏は勤務先の松下電器1980年ごろから UNIX サイトスーパーユーザを務めており,日本では最古参の一人である。この本の中で高野氏は繰返し UNIX自由さと不安定さに言及している。すこし長くなるが,その中の一つを引用しよう。

CPU は,システムにとって重要な共有資源であるが,この CPU実質的に停めてしまうことが UNIXはいとも簡単にできる。たとえば,cc コマンド10個くらい同時に走らせてみたらよい。VAX-11/780 といえども,同時に実行できるコンパイルはせいぜい3つか4つである。それ以上実行することも当然可能ではあるが,他に与える影響が無視できなくなる。つまり,てきめんに viカーソルが動かなくなる。あるいは,すこし大きめなディレクトリ上での ls コマンドの出力が表示されるまでに煙草を1本吸い終えてしまったり,タイムアウトログインが撥ねつけられたりといったバカげた現象が起きだすのである。こういった状態になると,UNIX破壊されたに等しい。真夜中,独りで VAX を占有して使っているのなら何をやろうとかまわない。しかし,20人30人と多数の人間が使っているとき勝手をやられると非常に困るのである当人仕事が遅れるのは自業自得だとしても,そのとばっちりで他のエディタまで止まってしまうと,もはやどの仕事も進行しなくなる。

ディスクについても同様なことがいえる。UNIX では,ファイルシステムを使いはたすまで大きなファイル自由に作ることができる。したがって,自分プロセスがいったいどのくらいの容量のファイルを作り出すのか見当もつけられないようなアマチュアが使うと悲惨なことになる。ディスクを使いはたすと,コンソールタイプライターにエラーメッセージが出力されるが,夜中にそれが発生して,コンソールタイプライターが一晩中エラーメッセージを打ち続け,朝マシンルームに行ってみると紙を一箱打ち尽くしてしまい,ピーピーと悲しげな声を上げて人を呼んでいた光景を私は何度も見てきた。こうなると,それをしでかした本人のプロセスは当然のこととしても,同じディスクで走っている他のプロセスも先に進めなくなってしまう。すこしでも負荷を夜間にまわそうとする善意は逆転してしまい,わずかでも仕事を先に進めようとする意図完璧に打ち砕かれてしまうのである

 

    root から / へのメッセージ高野豊,1991,アスキー)pp16-17.

そして,こうした不安定さが「哲学」を必要としたのだ。自分が利用しているサイトに「cc コマンド10個くらい同時に走らせ」たり「自分プロセスがいったいどのくらいの容量のファイルを作り出すのか見当もつけられないようなアマチュア」がいるとその累は自分にも及んでしまう。だからサイト利用者全員に UNIX設計基本的な考え方を理解してもらうことが,自分のために必要だった。UNIX伝道がより苛烈だった理由ひとつがここにあるのだ。

ミニコン UNIX終焉

ミニコン上で誕生した UNIX は 4.3BSD(1986)で最高潮を迎える。注意したいのはミニコン時代UNIX は Research UNIXCSRG BSD みたいな区別をせずにまとめて UNIX として扱われていたことだ。実際『プロフェッショナル UNIX』も『root から〜』も UNIX記述されてはいるが実際には BSD を扱っている。べつに当時の人が無知だったわけではない。なにしろ BSD を利用するためにはまず AT&T から UNIXライセンスを購入し,そのうえでカリフォルニア大学バークレー校(UCB)から BSD を入手しなければならなかったからその関係は当然広く知られていた。ベル研発明された UNIX を外部の人たちも含めみんなで改良し,それら全体が UNIX であるという考え方が自然だっただけである。『Life with UNIX』のような英語の文献によく登場する “Berkeley UNIX” という言い回しが当時の気分をよく表している。UNIX vs BSD みたいな捉え方は法廷闘争を経た90年代以降の感覚だ。

もっともそういう70年代風味の牧歌的風景ミニコン世界限定の話であった。BSDのものミニコンのものしかなかったが,そのコードを受け継いだ BSDUnixAT&T推し進める System V などがワークステーション市場舞台80年代中盤から激しく覇権を争うようになる。いわゆる Unix 戦争で,PCUnix であるマイクロソフトXENIX も当然参戦した。ミニコン世界牧歌的だったのは,ぶっちゃけていえば先のない技術だったからだ。ただ Unix 戦争あくまでも標準という聖杯を争う戦いであり,AT&TBSDUnixSun Microsystems が共同で System V Release 4.0 (SVR4) を作りあげたように後の法廷闘争とは趣が違う。

こうしたミニコン UNIX からワークステーション Unix への転変は Unixのもの文化にも変化をもたらした。まず激しい競争Unix の高機能化を加速した。商品として判りやす惹句が「あれもできます,これもできますなのは誰もが知っている。もちろん安定性を増すために quota のような利用者自由制限する機能も含まれていた。またワークステーション Unix現在UnixOS と同様同時に一人が使うものであり前述の布教必要性は大幅に減じた。達人たちのみの楽園から万人に開かれた道具に変ったのだ。こういった変化を体感したければ『root から〜』と水越賢治『スーパーユーザの日々』(1993,オーム社)を読み比べてみるといい。『スーパーユーザの日々』はワークステーション Unixシステム管理入門書だ。この本ではたんに知識を羅列するかわりに架空ソフトウェアハウス(開発会社)を舞台新卒社員が先輩社員からシステム管理を学ぶという体裁をとっており,そのおかげで架空の話とはいえ90年代前半の雰囲気が堪能できる。出版年でいえば『root から〜』と二年しか違わない『スーパーユーザの日々』の落差は “dog year” と称された当時の激烈な変化まで体感できるだろう。

UNIX 哲学背骨

当時はよくいわれたのに今やほとんど聞かれなくなったものがある。マキルロイ論文結論部分に書かれたそれは,1973年出版されたイギリス経済学者エルンストシューマッハー著作題名で,中学生英語力があれば十分に理解できる平明な一文だ。

Small is beautiful.

マキルロイは『人月神話』を引いて一定留保をつけてはいものの,これが UNIX 哲学背骨であることに違いはない。機能をありったけ詰め込もうとして失敗した “kitchen-in-a-sink” な MULTI•csアンチテーゼである UNI•x にとって,これ以上のスローガンがあるだろうか?

ひるがえって現在UnixOS をみれば,ブクブクと肥え太ったシステムコール,全容を俯瞰するだけでも一苦労するライブラリインターフェイス,一生使うことのないオプションスイッチまみれのコマンド群。UNIX仮想敵とした OSのものだ。そのことについてとくになにも思わない。ハードウェアは長足の進歩を遂げ,コンピュータの応用範囲は途方もなく拡がった。UNIX が変らなければたんに打ち棄てられ,歴史書を飾る一項目になっただけだ。ただ現在UNIX 哲学」を語るならそうした背景は理解していなければならないし,どれだけ繊細な注意を払ったところで〝つまみ食い〟になってしまうことは自覚すべきだ。

2022-07-14

UIって「バカでもわかるように親切に道筋を作ってあげてエラー処理も優しく教えてあげましょうねえ」っていう超サービス精神盛りだくさんの代物だから自分で作るのめんどくせえわ性格的に

ログイン ユーザー登録
ようこそ ゲスト さん