Nscripterではすべてのコマンドがシームレスに遷移していく。
紫電ではアクションという概念のおかげでそうはいかない。スクリプトになじみがない人に
受け入れられやすいおうにアクションという概念を入れたけど、これがちょっとやっかいだ。
Nscripterでは基本的にクリックを待つときは特殊文字で制御しているけど
紫電では特殊文字とアクション毎の設定で制御している。
二重にクリック待ちの制御をできる要素がある。
アクション毎のクリック待ち設定を排除してアクション間の遷移は必ずクリック無しで行えるようにして
特殊文字だけで同様のことをやることは現状できる。
hoge.jpgという背景を表示してクリックを待ってfuge.jpgという背景を表示する場合
ただこのようにすればよい。Nscripterがまさにこのような仕様っぽい(文字を置くのにコマンドを用いる必要がないが)。
背景変更 hoge.jpg
文字を置く @
背景変更 fuge.jpg
このようにクリックで次へ行きたいときはとにかく文字を置くというアクションを入れて
特殊文字を置けばよい。ただこうするとスクリプトに馴染みの無い層にとっての敷居が上がりそう
なので今は以下のようにしている
背景変更 hoge.jpg クリックで次へ
背景変更 fuge.jpg 自動的に次へ
うーーーん、やはり2重に制御できちゃっても現行の方が無難だよな・・・・。
このブログはビジュアルノベルエンジンsidenovel(コードネーム 紫電)の開発ブログです。開発途中のメモ、開発状況、開発者のつぶやきを載せて行きます。 sidenovelはhtml5+jsで書かれており、現状ブラウザ毎に動作が 違い大変苦労しています。
2011年12月31日土曜日
2011年12月30日金曜日
DL数
Androidやiphoneの開発者向けのダッシュボードでは
アプリの日ごとのDL数が見れるんだけど、あれどうやってDB実現しているのか謎。
日毎にデータの数が増えてそれらをわけて管理しないといけないわけで、まさかアプリ毎にテーブル作って行を追加しているわけではあるまい。
列を追加していくのは完全に無理だ。
そういうケースをDBで扱う定石みたいなのがあるのだろうか・・・。
いろいろ考えたけどファイルも使って管理している気がする。
更に考えると別に日毎のダウンロード数わからなくてもそんなに不便じゃないと思った。
今日のDL数
直近1週間のDL数
直近1ヶ月のDL数
直近3ヶ月のDL数
直近半年のDL数
TotalDL数
これらがわかれば充分な気がする、これならデータの数が6個と固定されているので
DBだけで実現できる。
追記:
こういうデータ数が増えるのをDBだけで実現する方法を思いついた。
blob型を使ってphpのスタックやキューのオブジェクトをそこへ突っ込めばいい。
アプリの日ごとのDL数が見れるんだけど、あれどうやってDB実現しているのか謎。
日毎にデータの数が増えてそれらをわけて管理しないといけないわけで、まさかアプリ毎にテーブル作って行を追加しているわけではあるまい。
列を追加していくのは完全に無理だ。
そういうケースをDBで扱う定石みたいなのがあるのだろうか・・・。
いろいろ考えたけどファイルも使って管理している気がする。
更に考えると別に日毎のダウンロード数わからなくてもそんなに不便じゃないと思った。
今日のDL数
直近1週間のDL数
直近1ヶ月のDL数
直近3ヶ月のDL数
直近半年のDL数
TotalDL数
これらがわかれば充分な気がする、これならデータの数が6個と固定されているので
DBだけで実現できる。
追記:
こういうデータ数が増えるのをDBだけで実現する方法を思いついた。
blob型を使ってphpのスタックやキューのオブジェクトをそこへ突っ込めばいい。
紫電のとんでもない仕様違反
今の紫電エディタと紫電の実装では元来予期しないことができてしまう・・・・・。
受託開発なら確実にアウトな完全に仕様違反
divノードにtextノード作ってぶっ込んでるだけだからそうなってしまうんだけど、
これはこれでありな気がしてきた。
てか、もうちょっと手を加えてこれをサポート外の隠し機能として盛り込もうかと思う。
気付いた人だけ使えるみたいな。
受託開発なら確実にアウトな完全に仕様違反
divノードにtextノード作ってぶっ込んでるだけだからそうなってしまうんだけど、
これはこれでありな気がしてきた。
てか、もうちょっと手を加えてこれをサポート外の隠し機能として盛り込もうかと思う。
気付いた人だけ使えるみたいな。
2011年12月29日木曜日
Androidでの配信
昨日初めてXcode使ってiphoneアプリ制作をしてみたんだけど、
おそらく今回やりたいことを実現するだけならもう勉強は必要なく
1時間足らずでキミキメ紫電 for iphoneができそうだ。
問題はAndroidの方。。。いろいろ制約があってネット上から
ゲームの全データ(50Mバイトくらい)をネットからSDカードにダウンロードして展開しないといけない。
できればここで作ったものは伝ノベ用クライアントアプリにもそのまま流用したい。
ここで問題になるのはどうやってサーバーからSDカードへデータを流すか。。。
SonscripterではSocket接続でtcpでzipファイルを送っている。伝ノベでは
webページからコンテンツをダウンロードさせたいのでSocket接続は却下。
httpclient接続でhttpでzipファイルを送るようにしたい。
が、zipで送るとなるとサーバー側はゲームデータをzipで持っている必要がある。
キミキメだけならいいけど伝ノベでは全てのデータはwebでプレイされるので
無圧縮で持っている。なのでできればzipで持ちたくない。
するともうhttpで全てのゲームデータファイル・フォルダを送るという方法に
絞られてしまう。まあゲームデータの大半は圧縮された画像や音声が中心だから
zip化してもしなくてもサイズ的にはかわらない。ただダウンロードすべきファイル数
が多い分httpリクエストの数が増えることになる
一番理想なのはあれに対応することだわなあ。
おそらく今回やりたいことを実現するだけならもう勉強は必要なく
1時間足らずでキミキメ紫電 for iphoneができそうだ。
問題はAndroidの方。。。いろいろ制約があってネット上から
ゲームの全データ(50Mバイトくらい)をネットからSDカードにダウンロードして展開しないといけない。
できればここで作ったものは伝ノベ用クライアントアプリにもそのまま流用したい。
ここで問題になるのはどうやってサーバーからSDカードへデータを流すか。。。
SonscripterではSocket接続でtcpでzipファイルを送っている。伝ノベでは
webページからコンテンツをダウンロードさせたいのでSocket接続は却下。
httpclient接続でhttpでzipファイルを送るようにしたい。
が、zipで送るとなるとサーバー側はゲームデータをzipで持っている必要がある。
キミキメだけならいいけど伝ノベでは全てのデータはwebでプレイされるので
無圧縮で持っている。なのでできればzipで持ちたくない。
するともうhttpで全てのゲームデータファイル・フォルダを送るという方法に
絞られてしまう。まあゲームデータの大半は圧縮された画像や音声が中心だから
zip化してもしなくてもサイズ的にはかわらない。ただダウンロードすべきファイル数
が多い分httpリクエストの数が増えることになる
一番理想なのはあれに対応することだわなあ。
XNovel
どうもXNovelは「涅槃」という日本語組版エンジンを使っているようだ。
http://code.google.com/p/nehan/
なーーるほど。これはすごいなあ。これがあればepub3.0の日本語絡みの仕様
サポートしてないリーダーでもそれっぽいことができるじゃん。
これで一つわかったのはXNovelはエンジンの一部にjavascriptを使っていること。
epubはjsのサポート必須ではないからつまりそこが純粋epubから逸脱している
ことになる。やっぱりjavascript抜きでノベルエンジンは無理だぜ。
なるほどね、、ということは厳密にはXNovelはやはり専用ビューワーでそれ用に作られた
epubしか読み込めないということになる。
とはいえjavascriptを読み込めないepubリーダーなんてあまりないだろうから実際には
わりといけちゃうと思われ。
http://code.google.com/p/nehan/
なーーるほど。これはすごいなあ。これがあればepub3.0の日本語絡みの仕様
サポートしてないリーダーでもそれっぽいことができるじゃん。
これで一つわかったのはXNovelはエンジンの一部にjavascriptを使っていること。
epubはjsのサポート必須ではないからつまりそこが純粋epubから逸脱している
ことになる。やっぱりjavascript抜きでノベルエンジンは無理だぜ。
なるほどね、、ということは厳密にはXNovelはやはり専用ビューワーでそれ用に作られた
epubしか読み込めないということになる。
とはいえjavascriptを読み込めないepubリーダーなんてあまりないだろうから実際には
わりといけちゃうと思われ。
rePublish
紫電とは関係ないけど、ちょっと面白いものを見つけた。
なんでもjavascriptのepubリーダーらしい。
http://www.moongift.jp/2010/06/republish/
が、更新が去年の5月で止まっているのを見るともう頓挫してしまっているのだろう。
追記:
おなじようなコンセプトのものを発見
http://blog.threepress.org/archives/
これはまだ開発が続いている模様
なんでもjavascriptのepubリーダーらしい。
http://www.moongift.jp/2010/06/republish/
が、更新が去年の5月で止まっているのを見るともう頓挫してしまっているのだろう。
追記:
おなじようなコンセプトのものを発見
http://blog.threepress.org/archives/
これはまだ開発が続いている模様
2011年12月28日水曜日
紫電 on iphone
ちょっとキミキメ紫電をiphoneで動かしてみた。。。。。。
とんでもないことに気付いた。。。。。。。
どうもローカルでUIWebView使って表示するときにhtmlやリソースの階層構造
無視しやがる。。。。。
iOSめ、やってくれる。。。。。
どうしたもんかなiOS系だけ処理をわけるしかないかなあ。
いやいやネット越しならiOSでもちゃんと階層を認識できるわけで。
まったくやってくれるぜ。
とんでもないことに気付いた。。。。。。。
どうもローカルでUIWebView使って表示するときにhtmlやリソースの階層構造
無視しやがる。。。。。
iOSめ、やってくれる。。。。。
どうしたもんかなiOS系だけ処理をわけるしかないかなあ。
いやいやネット越しならiOSでもちゃんと階層を認識できるわけで。
まったくやってくれるぜ。
ヘッダー
なんというかヘッダーがどうしてもスカスカで変だ。
mixiとかピアプロはヘッダーの真ん中に広告バナーいれてるようだからそれを真似てみよう。
広告バナーも使いようによってはデザイン向上に寄与するような気がする。
mixiとかピアプロはヘッダーの真ん中に広告バナーいれてるようだからそれを真似てみよう。
広告バナーも使いようによってはデザイン向上に寄与するような気がする。
サイトデザイン
とある方面から教えて頂いた資料に基づき
配色は以下のようにしようと思う。
ベースの薄い色(2色) オレンジ, 灰色
ベースの濃い色(1色) 赤
指し色(1色) 水色
右を重くするか・・・。
ノベルエンジンがよこに長いから基本的に右コラムはいれれない
となるとヘッダー部分の右側になにかいれるべきということか。
何いれよう・・・・。
とりあえずログインとか検索フォームとか置いとこう。
そもそもヘッダー部分がスカスカでへんなんだろう。
まずはヘッダー部分にいろいろ付け加えるか
配色は以下のようにしようと思う。
ベースの薄い色(2色) オレンジ, 灰色
ベースの濃い色(1色) 赤
指し色(1色) 水色
右を重くするか・・・。
ノベルエンジンがよこに長いから基本的に右コラムはいれれない
となるとヘッダー部分の右側になにかいれるべきということか。
何いれよう・・・・。
とりあえずログインとか検索フォームとか置いとこう。
そもそもヘッダー部分がスカスカでへんなんだろう。
まずはヘッダー部分にいろいろ付け加えるか
2011年12月27日火曜日
紫電エディタがいまいち
紫電エディタにいろいろ問題がでては潰しているという感じ。
そもそも実装がイマイチなんだよな。jsのプログラミングスキルがなっていない。
jsのプログラミングスキルをあげないことにはなんとかバグをここで
潰しつくしても今後こういうことが沢山あってげんなりしてしまう。
そこでこの本を買ってみた。これでjsのプログラミングスキルをあげようと思う。
amazonでの評価はかなり高いぜ。
そもそも実装がイマイチなんだよな。jsのプログラミングスキルがなっていない。
jsのプログラミングスキルをあげないことにはなんとかバグをここで
潰しつくしても今後こういうことが沢山あってげんなりしてしまう。
そこでこの本を買ってみた。これでjsのプログラミングスキルをあげようと思う。
amazonでの評価はかなり高いぜ。
2011年12月26日月曜日
ニコニコニュースのtwitter連携
いろいろ調べたけどあれはなんらかニコニコニュースが自前でデータベース持ってるとしか考えられない。
ツイートのデータ自体はtwitterにあるのは確かなんだけど、検索で見つからない。
どうもtwitter apiの仕様らしい。
となるともうデータそのものかメタデータをもってる以外考えられる。
しゃあない覚悟を決めて伝説のノベルにもtwitter用db持たせるか・・・。
ツイートのデータ自体はtwitterにあるのは確かなんだけど、検索で見つからない。
どうもtwitter apiの仕様らしい。
となるともうデータそのものかメタデータをもってる以外考えられる。
しゃあない覚悟を決めて伝説のノベルにもtwitter用db持たせるか・・・。
uploader
CakePHPにuber_uploaderを組み込んだけど、かなり苦戦した。
一応一通りできたけど今はただファイルを置くだけでしかない。
次はtwitter連携機能を実装する、これができたら全体的なデザインの見直し、
検索機能やお気に入り機能なんて最悪リリース直後はなくてもいいや。どうせ始めは数えるしかコンテンツないんだろうから。
一応一通りできたけど今はただファイルを置くだけでしかない。
次はtwitter連携機能を実装する、これができたら全体的なデザインの見直し、
検索機能やお気に入り機能なんて最悪リリース直後はなくてもいいや。どうせ始めは数えるしかコンテンツないんだろうから。
Ajaxのpostタイムアウト
バグというか実装のし忘れで一部アクションがpostできていなかった。
2度押しを防止するため1度submitボタンを押したらpost応答が帰ってくるまで
ボタンを無効化してたからそれらではリロードしない限りずーとボタンが無効になっていた。
postするようにしたら正しくボタンの無効を解除するようになったが、ここで一つ
思い当たった。サーバー側の状況によっては必ずpost応答を返さないかもしれない。
そうなるとずーっとボタンが無効のままでになってしまう。
これはまずい。なんらかタイムアウトの処理を入れる必要がありそうだ。
追記:
以下のようにタイムアウトとタイムアウト発生時のエラー処理ができるようだ
http://www.openspc2.org/JavaScript/Ajax/jQuery_study/ver1.3/chapter05/003/index.html
2度押しを防止するため1度submitボタンを押したらpost応答が帰ってくるまで
ボタンを無効化してたからそれらではリロードしない限りずーとボタンが無効になっていた。
postするようにしたら正しくボタンの無効を解除するようになったが、ここで一つ
思い当たった。サーバー側の状況によっては必ずpost応答を返さないかもしれない。
そうなるとずーっとボタンが無効のままでになってしまう。
これはまずい。なんらかタイムアウトの処理を入れる必要がありそうだ。
追記:
以下のようにタイムアウトとタイムアウト発生時のエラー処理ができるようだ
http://www.openspc2.org/JavaScript/Ajax/jQuery_study/ver1.3/chapter05/003/index.html
2011年12月25日日曜日
冗長性
いろいろ修正しながら思った。サーバーにあるスクリプトファイルもしかしたら
なんらかの原因で壊れる可能性があるんじゃないかと。ファイル書き込み中に
フリーズしたりとか。ext3が完全にうまいことやってくれると期待してはダメだと思う。
なので全スクリプトにバックアップを持たせようと思う。読み込めなかったら復元する。。。。
スクリプトだけなら大した要領にならないだろう。
あーー、でも同じファイルシステム上にバックアップも置いといたらファイルシステムごと
逝かれたときは意味がないのかRAIDかなにかでバックアップは別ファイルシステムにおいとかないと。
よくわからん世界だ。
なんらかの原因で壊れる可能性があるんじゃないかと。ファイル書き込み中に
フリーズしたりとか。ext3が完全にうまいことやってくれると期待してはダメだと思う。
なので全スクリプトにバックアップを持たせようと思う。読み込めなかったら復元する。。。。
スクリプトだけなら大した要領にならないだろう。
あーー、でも同じファイルシステム上にバックアップも置いといたらファイルシステムごと
逝かれたときは意味がないのかRAIDかなにかでバックアップは別ファイルシステムにおいとかないと。
よくわからん世界だ。
2011年12月24日土曜日
肩こり
右手でマウス使っているのだけど、キーボードの幅が広すぎるせいか大きく体の中心から
右にずれたところでマウスいじくってるからかなり右腕と右肩に負担が来る。
おかげでおとといくらいから右肩がとんでもないくらいの肩こりになってた。
昨日と今日はもう呼吸が明らかにしにくいくらいに違和感があった。
右肩をぐりぐりしてみると3cm四方くらいのシコリがあった。これを
中心にしばらくもんでいたらなぜかしこりがなくなって呼吸もしやすくなった。
ふーーー、しんどかった。これからしばらくはマウスを左手で扱うことにする。
Eclipseでvimエディタが使えればマウス使わなくなってだいぶ楽になるんだろうが。。。。
右にずれたところでマウスいじくってるからかなり右腕と右肩に負担が来る。
おかげでおとといくらいから右肩がとんでもないくらいの肩こりになってた。
昨日と今日はもう呼吸が明らかにしにくいくらいに違和感があった。
右肩をぐりぐりしてみると3cm四方くらいのシコリがあった。これを
中心にしばらくもんでいたらなぜかしこりがなくなって呼吸もしやすくなった。
ふーーー、しんどかった。これからしばらくはマウスを左手で扱うことにする。
Eclipseでvimエディタが使えればマウス使わなくなってだいぶ楽になるんだろうが。。。。
2011年12月23日金曜日
DBのテーブル連携
例えばユーザー管理テーブルとコンテンツ管理テーブルが別だったと刷る
ユーザー管理テーブルがこんな感じ
userid:username:sex :age
0001 :userA :male :26
0002 :userB :male :25
0003 :userC :female:23
コンテンツ管理テーブルがこんな感じ
contentsid:title:userid
00001 :hoge :0001
00002 :hage :0002
00003 :moge :0001
00004 :toge :0003
コンテンツ一覧を表示したいけど、そこにはuseridではなくそのuseridに
紐づくusernameを載せたい時は一々ユーザー管理テーブルを検索しなくちゃいけないのだろうか・・
なにかいい方法はないものかのお。
追記
こんな手法をみつけた
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database10.htm
joinというものでテーブルを連結したかのようにして操作できるっぽい。
CaskePHPでモデル使ってjoin使うのはめんどくさそうだから直接phpでクエリを書いてしまおう。いやそれほど面倒でもなさそうだ。
http://d.hatena.ne.jp/aroundthedistance/20090422/1240396315
fieldsというものを定義してるのがポイント。実際にはfieldsの中には*(全てのカラムの意味)を使った。
ユーザー管理テーブルがこんな感じ
userid:username:sex :age
0001 :userA :male :26
0002 :userB :male :25
0003 :userC :female:23
コンテンツ管理テーブルがこんな感じ
contentsid:title:userid
00001 :hoge :0001
00002 :hage :0002
00003 :moge :0001
00004 :toge :0003
コンテンツ一覧を表示したいけど、そこにはuseridではなくそのuseridに
紐づくusernameを載せたい時は一々ユーザー管理テーブルを検索しなくちゃいけないのだろうか・・
なにかいい方法はないものかのお。
追記
こんな手法をみつけた
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database10.htm
joinというものでテーブルを連結したかのようにして操作できるっぽい。
CaskePHPでモデル使ってjoin使うのはめんどくさそうだから直接phpでクエリを書いてしまおう。いやそれほど面倒でもなさそうだ。
http://d.hatena.ne.jp/aroundthedistance/20090422/1240396315
fieldsというものを定義してるのがポイント。実際にはfieldsの中には*(全てのカラムの意味)を使った。
登録:
投稿 (Atom)