uka.apple のすべての投稿

3日坊主アプリ開発 162〜163日目 添付メール


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 15~16時間目(全20時間)
 

今回は、メールにファイルを添付するコマンドを調べました。

サーバはCentOS6です。

以下、忘備録です。

メール送信のための準備は済んでいるものとします。

 

uuencodeが必要になるため、予めインストールします。

# yum -y install sharutils

ファイルを添付してメールを送るコマンドは以下の通りです。

# uuencode ./test.png test.png | mail -s “uuencodeで添付するよ” メールアドレス

aオプションでも添付できます。

# echo “本文” | mail -s “こっちはaオプションだよ” -a test.png メールアドレス

これで添付メールが送れました!!

 

次に、メール送信を自動化します。毎日午前3時に、mysqlの特定データベースをダンプしてzip圧縮し、そのzipファイルをメールに添付して自動送信するようにしました。

/var/backup/mysqlディレクトリに一時的なバックアップファイルを置くことにします。
/var/backupディレクトリにメールを送信するスクリプトを作ります。
そしてcronでスクリプトをキックします。

具体的な内容は以下の通りです。

 

まずmysqlの接続情報ファイルを作成します。

# vi /var/backup/my.conf
—– ここから —–
[client]
user = ユーザ
password = パスワード
host = localhost
—– ここまで —–

次にスクリプトです。

# vi /var/backup/backup_mysql.sh
—– ここから —–
#!/bin/sh

# 保存期間
period=90
# 保存場所
dirpath=’/var/backup/mysql’
# ファイル名
filename=`date +%Y%m%d`

# ダンプ実行
# –single-transaction 一貫した状態をダンプ ※InnoDBのみ
mysqldump –defaults-extra-file=/var/backup/my.conf –single-transaction –databases データベース名 > $dirpath/$filename.sql

# 圧縮して元のsqlファイルを削除
zip -P パスワード $dirpath/$filename.zip $dirpath/$filename.sql
rm -f $dirpath/$filename.sql

chmod 700 $dirpath/$filename.zip

# 添付してメール送信
uuencode $dirpath/$filename.zip $filename.zip | mail -s “db backup” メールアドレス

# 保存期間を超えたら削除
oldfile=`date –date “$period days ago” +%Y%m%d`
rm -f $dirpath/$oldfile.zip
—– ここまで —–

一応、サーバ内に90日間保存しておくことにしました。90日を超えたファイルは逐次削除されますので、バックアップファイルが増加し続けることはありません。

最後に、毎日午前3時にこのスクリプトをキックして完了です。

# crontab -e
—– ここから —–
0 3 * * * /var/backup/backup_mysql.sh
—– ここまで —–

 

これで対人サーバがこの世から消し飛んでもバックアップデータがあるので安心です。

最悪1日巻き戻りますけど・・・

え?今回の作業は対人戦の実装じゃないのかって?

今回は対人戦を行うにあたって、各ユーザーのデータを格納するためのデータベースのバックアップ処理となります。

下準備の下準備みたいな感じです。
次からデータベース設計になります。

残り4時間しかない・・・

  • 明日の予定

対人戦の実装 17時間目(全20時間)

3日坊主アプリ開発 160〜161日目 アンインストール


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 13~14時間目(全20時間)
 

星のドラゴンクエストをアンインストールしました”記録”は3日でした。

え?アプリ開発日記じゃないのかって?

明日から頑張ります・・・

  • 明日の予定

対人戦の実装 15時間目(全20時間)

3日坊主アプリ開発 159日目 ガチャ45万円


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 11~12時間目(全20時間)
 

昨日と今日は、アプリの”勉強”のため、星のドラゴンクエストをやってました。30周年ガチャということで、ロト装備が出るみたいでした。

初めに無料でもらえる”ジェム”が10000個くらいあったので、それでガチャをやってみました。

30回くらいガチャを回して、ロトのつるぎ、ロトのかぶと、ロトの盾が出ました。幸運なほうだと思います。しかしなんとも中途半端です。是非とも残りのロトのよろい(上/下)が欲しくなりました。

うまくできてるなぁ。

ガチャを1度引くのに300円かかります。

冷静に、いくら使えば残り2つのロト装備が出るのか計算して見ます。もちろん確率ですので、いくら使っても確実にそろう保証はありません。ここではあくまで期待値として、”平均”いくら使えば揃うのかという観点で計算します。

パチンコを知らない方には申し訳ないですが、パチンコが確率内で(確率の分母数を回して)当たる割合は約63%となります。この確率分”回し”、63%の割合で当たる金額をまずは算出したいと思います。

※ジェムを大量に買うと多少値引きされますが、ここでは無視します。

さて、最近のガチャはご丁寧に出現割合が書かれています。
ほしいアイテムはロト装備の残りで

ロトのよろい上 0.5%
ロトのよろい下 0.5%

の2つです。

2個のアイテムを取る過程を2段階で考えます。

1段階目

まず、ロトのよろい上か下、どちらかが出る割合は合計1%ですので、100回=30000円分ガチャをすれば平均1回どちらかが出ます。

2段階目

次に、上下の出なかったほうのロトのよろいが出る割合は0.5%ですので、200回=60000円分ガチャをすれば平均1回出ます。

簡単な計算ですね。というわけで、期待値は3万円+6万円=9万円となりました。

私と同様な状況の人が9万円使えば、100人に63人は装備が揃います!

9万円は約63%で揃う金額となりますが、ほぼ(99%以上)揃うだろうという金額を知りたいところですね。知りたいですよね?え?知りたくない?知りたいということにしといて下さい。

パチンコ経験者限定の話で申し訳ないですが、パチンコで確率の5倍以上のはまりって意外と無いことが経験的にお分かりかと思います。確率の5倍回して当たらない割合は0.7%位となり、99.3%は当たります。

算出した額の5倍の45万円も使えばのこり2こが出てほぼほぼ揃うと思います。

同様の状況の人がいて、実際に課金しても揃う保証はしませんが。0.7% ≒ 142人に1人 は揃いませんからね。

45万円か。安いなあ。ガチャろうかなぁ(棒読み)。

  • 明日の予定

対人戦の実装 13時間目(全20時間)

3日坊主アプリ開発 157日目 バックアップ


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 10時間目(全20時間)
 

対人戦を行うにあたって、サーバ内に勝敗記録や各ユーザの組んだロジックをDBに保存します。

このDBのバックアップのため、サーバで定期的にDBの内容をファイルに落とし、外部サーバにメールで自動送信します。

本日はまず下準備として、外部サーバにメールを送れるようにしました。gmailを利用します。

サーバはCentOS6です。

以下、忘備録のための記述です。postfixを使ってメールを送信します。

vi /etc/postfix/main.cf

記述を追加

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

vi /etc/hosts
::1 の行を # でコメントアウト ※後続のpostmapのコマンドでエラーとなるため

echo [smtp.gmail.com]:587 メールアドレス:パスワード > /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

service postfix restart

送信テスト

echo メール送るよ | mail メールアドレス

  • 明日の予定

対人戦の実装 11時間目(全20時間)

3日坊主アプリ開発 156日目 対人ステージの完成


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 4〜9時間目(全20時間)
 

サーバ側の処理はひとまず置いておいて、対人戦用のステージマップが完成しました。

全部で5タイプ作成し、各タイプ毎に3つの枠を用意しました。計15ステージの支配権を全ユーザで競い合うことになります。

対戦相手に勝てば、対戦相手が使っていたロジックパネルをランダムで1つ奪うことができます。負ければ盗られます。同時に、経験値も奪ったり奪われたりします。勝つとステージの支配者になり、今度は挑戦を受ける側となります。

勝利条件は、ゴールにたどり着くことです。ただし、ステージによっては、実質的に相手を倒さないとゴールにたどり着けないようになっています。99秒たっても勝負がつかない時はドローとなります。

支配したステージの防衛数や、支配したステージ数に応じて、特別なロジックパネルをプレゼントする可能性があります。

敵と味方を区別するために、色違いのキャラも作成しました。

Simulator Screen Shot 2016.05.29 12.40.17

  • 明日の予定

対人戦の実装 10時間目(全20時間)

3日坊主アプリ開発 150日目 対人戦の構想


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

対人戦の実装 3時間目(全20時間)
 

対人戦の構想が固まりました。

まだ実装は一歩も進んでいませんが、頭の中!では出来上がっています。頭の中では!
実装作業を明日から頑張ります。

使用予定のサーバには既にMySQLが入っています。DBを2つも入れたくないのでDBはMySQL使います。サーバサイドは速度面からJavaを利用しようと思います。

各ユーザがサーバアクセスするたびにDB見に行くと時間かかるので、ユーザ毎に5分に1回程度しかDBにはアクセスできない想定で、かつ対人システムが上手く回るように工夫するつもりです。ハードウェアスペック上げる前にソフト面で工夫します。

1億人くらい来ても大丈夫にします。

・・・

え?

来ないから心配するなって?

ヽ(`д´)ノ うわーん

  • 明日の予定

対人戦の実装 4時間目(全20時間)

3日坊主アプリ開発 145〜149日目 アイテム取得演出


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

アイテムの取得演出 1〜3時間目(全3時間)
対人戦の実装 1〜2時間目(全20時間)
 

アイテム取得演出を実装しました。

対人戦の実装は、頭の中でいろいろ構想を考え中です。

  • 明日の予定

対人戦の実装 3時間目(全20時間)

3日坊主アプリ開発 140〜144日目 英語


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

ログのローカライズ(英語) 1〜5時間目(全5時間)

 
ありがとうGoogle翻訳とWeblio様。

以下の動画の様に、英語環境では、無事ログが英語になりました。もちろん日本語環境では日本語になります。

これで、一通り作業が完成しました。

アプリ完成までに、144日かかりました・・・
(かなり完成していた状態から)

当初は、100日あれば余裕でリリース可能かと思ったのですが・・・

でも1日に1時間しか作業してないから、仕事せずに、1日8時間フルで作業すれば1か月かからないなあ。

仕事辞めてアプリ作りばかりしてれば1月に1本はアプリ出せるかしら?どうなのかしら?

いつでもアプリのリリース作業に取りかかれる嬉しい状態になりましたが、ここはリリースしたい気持ちをぐっと抑えて、アプリをより良いものにすべく追加作業をしていきます。

とりあえず、ロジックパネルを取った時の演出がなく、いつの間にか所持品が増えてる状態なので、ロジックパネルの取得演出をします。

あとは、目玉の対人戦!を実装していく予定です。

せっかく「さくらのVPS」でサーバ借りてるので、対人用サーバとして有効活用したいと思います。

  • 明日の予定

アイテムの取得演出 1時間目(全3時間)

3日坊主アプリ開発 136〜139日目 アプリ紹介ページ


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

サウンドの追加 7〜10時間目(全10時間)

 
サウンドの微調整をしつつ、新アプリの紹介ページを作成していました。

取っ付きにくいアプリだと思うので、アプリを紹介すると共に、ヘルプ的に使ってもらえるページにしました。

  • 明日の予定

ログのローカライズ(英語) 1時間目(全5時間)

3日坊主アプリ開発 131〜135日目 効果音


    ∩∩
   (´・ω・)
   _| ⊃/(___
 / └-(____/
  ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • 今回の作業

サウンドの追加 2〜6時間目(全10時間)

 
主に、ロジックパネルの種類毎に、機械的な効果音を付ける作業を行っていました。

ロジックパネルでロジックを組むのが、このゲームのメインです。ロジックパネルの効果音はとても大切です。

尚、効果音を際立たせるために、BGM(バックグラウンドミュージック)は鳴らさないことにしました。決して面倒だからではありません。

  • 明日の予定

サウンドの追加 7時間目(全10時間)