「txt」を含む日記 RSS

はてなキーワード: txtとは

2023-02-17

コマンド

catコマンド使用してファイルに追加することは、teeコマンド使用することと似ています。 ただし、出力をリダイレクトするために、追加リダイレクト記号使用します。

次のコマンドは、次の行をファイルに追加します。

猫<> multiple.txt

CATAPPENDSファイルはここにあります

EOF

catコマンド使用して、ファイルに内容が存在することを確認します。

猫 mupltiple.txt

https://ciksiti.com/ja/chapters/3827-how-to-append-multiple-lines-to-a-file-with-bash--linux-hi

2023-02-06

[]コテハンをやって思うこと

qrngとは、要するに量子乱数生成器のこと。

何かを書きたいときトピックリストtxtで用意しておき、その中から一つを選ぶ際にqrngを使っている。

今出たのは「自分に関する情報を書く」というトピック

俺は45歳のオッサンで、趣味女装

qrngがコテハン化して「こいつ馬鹿だな」などと思う連中の攻撃が日に日に増してきたが、そんなことを気にするようじゃダメ

2023-01-31

接触できる中途半端イケメン価値

正直よくわからんのだよな

二次元のほうが顔が良いって思ってしま

実写でもTXTみたいなとにかく顔が良いのを見てるほうがいい

彼氏顔面偏差値トップランカーとかとは別の観点

接触できる中途半端イケメンっていうのが一番意味がわからない

なんで稼げてるんだろう

2023-01-13

増田削除アプリを作った

動機

趣味増田の削除です。

増田を全削除するのであればPower Automation DesktopSelenium IDEあたりでも使えば可能ですが、中にはブクマを集めた珠玉増田ブクマは付かなくても割と気に入ってる増田もあるので全削除はしたくありませんでした。

なので選択的に増田を削除するためのアプリ作りました

アプリ概要

Masuda Deleter

https://github.com/oribeolive/masuda-deleter/

Masuda DeleterはDockerコンテナ環境を作って動くのでDocker必要です。

M1 Mac動作していますWindows検証できるマシンが手元にないので動作未確認です。

インストールGitHubのREADMEに書かれたコマンドを実行すればできると思います

Masuda Deleterははてラボログインして指定されたページ分の自分増田投稿スクレイピングしてローカルDBに保存します。

取得された投稿リストブラウザで見られるので、そこで削除するものを選んで実行すると、またログインして投稿を削除しにいきます

ページのアクセスごとに読み込みと遠慮のために1秒から数秒sleepするので少し時間がかかります

一旦投稿ローカルに保存するという過程があるため副作用として自分投稿検索できます

これにより

が容易になります

増田にはAPIがないので、IDパスワードを使ってログインして、表示されている文章スクレイピングしてくるという原始的なやり方になります

(2回目からcookieがある場合cookie復元してログイン状態になります。)

ユーザーが知らない外部サイトにクレデンシャルを渡すのは危険であり、サービス運営側としてもパスワードを平文で持ちたくないので、Webサービスとして実装せずセルフサービスとしております

ユーザーによってローカルの.envファイルに書かれたIDパスワード使用する形です。

ソースオープンしておりますので怪しいことをしていないか確認ができるかと思います

機能

取込

ページ数を入れて取込ボタンを押すと投稿の取得が始まります

一応下にプログレスバーが出ますが、ページ遷移すると見られなくなります。進捗は進捗管理でも確認できます

取得された投稿リアルタイムで画面に反映されないのでブラウザリロードしてください。

検索

自分増田キーワードブクマ数やトラバ数で検索できます

キーワードは濁点を区別していません。

一覧

増田IDタイトル、本文の省略、投稿日時、ブクマ数、トラバ数が表示されます

ブクマ数やトラバ数でソートできます

あとで消す(選択削除)

「あとで消す」投稿をチェックし、「あとで消す」記事をついに消すボタンで削除を実行します。

チェックは別のページに遷移しても有効です。

「あとで消す」選択全解除ボタンで解除できます

削除を実行すると下にプログレスバーが出ます

こちらは実行した時点で表示されているページのみリアルタイムに画面に反映されます

リロードすれば現時点でのデータが見られます

詳細

投稿の全文を見られますタグ等は取得しないのでテキストのみになります

再読込

投稿個別に取得してローカル文章ブクマ数とトラバ数を更新します。

削除

投稿個別に削除しにいきます

Space Masuda

隠し機能デフォルトではOFF。

対象投稿タイトルを空に、本文をスペース1文字にしにいきます

進捗管理(Progresses)

処理の進捗(何件中何件処理済みか)を見ることと、処理を停止させることができます

排他処理(取込と取込、特定IDの削除と同じIDの削除等)にしているので動いていなそうな処理を停止して再度処理を実行するときに使います

停止する場合は停止ボタンを押すか、それでも停止しそうにない場合強制停止ボタンを押してください。

進捗一覧ではプログレスバーアニメーションはありません。

「停止」は今行っている最中の処理ではなく次以降の処理を停止するという形になります

停止ボタンを押したときに4ページ目を取得している場合は、5ページ目の取得を始める前に処理を終了することになります

そのためプロセスのものが止まっている場合は停止されません。

強制停止」はプロセスをkillします。スクリプト名とプロセスIDプロセス検索して子プロセスも含めてkillします。

グラフ

おまけとして、投稿日とブクマ数、投稿日と3ブクマ以上の投稿件数投稿時間(hour)ごとの1ブクマ以上の投稿件数グラフが見られます

ブクマが付いた瞬間ではなく投稿日時なので、いつの時期に投稿した、何時に投稿した増田が活きが良いのかを見られる程度です。

集計データ別に持っていないので増田を削除するとグラフ使用されるデータも消えます

その他

私はこれで多いときには4000件程度あった増田を3000件程度に減らしました。

これを開発する前からも増え続ける増田の削除に日々勤しんでいたので総数はもっと多いはず。

まだまだ削除したいです。

たまに

Message: unknown error: net::ERR_CONNECTION_CLOSED

というSeleniumエラーが出て処理が実行されないことがあります。再度実行してください。

今後

フロントエンドレガシーなのでMasuda Deleterの開発に飽きていなければもう少しモダンリプレースしようと思っています

使用していないDjango REST frameworkがrequirements.txtに入っているのはその名残です。

2022-12-30

anond:20221230142549

要件に足りてないけれど、自分場合は以下2つになった。

GitHub

PCブラウザ使用。「.」キーを押下でVisual Studio Codeが起動するので、それをエディタ代わりに使用

多分、txtとかでも運用できるだろうけど、mdで使ってる。private(非公開)とpublic(公開)の2つのリポジトリ作成して、必要に応じて使用

iCloudメモ

PCブラウザiOS使用。多分、Androidでもブラウザなら使えるんじゃないかな。

雑に書いたり、iPadで絵の追加したい場合使用

 

evernoteアプリ制限が、個別PCブラウザが別扱いになったタイミング引っ越し先を探して、この2つになりました。

2022-11-13

anond:20221112203136

自分自分以外の誰の誕生日も覚えられんよ

から大切な人の誕生日メモ長に書いてPCのmemo.txtに書いてアプリに記録してるよ

2022-11-03

老害はそろそろ韓国のことを悪く言うのをやめるべきだ

嫌韓流第一波の時にネットde真実をしたタイプ中年で、今ではなんとも思ってないんだけど

アンケートを見ると10代のお互いの好感度は50%を超えていて非常に高いらしい

なお60代以上の好感度は最悪で20%くらい

 

おっさんとして生きてるとどうにも感じにくいが

韓流戦略が上手くいって定着した結果、韓国一種ブランドとなり特にZ世代女性にはかなり支持率が高い

ここ1年1020女子と遊ぶ機会に恵まれたんだけど、本当に韓国アイドル化粧品ダンスドラマお菓子あたりは定着している

彼女らは物心つく頃にはすでに韓流があったわけだからそりゃそうだろうと思う

 

意外なのは韓国側の若者日本にいいイメージがあるということ

おそらく文化的に受け入れているんだろうと思うが

この50%超えの状態があと20年も維持できればまた違った世の中になるのではないかと思う

その時邪魔なのはお互いの国の老害

 

流石に今の御時世、嫌韓嫌中というのは古すぎてダサさまで感じる次第だが

意外と40代以上が多いサービスに行くと未だにそういうのがあったりする

10女性の親世代はちょうどそういう世代だと思うんだが、彼らはどう思っているんだろうか

 

一つ問題に感じるのは、残念ながらおっさんが楽しめるコンテンツが少なめなところだと思う

Netflixで受けてるドラマ特にホラーとか)は十分面白いんだけど

やはり女性けが多いなという印象が強い

そう言えば一時期は韓国女性アイドルグループがかなり強かったイメージだけど、今はどうなんだろう?

10女子とばかり話していたせいでTXT知識ばかり増えてしまった

あとは一時期はPCネットゲーム業界韓国企業が席巻していたと思うが

2022-11-02

皆、よく絵描きAIで描けるな

自分場合エロを描きたいという衝動がない。

最近キャラクターもわからないのだけど、動画立ち絵とかエンドカードなどが描ければいいなと思っている。


danbooruタグを探してもエロばかりで、普通のはそれほどバリエーションがないように見える。

検索しても出てこないので、自分で調べるしかいかと重い、danbooruタグ一覧を探した。

deepdanbooruの中にあるtags.txtに、danbooruタグ一覧があるが、9000くらい拾っているっぽい。

danbooru全体だと20万ほどあるらしいが、数が少ないのはどうせ出て来ないのだろうから、いいのか。


他のタグ一覧も探しているが、案外集まってないように見える。

というかエロばかりで除外していくのがダルい

インスタのいい感じのファッションタグ一覧とかどこかないのか。


描いて出てきた画像に、色々不満があるのだが、どうすりゃ直るのかがわからん

コメンド機能が欲しい。

衣装もそれなりに毎回異なるのを出して欲しい。

なんかエロ界隈はロリで突き進んでいるみたいだが、自分からすると胴の長さとか、そういうのが調整できなくてモヤモヤする。

胸の大きさは単語があるのですぐ調整できるが、くびれやら肩やらも調整出来ん。

衣装名前英語で探してきても、出て来ないとめんどくさくなってくるし、ボタンリボン位置を示す表現なんて無理だろ


1発目は自然言語でもいいが、もう少し位置動かして書き直してくれないですかねAI様ってなる。

image2imageで直せるだろっていうが、実際やると境界が変だったりであまり使いたくない。てか単語入力が結局必要で出てこない。

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-18

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-16

anond:20220716031009

前田仁さんは動画配信じゃなく自殺の経緯書くサイト作るためだけにhtml勉強して

2ch専ブラのkakikomi.txtまで公開してたけど彼と他の多くの人たちとは何が違うんだろうな

2022-06-27

Core Keeper Dedicated Server を VPS 上に構築したときの手順メモ

Ubuntu 22.04 LTS x86_64 で構築。

CoreKeeper側で apt依存しているっぽいので、Ubuntu でやった方が楽だと思います

Tips

Ubuntu 20 TLS でやる場合、/home/steam/Steam/ が /home/steam/.steam/ になってたと思うので、環境に合わせて読み替えてください。

Install steamcmd dependent packages

dpkg --add-architecture i386
add-apt-repository multiverse
apt-get update
apt-get dist-upgrade
reboot

Create steamcmd User

useradd -m steam
passwd steam
gpasswd -a steam sudo

Steamcmd / Core Keeper Dedicated Server Install

sudo -u steam -s
cd
sudo apt install steamcmd
ln -s /usr/games/steamcmd steamcmd
./steamcmd +login anonymous +app_update 1007 +app_update 1963720 +quit

Run steamcmd (Install and Creating Core Keeper Dedicated Server system drectory )

cd ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/
./_launch.sh

Press Ctrl + C for Stop Core Keeper Dedicated Server

World file migration (if there is an old file)

mkmir -p -m 775 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds
chown steam:steam /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds

Copy old world file (0.world.gzip) to

/home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds

Copy old setting file (*.json) to

/home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/

chmod 664 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds/0.world.gzip
chmod 664 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/*.json

Backup setting

vi /etc/cron.hourly/corekeeper_backup

#!/bin/bash
cp -a /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds/0.world.gzip /home/steam/worldbackup/0.world.gzip.`date '+%Y%m%d%H%M%S'`
cp -a /home/steam/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/CoreKeeperServerLog.txt /home/steam/worldbackup/CoreKeeperServerLog.txt.`date '+%Y%m%d%H%M%S'`

chmod 777 /etc/cron.hourly/corekeeper_backup

sudo -u steam -s
cd
mkdir worldbackup

Start Core Keeper Dedicated Server

sudo -u steam -s
cd ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/
nohup ./_launch.sh
tail -f ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/CoreKeeperServerLog.txt

サーバースペック

利用者問題か、サーバー問題かわかりませんが人数が10人超えると CPU4コア/メモリ4G/100Mbps で結構ラグかったです。

今は CPU6コア/メモリ8G/1000Mbps で動かしています

不具合 (2022/06/28時点)

6-8人以上で2-3時間サーバー動かしてると、Unityライブラリがsegfault起こして、Core Keeper Dedicated Server が落ちます

ログ取れたのでバグレポしましたが、改善するまでは不特定多数が好き勝手するサーバーみたいなのを長期運用するのは厳しいかなと思いますタイミングによってはアイテムロストしてしまうので。

遊びで使うなら、ウォッチドック的なサービスを入れて、落ちたら適宜起動しなおすみたいな対応をした方がよいと思います

2022-05-25

ベース思考から抜け出してくれ

DX!って叫ばれ続けた結果、おおよその紙媒体電子媒体に移行できたんだけど

書庫の代わりに共有フォルダが作られてそこに印刷前のファイルが設置されるだけの変化しか起きてない

手書きサイン必要書類とかはスキャンして設置、みたいなことをやってたんだけど

PDFサイン機能発見した人がいて

これはいいぞ!DXだ!」

って言って電子サインが使われるようになった

ただその書類に本当にサイン必要かどうかが全然議論されないし

そもそもその書類必要なのかの議論がされないままDXもとい電子化の波は去ってしまった

誰かが間違えたファイルを消したりしてしまって大問題に発展し

共有フォルダには「★★このフォルダ経理しか開かないこと★★.txt」っていう中身空っぽファイルけが置かれている

デジタルリテラシーとはまさにこのことなんだろう、と思っていて

結局大半の人達書庫に紙をファイリングする手法しか知らないので

それをデジタルを使って実現する方法しか理解できない

なのでその書類が何のために必要なのかという部分に関して思考することはないし

書庫に付箋やテプラを貼り付けるように中身空っぽファイルを置く

鍵をかける代わりにパスワードを付けて管理するし

そもそも場所を教えなければアクセスできないとも思っている

DXで最も必要だったのは、典型的事務作業がDX後にどういった形で運用されているか、というのをインターンなりで体験して貰うことだったんだと思う

というよりも今時のベンチャー的な企業運営がどのようになされているか体験する方が良かったかもしれない

自分の今の作業を何の情報もなしに「DXしろ!」と言ってもどだい無理な話で、テンプレートを示すべきだった

そうすればもっと抜本的に自分たちの仕事について振り返ることができただろうし、中途半端なDXで終わらなかったように思う

2022-05-24

google情報価値低いページインデックスに入れて困る

noindex付与して更にrobots.txtできょひまでしてんのにバグってんのかおら!

このページを Google 検索からブロックしたい場合robots.txt使用する方法インデックス登録回避する正しい方法ではありません。インデックス登録されないようにするには、robots.txt によるブロックを削除して、さらに「noindex」を使用してください。

https://support.google.com/webmasters/answer/7440203#indexed_though_blocked_by_robots_txt

より抜粋

リンクがあるから辿って保存しましたってアホかこいつ。まあグーグルサービスって基本アホなの多いんだよな

雑に作って雑に運用して、それで使ってて切れそうになることばっかりだよ。死ね

しか回避するために

robots.txt によるブロックを削除して

と来たものだ。わかるかうんなものシューティングゲーム攻略で、死んで内部ランク下げてください。とか言うのと同じくらい理不尽だろうが。

理屈何となく分かる、robots.txtに従ってページを読み込めないので、ページにnoindexが書いてあるかどうかわからんっていうんだろう?あほ

だったら最初からrobots.txtを優先してインデックススンナボケが。アホか。人間動物的な直感配慮しろ

まあそこも理屈としてはrobotx.txtあくまでも「クロール」の制御であって「インデックス」の制御するためのものじゃないって言いたいんだろうけど、いびつすぎるんだよなぁ。

はーあほくさ

2022-03-18

今日中に100万回使える超便利テク

cmd起動

cd 任意フォルダパス

dir/B >うんち.txt

2022-03-15

2名無戦隊ナノレンジャー!2021/12/17(金) 09:45:31.08>>3

5chの板にはそれぞれスレッド数の上限が設定してありそれを越えると

最終書き込み日の古いスレから順次倉庫送りになるんですよ

また書き込み規定数以下で放置されたスレもすぐに落ちる模様

それ、setting.txtのどの項目で設定されてるんや?

2022-02-25

50年後も生きているファイル形式

50年後タイムマシンを掘り返して出てきたファイルで、

一般的デバイスGUI上で「往時と変わりなく読める/再生できる」もの予想

(取り込み方法は置いといて)

JPEG画像

PDF/a(画像+α)

他、よくわからんもの

TXT文章)→日本語文章場合文字コードとかどうなってんだろう

MP3(音声)→WAVよりは…

SVGベクター)→PDFのついでに読まれそう

賢い人たち教えて!

2022-02-12

anond:20220212180044


ZTAだとPDFとかTXT以外の安全拡張子以外はDL強制的不可能にすることもできたり、

ExchangeZIP強制的フォルダ保存後に添付削除したりして検疫するとかできるらしい(やったことはない)

anond:20220212175913

ZTAだとPDFとかTXT以外の安全拡張子以外はDL強制的不可能にすることもできたり、

ExchangeZIP強制的フォルダ保存後に添付削除したりして検疫するとかできるらしい(やったことはない)

2022-01-07

世界限界をなぞる

今の小学生にはやってるものは、妖怪ウォッチ

Facebookおっさんおばさんが多い

Twitterオタクフェミニストが殴り合いをするプラットフォーム

mixiは死んだ。その墓標としてモンスト建設された。

年越し派遣村2021年年末はなかった

マクドナルドポテトはSサイズしかない

ここ数年VR元年が続いている

電子書籍元年は馬鹿にされていたけど、いまどき天使書籍を使わない人間そもそも自体ほとんど読まない人間なのでどうでもいい

ダーツ10万円相当の金貨を本当に交換して帰ったけど、次呼ばれたときにその金貨を持ち込んでダーツに交換した

腹筋を割るには腹周辺の脂肪を消す必要があるので、基本的限界近くまでカロリー制限をする必要がある

猫砂とかミネラルウォーターみたいな値段はそんなでもないけど輸送コストの高いものを買うのはAmazonで買うと無料なのでお得

でも今はどうかわからない。いまのAmazonは単品購入できない商品とかが多いのでわからない

楽天ふるさと納税したら期間限定楽天ポイントが使える。つまり楽天スーパーセールだかお買い物リレー高で数割のポイント還元をしつつふるさと納税すると、事実上税金を割引していることになる

インフォシークは消えた

セレクトを押しながらXXYBA

ラウンドアップはグリホサート

左手薬指を切られた人はどこに結婚婚約指輪をするのだろうか

葉加瀬太郎あんまり博士感がない。どっちかって言うとカリフラワー感がある。カリフラワー次郎

マックスむらいが誰なのか知らない

生きる意味がないからって死ぬ理由があるみたいに決めつけるなよ

わらふじなるおの顔がすぐに頭に出てくるやつは凄い

アメリカで一番死亡率が高い職業林業です

「もうお前とは二度と会わない」と言うときは大体会う

今年一番笑ったニュースは、NHKの集金人がドアスコープから見てると知ってて、NHK受信料払えと言ってきたこ

パカパカパッションポップンミュージックがごっちゃになっている人は多いかもしれない

ビオランテそれほど人気ないのにテレビ放送されるゴジラはだいたいビオランテ

労働収益上昇よりも資産による利益上昇のほうが早いので絶対最後は殺し合いになるシステム

フリップ、プリフロップ、ターン、リバー

なぜディープラーニングシグモイド関数とかレイル関数を使うと生成機が良くなるのかは誰も知らない

みーちみっちみっちうんこたらし、葉っぱがないので手で拭いて、もったいないから食べちゃった

アーナムクンバアダハンバ

ロート製薬副業公認されている。ロート製薬のなんとかいう女キャラがいるんだけどそいつ副業している設定

木原さんそらジローは、TVちゃんと見たことない

あまたつが誰なのか知らない。多分天気予報関係の人だろう。

熱盛が何なのかしらない

24時間テレビヘキサゴンのシーンでバッタ幻覚をみる動画Webから消えている

同じくなんや!とブチ切れるおじさんが出てくる動画Webから消えてる

権利があるからしゃーないだろうけど、面白いからこの手の事故動画公式で見れるようにしてくれ

ずっと頭がかゆい人は、とにかく食生活を直せ。毎日サバ缶を食べて、オリーブオイル使え

絶対市販惣菜とか弁当。ましてやカップラーメンとか、ポテトチップスは絶対に食ううな

基本的加工食品は質の悪い油が使われているので身体に炎症が出るの当たり前である

なので食生活を見直せ。

というか健康マニアなら健康維持するためにまず最初にすることは厚労省が出してるコマの絵を参考に生活全体を見直すことである

コマの絵を知らないくせに健康オタクなんですとか言ってるやつはゴミコマの絵が基本であり、応用はその先である

にゃんちゅーの声の人が死んだ気がする。ゴロリの声の人は死んだし、死んでそうで死んでいないことがいつも話題になってたぱっとサイデリアの人はこの間死んだ

クラシアンの曲も担当してた

クラシアンはボッタクリなので使わないほうがいいような気がする。知り合いの工務店を使おう

8万の高気密住宅を借りるよりも、4万の安普請で2万の電気代使って暖房機たせたほうが資金効率良い

世の中には右手左手で1pと2pをそれぞれ操作してメタルスラッグプレイする化け物みたいな人がいる

子供がなりたい職業第一位プログラマー公務員さえ魅力がなくなってしまった

ノートルダムの鐘ってエスメラルダって奴が超いいやつなんだろ

ザンギエフ出身国ロシアじゃなくてソビエト

マンぐり返しは性別によってちんぐり返しにある。行う人間性別名前が変わる珍しい動作

ウォーリーを探せに丸をつけるやつはバカ

金がほしいとか言ってるやつに限って、ゴミみたいな物事に金使ってて金欲しくなさそう

デブは食べてないっていうけど、引くくらい食べてる。砂糖水飲んでる

猫用のトイレシートを買う時は必ず小さい方を買って、大きい方は使わない

オランジーナペットボトルで蓋を開けるには斜めに力を入れながら勢いをつけて捻らないといけないのを知っている人が最近少なくなった

年賀ハガキは319通りを期待するという人と、010通りの当選を期待するという人がいる

2013年の時点でもう中学生は古いコメディアンという合意世間でなされていた

ラップトップって言うと通じないのでノートPCという

キャノピーと言うと通じないのでコクピットという

献血行こうと思いつつどういう体調なら行ってもいいのかわからない。採血で気分悪くなったことあるので行かないほうがいいのかな

爪は付け根から消えていく場合がある

新型コロナのおかげで人と合わなければ風邪は引かない説が立証された

夜勤は人体の感覚狂わせて寿命が縮むと思われる

時間を切り売りするとは、人生を切り売りすることであり、命を売っていることにほかならない

生命活動の全てはなにに命を燃やすかという選択連続

バヤリースのヤは小さいけど通常のヤと発話される

ASUSエイスース

バミューダトライアングルは多分嘘

オールインできるようなチャンスがやってこないのは単純に他人との交流が少なすぎる

他人との交流を増やすとやっかい人間に当たるデメリットがでかくて、バカ翻弄される人生だったのでかなりショウキョウ的にならざるを得ない

一億円の資産があるなら宝くじに使ってもいい金額は45円

ゴルゴ松本の特技は雲を消すこと

ハンターハンターはそれほど面白くない。なんとかアイランドに入るまでくらいは面白いけど、その後はなんかやたら複雑な人間関係とか能力とかが重なっていって読んでても意味がわからない

寄生獣もそれほど面白くない

沢田ユキオ先生魔界村漫画も描いてる

わぴこはかわいい

レイアースOP曲はミリオンヒットしてます

99%ピロリ菌のせいなんだからピロリ菌いない人はまじでバリウムやる意味ない

というか被爆する事考えたら内視鏡一択。喉とか食道、十二指腸の様子を目視できるのでがまんしなさい

ゼンキはエロい

タルるートくんエロい

おじゃまユーレイくん世代ではない

バーコードバトラーもエロい。でも男の子さくらちゃんが好きです

アメリカではマッスルカーと言います

Pixcel4のフェリカチップのいちはカメラややした付近。改札で使うには画面側からしっかりピンポイントでその位置押し付け必要がある

トラのパーカーを着せられている子供見かけたので、うかれてるなーという感想を持った

地方ホームセンター茶髪多すぎる。茶髪じゃないと思ったらパンチパーマだったりする

家財保険県民共済使っておけばよい

ポップンミュージックの最新作は2012年に発売されたPSPの奴

一日に10G以内の通信しかしない人は、楽天モバイル+テザリングで、電話ネットインフラの利用料金を月額3000円に圧縮できる

モロンは侮辱言葉なので気軽に使わないほうがいい

人間を不幸にするのは環境であり、他人との相対的比較である

比較しないほうがいいとは言えるが、比較しないでいるにはかなりの訓練と素質が必要

なので多くの人間はずっと不幸に囚われて地獄を見るよりほかない

ミル姉さんは知ってても関東土下座組は知らなそう

和田アキ子古舘伊知郎のダッグといえば幸せ家族計画ではなくクイズ悪魔のささやきである

オセロ商標登録

ビーマニ特許は切れてるので譜面が上から落ちてきて音楽に合わせて打鍵するゲームはどんどん作ってよい

よくわからなければロレックスデイトナ買っとけばOK

でも時計とか興味ないので買わない。Miバンドでいいと思う

子供死ぬ原因は通り魔ではなく親自身か周囲の大人のせいであることがほとんど

まれ子供100万譲渡してS&P500で運用し続ければ速攻でFIREする

思い出は奪われないけど、死んだら消えるからやっぱりそこまで固執するものでもない

もっと言うとアルツハイマーになって人格崩壊したら、思い出や知識も消える。失いにくい性質であるだけなので過信しすぎるのも問題ありそう

ラッスンゴレライ vs ニーブラ

あったかいんだからがなんなのかわからない

から来るのを受け流すのはややわかる

鼠先輩が誰なのかはしらない

はじめてゆってぃ名前を聞いたのはとある施設に来ていたキンコメトーク

にこにこキングオブコメディ面白かった。とくに道徳の授業でコントを見せて生徒に感想を書かせた先生が、その感想を送ってきたかいは感動と笑いで最高の感情体験できた

からつらいよね

HTML文字列ををサーバーサイドで動的生成することをレンダリングって言うの違和感あるけど、ガイジンもそう言ってるししかたないっぽい

ミジンコは肉眼で見えるくらいにでかいし、DNA情報人間の何倍もある

原生生物ミトコンドリア細胞内部に取り込んでるとかいう頭いかれた進化している

から今後人間AIを取り込むの当然だし、完全電子化するかもしれない

スピルリナ栄養食品として扱われてる現状になんとも言えない感情が湧き上がってくる

ストロマトライトとかなんか凄いよな

ATP代謝経路を空で言える人は凄い

サーチュイン遺伝子活性化させるには飢餓かNMNが必要っぽい

口寂しさで夜食を食べてしまうので、つらいよね

ロンドンどんより晴れたらパリ

絵が下手な人は人間の顔を真円に勝とうとしがち、野原ひろしみればわかるけど人間の頭は縦長の楕円です

まず後頭部を中心に球体があると想像して、その手前に顎付近のパーツが付属していると考えるのが良い

あたまという一つの切り出したパーツが存在知るのではなく、内部の骨の構造考慮して、頭蓋骨と顎が別れていることを意識するだけでそれっぽくなる

あとは人体を書く場合は足が大きい。

ももはめちゃ太いし足は腕よりも長い。両足で全体重を支える人体構造なのだから当然だけど、絵が下手な人は手と足を同じ太さ、同じ長さで書きがち

vimで左右の文字を入れ替えるのはxp。ただしこれはコマンドの単位が2になるのでアンドゥが二回必要になる

バッファ移動でbコマンドを使うときに、途中までファイル名を入力するとTABで補完できる

gfカーソルが乗っている箇所のファイルパスから対象ファイルを直接開くことができる。

gFを使うとファイルパスの末尾に /tmp/hoge.txt:42 のように行数がある場合指定行に直接ジャンブする

タマランチ会長とかマグワイヤとか、慰安ソープとか、スポーツ用語ってエロいの多くない?

体育館キャットウォークカーテンやたら熱くて真っ暗で遮光性高し


追記:俺はブコメを見てるぞ。センキュー

経験から1ヶ月!Pythonで観る将ライフを向上させた話(プログラム編)

まとめ

プログラミング経験から1ヶ月ほどで、将棋評価値の新たな方法でのグラフ化を行うPythonツールを作った。

https://github.com/k-the-p/notherscore

この記事は2本立てです。プログラミングより結果のグラフ将棋に興味がある方はもう一方の将棋から読むことをおすすめします。

未経験から1ヶ月!Pythonで観る将ライフを向上させた話(将棋編)

目標

評価値以外の観る将の楽しみとして、手の広さの可視化提案する

AIはわれわれアマチュア将棋への親しみを大幅に向上させてくれた一方で、棋士が悩みに悩んだ結果として評価値が下がる手を指してしまったときに、「悪手きたwwww」と騒ぐ主にABEMAのコメント欄には忸怩たる思いがあった。

とはいえ、もう評価値を知らなかった時代に後戻りするなんてことは誰にもできないだろう。そして、電王戦から将棋にハマった自分自身としても、AI否定はしたくない。

であるなら、AIを用いた新しくよりよい将棋の楽しみ方を探っていくしかないのではないか

以前から私は、「AIの手を指せるなら人間も苦労しないんだよなあ」と思っていた。あるとき藤森哲也先生Youtubeチャンネルで言っていたことを聞いて得心がいった。「AIの一手は最強の一手なんです。確かにプラス1000点になるけど一手間違えた瞬間にマイナス何百点になるような綱渡りの手。それよりもアマチュアの皆さんにはプラス数百点で得は少ないけど安全な道、最善の一手を学んで欲しい」(大意)と。

ここで言う「最強の一手」に人間にして最も近いのは紛れもなく藤井聡太四冠であろう。藤森先生アマチュアに向けて喋っていたが、その葛藤は間違いなくプロの中でもあるはずである渡辺明三冠が言うように「藤井くんと全く同じスタイルを今から目指しても絶対藤井くんより強くなれない」のは自明であるからして。

私はここにドラマがあると思う。また、最強の一手と最善の一手が等しく「いい手」に見えてしまうわれわれアマチュアとしては、そこを機械に教えてもらえるのであれば、棋力向上にも繋がりそうである

具体的目標

第1候補手と第2候補手の評価値の差を取ってグラフ化すればよさそう?

(差が小さければ手が広い、差が大きければ絶対手に近い、綱渡り

目指すのはあくまで便利な将棋ツール将棋AIを作りたいわけではないので、将棋AI自体局面を入れたら評価値を吐く謎の箱という扱いでよい。

手法

Python一択

グラフ化や数値の扱いだけでなく、将棋AIとのやりとりをやってくれるあれこれもあるようなので。

あと習得が楽だと聞いた。その話を教えてくれた人はもう10年間英語学習法をブクマし続けてるけど。

あと「読みやすコードじゃないと動かない」って設計思想がかっこいい。ついでに言うといわゆる「おまじない」が少なそうなのも魅力。(CのHello world挫折した経験あり。studio.hって何……)

何をしたか

詳しい人に聞く

プログラム講師をやっている?方が音楽制作を初歩からやってみる、という(残念ながら)リアルタイム視聴者が俺だけしかいないような配信があったので、音楽の基礎(についての知識は持っていた)を教えてあげたお返しのような形で、「pythonでこういうことがしたくてこういうライブラリがあるのはわかった。経験HTML+CSS変数導入前、Bootstrapなんてなかった)のみ。どうしたらよいか」という質問をしたら、「progateは簡単すぎると思うのでPaizaが丁度いいのではないか」というアドバイスを頂き、比較もせずに即登録したのだが結果的にはこれがドンピシャだった。

Paizaラーニング

最近流行りの、環境構築不要で講座の内容を書いて覚えるタイプサイト

無料で入門講座の序盤を受けていたらふと目に入ったのが、「対象者:これからプログラミングを学びたい方。HTMLがどのようなものかを知っている方。」でYoutuber先生オススメ完璧か?と思った。そして実際に完璧だった。

基本的に1講座3分+演習1~2問+やりたければ問題集たくさんという形式なのだが、これが簡単すぎることなく難しすぎることもなく、俺の知識レベルベストマッチだった。基本的に毎回何か書くことになるので、変数とは~みたいな解説だけで終わる回がほぼ無いのも飽きなくてよい。

Python入門(と言ってはいるがまだこれだけで発展編はない)の見出しは「プログラミングとは」「条件分岐比較演算子」「ループ処理」「リスト」「辞書」「多次元リスト」「関数」「クラス」「クラス発展」「例外処理」に各5~8講座*3分+演習、という感じ。クラス発展の途中で行けそうだと思ったのでドロップアウトして実製作に移った。実際関数まで理解していれば、この程度の小さなツールには十分だった(もしかしたらクラスを使えば多少楽になった場面はあったかもしれないけど)。

また、これは書いてる今気づいたことだが、上のコースで学んだことで、実際に役立たなかったものほとんどなかった(強いて挙げれば辞書くらい?使えてないだけかも)。このこともコース構成の優秀さを示している。

ここまででだいたい2週間くらい。

Google colab

もともとこのサービスは知っていたのと、谷合先生が実際に使っていたように、便利そうなライブラリのcshogiが主にcolab(jupyter)上で動かすことを意図しているようだったので、まずここから入った。最初はcshogiが列挙してくれる特定局面での合法手をリストに入れて、そのリストの項目数=その局面での合法手の数を出力することから始めた。これは本当に簡単にできて興奮した。

学習と好きなことが直結してると、こんなサンプルコードみたいな簡単なことで喜べるのでコストパフォーマンスがよい。

cshogiとやねうら王をusi連携する

cshogiのチュートリアルで紹介されているレサ改というAIがどうもmultipv(有望な候補手を2手以上挙げる)に対応してないらしく、強さ的な問題でいずれ手を出すつもりだった予定を繰り上げてやねうら王との連携を試みる。

makeって何?あー、もりかしてMakefileが無いと動かない?(これを書いている今もこんな理解である)みたいな人間でもなんとかやねうら王をビルド?することはできた。レサ改をcshogiに読ませる数行のサンプルコードがとても役に立った。今でもあの完成品らしき拡張子が無いファイルがなんなのか分かってない。(なお、評価関数nn.binが無いと怒られたのでどこのご家庭にもある水匠4のそれをぶち込んだら動いた。評価関数とやねうら王の分担は今もって理解あやふや)(また、途中でAyane[やねうらお謹製ライブラリ]も使おうとしたがcolab上では上手く動かす方法が分からなかった)

一応これでcshogiで局面の最善手と次善手およびそれらの評価値を呼び出せるようになったのだが、単にdebugでずらずらと余計なものまで出力するのではなく、重要な指し手周りのinfoだけ出力するようにしようとしたが、上手いやり方がわからず、結局こうなった。

sys.stdout = open('out.txt', 'a')
engine.go(listener=print)

ここは絶対もっとマシなやり方があるはずなので、識者の教えを請いたい。

ようやくWindowsPythonVSCodeを入れる

Colab上でまあまあ目処がついたので、この辺りでPython環境を作った。ここまでそれをやっていなかった理由は、「おま環」トラブル可能性をなるだけ遠ざけておきたかたかである環境が悪いのか俺が悪いのか分からない、というのは初心者にとって限りなきストレスである。あーネットが繋がらなくてルーターの設定や接続とか支払いとか文字通り部屋をひっくり返しながら調べてたら実はフレッツ自体が落ちてた件を思い出してイライラしてきた。cshogiはJupyter上で動かすことを意図しているようなので、それで動かなければ自分の書き方が間違っているのだとほぼ確実にわかる。

まあこの辺りはいろんなサイト見ながら仮想化などしつつ普通に仮想化が何か分かってないんですけど。

Jupyter notebook

これまでColab上で書いてきたものは多少の書き換えで動いたので、ローカルにJupyter notebookをインストールして、数字計算グラフ化を試みる。

ちなみにこの時点で得られているデータはこんな感じ。

go
info depth 1 seldepth 1 score cp -47 multipv 1 nodes 483 nps 241500 time 2 pv 3c3d
info depth 1 seldepth 1 score cp -86 multipv 2 nodes 483 nps 241500 time 2 pv 4a3b
info depth 2 seldepth 2 score cp -53 multipv 1 nodes 847 nps 423500 time 2 pv 3c3d 9g9f
info depth 2 seldepth 2 score cp -68 multipv 2 nodes 847 nps 423500 time 2 pv 8c8d 7g7f
info depth 10 seldepth 17 score cp -78 multipv 1 nodes 100163 nps 1963980 time 51 pv 8c8d 2f2e 4a3b 7g7f 3c3d 2e2d 2c2d 2h2d 8d8e 6i7h 8e8f 8g8f
info depth 10 seldepth 17 score cp -111 multipv 2 nodes 100163 nps 1963980 time 51 pv 3c3d 7g7f
bestmove 8c8d ponder 2f2e
go
info depth 1 seldepth 1 score cp 117 multipv 1 nodes 206 nps 206000 time 1 pv 2f2e
info depth 1 seldepth 1 score cp 78 multipv 2 nodes 206 nps 206000 time 1 pv 7g7f
...

今回の小目標は、goで区切られた中からから2行目と3行目のcpほにゃららを取得していい感じのリストにする、というものだ。この辺りは正規表現でなんとかなるだろうと見通しを立てたが、実際そうなった。

ただ、後手が見たとき評価値が後手目線なので、それだけにマイナスをかけるのはどうするか(そうしなければ、先手+3000点の次が「後手から見て」-2900点だったりして綺麗にグラフにならないのだ)を調べるのに結構時間が掛かった。

また、詰み周りでまたプラスマイナスカンストの絡む計算をしたくないのもあり、数値にNaNを入れてグラフ表記を省略することにしたのだが、そうするとnumpyの関係整数(とNaN)しか扱わないのに浮動小数点で計算しなければいけなくなって若干気持ち悪かったり。まあ動くのでヨシ!

中間報告

この時点で、ローカルにKIFファイルを保存し、pyファイルでcshogiと水匠を動かし、Jupiter notebookを開き評価グラフと手の広さのグラフを重ねて表示する、というそれなりのものは出来上がった。

簡単に言えばpyファイルで1手10局面(森内チャンネルに出てたHEROZの方が使ってた数字をそのまま使っているので特に意味は無い)探索させ、最善手と次善手についての生の評価データを吐き出させ、ipynbでそれを整形し、グラフ化している。

基本的に全部VSCode上でできるので、慣れれば計算時間も含めて10数秒で結果が出るのだが、このワークフローはいかにも美しくない。

なので、Flaskという簡単らしいフレームワークを使ってローカルWebアプリとして使えるようにしようと思った。inputとoutputをどうにかするだけだから余裕やろ。

Google colabを触り始めてからここまで1日。圧倒的成長!

ローカルWebアプリを作る

Flaskを学ぶ

Paizaラーニング再び。後半ではデータベースとか本格的な話もあるようなのだが、txtに書き込む一行掲示板を作るまでの前半部を高速で履修(演習は全部飛ばした)。なるほどー、こうやってやりとりするのね、と最低限は完全に理解した

モジュール

Jupyter向けのコード普通Pythonに直してあっちで数字を出してこっちでそれを受けて元に戻して……とかやってると循環参照か何かで怒られることに。その対策に細かく部分を分けて関数にしたのだが、その場合ってもしかしてdefの内部しかまれない?(共通部分も読まれると思ってた)(いや、共通部分は読まれるけど他のdef内が見えないのか?何も分からん)なるほど。こうなると関数の内部から上に戻るためにクラスとか欲しくなるのかなーという感想

最終的にWebに公開しようとこの時点では思ってたので、txtに一旦出力するのが安全性的にどうかとか考えてたのだが、テキストの読み取り周りでハマる。結局抜け出せず諦めた。

以降は、HTMLダブルクオートが抜けてるのに一時間気づかないとか、FlaskのXSS対策対策をするとか、ファイル書き込み設定をミスって2万手くらい蓄積されて評価グラフが大変なことになったが、原因に気づかずひたすらグラフ生成部を調べ続けるなど、非本質的問題にかかずらっていたので書くことは特にない。

GithubVSCodeとなら連携がらくらく

なので、最初にgitignoreしてなかったせいで1万ファイルくらい上げそうになったけど、それ以外は特に問題も無く。中間報告からここまで2日ほど。結局1ヶ月かけずにプログラミングをそれなりに身につけることが出来た。「プログラムを覚えたければ作りたいものを見つければいい」というのは本当だな、と改めて思った。

で、どうなったの?

については将棋編の方で詳しく書いています

https://anond.hatelabo.jp/20220107060727

どれくらい書けるようになったのか、を見たい方は主にvalue_output.py(将棋AI思考させてデータを取り出す)とgraph.py(データを整形してグラフを書き出す)を見ていただければいいかと思います

謝辞

最初にPaizaを教えてくださったYoutuberの方、cshogiを初心者でも使いやすいように作って展示してくださったTadaoYamaoka様、水匠開発者のたややん様、水匠含めこんにちの将棋AIの基盤を作ってくださったやねうらお様、cshogiを通して利用したpython-shogiのKIFパーサーを書いてくださったTasuku SUENAGA様に、厚く御礼申し上げます

最後

私は現在仕事Twitterフォロワー募集しています

30歳無職よろしくお願いいたします。

https://twitter.com/k_the_p

2022-01-05

ネットの長文を本にした

本を作った。世界で一冊しかない本だ。

私が超個人的理由で欲しいと思い、完全に自分で楽しむために作ったので、誰にも売られることはないし誰の手に渡すつもりもない。

なぜならこの本の中身は全部他人が書いたものからだ。

インターネットでバズり、有名になったnoteはてな匿名ダイアリー(俗に言う「増田」)・はてなブログ記事コピーアンドペーストし、書式設定を整えて文庫本サイズ編集した。

以前からCiNiiなどで興味を惹かれる論文を見つけてはA4紙に印刷してホッチキスで留めて紙として保持して読んでいた。

理由は3つある。

一つ目は「知識欲・好奇心から」。

二つ目は「創作活動の参考として」。

三つ目は「とにかく文章を読みたい」。

率直に言うと、今回の本に関して、前者2つの理由は全く関係ない。ただ長い文章を読みたかたから紙として本を作った。別に記事ブックマークするに留めてもよかったのだけど、やっぱり記事は削除とかもされるだろうし、そういう事態が起きたときに、どうせ別の長文を読んで満足するだろうと思いつつも、やっはりあの時読んだ文章を読み返したいと思いはするので、これは紙に印字して物理的に所持しておいた方がいいだろうなというのがあった。

書式・タイトル・偉そうに序文まで書いたが、それ以外は全部他人のものだ。だから褒められたことではない。

から個人的ものだと書いたのだ。万が一この本を欲しいと思ったところで、そんなところに金を出すくらいなら自分編集して一冊印刷してもらう方がはるかに安い。製本直送で印刷を依頼した。書式はイズナを使用し、メモ帳にまとめた全ての文章を一括でpdfに変換し、そのファイルを送った。pdf並びにtxtファイルの保存はいずれも有るが、誰にも渡すつもりはない。これは本来そういうものではない。

正直、このことは自分ブログで書きたかったがやめた。ここが自分の弱みだ。肝心なところで日和るんだ。

増田であっても特定はされるだろうが、ある程度時間はかかるだろうし別にいいや。

他人感情を、わざわざ紙に印字するだけに飽き足らず、わざわざ本にまでして、わざわざそのことをインターネットに報告してしまうような変態野郎なんぞ、自分一人で十分だろ。

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