はてなキーワード: Desktopとは
当方アラフォープログラマー。Gitはターミナルで使っている。
若手から「PRマージしようとしたらconflictしてるので解消方法教えてください。」と言われ見たのだが使ってるのがGitHub Desktop。
どうやら最新化してないmainからbranchを切っていたのが原因だったようで、まず手元のmainを最新化しようとしたのだが、そもそもどこでgit fetch, git pullできるか分からない。
若手にfetchしてと言っても若手もピンときてない。
よく分からないのでググってみるが、見た目が違うものが出てきてよく分からない。
30分くらいあれやこれや調べたが結局よく分からなかったので、こちらで巻き取って手元のターミナルでrebaseしてpushし直して2分程度で解消。
もちろんこちらがGitHub Desktopに慣れてないのもあるし、「CLIこそ至高!」とか言ってるのは老害感あると思うが、それにしてもGitHub Desktopの非直感的なUIと、ググっても全然使い方、特にconflict解消のような困ったときどうすればいい系情報が全然出てこないのはコマンドのGit使うよりよっぽど難易度が高いのではと思ってしまった。
GitHub Desktop利用者で読んだ人いたらぜひ「ここに載ってるよ。これだからCLI中の老害プログラマーは…」などコメントほしい。
Description
Every web user has at least once encountered loss of internet connection. This happens for a variety of reasons, such as a dysfunction in the cellular network or a broken internet cable. However, regardless of the reason, every Google Chrome user sees the Dino game (when there is no internet) instead of a plain blank error page. This game can be played without an internet connection.
Play game: Dinosaur T-Rex Game
Despite the fact that the game is just a plain runner that’s built into the Google Chrome browser, the developers behind it still deserve a round of applause. The peculiar monochrome graphics and the simplicity make the game even better, and it has gained a lot of worldwide fans since its launch.
The main character of the game is a classic dinosaur, a Tyrannosaurus rex, the species we usually see in movies and books about dinosaurs. It’s a carnivorous type of dinosaur from the Cretaceous. In the game it runs through the desert, encountering pterodactyls and cactuses that need to be avoided by jumping or ducking. As the distance the dinosaur has traveled increases, so does its speed, which is why it’s quite difficult for an inexperienced player to get a high score, even though the game itself seems easy.
Surely, all of you are curious about the development of the Chrome Dinosaur Game Online, so let’s take a little trip back in time.
The development of the T-Rex game dates back to September 2014, however, the final improvements were completed only in December of that same year. The adjustments supported earlier versions of the Android operating system.
Sebastien Gabriel, one of the designers of the game, says that the T-rex was chosen as a funny reference to "prehistoric times", when highspeed internet wasn’t so widely spread.
The T-rex was also not an accidental choice. The offline Chrome Dino game (without internet) was also called "Project Bolan", referring to the popular singer Mark Bolan from the 70s band "T-Rex". While creating the game the programmers also thought about making Dino growl or kick. Eventually these features were rejected in order to keep the game simple and "prehistoric".
How to open the T-Rex Chrome Dino Game?
In order to open the game you can simply type chrome://dino/ in the address bar. The game will open even if you’re connected to the internet, so there’s no need to disconnect.
The majority of internet users have Chrome as their default browser. However, if you’re using a different one, our website can help. Here you can play the T-Rex Dinosaur Game using any browser and any device, like a desktop computer or even your cell phone.
・端末がすぐ出せる
Input Method廻りがほぼ完全に決まった規格でもないので、ディストリ以上の統合型のものしか無理だろってのはあって、
それはChromeOSだったり、Googleサービスがデカップリングされている中国におけるLinux Desktop(OpenKylin含む)になるよね。
Input Methodがあまり重要でない英語・欧州でも、PCベンダー(ビルダー)がずっとメインをLinuxにしているか、もしくは自前でディストリもってるレベルが必要で、それでやれているのはSystem76がもう十五年ぐらい生き残ってるけど、ほかにもStarlabs、Junoぐらいだしね。でもやっぱり、たくさん生き残れるほどの市場ではないんだよね。あとやっぱりUEFI Firmwareが壁になりやすい。Corebootを商用に仕上げるのはそれなりに大変だから。
Windowsのvirtual desktop(以下個別のvirtual desktopをvdNと表記)はdisplayと直交概念になってて、monitorが増えてもvd1はvd1だし、vd2はvd2で、それぞれに複数のdisplayが生える。従ってvirtual desktopを切り替えると全てのmonitorが切り替わる。
しかし、Macのvirtual desktopはなんかおかしい。
Macにmonitorが増えると、それぞれのmonitorにdesktopが存在する。
ではvirtual desktopはそれぞれのmonitorに生えるのかと思うと全てのmonitorに個別に生える。
ではvirtual desktopがmonitorの従属物なのかと思うと、新しいmonitorに生えた新desktopに手元のwindowが移動したりする。
どういう抽象化なのさ? こうなったら便利だな、をあまり考えずに実装した感じで非常にあつかいづらいし、納得いかない。誰か納得できる説明をくれい。
何か月か前に話題になっていたIntel N100の中華ミニPCにひかれて、5年以上ぶりに自宅の端末を入れ替えた。Intel N100+メモリ16GB+SSD256GB程+Win11pro付きでお値段2万円強という、信じがたいコスパ。
必ずしも優れているとは言えないスペックでWin11を快適に使うために、買ってから最小限やった設定を書いておく。
※本当はhttps://anond.hatelabo.jp/20191116220232さんのWindows11版の記事が出てればそれで事足りたのだけど、見つけられなかったので投下してる
あんま気にしたくはないが、何が入ってるかわからんので一応OSはクリーンインストールし直す。
ファイル名を指定して実行→SYSTEMPROPERTIESPERFORMANCE
# 初期画面を「PC」へ
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v LaunchTo /t REG_DWORD /d 1 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer /v ShowRecent /t REG_DWORD /d 0 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer /v ShowFrequent /t REG_DWORD /d 0 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer /v ShowCloudFilesInQuickAccess /t REG_DWORD /d 0 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowInfoTip /t REG_DWORD /d 0 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v FolderContentsInfoTip /t REG_DWORD /d 0 /f
# 空のドライブは表示しないOff
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v HideDrivesWithNoMedia /t REG_DWORD /d 1 /f
# 同期プロバイダー通知Off
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSyncProviderNotifications /t REG_DWORD /d 0 /f
ここら辺はhttps://anond.hatelabo.jp/20191116220232さんとほぼ変わらんので説明略。ここまでだけでも必要十二分には軽量化出来ている。
# コンパクトビューON ※エクスプローラの初期値の行間がなぜかWin10より広げられているので、戻す。
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v UseCompactMode /t REG_DWORD /d 1 /f
# 右クリックメニューをWin10以前に戻す ※初期状態ではWin10に比べ機能が大幅に絞られており、Windowsに慣れている人ほど使いづらい。ので、戻す。
cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /ve /f
# スクロールバーの幅を広げる ※エクスプローラのスクロールバーまで細くなってしまった。おっさんの目にはきついので、太くする。
cmd /c reg add "HKCU\Control Panel\Desktop\WindowMetrics" /v ScrollWidth /t REG_SZ /d -330 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v TaskbarDa /t REG_DWORD /d 0 /f
# タスクバー:チャット非表示 ※自宅でまでteamsとか使いたくない
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v TaskbarMn /t REG_DWORD /d 0 /f
# タスクバー:Web検索無効化 ※Webへの導線を切れば比較的使いやすい検索インターフェースになった
cmd /c reg add HKCU\Software\Policies\Microsoft\Windows\Explorer /v DisableSearchBoxSuggestions /t REG_DWORD /d 1 /f
# クラウドコンテンツ無効化 ※NetflixとかAmazonとかあそこら辺のやつ
cmd /c reg add HKCU\Software\Policies\Microsoft\Windows\CloudContent /v DisableWindowsConsumerFeatures /d 1 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate /v AutoDownload /t REG_DWORD /d 2 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v HideFileExt /t REG_DWORD /d 0 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v Hidden /t REG_DWORD /d 1 /f
cmd /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowCompColor /t REG_DWORD /d 1 /f
サイズ→気が済むまで拡大
ポインター - デザイン→Windows標準(大きいフォント)(システム設定)
ありました。
表示されているデスクトップはユーザー名下Desktopで、onedrive上にあったデータの移動先がユーザー名下デスクトップに保存されてました。
ユーザー名下デスクトップからユーザー名下Desktopに移動して無事終了。
クソでかため息がリアルにでたわ。
以前にも書いた増田です。
本日2回目やられました。
会社の上司から「onedriveの容量が一杯だとうるさいからどうにかしてくれ」の相談。
聞いてみると、どうやらデスクトップにスマホで撮影した動画や写真を溜め込んでいるらしく、それがonedriveの自動設定でバックアップオンになっているらしい。
「あー、じゃぁonedriveからバックアップ設定をオフにすればいいですね。もしくは別のフォルダにコピーしてください。」と答えるも相手はちんぷんかんぷんな顔。
onedriveの設定から「重要なPCフォルダーをonedriveにバックアップする」の項目を発見。
「このPCのフォルダーをバックアップする」のデスクトップにチェックが入っていることを確認。
オフを押す。
(後ろで娘の写真データとか動画がどうたらとか上司がうるさい。お前、このパソコン私物やんけ。)
「PCとonedrive上のどちらも残す(推奨)」「onedrive上のみ」「このPCのみ」のような選択肢が現れたので、「このPCのみ」にチェックを入れてOKをクリック。
以前、onedriveにバックアップを削除された際に、再現できないか試していたのでonedriveの設定はある程度把握しているつもりだった。
ちなみに以前、onedriveのデスクトップをバックアップする設定をオフにしたにも関わらず、デスクトップフォルダがonedriveに残されていた原因は以下の通りだということが判明。
OSのクリーンアップをする際にデータのコピーが面倒くさいので、OSはCドライブ、データはそれ以外のドライブという習慣がついている。
そのため、クラウドストレージも基本的にはデータドライブにフォルダを作成するようにしている。
onedriveは初回設定時に保存先フォルダを指定できないので、一度目は素直に言われるがままに設定を行った。
ここでいつもならデスクトップ設定もオフにするのだが、何故か忘れたか、おそらく選択肢がなかった。
一度設定が終わってonedriveが動作してから、onedriveの設定を起動して同期をオフ、その後デスクトップやドキュメントのバックアップ設定をオフにして、保存先フォルダをデータドライブに指定。
ここですね。
同期をオフにした時点でデスクトップフォルダのパスはonedrive下になったままで、その後にデスクトップを含めない設定でonedriveを使い始めたので、デスクトップのパスが変わらないままだったということ。
同期をオフにする前にデスクトップのバックアップ設定をオフにしていれば起こらなかった。
分かりづらいかもしれないけど、
・デスクトップの同期をオフにする→デスクトップのパスがonedrive下からユーザー名直下に移動する
・onedriveの同期をオフにする→デスクトップのパスは移動されずにonedriveへの同期だけがオフになる
ということ。
これが自分のせいだと言われればそうかも知れないが、そもそもなんで最初にユーザーの自由度を奪った状態でサービスを開始するような設定になってるのかが甚だ疑問。
振り返り終わり。
話が戻るのだが、デスクトップのデータをこのPCに残したいと思った時、あなたはこの選択肢のうちどれを選びますか?
「PCとonedrive上のどちらも残す(推奨)」「onedrive上のみ」「このPCのみ」
細かい表現忘れてしまったけど、これ、どう考えたって「このPCのみ」を選ぶでしょうに。
注意書きは3回以上読み直したけど、このPCのみ”削除”なのか”残す”なのかが判然としない問いかけだった。
判然としないなら、常識的にリスクの少ない方の選択がされるはずって思うのが、造り手側が予想するべき危機管理じゃないんですか?
ということでこの選択肢の意味は、「このPCのみ”削除”」という意味でした。
しかもご丁寧に、デスクトップのパスをユーザー名下に移動させて、onedriveフォルダにはデスクトップフォルダを残しておいて、「残ってる!」と思わせてからの中身が空っぽ。
完全にバカにしてる。
結局今回は、クラウド上にはデータが残っているということで事なきを得たのだが、「容量増やせ増やせうるさいからとりあえずお試し期間だけオンにしてみたよ」と言いながらもすでに40GB近くのデータをデスクトップに載せていた上司。
現在10時間かけてデスクトップデータをクラウドから取り返し中。
疑問なのだけど、これで改てデスクトップのバックアップをオンにしてたら、onedrive上のデスクトップはどうなってたんだろう。
まさか現状のデスクトップに同期するために、onedrive上のデスクトップが空になったりなんかしないよね?
だとしたら消えたからって焦って同期し直したら永遠にデータが失われるってこと?
怖すぎるんだが。
あの一件以来、自分では死んでも使うものかと思っていたonedrive。
いくらなんでもリテラシーゼロで使っている人からこんな形で渡されたらガード不能だよ。
俺なんで上司にお詫びしなきゃいけないんだろ。
GPT-4 AI Tutor Prompt: A tool for creating personalized learning experiences using GPT-4 and LangchainJS, a drag and drop UI for building LLM flows.
Pandas AI: A Python library that adds generative AI capabilities to Pandas dataframes, making them conversational.
FigmaChain: A set of Python scripts that use GPT-3 to generate HTML/CSS code from Figma designs. It also has a chatbot interface for interactive code generation.
Sui: A smart contract platform with high performance and an asset-oriented programming model based on the Move language.
Jailbreak for ChatGPT: A project that allows ChatGPT to predict the future, opine on controversial topics, and assess what is true. It may help us understand LLM bias.
ML Observability in a Notebook: A tool to uncover insights, surface problems, monitor, and fine-tune generative LLM, CV and Tabular models.
System Design Primer: A resource to learn how to design large-scale systems and prepare for the system design interview. It includes Anki flashcards.
Next.js 13 App: An open source application that showcases the new features of Next.js 13, such as router, server components, and more.
TypeScript: A superset of JavaScript that compiles to clean JavaScript output.
Media Downloader: A desktop utility to download images/videos/music/text from various websites, and more.
AI Pull Request Fixer: A tool to fix issues with AI-generated pull requests, powered by ChatGPT.
Chat Chat: An app that lets you deploy your own AI interface and chat with different LLMs in one place.
調べてみたらひどいクソ仕様だったので、同じ轍ふまないように知見共有します。
なお、消えてしまったデータは息子の卒業式の動画データ。復元不能。
ストレージは壊れるものという前提は理解しているつもりなので、状況ごとにいくつかのバックアップ体制は取ってある。
安くなったとは言えすべてのストレージをSSD化するには至っていない。
そのため、OSやソフトウェアなんかはSSDにインストール、写真や動画などのサイズがでかいデータはRaid HDDでミラーリングして格納するようにしている。
それ以外にもそれほどサイズの大きくないデータはonedriveとかのクラウドストレージを利用。そのデータもRaid HDDでミラーリングして二重にバックアップ体制を敷いている。
趣味で写真をやっているのだが、今回の事故はその編集のフローの中で起こった。
編集と格納は別で考えているので、アクセス速度が高いほうがいい編集はSSD上で行い、格納はRaid HDDに行っている。
そのタイミングでgoogle photoに分散バックアップ、必要に応じて家族なんかと共有を行う。
つまり、撮影が終わったら最初にすることは、SSD上にあるデスクトップの一時フォルダに写真と動画データをコピーすることから始まる。
Raid HDDに格納するのは、編集ソフトでレタッチが終わってからだ。
まずは写真データから編集を行い、RAWデータから無事にjpegデータへと書き出してHDDへの格納が終わった。
そのタイミングで妻からの頼まれごとのためにメールをpdfプリントして名前をつけて保存しようとした。
めったに使わない機能なのだが、指定されたのはonedriveフォルダだったので、そのまま保存をクリック。
ところが、PCからonedriveフォルダにアクセスしても出力したpdfデータが見つからない。
おかしいなと思ってもう一度出力を試みて保存フォルダのパスを確認してみる。
すると、今現在HDD側に指定してあるonedriveのパスが、SSD上のデフォルトのパスに指定されているようだった。
ここで思い至ったのが、確かPCにonedriveを設定した際にうっかりデフォルト設定のまま起動してしまい、その後、HDD上にパスを切り替えたという状況だった。
「そうかぁ。保存先を変更すると元のファイルを移動させるんじゃなくてコピーを作ってしまうんだな」なんて感じに妙に納得しつつ、もう一度しっかりとパスを確認した上でpdfをコピーしてからSSD上のonedriveをshift deleteで削除した。
エクスプローラーを閉じてデスクトップに戻ってくると妙な違和感。
ない。
はぁ?と思ってPCをダブルクリックすると、すぐに警告ウィンドウが開いて「デスクトップへのパスが間違っています」といったエラー表示。
焦る。かなり焦る。
ウィンドウをすべて閉じても、デスクトップ上にはデフォルトのアイコンだけが並んでいるだけ。
頭真っ白。
多少大事なデータはあったかなと思いながらも致命的と言えるものは思いつかず(まだ見落としてるだけかもしれない)、しかし、すぐに一時フォルダごと動画データがないことに気づく。
写真はすでにjpg出力してあるので、RAWデータが消えてしまったのはなんとかなる。
子供の卒業式の動画はまだ変換をかけてもないし、当然アップロードもしていない。
終わった。
あまりにもショックだ。
読み飛ばしここまで。
結局何が原因だったかというと、最初にonedriveをセットアップする際に、デフォルトの保存先、なおかつデスクトップやマイドキュメントなんかもバックアップに含めるという設定で始めてしまったからだったらしい。
この、onedriveのバックアップにデスクトップを含めるという操作をすると次のようなことが起こる。
「本来はC:\Users\ユーザー名\Desktopにあるはずのデスクトップデータが、C:\Users\ユーザー名\onedrive\Desktopに変更される」
・onedriveのバックアップからデスクトップを含めないように設定変更
この2つの動作を行ったにも関わらず、何故かこのパソコンのデスクトップは、C:\Users\ユーザー名\onedrive\Desktoに残ったままになってしまったというわけだ。
そのため、C:\Users\ユーザー名\Desktopにデスクトップがあると思いこんでいた自分は、C:\Users\ユーザー名\onedriveにあるonedriveのフォルダを、疑うことなく削除することができた。
そしてその結果、デスクトップにおいてあったデータのすべてを失った。
いや、流石にこんなクソ設定想定できないでしょ。
大事なデータを守るっていう名目があれば、大事なデータの格納先をそんな簡単に変えていいと思ってる?
それ、誰に許可取ってやってるんだよっていうさ。
その辺の共通プロトコルを、バックアップソフトが、しかもOSの提供元がやっていいのかよっていう。
これはちょっと言わせてくれ。
マイクロソフトクソだわ。
まぁ、なんというか皆さんも気をつけてください。というか、こんなの気をつけようがないけどな。
どこに気持ちをぶつけたって息子の大事な思い出は帰ってこないのはわかってるけど、やるせなさくらい吐き出させて。
※追記
ブラウザonedriveのゴミ箱にデータが残っている可能性はゼロです。
その理由は以下の通り。
このパソコンは1ヶ月ほど前に新規にセットアップしたものでした。
そのセットアップの過程で、onedriveをインストールする際にデフォルトの保存先、なおかつデスクトップをバックアップという設定にしてしまいました。
ここでノールックで設定してしまった自分が一番悪いことは認めます。
onedriveのセットアップが終わったあと、同期に時間がかかっていておかしいな?と思ってファイルのアップロード履歴を確認したところ、あらかじめ古いパソコンからコピーしてあったデスクトップのデータをアップロードしようとしていたので、慌てて設定を見直して、デスクトップ同期のオフ、保存先をHDDに変更しました。(変更した順番は書いてある通り覚えていません。順番が逆だったら起こり得なかったかも)
この操作によって、onedriveの保存先はHDDに変更になり、デスクトップの同期も停止しました。
しかしそうした操作を行ったにも関わらず、デスクトップの保存先はC:\Users\ユーザー名\Desktopに戻ることはなく、C:\Users\ユーザー名\onedrive\Desktopのままになってしまっていました。
そのことに気づかずに1ヶ月以上作業を続けていたなかで、記載の通りSSD内に同期されていないonedriveフォルダを発見したので削除した結果、デスクトップのデータが消失しまったという話です。
そして卒業式の動画データをデスクトップにコピーしたのは、onedriveの同期を切ったずっとあとのことです。
もともとonedriveにバックアップするつもりもないし、バックアップされていないのでwebに残っているはずもないのです。
デスクトップのデータがそんなところに格納されていることがわかっていれば、もともと削除なんてしません。
同期されていないすでに使われていないonedriveのデータだけしか削除するつもりではなかったのに、何故かその中に現在進行系で使っているデスクトップのデータが格納されていて、一緒に削除されてしまったというお話です。
ちなみに、削除直後は本当に何が起こったのか意味がわかりませんでした。
その後にマイコンピューターを開いた際、別ウィンドウでエラーが出たことで初めて状況が理解できたということです。
そのエラーが「デスクトップC:\Users\ユーザー名\onedrive\Desktopにアクセスできません」といった内容のエラーです。
デスクトップ?お前なんでそんなとこに保存されてたの?からの、そういえば思い出してみればこんなことあったよなーで、原因に思い至ったというわけです。
SDカードの復元を試みましたが、サイズの大きい動画データですので、ヘッダーは読み込めたものの、データそのものはすでに別の写真データに書き換えられてしまっていたせいかちゃんと開けませんでした。
SDカードからデスクトップにデータを移すタイミングというのは、行事ごとに撮影が終わったらSDを空にして新しく撮影できる状況を作るためなので、基本的にはデスクトップにコピーしたあとは次の撮影前に必ずフォーマットすることを習慣づけています。
それは、毎回SDカードを空っぽにすることで、現像のときにデータの重複が起こらないようにするためです。(趣味で写真を取っているので撮影枚数が莫大。尚且つ現像ソフトで不要データを削除するので、SDを空にしないと、削除後にまたコピーしてしまったりと効率が悪いため)
撮影→データをデスクトップに一次保存→次回撮影時にSDカードのフォーマット→時間があるときにPC上のデータを選別、現像→バックアップ含めてデータを格納→SDカードから新しい撮影データをPCにコピー→次回撮影時にフォーマット→時間あるときにPC上のデータを選別、現像→・・・・
SDカード自体も紛失の危険性とか考えてそれほど信用しているメディアではないので、できるだけデータが保管されている時間を短くするようにしています。
個人的には、このワークフローが一番データの保存性も高く、無駄も少ない処理方法だと思っています。
だって、デスクトップを間違って消すなんてこと普通しないでしょ。
壊れたなら仕方ないって、それはそれで納得できるんだって。
流石にこんなことまで想定したワークフロー作れってのは無理な話ですよ。
すでにonedriveからデスクトップの同期も切ってて、しかも別フォルダでonedriveがちゃんと稼働してるのに、まさか自分のデスクトップがC:\Users\ユーザー名\onedrive\Desktopに保存されてるなんて思う?
なるべく手持ちのPC(以下、ホストPC)の環境をレジストリとか環境変数とかで汚したり悩まないよう
Windows10 ProとWSL2とVSCodeとDockerでやる感じかな
UnityとかVisual StudioとかintellijとかAndroid Studioを使う場合はどうしようもないので諦める。
Android開発はVSCodeでビルドはコマンドラインでとかはできそうだけど。
あとはUSBなどでシリアル接続する必要のあるarduinoとかもちょっと難しいかもしれない
これが基本的なところだけど、WSL2をホストPCに入れるので若干汚れるのとWSL2上のlinuxも同じく汚れるところ
Hyper-VでWindowsの仮想マシンを作ってそのうえでWSL2を動かすのが一番汚れずクリーンに使えそう
ただRyzenとWindows10の組み合わせだと、Hyper-Vの入れ子ができないので仮想マシン上のWSL2は動かないらしい。
Windows11だとできる
手元じゃないのでクリーンに使えるが、ビルドなどはリモートのスペックに依存
そこをよしとすれば楽そう
教えてください。
増田を全削除するのであればPower Automation DesktopかSelenium 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、タイトル、本文の省略、投稿日時、ブクマ数、トラバ数が表示されます。
「あとで消す」投稿をチェックし、「あとで消す」記事をついに消すボタンで削除を実行します。
チェックは別のページに遷移しても有効です。
こちらは実行した時点で表示されているページのみリアルタイムに画面に反映されます。
投稿の全文を見られます。タグ等は取得しないのでテキストのみになります。
投稿を個別に取得してローカルの文章とブクマ数とトラバ数を更新します。
対象の投稿のタイトルを空に、本文をスペース1文字にしにいきます。
処理の進捗(何件中何件処理済みか)を見ることと、処理を停止させることができます。
排他処理(取込と取込、特定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に入っているのはその名残です。
DMM版ウマ娘プリティーダービーを遊ぼうとしても、エラーダイアログを出さずに起動しなくなる現象に遭遇した。
Windowsのイベントビューアーを除くと、こんなログが吐かれていた(各IDは削除)。
=====
日付:
ユーザー:
説明:
障害が発生しているアプリケーション名: umamusume.exe、バージョン: 2020.3.24.51085、タイム スタンプ: 0x
障害が発生しているモジュール名: apphelp.dll、バージョン: 10.0.22621.963、タイム スタンプ: 0x
障害が発生しているアプリケーション パス: D:\DMMGames\Umamusume\umamusume.exe
障害が発生しているモジュール パス: C:\WINDOWS\SYSTEM32\apphelp.dll
結論から言うと、Windows本体のapphelp.dllが原因でウマ娘が起動できなくなっているという。
アプリケーションに罪は無いため、DMM Game Playerやウマ娘を何度再インストールしても直らない厄介な現象だ。
Windowsは数十万のファイルが存在するため、今回のようにWindows Updateやアプリケーションのインストール・アンインストールを繰り返すだけでシステムファイルが壊れる事がある。
Windowsでは、これを直すためのコマンドがコンソールUIのみに用意されている。
Windowsのスタートメニューを右クリックして、コマンドプロンプトまたはターミナルを管理者権限で起動する。
を実行する。これは、オンライン上にある正しいWindowsのシステムイメージを元に、壊れたファイルを修復する操作となる。
実行するとこう表示される。
[==========================100.0%==========================] 復元操作は正常に完了しました。
DISM.exeを実行すると、正しいWindowsのシステムイメージがPC内に保存された状態になる。
この状態で、
sfc /scannow
を実行すると、次のように表示される。
システム スキャンを開始しています。これにはしばらく時間がかかります。
Windows リソース保護により、破損したファイルが見つかりましたが、それらは正常に修復されました。
オンライン修復の場合、詳細は次の場所にある CBS ログ ファイルに含まれています
windir\ Logs\CBS\CBS.log (たとえば C:\Windows\Logs\CBS\CBS.log)。オフライン修復の場合、
これで、とりあえずWindows自体の修復コマンドによってシステムファイルが正しい状態に復元された状態となる。
実行してもまだメモリ上には古いシステムファイルが読み込まれて実行されている状態なので、終わったらPCを再起動する。
さて、準備は完了だ。ここまでの操作でWindowsを回復しDMM Game Playerで「ダウンロード版をプレイ」を押す事でウマ娘が起動し…ない!
イベントビューアーには今もウマ娘を起動しようとする度にアプリケーションクラッシュイベントが追加されている。救いは無いのですか?
結局、今回のケースではPCで常駐していたリモートデスクトップ用のSplashtop StreamerとVirtual Desktop Streamerをタスクキルする事でウマ娘が起動できるようになり、DMMブラックフライデーで得た有償石でおはガチャを回すことに23時成功した。
MacユーザーがOculus Questだけ買って、PaperspaceというクラウドゲーミングサービスでPC版VRChatを1年やってみたらかなり良かった。やり方を書き置きしておきたい。
※2022年9月時点でのHow to・セットアップ方法の記事がなかったので、先人のブログを引用しながら、変更点注意点などを書き残しておきます
コロナ禍で好きな音楽の現場へ行く事が難しくなり悶々としていた2021年夏頃、友人に「VRChatのVRクラブがおもろいから、騙されたと思ってOculus Quest2一緒に買って始めてほしい」と言われ、4万空中に投げたと思って、ノリだけでOculus Quest2を買う。
元々VRChat自体に憧れはあったが、家にはMacbookとオフィス向けWindowsしかなかった為環境がなく、諦めていた。しかし
・Paperspaceなるクラウドゲーミングサービス (つよつよグラボを積んだPCをネット通して借りれる)
・Virtual Desktop(\2000) (Questと接続されてないPCを繋ぐQuestアプリ)
・Oculus Quest2(当時4万弱)
・Paperspaceを起動する端末(MacでもWindowsでもスマホでもOK)
の4つが揃うだけでプレイできるらしい。価格は1$前後/1h。手元に必要なものはブラウザが立ち上がるPCとQuestのみ。初期投資に必要な金額は4万前後。
まぁちょっと旅行行ったと思って4万払ってみよう、体験版と思ってやってみるか〜 と思って始めたが、これが思いのほか快適で結局1年間使い続けてしまった。
もし「Quest版のVRChatをやってみたけど全然おもしろくなかった」「PC版でガッツリやってみたいけど家にあるPCのスペックが足りない、或いはMacしかない」という人がいればぜひ参考にしてもらいたい
※海外鯖の為、pingは100msほどあり軽度のラグが生じ、FPS系のゲームには向かない。
ただ、昔のSkype程度のラグのため、VRChatで会話コミュニケーションを行うにはほぼ不便を感じなかった。
https://suna.hateblo.jp/entry/2019/06/30/015730
とりあえずP5000インスタンスを借りる承認が降りるまでは、やや時間がかかる(多分手動で承認作業をしてもらっている)のでSubmitのところまで記事に従ってやっておくが吉。
※この申請が通るまでは待ちなので、インスタンス構築手順は進められません。また、お金はこの時点ではかかりません。
[追記]上記ブログ内「3. 鍵がついているけどP5000をクリックする」の工程の画面が、2022年9月現在と大きく異なるようです。
Machine Type からP5000(鍵マーク付)を選択
→ 上記ブログの内容を参考にRequest Approvalへ申請理由を記入
---
上記ブログについて、2022年9月現在では記事内8番の工程より先は大きく内容が異なる。そのため一旦無視を推奨する。
また、設定方法でも異なる部分が多くあるため、6点ほど注意点を書き残しておく。
①paperspace導入時(インスタンス構築手順)の最初の画面が現在はブログのものと大きく異なっている。
最初の画面でcoreを選択 → Help us~~ の画面で 利用目的を「hobbyst」「gaming」「just me」にしてcontinue を押し、マシン作成の画面に移行してください。
②インスタンス構築の手順に入る前に、先にクレカ情報を登録する。(P5000の申請を行うための必須作業。登録のみなので支払いは発生しません)
ページ右上の■から「Billing」を選択して、「Payment Method」の項目に名前と住所(英語表記)・クレカ情報を入力して、Addしてください。
③設定内容は変わらないが、選択部分の文字表記等が異なる部分がいくつかある。
ブログと同じマシン設定の場合の、項目名および選択・変更するものの表記は以下(参考にしてください)。
Machine Type P5000
Region WEST COAST(CA1)
Desksize 100GB ※デスクサイズの変更については後述
Advanced options オン → ブログを参考にPublic IP、Auto-Shutdown、 Auto-Snapshotを設定。
④記事内9番の工程「VirtualDesktopをインストールする」は ”Oculusから” 購入・インストールする。
SteamでもVirtualDesktopを販売しているのだが、こちらから買えるものは今回使う用途のものではありません。買っても無駄金になります。気をつけてください。(自分と友人らはここでしっかり詰んだ)
⑤この記事の11番「サイドロード版のVirtual Desktopをインストールして起動する。」
⑥月額の課金額が変わるが、HDD容量が足りなくなるのでDesksizeは100GBに増やしておく。
※もし50GBでマシンを作成してしまった後であっても"Upgrade Machine"の項目からワンクリックで増やせます。
---
①OculusからVirtual Desktopアプリを購入(\2000)
※繰り返しになるが、Steamで売っているVirtual Desktopは、今回の環境時では使わない。間違って買ってしまった場合には返金をお願いしましょう。
※Virtual Desktopストリーマーを先にインストールすると不具合が出るパターンがあるようなので、なるべく最後にインストールすることを推奨
①ブラウザでpaperspaceにログイン、クラウドPCのマシンを立ち上げる
②paperspaceのマシンの起動を待っている間に、手元のOculusを起動
④Virtual DesktopからpaperSpaceのマシンへ接続(うまくOculusアプリのインストールとID連携が済んでいれば、Virtual Desktopを起動するだけで自動でつながる)
⑤Oculus左手の 三 のボタンを押して、VirtualDesktopのメニューからVRモードでVRChatを立ち上げる
西海岸のクラウドPCと繋いでゲームをするため、お使いの各家庭の回線環境に依存する部分はあるかと思うので注意。
※ただ、iphoneのテザリングでもギリ使えたという話もあるので、相当回線速度が低くなければ意外といける可能性あり
上記の手順を踏めば、家にWindowsゲーミングPCがなくても、PC版VRChatをVRモードで遊ぶことができる。
個人的な感想だが、ことVRクラブにおいては、デスクトップモードとVRモードでは体験が全く別物で、
デスクトップモードはDOMMUNEやTwitchを見ている感覚と大差はない +マビノギとかのネトゲをやっている感覚って具合で
ぜひ上記記事を参考にして、クラウドゲーミングPCを導入してみてください。
(マジでNVIDIAのGeForce NOWとかがVRChatに対応してくれたらコスパも良くてちょうど良いんだけどな・・・)
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
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>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
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) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_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 メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
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();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
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を受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
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');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document
これか
たとえば、同僚が使っているロッカー。
番号式のロックがある。
この番号を知ること、かぎつけること、暴くこと、犯罪者にとってこれ以上の美食はない。
ハイエナがうまそうに屍肉に食らいつくのと同じ。
犯罪者の人生とは、「仲間」を探し当て、世の中の治安を乱すことが最終目的だからだ。
仲間とはもちろん、「心にうしろめたいもの」を持った人間である。
「ああ、このために生まれてきたんだ」と思える。
つまり他人の秘密とは、彼らにとって最高のステーキであり、人生を満腹にするためのライフハックなのである。
「ああ、生きている!」と感じるだろう。
あれと全く同じである。
2022-07-28
https://anond.hatelabo.jp/20220517213328
個人的に思い入れのある曲を30曲。順位は上位のもの以外は割とテキトー。
イントロがカッコ良すぎる。曲全体としてはそんな好きじゃないけど、たぶんイントロだけだと300回近く聴いた。通して聴いたのは3回くらい。
『ケツメイシ - 海』
ケツメイシと言ったら夏歌、夏歌といえば「夏の思い出」だと思うけど、個人的にはこっち。メンバーのラップがまだ完成されてない感じとオールドスクールなトラックが最高。
リリースをカットされたピアノフレーズがかっこいい。割と中田ヤスタカの曲は楽器を重ねて空間を埋めるように編曲された曲が多い印象だけど、この曲はかなり隙間を意識して作られてて好き。
中田ヤスタカと言えばPrefumeだけど、断トツでこの曲が好き。コンプレクストロみたいな構成のトラックで、いろんな楽器や音色が入れ替わり立ち替わりするのが良い。こういう編曲、しかもJ-POPの歌物でっていうのはなかなかない。
相対性理論は10代の頃に死ぬほど聴いた。メランコリックな曲が多いけど、この曲は明るくて良い塩梅。「荒川アンダーザブリッジ」懐かしいですね。
『宇多田ヒカル - time will tell』
よく行ってたクラブで朝方流れてた曲。この曲を聴くと当時の朝の渋谷の匂いとか景色が蘇ってくる。
元々知ってて良い曲だなとは思っていたけど、何かのイベントでこの曲の弾き語りを聴いて泣いてしまった思い出がある。この曲で涙を流せる純粋さはずっと持っていたい。
デビュー当時の、着うた系ギャルR&Bみたいな曲も好きだったけど、この曲以降の西野カナはかなりいい曲多い印象。個人的に「パッ」とかも好き。
「L'Arc~en~Ciel - winter fall」
普段はそんなに歌詞を意識して音楽は聴かないけど、Hydeの比喩に比喩を重ねたような歌詞は結構好き。
神前暁が作編曲した楽曲で一番好き。田中秀和の楽曲と迷ったけど、オタク受けとか関係なくこの曲は良い。
所謂「歌物」ロックから一曲。この疾走感に初期衝動が感じるような曲、いつまでも好きなんだろうなって思う。
『岡村靖幸 - ビバナミダ』
80年代風スタイルにどこかフレンチハウスっぽい風味も感じる編曲が最高。岡村靖幸は昔の曲じゃなくて最近のバキバキのトラックの上で歌い上げてる曲の方が好き。
『Avec Avec - おしえて』
10代中盤から20代前半まで、Maltineをはじめとするインターネットレーベルにハマってた。こんなにスウィングさせても成立するんだって当時はかなり衝撃的だった曲。こんなにビートがヨレてる曲は正直世界中探してもこの曲だけだと思う。
『FLIPPER'S GUITAR - さようならパステルズ・バッヂ』
華奢でまだあどけなさが残る二人のルックスに楽曲に全てが最高。どの曲にしようか迷ったけど、一番爽やかなのはこれかな。完全に後追いなので、渋谷系をリアルタイムで体感してみたかった気持ち。
『Cornelius - NEW MUSIC MACHINE』
個人的には小沢健二よりCorneliusの方が好き。楽曲も実験的で、アルバムごとにコンセプトも違うから聴いてて飽きない。
当時付き合ってた彼女がカラオケで歌ってて、そこから好きになった。元々全然聴いたことなかったけど、いろんな楽曲を聴いてみると、ブルーノートがとにかく多い。ポップスというより完全にブルースシンガー。
独特なプラックのフレーズにチープなピアノフレーズ、原田郁子のボーカル全てが最高。シンプルな2stepビートが気持ち良すぎて、部屋で一人踊りまくってた思い出。
『PUNPEE - Bad habit』
HIPHOPと言えば今はTrapだが、Boom bapでもなくまさかのJuke。コードワークはめちゃくちゃお洒落で他に類を見ない楽曲。
こういうエレピでゴリ押すタイプのアーバンな楽曲が大好きなんだが、その中でも断トツ。エモいとはこのこと。
『YEN TOWN BAND - Swallowtail Butterfly 〜あいのうた〜』
Charaの「Junior Sweet」と悩んだがこっちにした。
日本で一番好きなバンド。全曲共通してコード進行がお洒落すぎる。
昔はセルアウトなんて言われていたけど、RIP SLYMEの良さが分かった時「HIPHOPは2周目」みたいな風潮もあった。この曲はPESがトラックを作っているけど、DJ FUMIYAのトラックはマジでヤバい。今聴いてもぶっ飛んでるし、5人でもっと活動してほしかった。
夏の終わりのなんとも言えない気持ちを上手く表現してると思う。この曲を聴くと、何年経っても鬱屈した10代の頃を思い出してしまう。
Japanese 2stepの名曲。編曲のシンプルさに、サビ後半のベースラインで何杯も飯が食える。
『KinKi Kids - Kissからはじまるミステリー』
山下達郎Worksから一曲。シティポップとnew jack swingが融合したような楽曲。本人が歌ってるバージョンも好き。
『ASIAN KUNG-FU GENERATION - 或る街の群青』
高校時代鬱になって不登校の時期があった。そろそろ行かないと出席日数がヤバいと言う時に毎日聴いてた曲。「蹴り出す速度でどこまでも行けるよ」って歌詞が当時の自分に刺さりまくった。
『Nujabes - reflection eternal』
唯一のインスト曲。出席日数がヤバくて学校に行ったものの、授業をサボってラグビー部の部室裏で聴いてたのが懐かしい。曲としては完成されすぎてる。サンプリング元が優秀だってのはあるけどね。
『iの数式 (imoutoid's ComplexFunktion Remix)』
亡くなった今でもカルト的に人気のある伝説の天才トラックメイカー、imoutoid。僕の人生で一番好きなアーティストでもある。ダンスミュージックはテクノロジーの発展により進化するものだけど、2007年くらいの技術で高校生がこの曲を作ったと思うと驚きを隠せない。imoutodはダンスミュージックのトラックメイカーとしてのセンスはもちろんのこと、J-POP的な分かりやすさに作家性も兼ね備えていた。生きていたら今頃世界的なアーティストになっていたと思うし、今聴いても新しい。
『livetune - ファインダー(imoutoid's“Finder Is Not Desktop Experience Remix”)』
好きすぎるのでimoutoidからもう一曲。無駄な音が一切なくて完成されすぎている。ハイハットだけで何倍も飯が食える。彼がメジャーレーベルから出した楽曲はこの一曲のみなのでめちゃくちゃ貴重。
間違いなく人生で一番聴いた曲。J-POPとはどこか前向きなメッセージが込められているものだと思うけど、この曲は人生の気怠さを歌っている。しかも国民的スターだったSMAPがだ。この曲は「愛があれば壁を乗り越えられる」とも「努力は報われる」とも言ってない。ひたすら過去を思い返して「夜空ノムコウにはもう明日が待っている」だ。とてつもなくリアル。今後も聴き続けるんだろうなと思う。