chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

シャンティ楽しいです ✌('ω'✌ )三 ✌('ω')✌ 三( ✌'ω')✌

パケ買いしたシャンティが思いのほか楽しくて困ってない。
横スクロールアクション自体すっごい久しぶりなせいもあっていい買い物でした。
道中迷子になったり最終ダンジョンで指痛めたりとかしたけど。

シャンティ -海賊の呪い-

シャンティ -海賊の呪い-

PC版もあると聞いて即買ってしまうとかもしてた。フルHD + フルスクリーンでできるからこっちのほうがやりやすかった。

エレコムの新トラックボールM-XT3DRBK買ってました

懲りずにエレコムトラックボールに手を出してました。
見た目は前のと変わらず、チルトホイールと薬指付近の追加ボタンのあるデザインです。

www2.elecom.co.jp

実のところ、こっちのほうしか知らんかったんですが、Amazonにあったのは↑のほうだけでした。*1
www2.elecom.co.jp

この二種類、違いは薬指のボタンの機能の違いでした。

M-XT2DRBK 速度調整ボタン
M-XT3DRBK 拡張機能ボタン

期せずして、便利そうなほう買ってました(・∀・)
さしあたり、

  • スタートスクリーン
  • アクションセンター
  • 仮想デスクトップ

を割り当ててます。(チルトホイールはそのまま横スクロールにしてある)

使用感

前の M-XT1DRBK と変わらず、ポインタがふらつくことが結構ありますねぇ…('A`)
これ電池寿命を犠牲にハイスピードモードして直ってくれたしないかな…
やっぱロジクールのほうが安定感ある.
あとボールがショリショリしてる。

あと薬指ボタンは誤爆しやすい気がする。

*1:M-XT2DRBKのつもりで買ってた

Goで構造体スライスをXMLにして ( ;゚皿゚)ノシΣバンバン!! ってなった話

結論から書くと、ちゃんと構造体でラップしましょう、ということです。
出ないと書き出したXMLがちゃんと読み込まれなくて ( ;゚皿゚)ノシΣバンバン!! ってすることになります。

やらかしたこと

次のように、構造体とそのスライスを用意して、XMLに変換したわけです。

package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items []Item

func main() {
	items := Items{
		Item{
			ID:    "001",
			Name:  "AA1",
			Value: "|ω・`)ノ ヤァ",
		},
		Item{
			ID:    "002",
			Name:  "AA2",
			Value: "|д゚)チラッ",
		},
	}

	if buf, err := xml.MarshalIndent(items, "", " "); err != nil {
		panic(err)
	} else {
		fmt.Print(xml.Header)
		fmt.Println(string(buf))
	}
}

実行すると次のようなXMLを得られます。

<?xml version="1.0" encoding="UTF-8"?>
<item id="001">
 <name>AA1</name>
 <value>|ω・`)ノ ヤァ</value>
</item>
<item id="002">
 <name>AA2</name>
 <value>|д゚)チラッ</value>
</item>

この時点ですでになんか怪しいことにお気づきでしょうか。そう、ルート要素が複数あるということに。

さて、これを以下のコードで読み込むと( ゚д゚)します。

package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items []Item

func main() {
	items := make(Items, 0)
	doc := `<?xml version="1.0" encoding="UTF-8"?>
<item id="001">
 <name>AA1</name>
 <value>|ω・`)ノ ヤァ</value>
</item>
<item id="002">
 <name>AA2</name>
 <value>|д゚)チラッ</value>
</item>
`
	if err := xml.Unmarshal([]byte(doc), &items); err != nil {
		panic(err)
	} else {
		for _, item := range items {
			fmt.Println(item)
		}
	}
}

以下出力結果。

{{ item} 001 AA1 |ω・`)ノ ヤァ}

二要素目が闇に消えましたね ( ・´ー・`)

原因

たぶんルート要素がいっぱいあるせい。つまり正しいXMLになってない。

正しい解決法

なので、ちゃんと構造体でラップしましょう、そうしましょう。

エンコードする方のコード
package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items struct {
	XMLName xml.Name `xml:"items"`
	Items   []Item   `xml:"item"`
}

func main() {
	items := &Items{
		Items: []Item{
			Item{
				ID:    "001",
				Name:  "AA1",
				Value: "|ω・`)ノ ヤァ",
			},
			Item{
				ID:    "002",
				Name:  "AA2",
				Value: "|д゚)チラッ",
			},
		},
	}

	if buf, err := xml.MarshalIndent(items, "", " "); err != nil {
		panic(err)
	} else {
		fmt.Print(xml.Header)
		fmt.Println(string(buf))
	}
}
エンコード結果
<?xml version="1.0" encoding="UTF-8"?>
<items>
 <item id="001">
  <name>AA1</name>
  <value>|ω・`)ノ ヤァ</value>
 </item>
 <item id="002">
  <name>AA2</name>
  <value>|д゚)チラッ</value>
 </item>
</items>
デコードする方のコード
package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items struct {
	XMLName xml.Name `xml:"items"`
	Items   []Item   `xml:"item"`
}

func main() {
	items := Items{}
	doc := `<?xml version="1.0" encoding="UTF-8"?>
<items>
 <item id="001">
  <name>AA1</name>
  <value>|ω・`)ノ ヤァ</value>
 </item>
 <item id="002">
  <name>AA2</name>
  <value>|д゚)チラッ</value>
 </item>
</items>
`
	if err := xml.Unmarshal([]byte(doc), &items); err != nil {
		panic(err)
	} else {
		for _, item := range items.Items {
			fmt.Println(item)
		}
	}
}
デコード結果
{{ item} 001 AA1 |ω・`)ノ ヤァ}
{{ item} 002 AA2 |д゚)チラッ}

ダメな解決方法

構造体作りたくないでござる、スライスはスライスのままにしたいでござる、みたいな人 *1 のためにたぶん間違った解決方法を。
その方法は xml.Marshaler / xml.Unmarshalerを実装して、ルート要素を無理やり作る、というのもですが。

エンコード
package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items []Item

func (self Items) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	root := struct {
		Items []Item `xml:"item"`
	}{
		Items: self,
	}

	start.Name.Local = "items"
	return e.EncodeElement(&root, start)
}

func main() {
	items := Items{
		Item{
			ID:    "001",
			Name:  "AA1",
			Value: "|ω・`)ノ ヤァ",
		},
		Item{
			ID:    "002",
			Name:  "AA2",
			Value: "|д゚)チラッ",
		},
	}

	if buf, err := xml.MarshalIndent(items, "", " "); err != nil {
		panic(err)
	} else {
		fmt.Print(xml.Header)
		fmt.Println(string(buf))
	}
}
デコード側
package main

import "encoding/xml"
import "fmt"

type Item struct {
	XMLName xml.Name `xml:"item"`
	ID      string   `xml:"id,attr"`
	Name    string   `xml:"name"`
	Value   string   `xml:"value"`
}

type Items []Item

func (self *Items) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	root := struct {
		Items []Item `xml:"item"`
	}{}

	if err := d.DecodeElement(&root, &start); err != nil {
		return err
	} else {
		*self = root.Items
		return nil
	}
}

func main() {
	items := Items{}
	doc := `<?xml version="1.0" encoding="UTF-8"?>
<items>
 <item id="001">
  <name>AA1</name>
  <value>|ω・`)ノ ヤァ</value>
 </item>
 <item id="002">
  <name>AA2</name>
  <value>|д゚)チラッ</value>
 </item>
</items>
`
	if err := xml.Unmarshal([]byte(doc), &items); err != nil {
		panic(err)
	} else {
		for _, item := range items {
			fmt.Println(item)
		}
	}
}

自分自身のスライスの参照先を書き換えるとか ((((;゚Д゚))))ガクガクブルブル しますね!!

*1:

最近財布の紐が緩すぎる気がしてならない

最近うしおととら (Kindle版) を全巻まとめ買い*1*2したりとかで散財してるところで、またゲームを衝動買いしてしまいましてな。

シャンティ -海賊の呪い-

シャンティ -海賊の呪い-

会社で調べものってことでググってたら至る所で広告を見てしまったので洗脳された感はありつつも、ほぼパケ買いですハイ。

しかし来月はゴッドイーターといいモンスターハンタークロスといい積みゲーにならなきゃいいんだけど…

Xbox One Controllerを導入

Windows 10にしてからどうにもXbox 360コントローラ及び互換コントローラの入力がおかしくなってました。おかしいというか、スティックの上方向から右斜め上方向の入力がほぼなくなるという(´Д`)*1

互換コントローラとXbox 360コントローラ両方で起きてたので、たぶんドライバレベルでなんかおかしくなってるっぽかったので、唐突にXbox One Controllerを買いました。ほら、Windows 10ならドライバ標準装備だって言うから…

買ってみての感想としては、

  • 思ったより軽い。電池とかバッテリーがでかい360コントローラより軽くて負担が軽い
  • USBケーブルで繋がる (= 有線コントローラ) なので、充電とか考えなくていい *2
  • 扱いは Xbox 360と同じ (= XInput) になるので、大体のゲームで使えて(゚д゚)ウマー

という感じで、いい買い物だったかと.

難点は、R/Lキーが押しにくいことですが。
というのも、押せる場所が端のほうなんですが (下図参照) 持ち方の問題で人差し指がちょうど根元 (図の×のあたり) にきちゃって「あれ?押せないぞ?」とかなること。根元はまったく押せないのでつらいことになる。
f:id:chikuchikugonzalez:20150910223346p:plain:w300

意識すればいいんだけど、アクションゲームとかだと余裕なくなって押せなくなったりするのが困ったところです *3
この点だけは360より劣化してるなぁと

*1:おかげでバイオハザードは前ダッシュできないとか、DMCで前ダッシュできないとか起きてた

*2:現状、Windows PCで無線化できないだけともいう

*3:スカルガールズのコンボで強攻撃が絡むと出なくて焦る

懐かしのMHP3rdの村最終を終わらせてきました (今更)

部屋を占拠してた段ボール箱を片付けたらPS3で遊べるようになったので、懐かしのMHP3rd (HD Ver.) を引っ張り出して遊んでました。




いやぁ、HD Ver. だけあって綺麗でしたわー…
呟きの通り、村最終クエストの終焉を喰らう者が未クリアだったのでヒーコラ言いながら40分かけてクリアしておきました *1.
そしてMH4Gに慣らされてるなぁ…って言うのを実感してきたところです.
(ナルガの回転とか意外と避けられるようになってたところとか、アマツの三連ブレスを避け切れるとか)

久しぶりの感想としては

  • 農場楽。採掘とか釣りとか栽培とか昆虫採集とか全部できて超便利。
  • 村ポイントで鎧玉 (当時は武具玉) が全部揃うとか、なんていい場所なんだ。
  • そういえばベッドで寝てる間もメニュー開けましたね。
  • ネコタク中でもリタイアできるじゃん。なんで今できないのさ。

とまぁ、今できないことが当時はできてたんだなぁ、って遠い目になりかけた。


モンスターハンターポータブル 3rd HD Ver.

モンスターハンターポータブル 3rd HD Ver.

MHXでユクモが復活するなら、是非ともユアミスガタ復活ととレックスUの足装備のパンツをTバックに戻してほしい

*1:二回失敗してるので合計2時間くらい費やしてる気がする

Windows 10にしました✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌

Surface Pro 2で練習したのち、メイン使用のAlienware 17 (Windows 8機) を Windows 10 にアップグレードしました。今のところ目立った不具合とかはないです。ε-(´∀`*)ホッ

現時点 (2015/08/06) での感想 (まだ二日目)

Windows 10のいいんじゃね?ってとこ
  • 仮想デスクトップ搭載
    • これでボスが来ても大丈夫( ´∀`)bグッ
  • 地味にコマンドプロンプトが強化
    • 個人的にうれしいのはついにコマンドプロンプトを全画面にできること. 今までは最大化しても横方向は固定だったのです
  • Xbox Appで録画できるようになった
    • 画質とかフレーム数とか気にしなければキャプチャソフトを入れなくてもいいんじゃないか
      • フレーム数は30FPS固定っぽいので、60FPSで撮りたいとかはムリ
    • 録画テスト. 画質と解像度標準でこんな感じになる.

www.youtube.com
www.youtube.com

これはちょっと(;´Д`) っていうところ
  • チャームがなくなった
    • 右画面外からスワイプするとアクションセンターが開く
  • 左側のアプリ切り替えがなくなった
    • 同じタブレット用操作 (タッチパネルで左側画面外からスワイプ) でやるとデスクトップ切り替えになる
  • デフォのフォントがちょっと小さいか細い
    • 目がー
  • アップグレードによってスタートスクリーン配置がリセット
    • 並び方も変わってるから仕方ないか
  • 描画の拡大率を弄るとアプリによってはフォントがでかくなりすぎることがある
    • Surface Pro 2のほうでKindle for PC動かしたらえらいデカイ文字になってた (拡大率150%)

まぁまだ慣れてないだけですね。

その他動いたアプリの報告 (主にMUGEN関係)

手元で試したソフトは大体動きました。ってか一番動きが怪しいのが Alien Respawn (Dellのバックアップツール) というね…

アプリ名 備考
ヴァンガードプリンセス Windows 8.1の時はバッチファイルがないと動かなかったのが解消され、ちゃんと直接ダブルクリックで動いた
MUGEN (Win) 余裕
MUGEN (1.0)
SFFAirMaker いける
SFFAirEditor 動くけど、うちの環境では相変わらず終了時にRuntime Error
FighterFactory3 なんか動く.

他Steamで買ったゲーム (BlazBlue CS / Skullgirls) も問題なしでした。