2017年8月21日月曜日

無料のMinecraftPEマルチプレイサーバーのMiRmMCPE運営して早2ヵ月...

どうも。はにおかさいです。

MiRmを運営して早く、2ヵ月経ちました。6月14日から運用しています。

mirm.infoとは、MinecraftPE/PCの完全無料のレンタルサーバーです。
プラグインはすでにいれてあるものを使えます。

そもそも、MiRmの名前の由来を知っていますか?私はあまり知りませんw
たぶん、MiはMinecraft,Rmはもともとの仮プロジェクト名”Racoom”が由来します。

運用していて、いくつかわかったことがあります。


・Javaは割と長く動かしてもメモリリークしない
-かなり安定して動いてます。

・やっぱ利用者の質は、、、
-小中学生の利用者が多いので、どうしても民度が下がるようです

・内容がマンネリしやすい
-プラグインがダブるので、どうしても

・バグ報告がうまくいかない
-利用者的にあまり報告がうまくなされません。チャット検索等で運用状況をすくう必要があります。

・使いこなせないユーザーも一定数いる
-使い方を理解したユーザーが教えあっているようで、一応はなんとかなっています。


今は夏休み需要で利用客が多いのですが、今後も維持するにはさらなる改善が必要とは感じます。ただ、有料の方との兼ね合いもあるのでなかなか大変そうです。

☆課金制度は導入しないと思います




2017年8月20日日曜日

[PocketMine-MP]チャット制限プラグイン公開!

こんにちは、はにおかさいです。
今回は、MiRmで使っているチャット制限プラグインを公開します。

https://github.com/haniokasai/ChatPermitter/

このプラグインは、MiRmで嫌われているプラグインナンバー1でしょう。



こんな感じでチャットを制限できます。

こうするメリットは、チャット荒らしや、不毛な会話を減らすことができます。
コードも公開してますから、自由に改造しちゃってください。

@config_enable コンフィグを読むか
@chaturl チャットコードを見れるurl
@deleteurl チャットコード消化用url
@deleteday チャット権限の削除日数

2017年7月17日月曜日

cloudflareのUnder DDoS Modeのサイトからファイルを拾ってくる in Python

こんにちは、haniokasaiです。

https://forum.pmmp.jp が廃止になるため、慌ててデータを落としたくなりました。

https://github.com/haniokasai/XenDownloder

こちら。

import cfscrape


scraper = cfscrape.create_scraper()


print scraper.get("https://forum.pmmp.jp/").content
これで、ふつーのテキスト的な感じでダウンロードできます。

res = scraper.get("https://forum.pmmp.jp/attachments/" + str(i) + "/", stream=True)
fname = re.findall("filename=(.+)", res.headers['content-disposition']) #ファイル名を取得します。
parsedfname = fname[0].replace("\"", "")
#phar名編集
\
if res.status_code == 200:
with open(parsedfname, 'wb') as file:
for chunk in res.iter_content(chunk_size=1024):
file.write(chunk)

こちらのコードで、ファイルを保存できます。

これで、cloudflareがあってもdlできます。

参考;https://torina.top/detail/161/

2017年6月12日月曜日

Javaがメモリ足りてるのにメモリ不足で動かないとき。Ubuntu

Javaで、立ち上げるとKilledやら強制終了やら、
Native memory allocation (mmap) failed to map 262144 bytes for committing reserved memory.
やらOut of memoryとか言われることがあります。
でもメモリは10GBほど余っています。

4時間ほど格闘した末、Jenkinsだけがはっきり答えを示してくれたので、まとめました。


環境 Ubuntu 16.04 64Bit ,"Oracle" Java 8

最初に以下のことを試してみました。

Javaが動いてると、Text file Busyって言われますから、
killall Java
killall Java
killall Java
....
でJavaを殺してあげてください。

初回の時のみ最初に(このコマンドが扱える形式にする?そうです)
paxctl -c /usr/lib/jvm/java-8-oracle/jre/bin/java

1度でいいかは不明ですが、MPROTECTを解除します。
paxctl -m /usr/lib/jvm/java-8-oracle/jre/bin/java

これで、立ち上げられました。と思ったらこれでもダメ。

仕方ないので、OOM Killerに黙ってもらうことにしました。

テキストエディタで  /etc/sysctl.confに追記してください。

vm.overcommit_memory = 1

保存して、コンソールで

sysctl -p

と打つとapplyされます。これで解決したのですが、根本的な対策ではないと思うので、原因が見つかったら直さないといけませんね。この修正で今のところシステムは快調です。


参考

https://stackoverflow.com/questions/27262629/jvm-cant-map-reserved-memory-when-running-in-docker-container

http://passingloop.tumblr.com/post/11957331420/overcommit-and-oom-killer

2017年5月28日日曜日

nginxでライブストリーミング!nginx-rtmp-module

生配信サーバーを構築してみたかったのですが、nginxのエクステンションでできることがわかって構築しました。
サーバーはこれで構築できました。
macbook air obs-(wifi 100mbps)>ubuntuサーバー-(wifi)>macbook air vlc
での遅延が3秒のようですから、私には実用的な遅延レベルです。

しかし、クライアントがHLSとなると36秒遅延しています。

なぜそうなるのかはどうやら、HLSは遅延をなくすには向いていないようです。
HLSでも遅延を減らせなくはなさそうなので、最初はHLSで頑張ってみます。
今回の受信者はAndroidを想定しています。視聴者は少数であるという想定です。

まずは、nginxのrtmpの設定で、

# HLS fragment の長さ(1個のtsファイルの動画の長さ)
hls_fragment 1s;

としてみました。

すると、遅延は25秒になりました。

続いて

#m3u8ファイルに何秒分のtsファイルを掲載するか
hls_playlist_length 4s;
#なぜか必要です 
wait_video off;



遅延が22秒!
ただし、安定性が落ちるようです。

この秒数を2とするとそもそも開けなくなりました。

次に、

hls_max_fragment 8s;

としてみます。

すると、、、
遅延を17秒までにできました!うぅ!

4秒にしてみます。

12秒までに削減できました。

2秒にすると、14秒になるので減らし過ぎもいけません。

ところが
githubのissueを見ようとした時に、誤って、リポジトリ検索したら、html5でrtmpを見るというものを見つけてしまいました。


なので、HLSでの試みはここで放棄します()


留意点
これらの低遅延の設定を施すと、cpuに負荷がかかります。core i7の 37なんとかsだかtでやったのですが、1コアだけ与えた仮想マシンで、cpu100パーセントにしばしばなりました。
vpsで構築する人には辛いかもしれません。


余談
OBSの配信停止をしてから、nginxを止めないと、OBSがクラッシュします

参考文献

2017年5月24日水曜日

Minecraft PEサーバーソフトウェア集(PocketMineと多言語サーバー)2017年5月版

こんにちは、haniokasaiです。
PocketMine-MP公式がshogicp氏のMojang入社に伴い死んでしまったため、どのサーバーソフトを使えばいいかわかんないという人は非常に多いです。
ですから、いつものように私がソフトをまとめていきたいと思います。

☆言語別にまとめます。

PHP

PocketMine派生

PocketMine-MP
開発:pmmpチーム(リーダーはhttps://github.com/dktapps
ライセンス:LGPLv3
開発状況:活発

公式を半ば乗っ取った形でスタート。必要最低限の機能を持っていて、あまり機能追加をしない。dtkappsは性格が悪いため、Genisysを終わらせた人の1人。バグは少ない。

開発:BlueLightJapan(リーダーkametan0730MC)
ライセンス:GPLv3
開発状況:活発

かめたんが率いるBlueLight.https://github.com/ken77731により、設立が提案。
政治的に安定しており、新機能追加・バージョン対応がいち早い。ほかのsrcに比べると、開発環境が自由で、おのおのが独立して新機能更新している。そのためか、バグが多い。

Steadfast2
開発:Hydreon Corporation
ライセンス:LGPL2
開発状況:それなりに活発

Lifeboat 鯖のSRC。新バージョン対応が早い。ただそこまで実用的なSRCではない。一応企業開発のため滞りは少ない。

ExtraCorePE
開発:ExtraCorePE
ライセンス:GNU Affero General Public License v3.0
開発状況:やばそう(悪い意味で)

日本人のNought57(零月)が所属。チーム内でごたごたがあって、更新はあまりよくない。一部人に人気なそう。

開発:TesseractTeam
ライセンス:GPL3
開発状況:細々と更新

Genisysベース。機能の多さと、動作の安定が両立できている。それなりに人気のSRC。この怪しげなデベロッパーhttps://github.com/AppleDevelopsはPMMP界の破壊に奮闘していた時期も。
チーム内では争いが絶えないよう。

開発:EventaxhlTeam
ライセンス:
開発状況:たまに

ロシア製SRC。Tesseractベース。更新頻度が低いが細々と続けられてはいる。ロシア語メインなので日本人にはわけわからない。コマンドでコードが実行できるらしいがevalなので危険そう。


Nukkit
開発:Nukkit
ライセンス:GPLv3
開発頻度:活発

みんな大好きNukkit。共産圏の開発者が多い。プラグインも非PMMPにしては一番多いし、私haniokasaiもそれなりに作りました。プラグイン開発も容易です。
機能追加は消極的、バグは多くない。
パフォーマンス的にJavaを生かし切れていないと指摘される。

BukkitPE
開発:BukkitPE
ライセンス:GPLv3
開発頻度:一定程度安定

あまり有名でない。ドメインやVPSが死んでるものの開発は続いているよう。レッドストーンが使えます。

死んでる
voxelwind

C#
MiNET
開発:NiclasOlofsson
ライセンス:Mozilla Public License 2.0
開発頻度:なぜか活発

ある意味、一番息の長いサーバーソフト。機能はほぼなく、すべてプラグインで補う必要がある。プラグインは作りやすいが、機能がなさすぎる。コードは一番洗練されていると感じる。噂によると、コードをmojangからもらっているそう。

D言語
sel-server
開発:Kripth
ライセンス:LGPLv3
開発頻度:活発

次世代のサーバーソフト。更新は異様に活発だが、企業が関与しているのだろうか?
ハブとノードで分散できるのが最大の特徴。
残念ながらD言語がわからないので詳細がわからずテストもできず。

停止
Swift
SwiftMine
開発:
ライセンス:Apacheライセンス
開発状況:停滞
C++
BenchMine


まとめ
サーバーソフトは生まれては消えを繰り替えしているのですが、なんとか消え失せたりはしていません。PCに比べて活発さはないのですが、公式のサーバーソフトがない故、特色のあるMCPEサーバーは多くあります。死んでいて紹介していないものもありますけど、多くを網羅できていると思うので、是非参考にしてみてください。

2017年5月5日金曜日

MCPEのパケット解析結果を見れるサイト!

こんにちは、haniokasaiです。
すごそうなサイトを見つけたので紹介します。
D言語で書かれた、MCPEサーバープロジェクト、https://github.com/sel-projectで、パケット解析をしていることに気づきました。
Githubでサーフィンしていたら、たまたまphpやjavaなど多数の言語のMCPEのライブラリを見つけて、その投稿者のホームページをみたら、詳細な解析結果が載っていました。

https://sel-utils.github.io/



















上から、Minecraft PC、MCPE,Raknet,(sel-serverの)hubとnode通信パケット、(sel-serverの)外部からwebsocketで操作するパケットが書かれています。

たとえば、https://sel-utils.github.io/pocket/112.htmlを見てみると、1つ1つのパケットの型、id、サーバーかクライアントが処理するかが書かれています。
これさえ読み解ければ、パケット解析をしなくとも、パケットが読めるというわけです。

しばらくはブログ更新できそうですので、その読み方を解説できればなぁと思います。

2017年5月4日木曜日

appwchr氏のMCPEのマルチプレイアプリで遊んでみた!

こんにちは、はにおかさいです。
精神状態がやばいけれども、それがある意味安堵できる状況でもあるという状態です。

mixiappwchr氏がマルチパーティというアプリを作ったようなので、レビュー書きます。
彼はもともとおしゃまるプロジェクトの開発者でしたが、おしゃまるがなんやかんやで終わってしまいました。でもマイクラで何かをしたかったそうで、今回のマルチプレイのアプリを作ったようです

Android端末が2台ありますので、試してみました。

まず、マイクラPEとマルチパーティーをインストールします。

次に、開きます

許可を開始を押します。(オレンジ色のボタンは長押ししないと反応しないのでしょうか。)


心優しいappwchr氏は変なことをしないと思うので、許可。


許可。

これも許可してください。

設定はこれで終了です!


ーーマルチプレイのワールドを開く側ーー

「パーティー」を作るには、パーティー名を決めて、右下のオレンジボタンを押してください。


名前を決めて、「開始」ボタンを長押しします。
根気強く工夫して押さないとなぜか反応しません。

このあと、マイクラPEのアプリが立ち上がるので、マルチプレイしたいワールドを開いてください。


ーーマルチプレイに参加する側ーー
設定後、アプリを立ち上げます。


先ほどのパーティー名と同じパーティーを押します。




パーティーに参加の参加ボタンを長押しします。


遊ぶを押します。


LANゲームにパーティーを開いた人の名前の部屋があるはずなので、それを押して、参加します。

読み込みを待つと、、


マルチに入れました!


感想
mob等をふ化させて、動きを確認しましたが、今回のこのアプリはおしゃまると違って、サーバーを通さないで通信するので快適にできました。
コマンドはうまく使うことができません。
欠点としては、パーティーに入る際、許可がいらないので、知らない人がどんどんきちゃうことです。テスト中も関係ない人が入ってきて困惑しました。
まだまだ、開発途中ですので、そこは改善してほしいです。。。
1年ほど前、まだ自分に割と友達がいたころにこのアプリがあったら、結構使ってたことでしょうね....
どんどんこれからもMCPEの記事を書けるのであれば、書きたいと思っています。









宇都宮で餃子食べてきた!

どうも、はにおかさいです。
GWどこにも行かないのも寂しいので、宇都宮で餃子食べてきたました。

数時間かけて、宇都宮に行ったのですが、思った以上に栄えてまして驚きました。

まずは、宇都宮 みんみん ステーションバル店に。
11:8ごろ(GWの水)に行ったのですが、一応並ばずには入れました。
注文してから15分後、商品が届きました。

水餃子と焼き餃子を注文、安かったのですが味もそこそこでした。
店には遠出をしていて途中で寄ってる人が多いようです。新幹線もありますからね。


つぎは、同じ駅ナカ(あとで建物が同じことに気づきました())の青源に行きました。
(11:30ごろから)15分ほど並び、店に入って、注文。また10分ほどたったら、オーダーしたものが来ました。

ネギみその焼き餃子
程よい濃さのみそで、ねぎも味噌が染みてて、今回食べた餃子の中では一番気に入りました。


水餃子。みそに浸かってて、味が染みています。スープは酸味が効いてて、餃子にあいますが、飲むには少し酸っぱい気がします。(スープも飲めると書いてあるので飲むことも想定されてるでしょう。)

宇都宮駅から15分ほど歩いて、来らっせ本店に着いた(13時ごろ)のですが、数
十人が既に並んでいて、とても並ぶ気になれなかったのであきらめました。

そっから、オリオン通りに行きました。昔の商店街みたいなところでしたが、正直見どころは少ないです。

歩いていたら、餃子ナンピザなるものを発見!ヒルズカフェ(HillsCafe)という店でした。

店内は、一階がお土産ショップ、2階がレストランです。レストランはファストフードのコーナー的なものを想定して行ったのですが、レストラン色が強かったです。

味はいいのですが、 具が少ない 上に載ってる餃子の焼いた皮がもはやただのせんべい 冷めてる ナンという割には、薄すぎる生地 隣の客がキ〇ガイでからまれた(店関係ないww) 
でいい気分しませんでした。ラー油をかけると、餃子っぽくなっておいしいです。
店はかなり空いてました(二時半ごろ)

また、ぶらぶらしたら、宇都宮餃子館を発見しました。


店内に入るのに、10分(3時ごろ)、店内では2,30分待たされました()


川越シェフも来たことがあるようw


湯葉入り餃子。高いですけど、おいしい。具はほんのり湯葉感がしました。
わさびをつけて食べます。
皮は一番おいしかったです。ちょうどいい歯ごたえ。。。

帰り、駅前の「餃天堂」に行こうとしたのですが、15:30にもかかわらず、1時間以上ほど並んでいそうだったのであきらめて帰りました、、、。
食べたかった。。。。

まとめ
味としては、ねぎみそ焼き餃子。餃子の皮は宇都宮餃子館の餃子がよかった。
んー。全体的に店が混んでます。ゴールデンウイークだったからでしょうか。
正直、宇都宮の名所というものはなさそうなので、行くとしたら餃子食べ歩きがメインになりそうです。
後悔としては、オリオン通り近くの焼きそば屋に行きたかったことです。
店が一見さん厳しい感じだったので入れませんでした。。。
焼きそばが250円。かなり安い。おいしいのかなぁ。
1日中歩き回ってへとへとです。文章のグラマーもなんか変かもしれません。
初食レポ記事なので、だいぶ編集が雑ですけど、ご容赦くださいませ。

2017年4月30日日曜日

[PocketMine] Pharファイルをwebで作る!解凍する!

こんにちは、haniokasaiです。
pharをいちいちdevtoolsで作ったり、展開したりするのが面倒な方に便利なツールを用意しました。
pmt.haniokasai.com

機能は4つ。

ZipからPharに変換

PharからZipに変換する

var_dump() ビュアー

PocketMineのCrash Dump解析

上2つは需要ありそうなので、使い方を解説したいと思います。

ZipからPharに変換

zipを選択して、検査が必要であればチェックを入れ、pharの作成を押すだけで完了できます。
devtoolsでやると、いちいちmakepluginでプラグイン名を入れる必要はありますが、pmtでやればそのような事は不要です。


PharからZipに変換する
    
ファイル選択ー>変換だけでおしまいです。解凍禁止コードを無視して開くこともできますが、(両親ではなく)良心に従って、適切に使ってください。


まとめ
近頃は、たいぶPMMP界が停滞しているように思えます。ですから、新しいデベロッパーが簡単にプラグインを作れるようになれば、界隈が活性化するのではと思います。
自分の記事を読んで、開発に関して知識を深められたらうれしいです。


2017年4月27日木曜日

phpのバイナリをramdiskとhdd上で動かして速度比較してみた

こんにちは、haniokasaiです。比較的精神が落ち着いています。
サーバーで、ramdisk使ってるのですがあまり速くない気がして、そもそもramdiskはファイル読み書き以外にも効果があるのか検証したいと思いました。

チェック環境
Core i7 3770s
ram 16GB(4.1 GB/s)
hdd 300gb(100MB/s)


ハッシュ値計算
まずは、ハッシュ値計算。明らかにcpuしか使わないとは思うのですが試してみました。

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 10000){
echo hash(sha512, 'hoge hoge');
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
echo $time . " seconds\r\n";
?>

ramdisk
2.385381937027 seconds
2.3838350772858 seconds
2.381500005722 seconds
2.385363817215 seconds
2.3823990821838 seconds

hdd
2.386225938797 seconds
2.3824648857117 seconds
2.3904531002045 seconds
2.385146856308 seconds
2.3851881027222 seconds

変わらないですね()

変数に代入+擬似乱数速度

<?php
$time_start = microtime(true);
// ここに測定したいPHPの処理を記述
//http://qiita.com/ao_love/items/a2d8b8566d0426195002
$i=1;
while($i <= 100000){
$a[$i] = mt_rand();
echo $a[$i];
echo PHP_EOL;
$i++;
}
$time = microtime(true) - $time_start;
echo $time . " seconds\r\n";
?>
#test2.php
disk
2.1107099056244 seconds
2.1114587783813 seconds
2.1099500656128 seconds
2.1052420139313 seconds
2.085608959198 seconds

ramdisk
2.1087579727173 seconds
2.1096110343933 seconds
2.1064808368683 seconds
2.1081149578094 seconds
2.111673116684 seconds

やはり同じような値ですね。。。
(単位は秒)
##データはハードディスクにおいて
#bin:ramdisk phar:ramdisk 
0.19
0.19
0.171

#bin:disk phar:ramdisk 
0.184
0.211
0.228

#src:disk phar:disk
0.192
0.202
0.191

#bin:ram phar:disk
0.164
0.191
0.169

#ramdiskにファイルを置いて
#bin:ram phar:disk
0.193
0.197

#bin:ramdisk phar:ramdisk 
0.179
0.18
0.181
0.219

#bin:disk phar:disk
0.195
0.183
0.213
0.176
0.169

まとめ
 差はほぼ生まれないという結果が出ました。やはり読み書きを多くするプログラムでないとramdiskを生かすことはできなさそうです。

2017年4月6日木曜日

PocketMine-MPでマルチスレッド処理をする!Thread/AsyncTask

こんにちは、haniokasaiです。
誰も、PocketMine-MPのマルチスレッドについてまとめた人がいなかったのでまとめてみます。

イントロ
phpで書かれたpocketmineは重いです。それは、保守のかんたんさと引き換えにそうなっているのでしょうが、特にcurlで外部のapiにアクセスをするものを使うときには全体の処理を遅らせてしまうことでしょう。
そもそも、PMMPのbinには、pthreadが同梱されていますが、単純に使うことはどうやら
できないようです。そこでどうしようかなぁと思ってたら、記憶がうろ覚えなのですが、pocketmine\threadを使うと良いと、おぎわらが教えてくれました。彼は私の夢で何故か一度登場したことがあります。
マルチスレッドについては、検索すればいい説明が読めます。


プラグイン例
https://github.com/haniokasai/PocketMine-Thread/

Thread
threadは、返り値の伴わないスレッド処理ができます。ですから、serverlistの情報送信のような一方的な作業に使うことができます。

        $job1 = new thread_ex1("Hello");
        $job1->start();

class thread_ex1 extends Thread
{
    public function _construct($data)
    {
        $this->data = $data;
    }
    public function run()
    {
        echo $this->data;
       Server::getInstance()->getLogger()->notice($this->data);// 動かない、無言だがエラーとなる
    }
}

最初の $job1 = new thread_ex1("Hello");
で、仕事を生成します。
()内には、引き渡したい変数をかけます。
(引き渡し先は、_construct($data)です。この関数の中に $this->data = $data; と定義してあげると、run内で利用できます。)
$job1->start(); で仕事実行です。
すると、_construct、runの関数の順に実行されます。
ただし、run内で、phpで書いた関数はスレッドクラス外から呼び出せないです。


AsyncTask
これは動作完了時に、任意の作業をさせることができます。ですから、webに接続するタイプのログインプラグインであっても、通信が完了した時にログインを完了させれば、他の人がラグを感じずに済むわけです。

$this->getServer()->getScheduler()->scheduleAsyncTask($job4 = new thread_ex3(Server::getInstance()));

class thread_ex3 extends AsyncTask
{
public function __construct($instance)
{
$this->instance =$instance;
}
public function onRun()
{

echo PHP_EOL."job3 1-2";
//$this->instance->getLogger()->notice("job3 1-1"); //動かない、無言だがエラーとなる
}
public function onCompletion(Server $server)
{
echo PHP_EOL."job3 2-2";
$server->getLogger()->notice("job3 2-1");
}
}

最初の、 $job4 = new thread_ex3(云々 の変数で、仕事を作成、scheduleAsyncTask で開始させています。
すると、_construct が実行、onRun が実行され、 onRunが完了すれば、onCompletionが実行されるでしょう。
onRun内では、外部の関数が実行できませんが、onCompletionでは、Serverの変数が渡されるので、$server を$this->getServer()として見なせば、pmmpが操作できます。

イントロの逆ってアウトロなんですね!
以上、マルチスレッドの方法について、まとめてみました。
サンプルプラグインを触れば、何ができるかよりわかると思います。
もともと、ある人の鯖の軽量化のためだけに考えたのですが、もうその人は鯖をやめてしまい、自分も開かないことをその人に進めたので、墓場(github)に埋もれていました。ですから、せっかくなので拾い上げ、記事にしました。
これで少しでも使う人が増えたらいいなと思います。今回はざっとしか書いてないですけど、反応を見て続編を書きたいです。

参考:

https://github.com/pmmp/PocketMine-MP/blob/master/src/pocketmine/scheduler/AsyncTask.php
https://github.com/organization/SpawningPool
 お世話になった、おぎわら、ありがと!
https://twitter.com/CostlierRain464

2017年4月5日水曜日

libminecraft.soを解析して、パケットとか、いろいろ調べる! #2

こんばんは、haniokasaiです。

サーバーホスティングプロジェクトの前段階のプロジェクトに取り組んでいるのですが、最近、それができていないので、別のことをしようと思いました。そこで、パケット解析の手法を書きます。

今回使う、mcpeassemblyanalogyanalyzerの製作者のnewdelion(以後、あーたんと表記)とかなりもめたことがあり、記事が製作できませんでしたが、最近ではすっかり仲良くなり、後ろの穴を使わせてもらう関係となりました(大嘘)彼は残念ながら、ほかにも仲のいい男がいるので、私の片想いでしょうが、、、、 ホモじゃないですよ!!!

冗談はさておき、本題にはいります。

#修正
2017/4/5 片想いの漢字が間違っていると、本人から指摘を受けましたが、片想いであることは間違っていると指摘を受けませんでした

windowsでやります

まず、libminecraftpe.soバイナリからテキストファイルをつくらないといけません。
http://blog.haniokasai.com/2016/11/libminecraftpesowindows.html
以前、書いておきました。これにしたがって、やってください。

次に
https://ci.appveyor.com/project/haniokasai/mcpeassemblyanalogyanalyzer/build/artifacts
にて、ログインをし、PacketSearcherとSpliterを落としてください。
最新版ではありませんが、ここからも落とせます


Spliter

Spliter.zipを解凍し、Spliter.exeを実行してください。
すると、白黒のcuiの画面が出てきます。

上から、

Path:dumpmcpe.txtの保存場所
Output Path:出力されるフォルダ
Output Name:出力されるファイル名
Output Extension:空欄で構わない

と入力してください。


例:
Path:Z:\workdir\mcpelib\test\dumpmcpe.txt
Output Path:Z:\workdir\mcpelib\test\out
Output Name:out_dump
Output Extension:

エンターを押してかなり待ちます。

すると、 out_dump云々のファイルが作成されているでしょう。


PacketSearcher

searcherという名前ですが、検索するのには使いにくいです。

まず、PacketSearcherを開くと、ファイル指定の画面がでてきます。
それで、さっき生成されたファイルを選んで、開くを押します。

タイトルバーが解析中でなくなったら、saveで適切な場所に保管してください。







これで使い方の説明は終わりとなります。生成された物の見方がさっぱりわかりません。。。。
でも、この記事を読んで、パケットを調べられた!って声をきけたら嬉しいなと思います。



参考:
https://www.youtube.com/watch?v=OEMIiI3B0vU
https://github.com/NewDelion/MCPEAssemblyAnalogyAnalyzer
newdelion(あーたん)本人(Twitterが鍵垢のため、書きません)

2017年4月3日月曜日

timingsでどの処理にどのくらいの負荷がかるか調べる! Minecraft PC(Bukkit)/PE(PocketMine,Nukkit)のサーバーで軽量化! 

どうもおひさしぶりです。haniokasaiです。
最近は下書きを少し書いては、興味がなくなりの繰り返しでありました。

今回は、Minecraftのサーバーの負荷を減らすために、どのような処理に時間がかかっているのかを分析する方法を紹介します。

BlueLightでやってみます。ほかも大体は同じです
サーバーのコンソールで、

/timings on
を実行します
とします。

コンソール
timings on
[17:26:40] [Server thread/INFO]: タイミングをリセット及び有効にしました



普通に(または負荷をかけるように)プレイしてもらい、

/timings paste
をします。

すると 
timings paste
[17:45:36] [Server thread/INFO]: タイミングをhttp://paste.ubuntu.com/23792964/にアップロードします
[17:45:36] [Server thread/INFO]: 結果は http://timings.haniokasai.com/?url=23792964 で見ることができます


とコンソールに表示されるので、 http://timings.haniokasai.com/~等のリンクをブラウザで見てください。(PocketMineの場合、BlueLight以外、http://timings.云々なんとか.com/を、http://timings.haniokasai.com/に置き換えると日本語で見れるでしょう
すると、、、


このように表示されます!
上二つの項目は、サーバー全体の負荷、下2つはプラグインごとの処理の負荷が見れます。
Eventにイベントの種類が書かれています

このようにして、サーバーの負荷を知ることができれば、プラグインの処理を減らす、あるいはサーバーのスペックを増やす等の対策ができるわけです。

2017年2月4日土曜日

激安でもない海外VPS 1か月740円ちょっとのVPS in 中国 [qcloud]

どうも、haniokasaiです。サーバーがほしくなったので、気分を変えて、中国のサーバーを使うことにしました。DDosプロテクションもあります。

リージョンは広州、上海、北京など。

時間払いと月払いが選べます。


回線料金がすごく高い、、、。0にすると外部にアクセスできず、ローカルのみの鯖が立てられます。



DDoSプロテクションつきです!

最新のOSが用意されています。

多くのdockerをはじめとするさまざまなアプリ付きosが選べます。

ディスクは異様に遅いんですけど、cloud blockのせいでしょうか、、、
windows server 2012 datacenterがアクチ済みのものがタダで使えます!

ubuntuも最新....



1個購入。。。

webからvnc的な奴が使えまずが、回線速度を絞りすぎたせいで遅いです。。。



対応言語は中国語と英語
クレジットカードを登録することが本人確認となります。(個人に限る、vプリカでも可能)


C:\Users\hani>ping 182.254.215.132

182.254.215.132 に ping を送信しています 32 バイトのデータ:
182.254.215.132 からの応答: バイト数 =32 時間 =153ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =155ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =160ms TTL=108
182.254.215.132 からの応答: バイト数 =32 時間 =166ms TTL=108

182.254.215.132 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 153ms、最大 = 166ms、平均 = 158ms

C:\Users\hani>

ロサンゼルスと同じ成績()



[email protected]:~$ dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 26.1908 s, 41.0 MB/s
[email protected]:~$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-26xx v3
stepping        : 2
microcode       : 0x1
cpu MHz         : 2294.686
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm xsaveopt
bugs            :
bogomips        : 4589.37
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

よさそう

[email protected]:~$ cat /proc/\meminfo
MemTotal:         893032 kB
MemFree:           64600 kB
MemAvailable:     690460 kB
Buffers:           21712 kB
Cached:           700272 kB
SwapCached:            0 kB
Active:           155496 kB
Inactive:         598416 kB
Active(anon):      34876 kB
Inactive(anon):     2508 kB
Active(file):     120620 kB
Inactive(file):   595908 kB
Unevictable:        3424 kB
Mlocked:            3424 kB
HighTotal:        135168 kB
HighFree:           2396 kB
LowTotal:         757864 kB
LowFree:           62204 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:              1092 kB
Writeback:             0 kB
AnonPages:         35356 kB
Mapped:            27748 kB
Shmem:              3036 kB
Slab:              51136 kB
SReclaimable:      41896 kB
SUnreclaim:         9240 kB
KernelStack:        1104 kB
PageTables:          908 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      446516 kB
Committed_AS:     227716 kB
VmallocTotal:     122880 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:     16384 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       45048 kB
DirectMap2M:      868352 kB

うんうん

[email protected]:~$ wget -O /dev/null http://speedtest.dallas.linode.com/100MB-dallas.bin
--2017-02-02 21:56:18--  http://speedtest.dallas.linode.com/100MB-dallas.bin
Resolving speedtest.dallas.linode.com (speedtest.dallas.linode.com)... 50.116.25.154, 2600:3c00::4b
Connecting to speedtest.dallas.linode.com (speedtest.dallas.linode.com)|50.116.25.154|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null             4%[                    ]   4.24M   174KB/s    eta 5m 16s ^C

遅いっす。

[email protected]:~$  wget -O /dev/null http://speedtest.tokyo.linode.com/100MB-tokyo.bin
--2017-02-02 21:56:39--  http://speedtest.tokyo.linode.com/100MB-tokyo.bin
Resolving speedtest.tokyo.linode.com (speedtest.tokyo.linode.com)... 106.187.96.148, 2400:8900::4b
Connecting to speedtest.tokyo.linode.com (speedtest.tokyo.linode.com)|106.187.96.148|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null            20%[===>                ]  20.86M   245KB/s    eta 7m 11s ^C
[email protected]:~$ ping speedtest.tokyo.linode.com
PING speedtest.tokyo.linode.com (106.187.96.148) 56(84) bytes of data.
64 bytes from speedtest.tokyo.linode.com (106.187.96.148): icmp_seq=1 ttl=49 time=183 ms
64 bytes from speedtest.tokyo.linode.com (106.187.96.148): icmp_seq=2 ttl=49 time=171 ms
64 bytes from speedtest.tokyo.linode.com (106.187.96.148): icmp_seq=3 ttl=49 time=175 ms
64 bytes from speedtest.tokyo.linode.com (106.187.96.148): icmp_seq=4 ttl=49 time=182 ms
64 bytes from speedtest.tokyo.linode.com (106.187.96.148): icmp_seq=5 ttl=49 time=177 ms

やっぱ遅いっす。



Dhrystone 2 using register variables       22648047.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2731.7 MWIPS (10.0 s, 7 samples)
Execl Throughput                               4767.1 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        719886.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          219456.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1309262.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1397614.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 215066.6 lps   (10.0 s, 7 samples)
Process Creation                              14242.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   7612.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    978.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        2077476.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   22648047.8   1940.7
Double-Precision Whetstone                       55.0       2731.7    496.7
Execl Throughput                                 43.0       4767.1   1108.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     719886.2   1817.9
File Copy 256 bufsize 500 maxblocks            1655.0     219456.4   1326.0
File Copy 4096 bufsize 8000 maxblocks          5800.0    1309262.4   2257.3
Pipe Throughput                               12440.0    1397614.8   1123.5
Pipe-based Context Switching                   4000.0     215066.6    537.7
Process Creation                                126.0      14242.8   1130.4
Shell Scripts (1 concurrent)                     42.4       7612.5   1795.4
Shell Scripts (8 concurrent)                      6.0        978.6   1631.0
System Call Overhead                          15000.0    2077476.4   1385.0
                                                                   ========
System Benchmarks Index Score                                        1260.6

それなりのスペック。


まとめ
性能は悪くないですが、回線が悪い、、、何かいい使い道ありますかね?


無料のMinecraftPEマルチプレイサーバーのMiRmMCPE運営して早2ヵ月...

どうも。はにおかさいです。 MiRmを運営して早く、2ヵ月経ちました。6月14日から運用しています。 mirm.info とは、MinecraftPE/PCの完全無料のレンタルサーバーです。 プラグインはすでにいれてあるものを使えます。 そもそも、MiRmの名前の...