ごらくらいふ

プログラミングしたりゲームしたり

きょうの元気なうちに集中が切れてもできる仕事を組み立てよう。とかやる暇があったら動いたほうがマシ。

やることリスト書き出しとかするじゃないですか。

ダメになったパーの自分に向けて作業リスト作るのって、まぁ他人に作業指示書を作るのと同じであって、 詳細設計書とかいう机上の空論のかみっぺら。

メソッドひとつとっても本当に想定の値が取得できるか試してみないとわからない。試してみたならもう組み込んでおけよと。

できそうだな。と思ってできなかった時にパーになった自分は役に立たないので、元気なうちに実装入ろう。 パーになったらとっとと帰って寝て早く来てパーになってのサイクルを回せばいいや。

と、パーになった今帰らずブログで垂れ流している。

Minecraftのバックアップが動作していなかったのを修正した作業ログ

放置状態のMinecraft、久しぶりに様子を見てみたらバックアップに失敗していた。 はてどうしたものかとcronからの通知を確認すると

Date: Tue, 21 Feb 2017 04:00:01 +0900 (JST)

minecraft_server.jar is running... suspending saves
Backing up minecraft world...
tar: VPSworld: stat 不能: そのようなファイルやディレクトリはありません
tar: 前のエラーにより失敗ステータスで終了します
Backing up minecraft_server.jar
minecraft_server.jar is running... re-enabling saves
Compressing backup...
Done.

oh…

どこがトラブルポイントなのか調べる

まずはcronの確認から。現象は4時に報告されている。

# crontab -l
30 4 * * * /etc/init.d/minecraft restart
0 4 * * * /etc/init.d/minecraft backup

4時に実行されるコマンドはminecraft backup

もうどこから持ってきたか忘れてしまったminecraftコマンドの中身を漁る。

case "$1" in
  # 略
  backup)
    mc_backup
    ;;
  # 略
esac

mc_backupのみ

mc_backup() {
  mc_saveoff

  NOW=`date "+%Y-%m-%d_%Hh%M"`
  BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  echo "Backing up minecraft world..."
  #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

  echo "Backing up $SERVICE"
  as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

  mc_saveon

  echo "Compressing backup..."
  as_user "gzip -f \"$BACKUP_FILE\""
  echo "Done."
}

echoの内容から、as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"になにかあったことがわかる。

tar コマンドのオプション

  • -C : change directory
  • -c : 書庫の作成モードとして動作する
  • -f ファイル名 : 指定した書庫ファイルまたはデバイスを(書き込みに)使用する

Linuxコマンド集 - 【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど):ITpro

あやしいわーるど

$WORLDは何を指しているのか
# grep "WORLD=" minecraft
WORLD='VPSworld'
minecraftはどのサーバを使っているのか
# grep "level-name" server.properties
level-name=world

全部こいつのせいだ。

対応ログ

ワールドディレクトリを変更して対応

# 作業に入る前にminecraftを確実に停止させる

# sudo service minecraft stop
minecraft_server.jar was not running.
minecraft_server.jar is stopped.


# ワールドディレクトリの名前変更

#  mv -v world VPSworld
`world' -> `VPSworld'


# サーバー設定の変更

# cp -v server.properties{,.org}
`server.properties' -> `server.properties.org'

# vi server.properties

#  diff server.properties{,.org}
28c28
< level-name=VPSworld
---
> level-name=world

バックアップの動作確認

# sudo service minecraft backup
minecraft_server.jar is not running. Not suspending saves.
Backing up minecraft world...
Backing up minecraft_server.jar
minecraft_server.jar is not running. Not resuming saves.
Compressing backup...
Done.

# ll -h backup/
#  ======省略======
-rw-r--r-- 1 minecraft minecraft  184  221 04:00 2017 VPSworld_2017-02-21_04h00.tar.gz
-rw-rw-r-- 1 minecraft minecraft 109M  221 13:36 2017 VPSworld_2017-02-21_13h36.tar.gz

圧倒的容量差

稼働開始

# sudo service minecraft start
Starting minecraft_server.jar...
minecraft_server.jar is now running.

PS4のHDDを2TBに換装した

DL版主体でやってきた結果、ついに付属HDDの容量が尽きた。

わりと持ったほうだけど、FFXVやBloodBorneやら50GB級のもの買い出すと恐ろしいほど容量が減る。

作業は4Gamerを参考にしたら出来た。

www.4gamer.net

以上。

以下買ったHDDのアフィ。

ニコニコマイリストRSSをSlackに吸い上げて貰うようにした

yajamon.hatenablog.com

feedlyで受けるの止めました。

記事の末尾にあるけど、通知先にSlackを選択したのなら、RSSインテグレーションで十分なのよね。

基本的にfeedlyRSSを登録するのは以下を目的にしている。

  • 新着を素早く受信するため
  • 加えて、読むか読まないかの仕分けをするため
    • 読む記事はPocketに送る(IFTTT経由
      • Pocketを使うのは、RSSフィード以外にも後で読む記事があり、それと統合するため

で、マイリストの新着なんて基本全部観たいし、通知先プラットフォームをSlackにしてるし、feedlyを外した。

Windows10でヘルプ(.hlp)が見れないので.chmを介してhtml化した

TSXBINのマクロヘルプが見たかったんだけれど、windowsお前ええ加減にしいや。

環境

  • Windows 10
  • Universal Extractor 2 Beta 4
  • HTML Help Workshop 4.74.8702.0
  • chmdecoder 2.2 (13.03.2014)

手順

chromeだかセキュリティソフトだかが「こんな得体の知れんしクソ広告塗れのサイトなんぞセキュリティリスクじゃ!あかんあかん!」って言うもんだから有志がforkしたっつーUniversal Extractor 2を使った。

「いやそいつヤバイよ。こっち使いな」とあったら教えて。

.hlpを.chmに変換する

  1. Universal Extractor 2を入手、インストール
  2. 対象の.HLPファイルを選択し、OKで展開する
  3. HTML Help Workshopを入手、インストールする
  4. HTML Help Workshopを起動する
  5. [File]->[New]、ダイアログでは「Project」を選択してOK
  6. 「Convert WinHelp project」にチェックを入れ、次へ
    • f:id:yajamon:20170214142952p:plain
  7. さきほど展開したディレクトリ内に.HPJファイルがあるので、それを選択するし、次へ
    • f:id:yajamon:20170214143014p:plain
  8. 下部の入力欄には適当なプロジェクト名を入力し、次へ。(例: macro.hhp
  9. 完了ボタンをクリック
  10. [File]->[Compile]。.hhpファイルが指定されているので、そのままCompile。
    • 「Indexに使う"なんとか.hhk"がないぞ!」とか言われる場合がある
    • それでもとりあえず.chmファイルは生成されている

.chmを.htmlに変換する

  1. chmdecoderをインストール
  2. chmdecoderにて、「Open…」から生成した.chmファイルを選択する
  3. Output folderを変更する(しなくてもいい)
  4. 「Generate Menu」にチェックを入れる
  5. 「Go」ボタンをクリックする

.htmlに変換してから

いろいろおかしいので直す。

左メニューのリンクが機能しない

{OutputFolder指定先}\プロジェクト名\__left.htmを修正する

  • バックスラッシュを出力できていない点を修正する
  • d.add(1,0,"macr04j4.htm","html\macr04j4.htm");などと、エスケープになっている
文字コードUTF-8に変換する

せっかくブラウザで開くので

  1. 文字コード一括変換ソフトのインストール
  2. 対象htmlをすべて変換する
  3. htm内のメタタグを修正する
    • before: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
    • after: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=UTF-8">

とりあえず読めるようになった

めんどくさすぎる。

残課題

  • .htm -> .html
  • ファイル名の修正

ps axで出るTIMEの書式はMMM:SS

結論

ps axコマンドで出力される書式にて、TIMEの書式はMMM:SS

経緯

「めっきり使ってないマイクラ鯖どうなってるかな」

「あれ?再起動できてなくない?」

# ps ax | head -1 && ps ax | grep forge
  PID TTY      STAT   TIME COMMAND
 1046 ?        Ss     0:00 SCREEN -h 1024 -dmS minecraft java -Xmx768M -Xms512M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=1 -XX:+AggressiveOpts -jar forge_1.7.2_universal.jar nogui
 1048 pts/1    Ssl+ 37791:54 java -Xmx768M -Xms512M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=1 -XX:+AggressiveOpts -jar forge_1.7.2_universal.jar nogui
32227 pts/0    S+     0:00 grep forge

TIME長すぎてドン引き

調べた

BSD 書式を使ってシステム上の全てのプロセスを表示する:
ps ax

Man page of PS より

bsdtime TIME ユーザーとシステムの cpu 時間の合計。 表示フォーマットは通常は “MMM:SS” であるが、 プロセスが cpu 時間を 999 分より多く使っている場合は、右側へシフトする。

Man page of PS より

つまり、37791/60/24=26.24375。なんだ1ヶ月くらいか。焦った焦った。

てっきり4年位稼働してるのかと思っちゃった。

参考URL