スキップしてメイン コンテンツに移動

JSON のオブジェクトを ID でリンクする(2)


gistcf43df70ff1d946640af


 


JSON のオブジェクトを ID でリンクする - SakuraCrowd’s blog の関数のテストケースの作成と実装を行いました。


関数の説明は gist のコメントに書きました。


 


JSONPath でいいんじゃね?->やっぱり ID もいるよね!


リンクを展開していく際に、循環参照を検知したらエラーにして、発生した場所をメッセージで伝える仕様にしました。


その場所の表し方を検討していたところ、 JSONPath という XPathJSON 版がみつかりました。


「あれ? ID とか独自仕様作らないで JsonPath でリンクすればいいんじゃね?(`・ω´・)」と思い始めました。


実際、それですんだら独自仕様なんて面倒なものから解放されるのでよいと思ったのですが、ぐぬぬと思う残念なところがあって、先日の提案どおり ID によるリンクにしました。


残念なところとは、上位へのアクセスを指示する .. が使えないことです。


.. 自体はあるのですが、再帰の指示で使われていて意味が異なりました。


これがないと、同じ階層にある他のオブジェクトを指すために絶対パスが必要になると思います。


ID はプロパティを割り振る手間や重複などのデメリットがありますが、ユーザが簡単にオブジェクトを指すことができます。


もともと、この機能は TMX の中のオブジェクトの設定を簡単にするために作っています。


TMX 自体は XML で表されていて、それを tmx-parser で JavaScript のオブジェクトに変換します。


TMX の編集中に JSONPath を意識するのは難しいので、 ID によるリンクでよいと思いました。


 


開発環境とかコーディングルールとか


実際のところ、関数の作成よりも開発環境や基本的な書き方の勉強に時間がかかりました。


しかも、まだふわふわしています。


 


JavaScript のライブラリの書き方 (まだふわふわ)


JavaScript によるライブラリの書き方は underscore.js を参考にしました。


無名関数の中で、ライブラリ用のプロパティをグローバル変数に追加します。


同じ名前の変数がすでにある場合は直前まで割り当てられていた値に戻せる関数 noConflict も underscore.js や jQuery を参考にしてやろうと思いましたが、まだ必要性がないと思いやってません。


最低限の機能として、 node.js の場合は exports 変数にライブラリ用の変数を設定するようにしました。


 


テストフレームワーク Jasmine を使ってみた


Jasmine についてはサンプルを適当にいじっただけです。


Jasmine-standalone はダウンロードして specrunner.html を起動するだけでサンプルが動くし、その中を見れば直感的にカスタマイズできる感じでわかりやすいです。


 


IDE になじめず軽くへこむ


aptana とか VS express 2013 for web などの IDE も使ってみたのですが、インテリセンスやブレークポイントがうまく使えませんでした。


「俺、向いてないのかな(´・ω・`)」とまじで落ち込むくらいに、正しい使い方がわかりませんでした。


 


ブラウザのデバッガがすごい


結局、デバッガは FireFox の F12「要素を調査」を使いました。


chrome の「要素を検証」でもよかったのですが、 cocos2d のサンプルが chrome ではなぜか動かず FireFox では動いたので、 FireFox でやっています。


Jasmine でテストして、失敗したとこだけ、ブレークポイントをはって実行というパターンがわかりやすくてデバッグしやすかったです。


 


テスト駆動のにわかの感想


テスト駆動だと、修正確認を短いサイクルで行えるので不安要素が少なくなっていじりやすいです。


コメント

このブログの人気の投稿

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。 こんばんわ SakuraCrowd です。 今回は今作っているソフトの経過報告です。 最近のブログのパターンは、 「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」 という流れですが、 今日はできていないソフトの部分的な話なので、 いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル QTableView は GUIライブラリ Qt のクラスです。 それを Python で使うための PySide というライブラリを使っています。 某表計算ソフト っぽい表の GUI です。 このデータの日付が 09/01 なのでおそらくその日に   QTableView 使うぞ!(`・ω・´) とサンプルデータを作ったのでしょう。 Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。 選択できる GUI の中に QTableView と QTableWidget があります。 どちらも上のような表の GUI です。 QTableWidget は 簡単 に値をいれたりできます。 Qt Designer 上で直接編集 することができるので、 サンプルの表を簡単に作ることができます。 それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。 QTableView の強みは MVC の構造 を使えることです。 名前のとおり QTableView は View です。 これにデータを管理している Model オブジェクトを設定して使います。 Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。 Model は QAbstractTableModel を 継承 して作ります。 コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。 def __init__ ( self , parent= None , *args):...

和風狩ゲー「WildHearts」プレイ日誌(ツイートまとめ)

幻想的な和風のおとぎ話の世界のような雰囲気で始まる、カラクリで戦略が広がる狩ゲー 「 Wild Hearts 」のプレイ感想(主にツイート)のまとめです。 通常価格は1万円近くしますが、Steam のスプリングセールで 85 % オフの 1, 455 円で購入しました。 カラクリは思ったより全然簡単に出せて面白い!幻想的なマップと御伽噺のような獣たち 20250317 https://x.com/SakuraCrowd/status/1901213871937134633 カラクリ(最初はハコ)を一瞬で配置してそれに乗ってジャンプ強攻撃したり、高い壁のぼったりする要素が新しい。 すごく感動したのが、マップのおとぎ話のような幻想的なデザイン。 フィールドには入れる小屋があったり、それを壊されたり、ダイナミックなステージの変化も楽しい #WildHearts 武器強化や図鑑がこれから増えていくのを思うとワクワク!20250316 https://x.com/SakuraCrowd/status/1901215264269906190 武器を細かく強化していけそうなのがわくわくする 野営地に置く鍛冶の施設とかも少しずつ解除して、好きな位置に配置できる あと討伐した敵の情報も倒した数で詳細な情報が見られる #WildHearts 1バトル5分だけどハラハラ!初の武器強化! 20250317   https://x.com/SakuraCrowd/status/1901597289082405135 ハナヤドシを5回狩ると図鑑が詳しくなって、生態の説明の他に、レアなアイテムを落とす部位もわかった。 しっぽの先についている塊に栄養を吸い取られているためにいつも貪欲らしい。 その塊を何とか3回部位破壊して今作れる一番強いからくり刀できた 一戦5分くらいでできるのがいい #WildHearts コハクヌシを倒して氏繁救出!マグマみたいなのは琥珀だったのかー 20250317 鍛冶師のなつめが言っていた、氏繁をコハクヌシから助ける コハクヌシの住処の洞窟の上から声がして、探してたらやられてしまったw そのあとまたその場所に戻ってバトル再開して勝った 氏繁はなんか飄々としていて、まじめななつめとの3人の旅が面白くなりそう #WildHearts カラカラとなったらコダマを探すの...

GrimDawn クロンリーの幹部という名もなき賞金首

 賞金首を倒すのは、短時間で何か達成するにはちょうどいいミッションだ。 今までのバウンティのクエストには、ターゲットのいる場所などが書かれていたのだが、今回はクロンリーの幹部3人を倒せというもの。 今までは、賞金首に名前があったが、幹部3人という表現は何なのだろうと思った。 3人もいるから文章を短縮するために名前を端折ったのか。 それに場所も書かれていないので、ウィキを見たのだけど、よくわからなかったので、とりあえずクロンリーの隠れ家にリフトで移動した。 クロンリーの隠れ家の入り口あたり 隠れ家周辺の可能性もあるけど、クリスタルを埋め込まれたということは、かなりクロンリーの近くにいる気がする。 クロンリーの隠れ家には数体、 HP バーの左右にドクロマークがついているヒーロークラス のやつらがいるので、そいつらのことかもしれないと思った。 一番上にマーティンとか名前がついてるから幹部かなと期待したけど違った そして、マーティン(幹部かなと思ってた)と戦っていたら、いきなり、幹部を倒したというメッセージ。 マーティンは幹部じゃなかったし、いつ幹部をやったかは不明 どうやら、よく見るとたまに MOB っぽい敵の中に幹部と書かれている敵がいるのでそいつらを3体やればよいということらしい。 道中でいつの間にか幹部を3体倒してミッションもクリアしたので、ついでにクロンリーを倒してきた(まだやられそうになりながらだけど、たまに逃げたりしながら時間を数分かければ勝てる)。 クロンリーの隠れ家のマーティンのように名前もなく、「幹部」という肩書だけのMOB。 幹部はもちろん それなりに偉いんだろうけど 、名前もなく、いつの間にかやられるところに、 むなしさを感じた賞金首たち だった。 名前は大事だな。あと雑魚と一緒にしなない程度のタフさがあればよかったのかなと思う。 そろそろストーリーをすすめたいが、いろいろあって、短時間しかできない。 あと、いい装備がでてこなくなってきたのでモチベーションが下がり気味なこともある。 飽きる前に、 Act4 まではすすめたい。 つづく