読者です 読者をやめる 読者になる 読者になる

ゲーム×研究

ゲームに学術的な部分を組み込みたい(人生の目標)

CentOSへのMySQL導入とperlからの実行

こんにちは続けてMySQLを導入してperlから実行できるようにしたいと思います。

データベースはユーザーデータの管理や、商品の管理な様々な用途に使えます。

はじめに

今回はrpmMySQLパッケージをインストールして、まずはコマンドから実行しDatabaseとTableを作成したいと思います。その後、PerlからDBIを通じてデータベースをいじってみたいと思います。

  • MySQLのインストール
  • (tips)InnoDBに関するエラー対策
  • データベースとテーブルの作成(コマンド)
  • データの閲覧(perl)
  • (tips)DBパスワードに関する注意

MySQLのインストール

以下のサイトを参考にしました。
qiita.com

まずはじめに、既存にMySQLがインストールされているかを確認します。

yum list installed | grep mysql

入っていれば消してください。

yum erase mysql-libs

次にMySQLrpmパッケージをインストールします。

wget http://downloads.mysql.com/archives/get/file/MySQL-client-5.6.20-1.linux_glibc2.5.x86_64.rpm
wget http://downloads.mysql.com/archives/get/file/MySQL-server-5.6.20-1.linux_glibc2.5.x86_64.rpm
wget http://downloads.mysql.com/archives/get/file/MySQL-shared-compat-5.6.20-1.linux_glibc2.5.x86_64.rpm
wget http://downloads.mysql.com/archives/get/file/MySQL-devel-5.6.20-1.linux_glibc2.5.x86_64.rpm
yum install MySQL-client-5.6.20-1.linux_glibc2.5.x86_64.rpm
yum install MySQL-server-5.6.20-1.linux_glibc2.5.x86_64.rpm
yum install MySQL-shared-compat-5.6.20-1.linux_glibc2.5.x86_64.rpm
yum install MySQL-devel-5.6.20-1.linux_glibc2.5.x86_64.rpm

インストールが確認できたら起動します。

service mysql start

次に初期化を行うのですが、パスワードが必要になります。パスワードは以下で確認してください。

view /root/.mysql_secret

それでは、初期化を行います。

mysql_secure_installation

実行すると初めに現在のパスワードを聞いてきます。次に新しいパスワードを設定するか、などいくらか質問が来るので答えてください。

これでインストールと初期化が完成です。

MySQLのログインは以下のコマンドで行います。

mysql -u root -p

実行するとSQLを打てるモードになります。抜ける時は

\q

で抜けてください。

(tips)InnoDBに関するエラー対策

もしかすると、初期化の際に以下のようなエラーが出てしまうかもしれません。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

これは何らかの原因でmysql start した時にsockが生成されなかったためです。
僕の場合は/var/lib/mysql/user.errに以下のようなErrorが出ていました。

[ERROR] InnoDB: Unable to lock ./ibdata1, error: 11

理由はmysqlがもう裏で起動していたためです。プロセスをキルして、再起動することで解決しました。
以下に参考にしたURLを貼っておきます。

MySQLが起動できない | 猫型iPS細胞研究所

データベースとテーブルの作成(コマンド)

それでは用意ができたところで、DBとtableをコマンドで作成します。
参考にしたサイトは以下のサイトです。

Perl/DBIを使ってMySQLでSELECT文を実行する - 調べる.DB

MySQLでログインしたあと、以下のコマンドを入力します。

mysql> create database db;
mysql> use db;
mysql> create table t1 (a int, b varchar(10));
mysql> insert into t1 values(1,'aaaa'),(2,'bbbb'),(3,'cccc');
mysql> select * from t1;
mysql> \q

実行結果は以下のようになります。

+------+------+
| a    | b    |
+------+------+
|    1 | aaaa |
|    2 | bbbb |
|    3 | cccc |
+------+------+
3 rows in set (0.00 sec)

データの閲覧(perl)

それではいま作成したデータをperlで表示したいと思います。

ですがその前にperlからMySQLを操作するDBIとDBDをインストールします。
DBIはData Base Interface
DBDはData Base Driver
です。以下のコマンドで行います。

yum -y install perl-DBI perl-DBD-MySQL

それでは、実際に表示を行うperlのコードをいかに示します。

test.pl

#!/usr/bin/perl

use strict;
use DBI;

our $DB_NAME = "db";
our $DB_USER = "root";
our $DB_PASS = "自分の指定したパスワード";
our $DB_HOST = "localhost";
our $DB_PORT = "3306";

my $dbh = DBI->connect(
    "dbi:mysql:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT",
    "$DB_USER",
    "$DB_PASS")  or die "$!\n Error: failed to connect to DB.\n";

my $sth = $dbh->prepare("SELECT * FROM t1;");
$sth->execute();

while (my $ary_ref = $sth->fetchrow_arrayref) 
{
  my ($a, $b) = @$ary_ref;
  print "$a, $b\n";
}

$sth->finish;
$dbh->disconnect;

参考サイトとほぼ同じですが。。。

実行は以下のコマンドで行います。

perl test.pl

以上で終了となりましす。

(tips)DBパスワードに関する注意

パスワードを設定するときの注意点なのですが、@などの文字をパスワードに含める時は以下のように\をしっかりつけてください。
僕はコレのせいでなんでデータベースにつながらないのかをかなりまよいました。

our $DB_PASS = "nantoka\@nantoka";

終わりに

終わってみるとあっという間ですが、perlソースを実行するのに二時間くらいかかってしまいました。これを経て学んだことは

  • エラーログをしっかり見る
  • わからない時は基本的なことを確認する

です。皆さんも参考にしてください。

httpdでCGI(perl)実行できたけど、謎だらけ。。。

どうもこんにちは、昨日に引き続き、構築したwebサーバーでperlCGIを動かしていこうと思います。

CGIは古いという声も聞こえますが気にしないで書いていこうと思います。

今回は最後に謎な部分を見つけたのでそれについて謎のまま終わらせようと思います。誰か知っている人がいたら助けてください。

ちなみにサーバーの構築は以前の記事で作ったものを使用しています。
tkymx83.hatenablog.com

はじめに

CGIを起動する場合は、httpdの設定でCGIを起動できるようにするようです。今回はその設定方法と実際にできたページと注意事項を簡単に説明していきます。

ちなみにサーバーは仮想環境上のCentOS6.9です。順番は以下のようになります。

[CentOS] httpd.confの設定

以下のサイト参考にしました
http://mizushima.ne.jp/Windows/HTTP/Apache/Apache-perl.php

まず、centosにrootではいり、vimで設定ファイルを開きます

vim /etc/httpd/conf/httpd.conf

そして、581行目付近のDirectoryの設定のOptionを以下のように変更します。

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Options ExecCGIとすることで指定したディレクトリでCGIが使えるようになるそうです。既存の設定を引き継ぎたい場合は+をつけてください。

次に796行目付近の#でコメントアウトされている文の#を外してください。そうすると以下のようになると思います。

AddHandler cgi-script .cgi

こうすることで.cgiのファイルがcgiの対象となるそうです。
以上で設定は終了です。

[CentOS] perlファイル(CGI)の設置

デフォルトではcgiを入れるフォルダは以下のフォルダになっていると思います。

/var/www/cgi-bin/

ここにcgiファイルをいれましょう。サンプルを用意しておきます。

hello.cgi

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html><body>";
print "<h2>hello wprld</h2>";
print "</body></html>";
exit;

[Mac] CGIの表示

次は実行です。service httpd start でサーバーを起動してmacのブラウザで以下のurlを打ってみましょう。

localhost:8888/cgi-bin/hello.cgi

以上成功すると hello wprldとだけ表示されると思います。
これは、perlのコードが実行された出力結果をhtmlファイルとして取得しているということになります。

ちなみに
print "Content-type: text/html\n\n";
をつけないとブラウザがhtmlファイルと認識しないので文字だけ出力されてしまいますよ〜。

おわりにと謎

今までの説明で"になるようです。"みたいな、曖昧な喋りからに築いた人入るでしょうか?
なぜこんな喋り方をしているかというと、僕の環境では "[CentOS] httpd.confの設定"を行わなくてもなぜか、cgiが実行できてしまったからです。

なぜ。。。。

予想としては、もっと大元の設定でExecCGIやAddHandlerがセットされているからなのかと思います。。。

確信がついたらまら更新するのでこれからもよろしくお願いします。

MacのVirtual Boxで構築した CentOS6.9をhttp serverとしてmacのlocal環境からアクセスする

どうも久しぶりの更新になります。最近はperlでサイトを作ろうかなと思って動いています。

今日はその過程で仮想環境上にhttpサーバーを作る方法を解説します。

はじめに

Virtual BoxでCentOS6.9の環境を構築しています。Apachehttpdコマンドでhttpサーバーを構築しMacローカル環境から読み込んでみようと思います。

やるべきことは

  • [CentOS] ファイヤーウォールの無効化
  • [Virtual Box] ポートフォワーディングの設定
  • [CentOS] httpサーバーの起動
  • [Mac] サイトの表示

[CentOS] ファイヤーウォールの無効化

まずはじめにメニューから
 <システム>→<設定>→<ファイヤーウォール>
と進みます。

f:id:tkymx83:20170415133234p:plain

つぎにツールバーから
 "無効" "適応" の順番で押します。

f:id:tkymx83:20170415133239p:plain

[Virtual Box] ポートフォワーディングの設定

次にバーチャルボックスの起動時の画面から
 <設定>→<ネットワーク>
へ移動します。

f:id:tkymx83:20170415133703p:plain

そして、
 "高度" "ポートフォワーディング"
の順で押します。

f:id:tkymx83:20170415133708p:plain

その右上の+表示のボタンを押して各項目を画像のように設定します。
・http はhttpサーバーのポート
sshsshサーバーのポート

[CentOS] httpサーバーの起動

"端末"を起動して以下のコマンドでhttpサーバーを起動します。

sudo service httpd start

sudoでできない場合は su - で入ってからでもいいですし、httpdがない場合はyum -y install で入れてください。

[Mac] サイトの表示

ブラウザを起動してurl欄に以下を記入してください

localhost:8888

いかのように表示されたら成功です。

f:id:tkymx83:20170415134221p:plain

かんたんな解説とおわりに

今回は仮想環境上でhttpサーバーを構築しました。通常は80番ポートを使用しますが、80番はmacに割り当てられているのでそれ以外のポートを設定する必要がありました。ポートフォワーディングはアクセスされたポートを指定したポートに変換します。今回は8888ポートでアクセスされたものを80番に変換することで、外からでも仮想環境上のwebサイトを見ることができました。ついでにsshもできます。

これからはperlの環境を整えて簡単なwebサイトを構築していこうと思います。
以上

macでdeinでvim-clangをいれてみた

こんにちは、最近飲み会でうまく仲良くなれない筆者です

今日はmacvim-clangをdeinで入れてみましたので解説したいと思います。

vim-clang,deinって?

 vim-clangはc,c++言語の向けの予測変換を行ってくれるvimプラグインです。deinはNeoBundleのようなプラグインのマネージャーです。deinはNeoBundleよりはやいということなので、いれてみました。

よって今回の流れは
1.deinの導入
2.clangの導入
3.vim-clangの導入

deinの導入

deinは公式サイトが役立ちます。

github.com

以下のコマンドを実行します。

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh installer.sh .vim/dein

これで、.vim/deinにdeinがはいりました。次に.vimrcの設定を行うのですが、以下のリンクでものべられているように、さきほどのsh installer.sh の実行結果を貼り付けます。

qiita.com

これを貼り付けて、保存した後にvimを実行し以下をvim上で実行することでdeinがインストールされます。

:call dein#install()

clangの導入

macではパッケージマネージャーのbrewをインストールした上でclangを導入します。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install clang
brew install clang-format

vim-clang の導入

deinを使ってインストールします。dein#begin と dein#end の間に以下のコマンドを入力します。

call dein#add('justmao945/vim-clang')

おわりに

これでしゅうりょうになります。かんたんですね。実際ネットを似て導入すると、ぼくはに時間かかりました。断片化された情報をまとめるのは初心者のうちは大変です。macでdeinでvim-clangを利用する人は参考にしてください。

パーティーゲームでできること

こんかいは、パーティーゲーム(複数人でやるゲーム)を作るとしたらどんなことができるか考えてみました。スマホのゲームについて考えています。備忘録的な感じなので興味があれば見てください。

どんなシチュエーション?

東京に友達が遊びに来たとします。せっかく遊びに来たし何か一緒にできることはないかなと考えています。そんなときにできるようなゲームを考えたいなと思いました。ゲームを考えると言ってもガッツリモチーフを考えるのではなく、探しものをするゲームのようなざっくりな内容を考えていきます。

複数人のメリットって?

ゲームの中身を考えるために複数人がいるメリットについて考えました。一つ一つ詳しく説明していきたいと思います。

  • 役割を決めることができる。

これは鬼ごっこのようなものですね、鬼がいて逃げる人がいる。ゲームの目的は鬼が制限時間内に逃げる人を捕まえる。役割を作ることで行動に目的ができ、それがゲームへとつながります。

  • 意見のぶつけ合いができる。

なにか、2つの選択肢があるとします。その選択肢に制限時間もあったとします。人はそれぞれ違う考えを持っているので、意見が別れるかもしれません。でも制限時間があるのでどちらかに決めるらめに話し合いをしないといけません。そして、話し合いによって決まった意見でもどちらかに責任が生じるでしょう。正解をしたときには歓喜の気持ちが、失敗したときには責任のなすりつけがありますが、それもまた楽しいひとときになると思います。これは一体感を高めていますね。

  • 対戦・協力することができる

タブレットなどを使う場合、画面は大きいので二分割して何かを行うことができます。二分割で思いつくのはぷよぷよテトリスなどですね。どちらも対戦をすることができます。それ以外にも、コントローラを2つ表示させて協力プレーができると思います。スマホなど小さい端末の場合は難しいかもしれませんが、二人で操作できればとても大きな一体感が得られると思います。

どんなゲームが考えられる?

ではそのメリットを使ったゲームを考えてみたいと思います。

  • 役割を決めることができる。
    • 野球ゲーム : ピッチャーとキャッチャーに分かれて投げた打ったの野球を行う。画面は二分割でピッチャー側では指の奇跡でボールを投げて、バッター側ではそのボールを打つなどが考えられます。
    • 推理ゲーム : 警察と犯人にわけて、推理ゲームをします。たとえばお互い自分のターンにだけ画面を見ることにして犯人は事件のヒントを出します。警察はそのヒントから犯人が誰かを見つけ出します。これは二人以上じゃないといけませんね。
  • 意見のぶつけ合いができる。
    • 脱出ゲーム : 普通の脱出ゲームです。一人でも楽しめますが複数人で考えるといろいろな意見が出てくると思います。その中で正解に導けた場合はかなりの達成感と一体感ができると思います。
    • クイズゲーム : ネプリーグで最後行うゲームのようなものです。二択クイズを連続で正解していくゲームです。一回でも間違えたらゲーム終了となります。それぞれのクイズには制限時間があり、その時間内で決めないといけません。複雑なルールではないので楽しめると思います。
  • 対戦・協力ができる。
    • 落ち物対戦ゲーム : ぷよぷよテトリスですね。パズドラのようなゲームでもいいと思います。基本的には対戦として楽しいですが、共通の敵をゲームで得たスコアで倒すとしたら協力にもなると思います。
    • サポートマリオゲーム : マリオを誰かが操作して、マリオが進みやすいように道を作ってあげるようなゲームですね。wii u でこのようなゲームが出ていたと思います。言いたいことは主人公とサポート役に別れて協力してゴールを目指す形ということですね。

まとめ

まとめると、複数人いるので対戦や協力で目的を達成することが多いと思います。話し合いをする要素があれば一体感が得られると思います。どちらにしても複雑なゲームよりも単純だけど奥が深いゲームのほうがやりやすいと思います。理由は人数が多いほどゲームを始めるハードルが高いからです。今回は備忘録として色々書きましたが、まだまだ考えられることは多いと思いますし、実際は画面が小さいなどのデメリットがあると思いますので、それにも対処した面白いゲームをつくれたらなと考えています。

以上

具体例!!トピックモデルのトピックってなに?

こんにちは、最近はコロナ社のトピックモデルによる統計的潜在意味解析を読んでいます。

トピックモデルは少し前から注目されている自然言語処理の技術です。今更ですが、良い本に巡り会えたので勉強しています。

今日はその本のなかでも序章にあたる部分の中で、トピックが何なのかについて話せたらなと思っています。

僕の知識の中で話しているので、おかしいところもあると思います。その場合は指摘していただけるとありがたいです。

はじめに

トピックモデルにおけるトピックとは単語の潜在的な意味のことを言います。

といっても、潜在的な意味ってどういう意味?となると思いますので、今回の記事では潜在的な意味について学んだことを話したいと思います。

簡単に言うと、潜在的な意味とは単語の共起性によって発生する物です。

共起性? 同じ単語でも違った意味?

共起性といきなり言われてもわからないと思います。

例えば

  • I play baseball.
  • I play piano.

この2つの文章では、どちらもplayが使われています。ここで、ニュースサイトでこれらの文章が別々の記事の中でそれぞれの文章が記載されていることを考えてください。この2つの文章が掲載されている記事のジャンルで考えると、上はスポーツ関連、下は音楽関連になります。

このように、playだけではなく複数の単語と使うことによって意味が発生しています。このような性質を共起性と言います。

そして、単語や文章の潜在的な意味とは、この共起性によって発生した意味のことを言います。

なので、例では1つめのplayはスポーツの意味を持ち、2つめのplayは音楽の意味を持ちます。
そしてこのスポーツや音楽がトピックモデルにおけるトピックとなります。

実際このトピックというものはラベル付けされているわけではありません。文章が与えられた際の文章内の単語頻度などといった共起性からトピックを機械的に見つけることになります。

このトピックは単語や文章ごとに設定することができ、トピックモデルを用いることで文章内の単語や文章そのもののトピックを得ることができます。

さらに、このトピックを使うことで文章や単語の類似性を簡単に判断できるようになります。

単語の類似度がわかる?

例えば、レストランに特化したニュースサイトのトピックモデルを作ったとします。その中でカルボナーラとアラビアータと寿司の特集がそれぞれ別々の記事で掲載されていました。

トピックという単位で考えた場合、カルボナーラとアラビアータと寿司は似ているでしょうか?

トピックモデルの学習に使う文章によっても変わってきますが、トピックとして

  • 和食レストラン
  • 中華レストラン
  • 洋食レストラン

が学習されているとします。

この時

  • カルボナーラは洋食レストラン
  • アラビアータは洋食レストラン
  • 寿司は和食レストラン

となります。

よって、レストランで考えるとにはカルボナーラとアラビアータは似ていて、カルボナーラと寿司は似ていないとなります。

他にも色々ありますが、このようにトピックという単位で類似度を測れることがトピックモデルの利点になります。

まとめ

今回は、簡単にトピックモデルで使われるトピックについて解説してみました。単語の背印材的な意味がトピックであり、それは共起性によって発生することを話しました。

レストランの例を発展させると、レストラン検索サイトでのトピックによる柔軟な検索サービスなどができると思います。そのように考えると、他にもいろいろな応用が考えられて楽しい分野だなと感じます。

数学的なトピックモデルの形式はこれから解説していきたいと思いますが、まずはアプリケーションを作るなどして、応用についても一緒に考えていきたいと思います。

黒歴史のメリット(ゲーム作り編)

こんにちは,最近技術を学んでも自分の言葉にするのが難しくてブログを更新していませんでした.なので今日は学生時代のゲーム制作に感じたことについて書いていきたいと思います.

結論は学生時代に黒歴史なゲームを作ることはそれ以降のゲーム作成で確実にメリットになるということです.

はじめに

黒歴史とは,過去何も知らない頃に起こした出来事や物事の事です.後で見返してうわぁ...と思ってしまうものです.何も知らないのですからそう感じるのも当たり前です.例えばゲームの改造についてネット掲示板で聞くとかそんなものですね.

ゲーム作成は本記事ではc++DirectXを使ってゲームを作ることです.今の世の中とてもすごいゲームが開発されています.個人で作れるゲームというのはたかが知れていますが,誰でも始めは簡単なゲームから作っていきます.

学生時代のゲームが黒歴史になるまで

学生時代は自分の作りたいゲームを作っていきます.僕もFPSゲームとか無双をモチーフにしたアクションゲームなどを作りました.これらのゲームは個人で作っているので棒人間が出てきたり,無駄に入り組んだステージにしたりするんですよね.そしてそのままの状態で就活に入っていきます.

ゲームを作るのが好きだったので就活ではゲーム業界を希望しました.ゲーム会社では製作物を使った面接が良くあります.自分が良しと思ったゲームを持っていって,見せて,頑張って,解説します.面接官も自分の作ったゲームを理解しようよ実際にやってくれますが,自分本位で作ったゲームはだいたい面接官がうまく操作できず微妙な雰囲気になります.

僕の場合は坂を下っていくようなアクションゲームを見せたのですが,ジャンプの仕方やスキルの使い方が分かりづらくて穴に落ち続け,微妙な雰囲気になりました.

フラッシュバック

これを黒歴史というかはわかりませんが,この微妙な雰囲気って結構きついんですよね.その時はそれで終わっても,あとで布団の中で後悔します.そして,ふとした瞬間に頭の中で出てきて,眠れない夜を過ごしたりします.

でもこれは,とてもいいことだと思います.ゲームを作っているときに操作をしていて思い出します.今作っているゲームをあの時の面接官にやってもらったら,また沈黙が生まれるんだろうなって.

この感覚はゲーム作りで大切なものになります.そしてこの感覚を手に入れることができるのは学生のうちだけだともいます.それは作りたいものを作っているからです.会社に就職してみんなで面白いゲームをつくって,確かに達成感や技術は上がると思います.でも,いざ一人で始めたときにゲームの操作性の不自由さも自分の熟練度などで忘れてゲームを作ってしまいます.ゲーム作成時に思いとどまって改善できるのはフラッシュバックがあるから,つまり黒歴史があるからだと思います.

まとめ

長々と書いてしましたが,実はこのブログも文章を書く練習になっています.たぶん来年あたりにこれを読んで黒歴史に感じていると思います.うまく自分の気持ちを伝えられない.相手が理解してくれない時の沈黙.これをまた感じることになります.そして文章を書くたびにフラッシュバックしてきます.でもそのフラッシュバックなしにはいいものは作れません.そしてフラッシュバックを作るために実際にゲームを作るなどの挑戦も必要です.僕はこのフラッシュバックを大事にしていきたいと思います.