レンタルサーバーでminecraftサーバーを立てる際にひっかかった話【1.10.2】【ConoHa】

概要

  • The Unusual SkyblockをマルチプレイしたくなったのでConoHaのレンタルVPSを借りて建ててみた
  • 他のブログ等を参考にしたが上手くいかなかった。知り合いと色々試して解決できたのでまとめる

わかる人向けの結論

  • 古いバージョンのminecraftサーバーが動かない場合はJavaのバージョンを古いものに切り替える
  • サーバーのjarや配布ワールドの所有権・グループを適切に設定する
  • (配布ワールドの場合)"server.properties"の"enable-command-block=true"を設定する

前提

手順

前提

  • ConoHaのレンタルサーバーは契約済みでサーバーもMinecraft Java Editionで作成済みとする
  • セキュリティグループに"IPv4v6-SSH"が追加済みであり、WinSCPからサーバーに接続できる状態とする

サーバーへのjarファイルの導入

  1. WinSCPでサーバーへ接続する
  2. "/opt/minecraft_server"ディレクトリに移動する
  3. minecraftサーバーのjarファイルをサーバーに転送する(下記画像)
    1.10.2のjarファイルを入れた直後
  4. 転送したjarファイルを右クリックしてプロパティを開く
    jarファイルのプロパティを開いた直後
  5. 所有者、グループを"minecraft"に変更する
    jarファイルのプロパティ変更後
  6. OKを押下してプロパティを閉じる

※補足:既に存在しているjarファイルは消しても消さなくても問題ない。

systemdの編集(起動するバージョンを変更する)

  1. "/etc/systemd/system"ディレクトリに移動する
  2. "minecraft-server.service"を右クリックして『編集』→『編集』でエディタを開く
    編集するファイル(minecraft-server.service)
  3. 転送したjarファイルの名前に変更(今回は"minecraft_server.1.10.2.jar")
    minecraft-server.serviceの編集後(青ハイライトの箇所)
  4. 左上の保存(フロッピーディスクアイコン)をクリックした後、エディタを閉じる

(配布ワールドを利用する場合)ワールドの導入

配布ワールドを使用しない場合は読み飛ばして下さい。

  1. "/opt/minecraft_server"ディレクトリに移動する
  2. "world"ディレクトリをすべて削除する
  3. 配布ワールドのディレクトリ名を"world"に変更する(worldディレクトリの直下にlevel.dat等のファイルが並ぶ形)
  4. 配布ワールドが格納されている"world"ディレクトリをサーバーに転送する
  5. 転送した"world"ディレクトリを右クリックしてプロパティを開く
  6. 下記画像のように所有者・グループを"minecraft"に変更し、"所有者・グループ・パーミッション再帰的に設定する"にチェックを入れた状態でOKを押下する
    配布ワールドの所有者設定
  7. WinSCPを閉じる

参照するjavaのバージョン変更

本題になる部分。

  1. PowerShellを起動(WindowsメニューからW列の"Windows PowerShell"フォルダ内の"Windows PowerShell"、あるいは直接検索して起動しても構わない)
  2. 下記を入力({IPアドレス}としている箇所には借りているサーバーのIPアドレスを入力。{}のカッコは要りません。)
    ssh {IPアドレス} -l root
  3. 下記のように表示されるので、rootのパスワードを入力(サーバー作成時に設定したパスワード)
    root@{IPアドレス}'s password: 4 . (初回の接続時の場合)"ECDSA key fingerprint~"といった表示が出た場合は"yes"を入力
  4. ログインに成功した場合は"Welcome to Ubuntu~"とか表示が出る(出ないかも)。入力するところがroot@{なんか文字列}:~#に変わっていれば問題ない。
  5. 下記を入力する
    update-alternatives --config java
  6. 画像のような表示が出るので、使用するjavaに対応しているSelection列の番号を入力(今回はjava-8を使うのでこの例では3)
    update-alternativesの出力

※補足:使用すべきjavaのバージョンを調べてみたが、公式の動作確認した表などを見つけられなかったので、古そうなバージョンは古いやつで動かしてみて試すのが結局は早く済むかも

サーバーの再起動

Webから見れるサーバーのコントロールパネルから再起動してもいいけどこの手順のほうが変更の反映は手早いです
ワールドの入れ替えや設定の変更を行ったらこの手順で変更を反映させてください

  1. PowerShellssh接続後の状態で下記を入力する
    systemctl restart minecraft-server.service
  2. 起動を確認するには下記を入力する。起動できていれば下記の画像のように "Active: active(running)"になる
    systemctl status minecraft-server.service
    systemctl status
  3. minecraftのクライアントを立ち上げて接続できるか確認する

※補足:サーバーを停止する場合は下記を入力する。立ち上げる場合はrestartでよい。
systemctl stop minecraft-server.service

あとがき

  • 古いminecraftってそういえばJava8で動かしてたな・・・
  • それはそうとConoHaがゲームの種類選んで環境構築やってくれるのは便利だった。コントロールパネルが異常なまでに重いのとか再構築かけたら8時間くらい待たされたのだけうーん
  • 再構築中に削除かけようとしたりしたらなんかおかしくなったのでその辺の解決策は後で気が向いたら書いておきます

Arcaeaのポテンシャル11.00になった

ここからが本番だ・・・

開始:5/10

到達:7/11

11.00到達時点のベスト枠

購入したパック

  • メインストーリー全部
  • Extend Archive
  • Esoteric Order
  • Cytus II
  • 単曲購入いくつか(キャラクター解禁に必要な曲とAstral tale)

購入の基準はアニバーサリーセールでの割引率が悪いもの
Extend Archiveやメインストーリー、Esoteric Orderはどれも半額までいかないらしい(参考:こぼれ話 - Arcaea Wiki*)
Astral taleはSheriruthのフロアとスカイを交互に叩くトリルを練習するために購入(そんなに効果は無かった。Sheriruthの練習はSheriruthを擦ったほうがいいと思う。ヒュブリスFTRの最初のトリルも入門にはいい感じかも)

ポテンシャル伸ばす上で覚えておきたい事

EX以上orハイスコア更新orハードゲージ落ちだとポテンシャルは落ちない

  • スコアがEX以上、もしくはハイスコア更新、もしくはハードゲージで強制終了(例外あり)の場合はRecent Top 10が下がらないのでポテンシャルが落ちない
  • フルコンできそうな曲はTempest対立を使っておくとミスったらサクっと落として次にいけるので楽かも
  • Esoteric Orderで解禁できるラグランジュのランク予測も便利だった。曲の終わり際にEX届かなさそうならリトライする

スコアに対する譜面定数のざっくりした感覚

  • EX~PMの間は譜面定数+1.0~+2.0の間でスコアに比例して変化する。20,000点ごとに+0.1ずつされるので、ノーツ数からポテンシャル11.0を目指すまでの許容Far数が大体わかる
  • 譜面定数計算機とかをわざわざ叩かなくてもざっくり把握できるとベスト枠に入れられるかの見立てはしやすいかも

ハイスピ設定

  • 曲ごとに微妙にスクロール速度が違う→BPM見てもわからないので覚えて調整する

譜面研究

  • 知らないと取れないアークがよくあるのでwikiにある手元動画見て運指と譜面研究する
  • アークの高さが思ったより低いor高いことがある(例:Sulfur FTRの855ノーツ目のちぎれアーク)のでハイスピ落として叩かずに見て覚えるのも必要かも
  • スカイとフロアの混合トリルはどちらが先か見切れなければ研究するかハイスピ上げる

練習について

苦手要素を開幕で練習できる譜面をリトライで何度も回す

  • 前述のヒュブリスの開幕トリルとか、GIMME DA BLOODの開幕とか
  • いくつか練習に使った譜面があるんだけど忘れた・・・結局のところFARとLOSTを減らしてスコアを出すのが目的になるので、苦手な開幕は癖付けない程度に何度も擦ると上達が早いかも

取れないアークの練習(研究?)

  • じっくりよく見る(どこまで移動してから折り返すか、どのくらいの速度で移動すればいいのか)
  • 普通にプレイしていて記録更新できないペースなら一回放置して観察する
  • アーク取った後そのままの形でノーツを取ることを想定した配置もあるので意識して取る

余談

  • BMS曲もそれなりに入ってるし、Cytusともコラボしたしで最高。Deemoともコラボしてください。お願いします。

【Windows】Windowsの標準機能でzipファイルの一覧を取得して特定の拡張子を持ったファイルを格納しているzipファイルを特定する

お久しぶりです。表題の通りです。なんとも読みにくい記事です。ごめんね。

概要

  • ドライブ内のzipファイルの一覧を取得する
  • 取得した一覧をもとに、特定の拡張子のファイルを格納しているzipファイルを特定する

コード

zipファイルの一覧を取得する

コマンドプロンプト用のバッチファイル(.bat)

@echo off
setlocal enabledelayedexpansion

type nul > listup_zipfile_output.txt
set /a founds=0

echo processing...
echo zip found : !founds!

for /r %%F in (*.*) do (
    if /i "%%~xF"==".zip"    (
        cls
        echo processing...
        echo zip found : !founds!
        echo %%F >> listup_zipfile_output.txt
        set /a founds=!founds!+1
    )
)
echo process done.press any key to exit.
pause > nul
exit

取得した一覧から特定の拡張子のファイルを格納しているzipのファイルパスを表示する

PowerShell用のバッチファイル(.ps1)

add-type -assemblyname system.io.compression.filesystem
[IO.Directory]::SetCurrentDirectory((Get-Location).Path)
$current_directory = [IO.Directory]::GetCurrentDirectory()
$target_zipfile_list = "listup_zipfile_output.txt"
$target_extensions = @(".exe", ".mp3")
echo "Current Directory`t-> $current_directory"
echo "Target Zipfilelist`t-> $target_zipfile_list"
echo "Target Extentsions`t-> $target_extensions"

foreach ($zip_filepath in Get-Content $target_zipfile_list) {
    # ZIPファイルの持つ内容のコレクション
    $zipfilecollection = [io.compression.zipfile]::openread($zip_filepath).entries
    foreach($file in $zipfilecollection){
        $isZipHasTargetExtension = $false
        $file_extention = [System.IO.Path]::GetExtension($file.Name);
        foreach($extension in $target_extensions){
            if($file_extention -eq $extension){
                echo $zip_filepath
                $isZipHasTargetExtension = $true
                break
            }
        }
        if($isZipHasTargetExtension -eq $true){
            break
        }
    }
}

コピペして使う人向けの使い方

  1. zipファイルの一覧を取得したいドライブの直下に.batと.ps1の拡張子で保存した上記のバッチファイルを配置する
  2. .ps1の$target_extensions = @(".exe", ".mp3")の行の.exeやら.mp3の中身を探したい拡張子で置き換える
  3. .bat→.ps1の順番で実行(手を加えないならps1はPowerShell上で実行しましょう)
  4. おわり ちなみにファイルの拡張子の大文字小文字の区別はつけないと思います。

中身の話

add-type -assemblyname system.io.compression.filesystem

zipファイルを展開したりするアセンブリのインクルード宣言みたいなやつらしいっすよ(適当)

[IO.Directory]::SetCurrentDirectory((Get-Location).Path)

最初これ書かなくてつまづいた。.NET Frameworkの機能を使う場合はこれでカレントディレクトリを移動してあげないとダメみたい。

$zipfilecollection = [io.compression.zipfile]::openread($zip_filepath).entries

zipファイルのフルパスからzipファイルをオープンして、ファイル内容の一覧を取得するとこ。ちなみになんだけどzipファイルは構造上、パスワード付きzipにしてもファイル名の一覧は見えちゃうのでファイル名は人に見せても大丈夫な名前にしておこうね。

$file_extention = [System.IO.Path]::GetExtension($file.Name);

ファイル名の形式だとGetExtension()を使って拡張子だけパースできるんだって。便利だねぇ。

if($file_extention -eq $extension){

-eqで比較すると大文字小文字の区別なしで比較するみたい。厳密な比較は-ceq、他にもワイルドカードで比較する-likeとかあるので気になったらググってください。

余談

zipファイルの中身を見るならUnzipとかでいいじゃんと思ってたけどデフォルトだとWindowsに入ってないんだよね。なんやかんやあってUnzipも導入するのが面倒な環境だとどうしたらいいんだろうってなってたので調べた。
PowerShellってそういえば触ったことが無かったな・・・

Sound BlasterX G6を買った

ちょっとしたメモ程度の内容

買ってからつなげてみたら音が止まったりマイクの音にノイズが乗ったりしていた。 セーフモードでドライバを入れなおす、OSのクリーンインストールなどを行ったものの解決しなかった。 自分の場合は(電力供給以外で)使用していないのに接続していたHDMIケーブルが悪さをしていた模様。

環境

MB : ASrock Steel Legend B450M CPU : AMD Ryzen 5 3600 GPU : Radeon RX5700(ASUS DUAL-RX5700-O8G-EVO)

問題の切り分け手順

  1. セーフモードでドライバの入れ直し、問題の発生を確認 →ドライバのインストールの失敗ではないかもと考える
  2. Switchに接続して1時間以上正常に動作することを確認
  3. 別のラップトップ機とデスクトップ機に接続して1時間以上正常に動作することを確認 →Sound Blaster本体には問題がないと考える。対象のPCのハードウェアor他ドライバ等との相性問題と考える
  4. OSのクリーンインストール。問題の発生を確認 →ハードウェアとの相性問題と考える
    5.不要なケーブルを一本ずつ抜いていく
    →結果的にはHDMI入力切り替え機に電力供給するためにマザーボードに挿していたHDMIケーブルを抜いたら問題が起きなくなった

憶測でしかないが、 ・HDMIケーブルで給電するせいで電力不足になった
HDMIから音声を出力しようとするなどしたせいでドライバがバグった
あたりが原因かもしれない。サウンドカードが上手く動作しない場合は余分なケーブルを抜くのを試してみるとよさそう。 とりあえずSound BlasterX G6がまともに使えるようになったのでありがたい。

iVRyでVRを試した

前回の記事から約3か月、まさかこんな大変な事が起きるとは思ってもいませんでしたね 期せずして時間が生まれてしまったので、前からやってみたいと思っていたVRを試したので雑に書いておこうかなと思います。

** VRって高いよね PCでのVR、始めようとすると高いですよね。
自分はBeatSaberとかVRChatがやりたくて仕方がないわけですが、いいグラボ(RX5700)を買っただけでお金が吹き飛んでしまいました。
せっかくグラボを交換したのでVRが動くのか試してみたい・・・でもVR機材を買うお金はない・・・ということで、スマホVRHMDの代わりとして使える方法を試してみた次第です。

用意するもの

スマホは画面が大きめのiPhoneとかだとよさそう。
長めのケーブルは2,3メートル程度あると真後ろを振り返れるのでいい感じでした。
スマホを入れるタイプのVRゴーグルは、Amazonダンボールでも使ってGoogle Cardboardを自作するなり、ダイソーの500円のVRゴーグルでも買うと安く抑えられるかなぁと思います。

準備

先人達がすでに書いているので、そちらを調べてもらうのが早いかと思います。ざっくり書くと、

  1. スマホアプリ版のiVRyをインストール
  2. SteamでiVRyのドライバをインストール
  3. SteamでSteamVRをインストール
  4. スマホのデザリングをオンにする
  5. iVRyを実行したままVRゴーグルスマホをセットする
  6. SteamVRを実行する
  7. キャリブレーションする
  8. おわり

キャリブレーションを適当にやるとVRChatでキャラクターが膝カックンした状態になるのでなんかうまい事やろう(自分は試しただけなのでうまい方法は知りません。むしろ教えて)

感想

視線の移動がスマホジャイロセンサーで行えるのは中々に良かった。
コントローラーが無いとどうやらVRChatで移動するのはままならない模様。SteamコントローラーはVRでまったく使い物にならない。なんだこのゴミ 自分の設定が悪いのかも。
デザリングする都合上、パケットを食うのでそこそこつらい。ダイソーの500円ゴーグルはそこそこな着け心地。ただ、上下左右に隙間ができるので、没入感はちょっと低いかもね。
急いでVRを買うほどでもないかな・・・って気持ちになれた。移動の問題さえ解決すれば、VRのいくらかのコンテンツはこれで楽しめるんじゃないかと思う。

もう少し様子見しようかな

Master The Mainframeはいいぞ。っていうメモ

Master The Mainframeってのに参加しました。面白かったです。
ただ、色々書き散らすと文章がまとめ切れなくなってしまうので、Master The Mainframeについては自分で調べてください。
ここでは『名前を聞いてちょっと興味が出てきた人』向けにチャレンジ中思ったことなどを書き残しておきます。

Master The Mainframeはこんな人におすすめ

  • プログラミング,パズルジャンルのゲームが好きな人
    プログラミングジャンル : 具体例を挙げると、"SpaceChem"とか"Human Resorce Machine"みたいなやつですね。MTMが楽しめるなら逆説的にZachtronics製のゲームはハマると思います。
  • 新旧問わずコンピュータが好きな人
    コンピュータの動作原理とか設計思想みたいなところに興奮する人には向いていると思います。

操作を覚えながら課題を次々こなしていくのがパズルゲームみたいで楽しかったです。
一行が80文字である点など、古い計算機で用いられていたようなパンチカードの息吹を感じました。
(パンチカードの読み取り機が動くイメージが脳裏によぎる・・・動く実物を見たときは感動したなぁ・・・)

進める時のTIPS

ちゃんとメモを取る/まとまった時間で一気に進める

可能ならまとまった時間で一気に進めたほうが操作方法が定着するでしょう。こまかい操作は忘れがちなのでメモを取っておいたほうがいいと思います。

自動翻訳と日本IBMのドキュメントを活用する。

英語が堪能ならともかく、そうでないなら自動翻訳で概要を掴んでから原文を読んだほうが早く読み進められます(当たり前)
外部の掲示板の書き込みなども参考になるので、詰まったらメッセージコード(ICH114514とかIKJ364364とか行の左に出る英字3文字+数字のもの)をググりましょ。

ソースコードはローカルに保管しておく

オリジナルのコードを保管しておいて、書き換え、動作確認のたびにGitを使って管理しておくといい感じでした。
ちなみにVSCodeREXXとJCLのシンタックスハイライトプラグインがあるので、これを使うとローカルで書くのが楽になります。REXXやらJCLやらでMarketplaceを調べてみよう。
書き戻す際は一行ずつコピペです。もっと賢い方法があるような無いような・・・

どうやっても上手くいかない場合

手順どおりにやっても上手くいかない場合、メインフレーム側の問題という事もあります。実際に自分も一度メインフレーム側の問題で3日ほど手詰まりしてしまいました。同じような症状の人がSlackで質問を投げたため、解決してもらえましたが、それが無ければ詰まったままだったと思います。
どうしても解決できない問題に当たった場合はSlackでスクリーンショットを添付して聞いてみるべきだと思います。

操作についてのTIPS

logoffはちゃんとすること

logoff処理をしないで終了してしまうと、セッションが時間切れになるまでログオンしている扱いになってしまい、通常手順のlogonでは復帰できなくなってしまいます。
ただしReconnectオプションで復帰が効きます。Reconnectの左にSを入力して送信すれば切断したセッションに戻ってこれます。これを知るまで苦労しました。
デザリング環境で課題を行う場合、頻繁に切断されてしまうので、Reconnectを活用しましょう。画像の赤丸部分ですね。

f:id:sorenuts:20200102034738p:plain
logon画面

メインフレーム特有のキー

公式が推奨しているターミナルエミュレータには多分仮想のソフトウェアキーボードが実装されているはず。少なくともX3270にはついてました。

f:id:sorenuts:20200102035114p:plain
X3270の仮想キーボード

色々あるけどとりあえず自分が多用したのは以下の2つ。

Attnキー

REXXスクリプトとかがログを吐き出しすぎて止まらない時に割り込みをかけることができるというもの。
割り込みをかけてHIかHEコマンドを送信するとTSOで実行中のジョブが停止し、命令を受け付けます。
一応IBMのドキュメントを見ると、
- HI : 解釈停止
- HE : 実行停止
とあります。

使える時はいつでも、HI 即時コマンドを使うようにしてください。

とあるので、とりあえずHIで停止しておけばよさそう(よくわかんない)

Resetキー

入力不可能なフィールドでキー入力しようとするとカーソルがX印になり、操作ができない状態になることがあります。この時、RESETキーを押すことで入力不可状態を解除できます。課題を進める中でどこかで使用方法が書いてあったような気がするけど、知るまでは詰むので一応書いておきました。

エディタ画面の行追加、行消去

左の行番号にコマンドを打ち込んで送信すると行を挿入したり消去したりできます。
iコマンドが下に行を挿入。dコマンドが行を削除。
複数行にdを入力して送信すると複数行削除されるので活用しましょ。

参考になるサイト

とりあえずこの2つかと。
* 「メインフレーム・コンピューター」で遊ぼう
おそらく日本語で調べ物をすると必ず出てくるサイト。JCLやREXXの入門は役立ちます。ついでにメインフレーム自体についての様々なトリビアが得られるので一通り目を通しておくと、MTMをより楽しめる(?)と思います。
* IBM Knowledge Center
とりあえず日本語の方のURLを。わからない単語なりメッセージコードなりはここで調べましょう。サンプルコードもちょいちょいあるので、書き方がわからなかったりしたらここで調べると大変参考になると思います。

Linux環境からherokuに(Ruby on Rails + PostgreSQL) on Dockerのアプリをデプロイした回

Rails + postgresql on Dockerのデプロイでよくわからなかったり引っかかった部分についてでも備忘録がてら上げときます。RoR+PostgreSQL on Dockerのローカル環境構築も中々に手間取ったのでそっちも気が向いたら書きます。

筆者の環境

  • Manjaro Linux 18.1.3
  • docker 19.03.40ce build 9013bf583a
  • docker-compose 1.24.1

Arch Linuxへのherokuの導入

公式のAURがあるのでそちらから導入。

導入

git clone https://aur.archlinux.org/heroku-cli.git
cd heroku-cli
makepkg -si

バージョン確認

heroku -v

herokuにRails + Postgresqlのアプリをデプロイする

あらかじめ

docker-compose down

しておきましょう。

作業しているディレクトリ(Dockerfileのあるディレクトリ)に移動します。ここではとりあえずappフォルダということにしておきます。

cd app

herokuにログインする

heroku login

コマンドを実行するとブラウザが立ち上がり、herokuへのログインを求められます。 ログインに成功した感じになったらheroku containerへのログインをします。

heroku container:login

herokuアプリを作成する

heroku create

heroku containerにdockerイメージをpushする

コマンド実行時にイメージをビルドしてくれるみたいなので、sudo権限を渡してあげないとパーミッション周りで失敗します(少なくとも自分のManjaro Linux環境では失敗)

sudo heroku container:push <コンテナ名>

アドオンを追加する

自分はPostgreSQLを利用したのでアドオンを追加してやります。余談ですが、アドオンの追加は無料のものでも、クレジットカードの登録が必要だった気がするんですが、いつのまにか不要になっているように見えます。

heroku addons:create heroku-postgresql:hobby-dev

動かす

でherokuにリリースする。何やってるのかはいまいちよくわかってないんですけど(ダメじゃん)、pushしたやつを動かすっぽいです(多分) Release Phase

heroku container:release <コンテナ名>

であとはデータベースのマイグレーションrailsコマンドでやっておきます(上の参考ページを見た感じだと自動でやってくれるっぽい事が書いてあるんですけど、実際どうなんですかね)

heroku run rails db:migrate

動作確認

heroku open

を実行すると実際に動いているページがブラウザで開きます。

感想

権限まわりで引っかかるたびにsudoでごり押すのって美しくない感じがある・・・