2019/8/31にiOSでリリースされる新アプリLifegame Lightningの動画を追加しました。
UIでのパラメタ変更がリアルタイムに適用されているのが見て取れるかと思います。
別画面に遷移して値を変更して、元の画面に戻って、などの手間がありません。変更値がサクサク画面に反映されます。
また、UIが透明で、なるべくライフの表示を邪魔していないのにも注目して見てください。
2019/8/31にiOSでリリースされる新アプリLifegame Lightningの動画を追加しました。
UIでのパラメタ変更がリアルタイムに適用されているのが見て取れるかと思います。
別画面に遷移して値を変更して、元の画面に戻って、などの手間がありません。変更値がサクサク画面に反映されます。
また、UIが透明で、なるべくライフの表示を邪魔していないのにも注目して見てください。
本サイトやアプリに利用していたドメインをOracle Dyn により停止されたことにより6月末頃からアプリ開発が滞っていましたが、本日遂に新アプリが完成しました!
新アプリ名はLifegame Lightning(略称LL)です!
2019年8月31日にAppleのAppStoreでリリースします!!ヾ(゚д゚*三*゚д゚)ノワァイ
アプリストアのアプリ紹介文等の用意も終わりました。キャッチコピーを
「何よりも速く・・・ただ、速く」
とかにしようと思いましたが恥ずかしいので止めて「GPUシェーダーを利用した高速なコンウェイのライフゲームです」と書きました。
アプリ紹介ページはこちらです。動画1つとSSを10枚載せています。
ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ

ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ
アプリストアに出すので、当然ですが全世界に向けて公開です。
間違ってどこかの国でバズって10万本くらい売れないかしら・・・
先月2019/6/25に、自作iOSアプリ(側ネイティブアプリなど)およびそのサポートサイトである本サイトに長年利用していたドメイン名がブロックされました。DynDNSの時代から使っていたため、かれこれ15年以上利用していました。
事前警告など全くありません。なんの前触れもなくいきなり止められました。
停止した理由をOracle Dynに問い合わせましたが、しばらく返事がありませんでした。
10日後に、やっと返事がありました。返事は後にも先にもこれだけです。
Hello,
Thank you for contacting the Oracle Dyn Abuse team,
We have received multiple complaints against the hostname in your account, “ukaapple.selfip.com”. As your account has been identified as violating our AUP, it has been terminated. At this time your account will not be reinstated. Your account has also been refunded for current eligible services. For more information about our AUP please visit http://dyn.com/legal/acceptable-use-policy/
Oracle Dyn Abuse Team
abuse@dyn.com
複数件の苦情が入ったらしいです。
しかし、どんな苦情があって、どんな基準に違反したのか全くわからず、対処のしようがありません。
リンク先のAUPの規約を読むとわかるのですが、明確な基準はありません。Oracleの恣意的な判断で自由に決められるもので、あって無いような規約です。
どのような違反があったのか教えてくれと再度問い合わせましたが、それから今日まで返事がありません。もうすぐ1ヶ月経ちます。
Oracleの内部的な実情はわからず推測ですが、おそらく個人相手の商売は金にならないから軽視しているのでしょう。
問い合わせの返事が来るまでの期間や返事の内容を見ていると、サポートの体を成していません。
ドメイン名の回復が見込めなくなったため、新しいドメイン名を取得してアプリなどを改修することになりました。
かなりの改修コストがかかります。この改修コストをかけるなら、1本でも新しいアプリを開発したいところです。
Oracleのやっていることはほとんど犯罪だと思うのですが、どう対処すれば良いですかね?
個人で裁判するのはいろんな面で難しいし、消費者センターに駆け込む訳にも行かないし・・・
個人で出来ることは、なるべくOracleの息がかかったサービスは使わないくらいですかね・・・
今日の作業は「iPhoneアプリでロード時にサイズがおかしい対策」です。
現在作成中のライフゲームは通常の画像を読み込んでライフパターンとして利用する機能があります。
で、何枚か読み込んで気づいたのですが、小さい画像はその画像が収まるようにライフのサイズを調整して正常に読めていたのですが、大きい画像の場合はライフサイズを最小にしても画面からはみ出していただけでした。
画像サイズを調整して読み込むことも考えましたが、ドットバイドットで読み込めないとせっかく正確に作ったライフパターンが読み込めないケースが出てくると考え、画面に収まりきらない画像読み込み時は警告を表示することで対策としました。
今日は以上です!
重大発表です。私の中では。
今現在開発しているアプリ名が決定しました。アプリ名は
Lifegame Lightning
にしました!
‹‹(´ω` )/››
GPUのシェーダーを利用して、ハードウェア性能を極限まで引き出したライフゲームです。超細かいライフを稲妻のように超高速で動かすことが可能です!
昨日と今日はライフの動作を超高速化してました。超高速化の作業内容やコードは超企業秘密です。
あとは超売れればいいんだけど。
今週の予定です。
134日目:タッチ時のパフォーマンス改善その1
135日目:タッチ時のパフォーマンス改善その2
136日目:iPhoneアプリでロード時にサイズがおかしい対策
137日目:iPhoneアプリでセーブ機能をネイティブ対応その1
138日目:iPhoneアプリでセーブ機能をネイティブ対応その2
139日目:iPhoneアプリでセーブ機能をネイティブ対応その3
140日目:予備日(次の週の予定を立てる)
いよいよ大詰です。今週の作業が終われば、一応iPhoneアプリとして完成となります。
追加機能を実装したい気持ちもありますが、いつまでたってもリリース出来なくなってしまうのでとりあえずサクッとリリースを目指したいと思います。
そういえばこのアプリの開発動機ってシェーダーの練習だったはずのなのに、もう130日も経ってたんだな・・・
今日の作業は「警告ウィンドウの表示」です。
javascriptのalertやconfirmを、WKWebViewで表示対応します。Swiftのバージョンは5.0.1です。
class ViewController: UIViewController, WKUIDelegate {
private var _webView : WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
_webView = WKWebView()
_webView.uiDelegate = self
〜以下略〜
上記の赤い部分でデリゲートを指定し、alertは以下のプロトコルを実装することにより、
func webView(_ _webView: WKWebView, runJavaScriptAlertPanelWithMessage alert: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alertController = UIAlertController(title: "", message: alert, preferredStyle: .alert)
let otherAction = UIAlertAction(title: "OK", style: .default) {
action in completionHandler()
}
alertController.addAction(otherAction)
self.present(alertController, animated: true, completion: nil)
}
confirmは以下のプロトコルを実装することにより、アプリで表示可能になります。
func webView(_ _webView: WKWebView, runJavaScriptConfirmPanelWithMessage confirm: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
let alertController = UIAlertController(title: "", message: confirm, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
action in completionHandler(false)
}
let okAction = UIAlertAction(title: "OK", style: .default) {
action in completionHandler(true)
}
alertController.addAction(cancelAction)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}
javasriptによりalertやconfirmを使うと
if (window.confirm('どっちにするんですかゴルァ?')) {
alert("やるのかゴルァ?");
} else {
alert("ごめんなさい。");
}

キャンセルを押します。

はい、アプリ上で表示されましたね。
以上です!
今日は、「RAND EDGE」が効かない事がある対策を行いました。
conwayのライフゲームは、ライフが一定のルールに従って状態が変化する様がとても面白いゲームです。
全てのライフをランダムに初期化した後、しばらくはライフが変化し続けて楽しめるのですが、一定時間が経つと状態が固定して動きが無くなってしまいます。
「RAND EDGE」とは、画面端のライフを常にランダマイズ処理して、常に動きをつけて楽しめるようにした機能です。

で、この機能なんですが、「LOOP」という画面端を繋げる機能をオフにすると効かなくなったので今日はその調査と対策を行いました。(ちなみに原因は、「LOOP」オフの場合には画面端が繋がらないのでランダマイズ範囲が狭すぎたためです。)
これで、どんな状況でも永遠にライフが動き続ける様子を、ぼーっと眺めて楽しめます。
ʕ•̫͡•ʕ*̫͡*ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ*̫͡*ʔ-̫͡-ʔ
今日の作業は「UIの表示が範囲外になる事がある対策」です。
今作っているWebGLライフゲームアプリのUIは、画面が横長の場合はUIが隠れてしまいます。

右側のSIZE、SPEED、COLORのその下の部分が見えていませんね。このUI部分をドラッグしてスクロールする事で、見えない部分を表示する事ができます。

ライブラリなしで自力で作り込んでいます。
で、ウィンドウサイズが変更された時に、場合によってはUIの表示範囲がおかしくなって何も表示されないことがあったため、今日はこの部分を調整していました。
具体的にはスクロールの最大量、現在のスクロール位置を確認して、範囲外には行かない制御ですね。コードにすると以下のような形になります。
if (0 < this.scrollMax) {
if (this.scroll < 0) {
this.scroll = 0;
} else if (this.scrollMax < this.scroll) {
this.scroll = this.scrollMax;
}
} else {
this.scroll = 0;
}
これでUIの表示が消えることはなくなりました!
今日は以上です!
本家デアゴGTR-NISMO箱積状況:4箱 (38号,39号,40号,41号)
今日の作業は「iPhoneアプリ化で起動時に画面を触るとずれる対策」です。
今作っているWebGLのガワネイティブ アプリはシングルページアプリケーション(SPA)なので、スクロールは不要です。
なので、WkWebViewのスクロール関連機能をオフにしました。
Swiftのバージョンは5.0.1(xcodeは10.2.1)です。
_webView = WKWebView()
// スクロール禁止
_webView.scrollView.isScrollEnabled = false
_webView.scrollView.panGestureRecognizer.isEnabled = false
_webView.scrollView.bounces = false
バージョンが5になってまた書き方が変わったようです。プロパティ名が変わった?のかな。
正直もう変わらないでほしいですね。頻繁に変わりすぎるからWebGLとかに避難する方向で行っています。
以上です!