「ディレクトリ」を含む日記 RSS

はてなキーワード: ディレクトリとは

2022-10-18

anond:20221016025527

> ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。

ちなみにmoduleディレクトリの中身は\modules\hypernetworksに移動させて使う。

の間違い?

2022-10-16

NovelAIが重すぎるからローカル環境にNAI環境を構築する(2022年10月16日版)(追記あり)

せっかく課金したのにユーザが増えまくっているのか滅茶苦茶重くなっていて最悪。

から流出したモデルを使ってローカルでNAI環境を構築する。

ネットには情報もだいぶ転がってるけど陳腐化した情報があまりに多いため増田にまとめることにした。

しかたらこ記事もすでに陳腐化しているかもしれないが…単純に間違ってたらトラバで教えてほしい。

もちろん自己責任。この記事を見て導入した結果何かあっても増田は何も保証しない。

英語がわかる人はこっちを見た方が早いと思う。今は導入RTAができるくらい導入は楽になっている。

https://rentry.org/nai-speedrun

推奨環境

VRAMが2GB以上あるNVIDIA製のグラフィックボードがあればローカル環境を構築できる。

GPU世代はGTX700シリーズ以降。なので一昔前のミドル級ボードでも動作するらしい。

IntelオンボードGPUでも実行する方法があるらしい(stable_diffusion.openvino)が今回は割愛する。自分で探してね。

その他の推奨環境は以下の通り。

対応OSWindows7以上(と言うがM1Macでも動作する方法があるとかなんとか)

必要な空きストレージ容量:20GB以上

インメモリ:16GB以上(VRAMもたくさん必要だが起動時にメインメモリも大量に食う。WebUI起動時にタスクマネージャを見ているとよくわかる)

スマホしか持ってないような人やこういうのがよくわからない人はNovelAIを使った方が良いと思う。

今は重いけど、きっとそのうちみんな飽きてサーバも軽くなるかもしれないし。

(追記)NovelAIリソースを確保してサーバが軽くなったかリスクを背負ってまで導入しなくても良いか

手順1:PythonGitを導入する

(追記)Pythonは当然3系。最新の奴を入れれば問題無い。

導入方法はいちいち書かないけど、「python --version」や「git -v」で

正常にバージョン情報が出る(パスがきちんと通っている)ことはちゃん確認しよう。

手順2:Stable Diffusion web UI(AUTOMATIC1111)を導入する

Stable Diffusion web UIはStable Diffusionやそれをベースとした画像生成AIを利用するためのフロントエンド

その中でも特に開発が活発でデファクトスタンダードとなっているのがAUTOMATIC1111版だ。

導入したい適当ディレクトリに対してPowerShellなどで

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

とやってやれば必要ファイルの導入が行われる。

なお、AUTOMATIC1111版は数時間単位コミットが行われるから

定期的に「git pull origin master」で更新しよう。

手順3:BitTorrent流出モデルダウンロードする

クライアントはqBitTorrentが一番楽だと思う。

ここにはさすがにmagnetリンクは書かないか各自ググって欲しい。

結構誤解されがちなことだが流出データ50GBを全部ダウンロードする必要は無い。

必要ファイルはanimefull-final-prunedディレクトリの中身とanimevae.ptから5GBちょっとくらいなんじゃないかな。

もし余裕があるならmoduleディレクトリの中身もダウンロードすればいいけど、ぶっちゃけ必要無いんじゃないか

手順4:ダウンロードした各ファイルリネーム・移動

まずはanimefull-final-prunedの中身のファイルリネーム

model.ckpt」を「animefinal-full-pruned.ckpt」のようなわかりやす名前にして、

「animevae.pt」を例えば「animefinal-full-pruned.vae.pt」のような拡張子以外は同じファイル名にする。

WebUI起動フォルダ配下の\models\Stable-diffusionリネームしたファイルを移動させれば配置はOK

ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。

それらのファイルを設定で適用させると画風が結構変わるがNovelAI再現とは関係無いみたいだ。

(追記)moduleディレクトリの中身の.ptファイルはhypernetworksという技術によって画風などを学習したものらしい。

すでに複数イラストレーターの画風を学習したptファイル作成されており議論を呼んでいる。

手順5:webui-user.batの中身に設定を追加する

自分グラボのVRAMが4GB未満の場合は「set COMMANDLINE_ARGS=」の後に

4GB未満の場合は「--medvram」、2GB未満の場合は「--lowvram」とパラメータを追加しておこう。

自分の持ってるグラボのVRAMがわからないときGPU-Zなどで調べよう。

またGTX1600系固有のバグ(単色の画像が出力される)があるらしいので

その場合は「--no-half-vae」もしくは「--no-half」や「--precision full」とパラメータを追加。

ちなみにパラメータに「--xformers」を追加してxformersを導入・使用すると

消費VRAMが減って画像生成処理時間も短縮されるので是非導入しよう。

画像からdanbooruタグAI調査するdeepdanbooruを利用する場合は「--deepdanbooru」を追加。

これらの設定は同時に複数適用させることもできる。例えば

set COMMANDLINE_ARGS=--medvram --xformers --deepdanbooru

のようになる。

手順6:webui-user.bat起動、設定変更

ターミナルPowerShellなどでwebui-user.batを起動しwebUIの初期導入と起動を行う。

過去には手動でCUDA等を導入する必要があったが、現在はこの初期導入でだいたいの導入が行われる。

ずいぶん楽にはなったがその分初期導入の時間結構長い。10分~20分くらいかかるかもしれない。

途中で導入処理がエラーで止まってしまった場合管理者権限で実行するなどして対応して欲しい。

起動ができたらSettingで以下の設定を変更してNovelAIに近づける。

Stop At last layers of CLIP modelを2に、

Eta noise seed deltaを31337にする。

これで設定は完了

おまけ:アスカテスト

設定を合わせて完全にNovelAIと同じ内容になったのかを確認するテストがある。

出力結果から海外じゃHallo Asuka Testなんて呼ばれている。

これは初期SEEDをはじめとする設定内容が完全に一致していれば同じ出力結果を得られる仕組みを利用している。

プロンプトの内容:masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair

ネガティブプロンプトの内容:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

サンプリングステップ数:28

サンプリング形式:Euler

CFG Scale(プロンプトの強度):12

初期Seed2870305590

この内容で見事下の画像と全く同じ画像が出力されれば合格だ。

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

なお、このテストはAUTOMATIC1111のバージョンやxformersの適用状態によっては微妙に違う画像が出力されることがあるらしい。

xformersを適用させている増田環境だと確かに二つ並べると間違い探しレベルの違いがあった。

正直このテストクリアしなくても十分だと個人的には思う。

おまけ2:その他便利になる設定や拡張機能

「Booru tag autocompletion for A1111」を導入すればNovelAIのように自動danbooruタグを保管してくれる。

注意

画像生成AIモデルはStable DiffusionOSSのため派生結構多い。

自前で追加学習もできるため自前で学習した追加AIモデル4chanのような掲示板などで共有する人もいるらしい。

しかしそのようなモデルの中にウィルスのような悪意のある動作を行うものもあるらしい。

FBIペドフィリア一網打尽にするためにIPアドレスなどの個人情報を抜き出す動作を行うロリ特化AIモデル掲示板で配布していて

しかもそれには本物の児童ポルノ教師データとして使われている…などという都市伝説的な話が今界隈を賑わせている。

それが本当の話かどうかはわからないが、とにかく変なところからモデルダウンロードするのは危険なのでやめよう。

自己矛盾溢れる注意喚起かもしれないが…

2022-10-14

株式会社アルゴリズムSEOは相当賢いと思う

最近話題になっている株式会社アルゴリズムについて

知らん人は以下を参考に。

https://suan.tokyo/affiliaters_branding/

ここでされているのはいわゆる「サイト貸し」や「ディレクトリ貸し」と呼ばれる手法である。これは数年前から話題になっていて、SEO業界で有名な辻氏も警鈴を鳴らしていた。

しかし、この手法はかなり賢い。

welq問題ときにされていたのは「コンテンツ重要なので、やたらと充実した長文を書くのがいい」という手法だ。しかし、これでキュレーションブームが激しくなり、検索品質が下がってしまったため「ドメインごとランクを落とす」という手法Google対応をした。

明らかに手動としてか思えない、当時、ドメインへのペナルティが行われていた。1位だったのが、30位以下になる、といった形だ。2chまとめもこの手法で落とされている。

その後「信頼できる大手サイトか、大手サイトからリンクを重視する」というアルゴリズムらしきものGoogle採用される。ぽっと出てきたばかりのメディアよりも、toyota.comやasahi.comのほうが信頼がある、といった具合だ。

これをハックしたのが、mybestである。「mybestで紹介されました」などで検索をすればわかると思うが、やたらとmybestで紹介されたことをサイトに載せている企業が見つかる。

https://www.google.com/search?q=mybest%E3%81%A7%E7%B4%B9%E4%BB%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F&oq=mybest%E3%81%A7&aqs=chrome.1.69i57j69i59.3451j0j1&sourceid=chrome&ie=UTF-8

文章タイトルの傾向からみて、あくまで推測ではあるが、mybest側から「紹介したのでプレスリリースサイト内に掲載してください。売上が伸びますよ」的な営業をしているのではないだろうか。

これにより、mybestは信頼できる企業からの大量のリンクを集めることができランクをあげている。穿った見方をすれば「ランクに載せたことを掲載してくれる企業商品は上位にあげやすい」というのが起こりうるとも言えるが、そこは編集独立を信じよう。

mybestのこのやり方は、非常に賢い戦略だと思うが、それでもリスクは残る。先程書いた「ドメインごと下げられる」だ。

mybestがあまり検索上位に来ることが問題になれば、こういった対応も考えられるだろう。mybestは専門家も入れた上で、記事を作っているので、スパム扱いされることはないだろうが、「明らかに企業からリンク意図的に増やしている」となると、そのプラス分を0にされることは可能性としてあり得る。

そして、株式会社アルゴリズムのやっている「サイトを間借りする」の手法だ。

これは、病院や士業の事務所大手企業などのディレクトリを借りてアフィリエイトサイトをやることである

信頼できるサイトしか上位にでないなら、その信用できるサイトの中にアフィリエイトサイトを作ってしまえ、という発想だが、これは事業としてやるのはメリットしかない。

それもそのはず、もしもGoogleからスパム扱いされて、そのサイトドメインランクが落とされたとしても、別のサイトを見つけて移し替えればいいからだ。ディレクトリ貸しをしたサイトは二度と検索上位には戻らず、下手すれば100位にも入らなくなるが、アフィリエイトサイトからしてみれば無傷である

ほぼノーリスクである

サイトを間貸ししている事業社は当然こんなことは知らずに貸していると思うが、株式会社アルゴリズムからしてみれば「Google検索アルゴリズムブラックボックスなんでわからない」という逃げ道がある以上、責任を問うことはできない。

Google対策をする可能性は十分に考えられるが、それまでに儲けきって、かつ事業を売却してしまえばとんでもない額の売上が入る。

たとえば、SEOが強かったmoto株式会社という、個人がやっていたアフィリエイトサイトログリー社が7億円で買収したが、のれん4.9億円を減損している。上位でほぼ見かけることはほぼなくなったので、収益が相当減少したと思われる。

https://docs.sakai-sc.co.jp/article/m-and-a/moto.html

ある意味moto氏は抜群のタイミングで売り抜けたわけであり、ビジネスセンスを感じさせる。

株式会社アルゴリズムも同じような形で、短期で駆け抜けて、とんでもない額で事業売却をし、大成功するだろう。

株式会社アルゴリズムSEOビジネスは相当賢いと思う

最近話題になっている株式会社アルゴリズムについて

知らん人は以下を参考に。

https://suan.tokyo/affiliaters_branding/

ここでされているのはいわゆる「サイト貸し」や「ディレクトリ貸し」と呼ばれる手法である。これは数年前から話題になっていて、SEO業界で有名な辻氏も警鈴を鳴らしていた。

しかし、この手法はかなり賢い。

welq問題ときにされていたのは「コンテンツ重要なので、やたらと充実した長文を書くのがいい」という手法だ。しかし、これでキュレーションブームが激しくなり、検索品質が下がってしまったため「ドメインごとランクを落とす」という手法Google対応をした。

明らかに手動としてか思えない、当時、ドメインへのペナルティが行われていた。1位だったのが、30位以下になる、といった形だ。2chまとめもこの手法で落とされている。

その後「信頼できる大手サイトか、大手サイトからリンクを重視する」というアルゴリズムらしきものGoogle採用される。ぽっと出てきたばかりのメディアよりも、toyota.comやasahi.comのほうが信頼がある、といった具合だ。

これをハックしたのが、mybestである。「mybestで紹介されました」などで検索をすればわかると思うが、やたらとmybestで紹介されたことをサイトに載せている企業が見つかる。

https://www.google.com/search?q=mybest%E3%81%A7%E7%B4%B9%E4%BB%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F&oq=mybest%E3%81%A7&aqs=chrome.1.69i57j69i59.3451j0j1&sourceid=chrome&ie=UTF-8

文章タイトルの傾向からみて、あくまで推測ではあるが、mybest側から「紹介したのでプレスリリースサイト内に掲載してください。売上が伸びますよ」的な営業をしているのではないだろうか。

これにより、mybestは信頼できる企業からの大量のリンクを集めることができランクをあげている。穿った見方をすれば「ランクに載せたことを掲載してくれる企業商品は上位にあげやすい」というのが起こりうるとも言えるが、そこは編集独立を信じよう。

mybestのこのやり方は、非常に賢い戦略だと思うが、それでもリスクは残る。先程書いた「ドメインごと下げられる」だ。

mybestがあまり検索上位に来ることが問題になれば、こういった対応も考えられるだろう。mybestは専門家も入れた上で、記事を作っているので、スパム扱いされることはないだろうが、「明らかに企業からリンク意図的に増やしている」となると、そのプラス分を0にされることは可能性としてあり得る。

そして、株式会社アルゴリズムのやっている「サイトを間借りする」の手法だ。

これは、病院や士業の事務所大手企業などのディレクトリを借りてアフィリエイトサイトをやることである

信頼できるサイトしか上位にでないなら、その信用できるサイトの中にアフィリエイトサイトを作ってしまえ、という発想だが、これは事業としてやるのはメリットしかない。

それもそのはず、もしもGoogleからスパム扱いされて、そのサイトドメインランクが落とされたとしても、別のサイトを見つけて移し替えればいいからだ。ディレクトリ貸しをしたサイトは二度と検索上位には戻らず、下手すれば100位にも入らなくなるが、アフィリエイトサイトからしてみれば無傷である

ほぼノーリスクである

サイトを間貸ししている事業社は当然こんなことは知らずに貸していると思うが、株式会社アルゴリズムからしてみれば「Google検索アルゴリズムブラックボックスなんでわからない」という逃げ道がある以上、責任を問うことはできない。

Google対策をする可能性は十分に考えられるが、それまでに儲けきって、かつ事業を売却してしまえばとんでもない額の売上が入る。

たとえば、SEOが強かったmoto株式会社という、個人がやっていたアフィリエイトサイトログリー社が7億円で買収したが、のれん4.9億円を減損している。上位でほぼ見かけることはほぼなくなったので、収益が相当減少したと思われる。

https://docs.sakai-sc.co.jp/article/m-and-a/moto.html

ある意味moto氏は抜群のタイミングで売り抜けたわけであり、ビジネスセンスを感じさせる。

株式会社アルゴリズムも同じような形で、短期で駆け抜けて、とんでもない額で事業売却をし、大成功するだろう。

2022-09-05

anond:20220905135032

2000年なめるなよ メールサーバもあったわ Zoomはなかったけど

いまだに「[最新版]資料_改_temp_ver2(3)_20220905.pptx」みたいなファイルを手作業で掘ったサーバディレクトリに放り込んで運用してる感じですか……

2022-08-24

anond:20220824081750

昔、ストレージのことを「シー」というおっさんがいて、

 

おっさん「シーに保存した?」

俺「え?」

おっさん「シーに保存した?」

 

言いたいことはわるけど、ネットワークドライブに保存してたか意思疎通に齟齬があるといけないと思って

俺「共有ディレクトリに保存しましたけど」

と言ったらなんか黙られたわ。

2022-08-12

anond:20220812171944

動けばいいというだけでも、本番サーバのどのディレクトリPHPソースをアップしてとか、場合によってはサーバリモートログイン必要だし、簡単ではないと思うんだよな。

動かしたいものWebページである以上、仕方ないが。

なんでそんなにコマンドラインを目の敵にするんだか

anond:20220811155256

↑を書いた元増田ですが、VBの話から派生した話で、やたらコマンドライン(以下CLI)を使った開発に否定的人間がいて閉口した件。

そりゃ一口に開発と言っても色々なので、本当に統合開発環境(以下IDE)だけで開発するケースもあるのは、こっちも知ってるんだよ。

から学習者の中で「何をやりたいか」が既に決まっているなら、CLIを全く触らずプログラミングを学ぶケースもアリということなのだろう。

でも、これには主に2つの理由で全く納得がいかない。

1つ目は、そもそもプログラムって何?」というレベルの人が「何をやりたいか」なんて決まっているわけがないので、最初から「何をやるか」を決めてかかるのはナンセンスという話。

しろどういう開発に進んでもいいように、「等号は代入を意味する」辺りから始まって、どんなプログラミングでも基礎の基礎になる、データ構造アルゴリズム意識させることに集中させたい。

そのためには難易度低めで比較潰しが効く言語を、できるだけシンプルな手順で作業できる開発環境で学べる方がいい。

そしたらPythonの実行環境とそこそこ以上の機能を持つテキストエディタを入れて、コマンドプロンプトとかPowerShellとかのCLIから"Helllo, world"が取っ掛かりだと思うわけ。

もしLinux環境が用意できるなら同じことをLinuxでも試してもらって、プラットフォーム依存しない開発の入り口くらいを知っておければベター

いずれにせよ何かを実行する方法が1つではないという重要な知見は、できれば基礎のうちに知ってもらいたいことの1つだし、それはWindowsLinuxとかCLIIDEという対比がうってつけかなーと。

ちなみにIDEは、Pythonによる手続きプログラミングに慣れた後のタイミングで学べばいいと思う。

そこまで行ったら変数の型や、クラスオブジェクトとかの難しい話をGo言語で学んでおくことで、現場で使われているJavaC#swiftへの移行もスムーズになりそうだし。

ちなみに「初心者コース」の最後、もし可能ならRustでポインタメモリの話の触りくらいを体験してもらえると、組み込みに進む際のハードルが少しは下がるんじゃないかな。

もう1つは、いくら現場によってはIDEだけで開発する現実があっても、CLIを使った開発がどういうものかくらい、プログラマにとっては知ってて当たり前じゃねーの?という話。

もちろん「プログラマが何を知ってて当たり前なのか」は、時代の移り変わりとともにどんどん変わる。

大昔ならおそらく機械語とかが必須だっただろうけど、今なら機械語よりはHTMLを読めるほうが遥かに重要なわけで。

あと、UNIX系OSパーティションごとに主要なディレクトリを分割してインストールしていた時代であれば、edエディタの使い方は必須だったと聞く。

(/binに入るエディタedのみだったため、もし使えないとシステムクラッシュして/以外マウントできなくなったときに詰む)

でも今やそんなの完全に過去の話どころか、viemacsの論争ですら多分古い方の問題になるだろう。

そういう過去の諸々も踏まえるとCLI未来永劫、プログラマにとって常識的ナレッジだとは自分も思っていない。

でも今はまだ、プログラマを名乗るならCLIからコンパイルだ実行だくらいの基礎は知ってて当然だと思うんだが。

(流石にmakeまで知ってる必要はないと思うけど)

ということで、自分の言ってることはそこまでおっさん臭くないつもりなんだけどね。

本当に、何がそんなに引っかかるのか意味がわからない。

2022-08-02

[]Git

Git(ギット[2][3][4])は、プログラムソースコードなどの変更履歴を記録・追跡するための分散バージョン管理システムであるLinuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクト採用されている。Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。現在メンテナは濱野純 (英語: Junio C Hamano) で、2005年7月から担当している。

Gitでは、各ユーザワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークアクセスできないなどの理由で中心リポジトリアクセスできない環境でも、履歴調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である

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-06-24

Windowsの非インストーラー版のソフトって皆どこに解凍(展開)して置いて使ってるの?

 

インストーラー版だったら大抵は勝手にC:\Program Filesと指定されて展開されるからソフトを置いておく場所に迷うことはないけど、

ZIP版とかのみのソフトだと、自分で展開先(置く場所)を決めて管理しないといけないけども、そうなると「どこに置こうか」という判断に時たまふと地味に悩む。その場合どこに置くのがいいのか。

 

(たとえば使い捨て用途ソフトだったら用が済めばすぐ捨てるからデスクトップ上だろうがCドライブ直下だろうがどこに展開して使おうがソフトを置く場所にこだわりはないだろうけど。)

 

皆は使い続けるソフトはどこに置きまとめているの?

 

 

しっくりこなくて地味に悩む。

最近PCを新調したので薄々思っている事をこの際書いた。



検索用:

フリーウェア フリーソフト 保存先 保存場所

2022-06-23

CTFやっている人ってさ、漫画村すら落とせなかったんだよな

結局、公開ディレクトリ存在しているmysqlダンプたまたま見つけた人によって事件は進むことになったけど、CTFで学んだことで運営特定できなかったのかよ。CTFっていう砂遊びばかりやっていて楽しいかい

2022-05-27

anond:20220527060638

winだと売ってるパソコン多すぎてディレクトリ構造結構違うんで

環境設定でうまくいかない時に対処法探すの大変やねん

でもmacmacしかない。対処法を見つけやすい。

日本語になくても英語でも調べられる。

問題があったとき解決法の探しやすさ、みたいなので選ばれてる気がする。

ターミナル最初から入ってるし。

2022-05-18

暗号化からない

ブラウザゲームって暗号化しててもF12で元画像抜けるもんじゃないの?

とかなんとか思って、暗号化って意味あるかなあと調べてるけど調べ方下手くそわからん

通信規格の話が出てくるけど、仕組みによってゲーム開発者の何が守られるかというか、メリットが知りたいというか

なんとなーく調べた感じ、そもそもディレクトリ場所隠せればOK(表示されてるものに関しては仕方ない)ってことなんか?

素材抜き出し=全部引っこ抜かれること?

まあ抜かれないに越したことはないし、抜くやつも抜くやつなんだが…

それはそうとしてシャニ暗号化記事はなんか過ごそうと思いましたまる

2022-05-06

[]RStudio最新版インストールするスクリプトを書いた(Debian/Ubuntu)

RStudioがPCから気がついたら消滅していたので何回もやり直すのが面倒で書いた

Debian/Ubuntubash

コメントアウトをいじればFedoramacOSでも動くと思う

https://pastebin.com/HiPqLVq7 (6/4 shコマンドでも動くように修正 以前はbash hogehoge起動していたので動作確認していなかった)

エラーでここに貼れなかった

実行したディレクトリダウンロードする

パッケージインストールするのでsudoとかが必要

必要パッケージについて(コメントアウトオフに)

util-linux(rev) libxml2-utils(xmllint) gpg curl coreutils(sha256sum)とR関連

  1. rev まずデフォルトで入っている 文字列を逆さまにするコマンド
  2. xmllint 同上 xpathを扱えるコマンド(xmlを扱うコマンド) Debianでは入っていなかった
  3. gpg 同上 署名関連 これがないとインストール出来ない環境もある
  4. curl 同上 getリクエストとかを送れる bashだけでHTTPとかを送るのは苦痛なので
  5. sha256sum 同上 ハッシュ値確認
  6. R関連 これがないと動かない
コード関連備考
xmllint
echo "$HTML" | xmllint --nowarning --xpath hogehoge --html - | hogehoge

こうしないとxmllintがエラーでhtlmなどをうまく読み取らない

sed 's/href="//g;s/"//g;s/\s/\n/g;s/^.?$//g;s/^\n//g'

href="hogehoge"の形で出てxmllint内で除去出来なかったのでsed妥協

hrefが1回しか出ないのでひとまとめにできそうだが面倒なので分けた

この書き方なら複数回出ても除去できるはず

先頭の謎のスペースの除去が面倒だった

sha256sum
echo "$HASH"  "$FIELNAME" | sha256sum --status -c ;echo $?

スペースが2つないと書式で怒れられてハッシュ値が合っていてもsha256sumが終了ステータス0で正常終了を返してくれない

使ったツール

VScodium

ShellCheck

https://open-vsx.org/vscode/item?itemName=timonwong.shellcheck

XPath Helper

https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl

最後

zenn.devに書こうか迷ったがどちらの方が良かったのだろうか…

ダウンロードしたサーバーがやられてるならハッシュ値改ざんするだろうgpgで確認しないと意味ないでしょとかsudoでやったらディレクトリがとか色々ガバあるからかいい感じに改良して

参考

https://cran.rstudio.com/bin/linux/debian/

https://www.rstudio.com/code-signing/

https://www.rstudio.com/products/rstudio/download/

2022-04-12

anond:20220411235320

開発ディレクトリとか気がついたらGoogleキャッシュされてたこと何度もあるし、ベーシック認証はやっとかないと

2022-04-09

なぜ開発用PCmacがいいのか問題

macターミナルをすぐに使用できるから

winでも問題なく使えるけど、初心者だと環境整えるのが大変っていう。

 

win入ってる廉価PCってディレクトリ構造が標準と違ってたりして環境構築がうまくいかなくてスムーズ学習に入れない事がある。

廉価PC使ってる初心者がそのせいでなかなか学習スタートできないのをよく見る。

 

macmacって名前ついてりゃ基本的構造は同じだし。調べたらすぐに解決策が出てくる。

廉価PCは中の構造カスタマイズされてて、そのせいで開発用システムが動かないトラブルが多い。

しかも廉価PCは有名じゃないやつだと調べても改善策が出てこない。時間がかかる。

2022-02-06

anond:20220206163155

昔のyahooみたいな、ディレクトリ側の検索エンジンが復活してもいいのかな、って最近思う。

2022-02-01

[] あるディレクトリXの下に存在するファイルのこと

ディレクトリX配下にあるファイル

って呼ぶ?

ディレクトリX以下にあるファイル

って呼ぶ?

ディレクトリ以下”

約 89,200 件 (0.35 秒)

ディレクトリ配下

約 83,800 件 (0.33 秒)

すぐ下にあるなら直下FAだろうけど

2022-01-25

anond:20220125141559

俺は設計より実装の方が苦手だわ。プログラミング言語特に脈絡のない仕様ファイルオープンして1行読むのってどうやるんだっけ?改行コードの扱いはどういう仕様だっけ?EOF判定はどういう関数だっけ?str2numに対応する処理の関数はなんだっけ?文字コードがUTF8じゃない場合にはなんか特別引数書かないといけないんだっけ?1行読んでポインタを先頭に戻したい場合はどう書くんだっけ?ていうかディレクトリ内のファイルリスト取得する関数はなんだっけ?あー余計なファイルをはじくための正規表現仕様はなんだっけ?.......)が全く記憶できなくてすげーストレス。なんど覚えても雑然としすぎていてすぐ忘れる。ファイル云々に限らずプログラミング一事が万事全部そうだし…。

設計とかアルゴリズムのものの構築はもっとずっとすっきりした数学論理学的な構造で考えられるから楽。

2022-01-22

User Profile Service サービスによるサインインの処理に失敗しました。

User Profile Service サービスによるサインインの処理に失敗しました。ユーザープロファイルを読み込めません」

Windows新規作成したアカウントログインできない問題が発生。

巷で流れる解決策では解決できなかった。

システムファイルは破損していないし、そもそも既存アカウントログインできなくなるという問題が多く、その解決方法レジストリファイルの修復であったからだ。

アカウント作成時点ではユーザーファイルレジストリへの追加もされていないから。無いものはいじれない。

結局解決方法なのだが、指定された場所に「Default」のディレクトリ存在しなかったから。

レジストリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Defaultキーの値がなぜか

%SystemDrive%\Default

になっていた。

そこにDefaultディレクトリはなく、正しくは

%SystemDrive%\Users\Default

である

ログオンのアカウントは初回ログオン時にこのDefaultからコピーするらしく、これを参照できなかったためアカウントディレクトリ作成できずログオンに失敗していた。

レジストリUsersディレクトリへの追加とは別に、画面上のアカウント一覧では「アカウントを作っただけ」のアカウントもあり、アカウントを追加しただけでレジストリUsersディレクトリへの追加がされると思っていて、これがなされない原因を探して遠回りしていた。

値が変わった原因としてはおそらくインストール時にプロファイル場所を移そうとProfilesDirectoryキーを弄っていたのだが、その過程で変更してしまったのかもしれない。

解決に貢献したURLとして

http://nambei-x.seesaa.net/article/285886703.html

を挙げておく。

ログオン失敗の原因がDefaultディレクトリにあるということを示唆してくれた。

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