突然、wordpressにログインできなくなった話

こんにちは!!
1日1記事をサボっていた
くろんです

最近忙しかったのでそれを理由にサボってました!!
バタバタだったので仕方ないですね //

ひと段落したのでまた書き始めようかと思い、
wordpressにログインしようとしたらログインが何故かできなくなってました…

約束を破った罰なのか、
思わぬところで妨害を受けてしまったので本来書こうと思っていた記事はストックにして今回の原因と対応を大雑把にまとめておきます!

起こったこと

まず、wordpressにアクセスするために以下のようなページに移動します。 (サイトURL)/wp-login.php みたいな

ここにいつも通りユーザー名とパスワードを入力してログインをしようとしたらログインができない状態でした。

エラーも出ずに永遠↑のような状態を繰り返している感じでした…
(ちなみに(サイトURL)/wp-login.phpでアクセスしてログインボタンを押すと(サイトURL)/wp-login.php?hogehoge=aaaみたいなところにリダイレクトされるところは動いているみたいでした)

Cookieが原因かと思いリセットしましたが、そちらも効果なし。

試しに登録のないユーザー名・パスワードでログインを試みたところこちらはエラーが表示されていました。

ログインできないと何もできなくなってしまうので、
すぐにサーバーの確認を行いました。

原因調査

手始めに何が起こっているかまったくわからなかったので、「wordpress ログインできない」とか「wordpress ログイン リダイレクト」などでGoogle先生に聞いてみましたが有益な情報は得られず…

そもそも、状態が抽象的すぎて関係なさそうな情報が多く探しきれなかったですね。

なので、サーバーを直接見て原因を調査する方針に変更。

サーバーを直接調べているときに、サーバーをコンソールから確認していたところTabキーの挙動がいつもと違うことに気づきました。

普段であれば 文字列の補完機能が動くはずなのに
-bashみたいな文字を無理やりくっつけてよくわからないエラーを出していました。(焦って色々リセットして詳細抜けてますが、ディスク容量不足系のエラーです)

容量不足系のエラーが発生していたのでwordpressのことは一旦、置いておいてそちらの調査をしました。

dfコマンドで確認しただけですけどね…

結果、ログファイルが15Gくらい溜まっていたせいでディスクがパンパンになったのが問題でした。

こちらはとりあえずログデータを消すことで対応しました。そして念のため再起動をかけたらTabキーの問題は解決しました。

そして、wordpressの問題に戻ります。
今、思えばこちらもこの時点で解決していたのだと思います。
まぁ、私はここで沼にはまるんですけどね!!

Tabキーの問題が解決したので一度、戻っているかを確認するために 私のサイトckron.netにアクセス

すると…

はい、もうわけわかりませんね!匙を投げたくなります!

調べてみるとmysqlのユーザー名とパスワードが違うぞー!っていう単純なエラーのようでホッとしました。

wordpress側のユーザー名・パスワードを確認し、mysqlにアクセスし同様にユーザー名・パスワードがあっているか確認…

できない!!

ERROR 2002とかいうエラーが表示されて、mysqlへのログインができない…

エラー内容的には mysql.sockとかいうものがないっている類のものだったのでこれを作って再ログイン…

ログインできない!!

もう、匙を投げる直前ですね…

半分、匙を投げたところで「そういえば、再起動したのにmysqlのサービス立ち上げてなくね??」という根本的な問題に気づきサービスの立ち上げ&再ログイン…

ログインできた!

少し嫌な予感がしたのですが、念の為確認をする必要があるのでmysqlのサービスを立ち上げ直した後にckron.netにアクセス。

見える…

はい、ログインもできるようになり今回の問題はここで終了です。

今回の問題

  1. ディスクがいっぱいでサーバーそのものがバグる
  2. 再起動によりwordpressに必要なサービスが停止

こんな感じでした…
ディスクいっぱい以外は完全に凡ミスで沼にはまった感じです。

今回の教訓

  • ディスクがいっぱいになったらよくわからないエラーを出してバグる
  • ディスクがいっぱいにならないようにログファイルは管理しよう
  • サーバーの再起動をした時にサービスも立ち上げ直すように設定しておこう
    ※絶対に忘れるからね!!!

以上!
今回書こうと思っていた記事は明日書きます。

では

itunesのプレイリストから情報取得(2)

こんにちは!!
くろんです

itunesのプレイリスト自体から直接情報を取得するのは難しそうですが、
プレイリスト情報の書き出しができることが分かったのでこちらの情報を基にして自動で曲をアップロードする方法を考えます。

ちなみにitunesのバージョンは12.10.3を利用しています。

itunesではプレイリストという形でお気に入りの曲リストを作成できます。
今回はこのプレイリストから「プレイリストに含まれる曲一覧」と「曲に関連付けられているファイルパス」、この2点を取得する方法を考えます。

と言っても、プレイリストの情報はバイナリになっているっぽいので諦めてitunes側で用意されているプレイリストの書き出しから情報を取得します。

まず、プレイリストの情報が入っていると思われるファイルですね。
おそらく、これはitunesのライブラリフォルダ内にある「iTunes Library.itl」かと思います。バイナリなので開いてみてもわけがわからないし、あまり有力な情報もないので早々に中身を見るのは諦めます。

次に、itunes側でプレイリスト情報をtxt形式にて書き出しできるので、そちらから情報を取得できるか考えます。

ここから情報の書き出しが行えます。

名前
アーティスト
作曲者
アルバム
グループ
作品
楽章番号
楽章数
楽章名
ジャンル
サイズ
時間
ディスク番号
ディスク数
トラック番号
トラック数
年
変更日
追加日
ビットレート
サンプルレート
音量調整
種類
イコライザ
コメント
再生回数
最後に再生した日
スキップ回数
最後にスキップした日
マイ評価
場所

情報はこれだけあります、各情報がタブで区切られているので情報の切り出しはできそうですね。
ちなみに「曲名」は「名前」が「ファイルパス」は「場所」が対応しています。
文字列操作すればいいだけなのでそこまで大変ではなさそうですね。

とりあえず、サンプルコード書いてみます!
では

itunesのプレイリストから情報取得

こんにちは!!
くろんです

引き続きGoogle Homeへの自動曲追加のための要素技術を調べています。

itunesで設定したプレイリストから登録されている曲情報が取れないか探していますが、今のところ良さそうな情報は見つかってませんね…

代案を考えながら、調査を続けていきます!
では

GoogleHomeに自動でitunes曲をアップロードする別方法を考える(2)

こんにちは!!
くろんです!

前回に引き続きなんやかんやしてitunesのプレイリストの曲をGoogle Play Musicにアップロードする方法を考えていきます。

とりあえずこんな感じの機能があれば実現できそうというものを列挙したいと思います。

  1. itunesのプレイリスト情報を取得
  2. プレイリスト情報から曲の保存先情報を取得
  3. 曲を指定フォルダにコピーする
  4. wavをmp4に変換する
  5. Google Play Musicにアップロードする
  6. プレイリスト情報が変更されたときに1 ~ 5の処理をする

これくらいですかね

ひとまず軽く見た感じでは1. が一番鬼門ですね、それ以外はそんなに難しくなさそうですね。

明日あたりから1. の調査をしていきます。
さて、どこまで楽できるようになりますかねー!

では

GoogleHomeに自動でitunes曲をアップロードする別方法を考える

こんにちは!!
くろんです!

私は普段の作業中、 Google Homeで曲を流しています。
Google Homeでは最初からYoutube MusicかGoogle Play Musicの曲を再生できるのですが、無料版だと途中で広告が挟まれたり曲数が少なかったりとなかなか思い通りにいきません。

なので、Google Play Musicの個人ライブラリに持っている曲をアップロードしてプレイリストを作り、それを再生するようにしています。

今回はこの曲のアップロード作業がとても面倒なので、なんとか楽できる方法を考えたいと思います。

まず、Google Play Musicでは曲のアップロード方法がいくつかあります。

  1. Google Play ミュージックプレーヤーを使う
  2. Google Play Musicにアクセスしてアップロード

2. の方法についてはいちいちやるのが面倒なのでNGですね…
1. ミュージックプレーヤーではitunesの曲もしくは指定フォルダ内の曲を自動でアップロードするように設定することができます!

…ミュージックプレーヤー使えばいいのでは??

それでうまくいけば今回の記事はここで終了できたんですけどね…
もう少し続きます!!

私がCDから曲を取り込むときにはitunesを利用していますが、Cドライブの容量を圧迫するのでDドライブに曲を保存するようにしています。

ですがここで問題が発生します、Google Play Musicではitunesが曲がDドライブに入っているとプレイリスト単位でのアップロード選択ができなくなってしまいます。

itunesの曲フォルダ全体を指定すればすべての曲をアップロードすることはできますがアップロードできる容量に限度があるので聞かない曲までアップロードするのは無駄な感じになってしまいます。

なので結局、現在はこのようなアップロード手順を取っています

  1. itunesの曲を指定フォルダにコピー
  2. .wavをmp4に変換
  3. 指定フォルダを自動アップロード設定に登録

2. はitunesで読み込むときにwav形式にしていたのですが、Google Play Musicでは扱えないのでmp4に変換する工程を追加しています。

まぁ、これでもいいんですが新しい曲を追加したときに1. と 2.の作業を毎回やらなくてはいけなくて面倒なんですよね…

なので個人的にはこういう感じにしたいです。

  1. itunesプレイリストに曲追加
  2. なんやかんや
  3. 自動でGoogle Play Musicにアップロード

そこで「なんやかんや」の部分を考えていきたいと思います!!

今回はこんなところで

Sleepとsleep_for

こんにちは!!
くろんです

今回はWindowsにてC++で処理を待たせる関数、Sleep()とstd::this_thread::sleep_for()の違いについて考えたいと思います。

先に結論を
- C++11にて追加されているので、現在の標準はこっち?
- ナノ秒での指定ができるので精度が高い
- 時間でも指定ができるので最大指定時間も大きい

Sleep()はWindowsAPIにある関数になります。

使用すると指定された相対時間分、現在のスレッドを止めてくれます。
指定はmillisecondsなので1000分の1秒にて指定ができます。

sleep_for()はC++11にて追加された関数です。

こちらもSleep()同様に指定された相対時間分、現在のスレッドを止めます。
こちらはSleep()とは異なりnanosecondsまで指定ができます。

milliseconds = 1 / 1000 秒
microseconds = 1 / 1000 milliseconds
nanoseconds = 1 / 1000 microseconds

なのでsleep_for()はSleep()の100万分の1の精度で指定できることになります。

100万分の1の精度で指定できるということはなんか色々性能が高そうな感じがしたので、実際のコードで測定をしてみました。

以下、検証コード

#include <chrono>
#include <thread>
#include <Windows.h>

void winSleepLoop(int waitMilliseconds, int loopTimes)
{
	for(int i = 0; i < loopTimes; i++) {
		Sleep(static_cast<DWORD>(waitMilliseconds));
	}
}

void threadSleepLoop(int waitNanoseconds, int loopTimes)
{
	for(int i = 0; i < loopTimes; i++) {
		std::chrono::nanoseconds ns(waitNanoseconds);
		std::this_thread::sleep_for(ns);
	}
}

int main(int argc, char* argv[])
{
	LARGE_INTEGER freq;
	QueryPerformanceFrequency(&freq);

	LARGE_INTEGER start, end;
	QueryPerformanceCounter(&start);

	// wait time(milli sec)
	winSleepLoop(100, 100);

	QueryPerformanceCounter(&end);

	double duration = (end.QuadPart - start.QuadPart)
						/ static_cast<double>(freq.QuadPart);
	printf("winSleep = %f\n", duration);

	QueryPerformanceCounter(&start);

	// wait time(nano sec)
	threadSleepLoop(100000000, 100);

	QueryPerformanceCounter(&end);
	
	duration = (end.QuadPart - start.QuadPart)
				/ static_cast<double>(freq.QuadPart);
	printf("threadSleep = %f\n", duration);

	return 0;
}

検証結果

winSleep = 10.057575
threadSleep = 10.049585

検証結果…まったく変わりませんでした!!

結果はあまり変わらなかったということで処理性能的にはどっちを選んでも大丈夫そうですね。

少しくらい誤差でるかなと思っていたので残念です。

ちなみにSleepでは時間をDWORDで指定するのですが、こちらはunsigned longで定義されているので数値範囲は 0 ~ 4,294,967,295 となります。
maxの数値は日数で表すと約50日分になります。

なので、Sleep()一つでは50日以上処理を待たせることができません。待たせる必要があるのかという素朴な疑問は置いておきますが…

ただ、sleep_for()ではchronoで定義されている型を使用して時間での指定ができるので、50日以上待たせることが可能となります!!

以上を踏まえてsleep_for()を使うメリットはこんな感じですかね。

  • C++11にて追加されているので、現在の標準はこっち?
  • ナノ秒での指定ができるので精度が高い
  • 時間でも指定ができるので最大指定時間も大きい

まぁ、面倒でなければC++で書くのはsleep_for()のほうがいいかと思います。

では

キーキャップ塗装(まとめ)

こんにちは!
くろんです

微妙に長い期間やっていたキーキャップ塗装ですが、
なんとなくどんなことをやったのかとか、大変だった部分とか、よかった部分とか、次の改善したい部分を未来の自分に向けて残しておきます!

塗料は全部ファレホを使用しています。
プラモ塗装していた時のお気に入りです!https://www.volks.co.jp/vallejo/

使用塗料一覧
- 全体
白サフ
> WHITE(70.600)
インプルーバー(乾燥を遅らせるやつ)
> AIRBRUSH FLOW IMPROVER(71.262)
ホビー用精製水
> 適当なの
トップコート
> GLOSS VARNISH(69.701)

- 白キーキャップ
白
> PURE WHITE(69.001)
白クリアー(上塗り用)
> WHITE GLAZE(70.853)
パール
> AGパール(https://www.gaianotes.com/kiraradoh/products.html)

- 青灰色キーキャップ
青1
> SKY BLUE(71.306)
青2
> MAGIC BLUE(72.721)
青3
> INTERMEDIATE BLUE(71.299)
灰色
> WOLF GREY(72.747)

- 黄色キーキャップ
黄色
> MOON YELLOW(72.705)
オレンジ
> LIGHT RED(71.086)

キーキャップ塗装全体の流れ

– 白
> 白サフ x 3回
>> クリアー + 精製水 + パール(3 : 1 : 適当)

– 青灰色
> 白サフ x 3回
>> 青1 + 青2(9 : 1)
>>> 青1 + 青2(30 : 1)
>>>> 青3 + 灰色(30 : 1)

– 黄色
> 白サフ x 3回
>> 黄色 + オレンジ(20 : 1)

インプルーバーは塗料2 : インプルーバー1 がちょうどいい感じでした。

色の塗装が終わったところですべてにトップコートします!トップコートは薄く数回に分けてやればいい感じになるはずなので割愛

大変だった部分

塗装をする際にネロブースminiを使用しているのですが、↓これ

ブース内に照明を何も用意していなかったので暗くて全く状態が見えなくて大変でしたね…

ネロブースのカスタマイズで磁石を使ってつける照明を用意した方がいいとどこかで見た気がしましたが、それが身に染みてわかりました。
照明がないと暗くて塗装の状態が全く分からないですねコレ

照明買ってきます

良かった部分

キーキャップを塗装すると自分専用な感じがしていい感じです!!
面倒くさがらずにやってよかった。

改善したい部分

キーキャップを粘着テープで段ボールに固定していましたが、
塗装した後に段ボールから剥がすとき縁が少し剥がれたので粘着力が弱いものにするなど対策が必要ですね…

あと、家がホコリっぽかったので塗装面にホコリがついて若干地獄なってました。
ホコリ対策と乾燥用に食器乾燥機がよくつかわれているらしいので、
今度の塗装までに買っておきましょうかねー

まとめ感想としてはこんな感じですね!
また、飽きたら塗装しなおすと思うので

では、お疲れ様でした!!

キーキャップ塗装(9)

こんにちは!
くろんです

微妙に長い間やっていましたキーキャップ塗装ですが、
ついに完了しました!

こちらです!!
頑張った分、感動がありますね。

参考にしたバーゼカラーっぽく見えますかね???

この画像には alt 属性が指定されておらず、ファイル名は FAGirl_baselard_main.jpg です

これからも色々自分が欲しいものを作っていきたいですね!!

では

キーキャップ塗装(8)

こんにちは!!
くろんです

今日とうとうすべてのキーキャップのトップコートが終了しました!!

あとは1日乾燥を待ったらキーボードに戻していきます。
塗装が剥げないか不安満点ですが完成は楽しみです。

ちなみにこんな感じです!
トップコートは艶出しにしたのでテカテカしている感じです。

明日はキーボードお披露目です。
ではでは

WordPressのアクセスURL変更

こんにちは!!
くろんです

こちらのページですが、URLを変更しました。

以前までは wordpress.ckron.net としていましたが、
別に wordpress でURLを分ける必要もなかったことに気づいたので ckron.net へ変更を行いました。
とりあえず WordPressだから、URLに付けとこくらいのノリで使ってました。

若干、WordPress初心者の私が引っかかった部分があったので次に同じ状態になった時用のメモとして残しておきます。

以下、詰んだ流れ

  1. nginxのserver{}設定にてckron.net へのアクセスを許可、 wordpress.ckron.net へのアクセスされたら404を返すようにする
  2. wordpress.ckron.net にアクセスしたら404出ることを確認
  3. ckron.net から管理者ページにアクセスしようとしたら wordpress.ckron.net にリダイレクトされ管理者ページに入れず
  4. 直す箇所が分からず詰み状態…(ついでに既存ページの画像もロードされずページが崩壊)

もう、どうすることもできなかったので初めの状態に戻してやり直しました。

ちゃんと管理者ページにアクセスできるようにしながら進めていったらうまくいったので方法を書いておきます

  1. 変更前URLと変更後URLの両方にて同じサイトにアクセスできる状態にする
  2. 変更後URLより管理者画面にログイン
    (このタイミングで変更前URLにリダイレクトされるがそのまま進める)
  3. 管理者画面より以下を変更後URLに変更
    – 設定 > WordPress アドレス(URL)
    – 設定 > サイトアドレス(URL)
  4. 管理者画面をログアウトし、変更後URLより再び管理者画面にアクセス
  5. 変更前URLにリダイレクトされないことを確認
  6. 管理者画面に入れればOK(画像がロードされているかも確認)
  7. 変更前URLをアクセス禁止にする
  8. 終了!!

こんな感じでできました。
後々バグが出てきませんように…