きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Dapperの結果のDapperRowのコレクションを単純なDictionaryのコレクションに変換する

DapperのQuery拡張メソッドを型引数ナシまたは型引数dynamicで実行すると、結果はDapper.SqlMapper.DapperRowのコレクションとして取得することになる。このDapperRow型これを単純なDictionary<string, object>のリストとして渡したい事象に遭遇したので、記述したコードをメモ。

    using (var cn = new Microsoft.Data.SqlClient.SqlConnection(connectionString))
    {
      cn.Open();
      var resut = cn.Query<dynamic>("SELECT * FROM [dbo].[User]")
          .Select(x => ((IDictionary<string, object>)x).ToDictionary(k => k.Key, v => v.Value))
          .ToList();


      // 列名のみ列挙
      foreach (var columnName in resut[0].Keys)
      {
        Console.Write($"{columnName},");
      }
      Console.WriteLine($"");

      // 行・列データを列挙
      foreach (var rec in resut)
      {
        foreach (var key in rec.Keys)
        {
          Console.Write($"{rec[key]},");
        }
        Console.WriteLine($"");
      }
    }

実行結果例:

UserGUID,Name,BirthDay,SomeId,
dd4a05bb-9da7-4981-bde4-2187427ebe2e,aAAAA,2005/03/03 0:00:00,99887,
881b4c15-c6d4-4c7f-b1d9-a1a082bfe64e,いいいい,2011/11/25 0:00:00,99887,
833b8b88-1c97-46f1-94b0-d11bfca73e68,あああ,2001/01/01 0:00:00,99887,
5cdc052f-3c70-4838-8250-fea41651ffa0,CCCCC,1996/02/11 0:00:00,99887,

ループレバー搭載のUSBジョイステック『GRS Super Joystick Ikari Warriors edition』が届きました

以前に ループレバー搭載のUSBジョイステック『GRS Super Joystick Ikari Warriors edition』が日本からも注文できるようになってた(現在プレオーダー受付中) - きよくらの備忘録 で書いた ループレバー搭載のUSBジョイステック作成DIYキットの『GRS Super Joystick Ikari Warriors edition』が手元に届いたので、組当てて使ってみました。

続きを読む

GP2040-CEをUSBパススルー認証で接続解除されずにPS4本体で使用できるやり方をようやく理解した(気がする)

GP2040-CEはv0.7.4で特定の機器を接続することで「未認証機器は8分間で接続解除」する制限をクリアできる機能が追加されました。 しかしながら私はPS5は持っておらずまたPS4もほぼVO専用機になってるせいもあり、今まで特に必要性を感じていなかった為スルーしていました。

しかしv0.7.6*1にてXBOX SX/SS/OneについてもUSBパススルーで認証突破できる機能が付いたこともあり、ちょっと試してみようかという気になったので新しくGP2040-CE内蔵のアダプタを作るついでに検証してみました。

結果として以下2点を確認しました。

  • USBパススルー機能を利用することで8分間制限のない状態でPS4でGP2040-CEが利用できる
  • 認証用に接続できる機器に制限がある
    • Mayflash MagicBoots FPS v1.1 では期待通り動作した
    • 手元にあった別のコントローラーでは8分で接続が切れた(期待通り動かなかった)

少し悩んだこともあったため、確認した手順や設定内容について以下にメモを残しておきます。

注意点

ここに記載しているのは、現状の v0.7.6-RC2を用いて私の手元で検証した結果です。機器のバージョンやGP2040-CEのバージョンやビルドの差で結果が変わる可能性はあります。 またこの内容にそって同じように検証した結果、機材や部品を破損他なんらかの損害が発生した場合も私は一切責任を取ることはできない点ご了承ください。

またオフィシャルのドキュメントの内、特に以下については参照したうえで実行するのが良いのではないかと思います

使用機材やソフトウェアについて

以下のものを利用しました。

接続について

USBコネクタとRaspberry Pi Picoの接続は、使用する予定のないGPIO26と27を利用しました。

USB Raspberry Pi Pico
Vcc VBUS
D+ GPIO 26
D- GPIO 27
GND GND

公式ドキュメントのサンプルではGPIO0と1をD+/D-としてアサインしていますが、私は0と1はOLEDに使用したかったので26と27にしました。 なお、D+/D-にアサインするGPIOは必ず連番である必要があるようです。

Web Configuratorによる設定について

いくつかWeb Configuratorでの設定が必須となります。恐らく以下の順序で設定することになるかと思います。

※それぞれの設定ページで都度Saveをすること

  • USBコネクタを利用する端子の設定
    • メニューの Configuration - Peripheral Mapping にて設定
      • D+ に 26 を選択
      • 5VはGPIOからではなくVBUSから取得することにしたため Unsetを選択
      • Pin Orderは 'D+/D- -0' を選択(27をD-に割り当てるため)
  • USBパススルーを有効にする設定 -Configuration - Add-Ons Configuration より、PS Passthroughを有効に
    • 直上のPS4 Mode とは排他のようなのでそちらは無効にしておくこと
  • 入力モードの設定
    • Settings-Settingsより設定
    • Input ModePS4を選択し、表示されるプルダウンリストで Arcade Stick を選択

PS4との接続

PS4との接続については特にそのままです。 事前にUSBコネクタにMagicBoots を接続した上でPS4と接続し、PSボタン(…に相当するA1ボタン)をクリックして、しばらくするとOLEDの左上部分のモード表示が PS5 から PS5:AS に変化すればOKです。

あまりPS4用のコントローラを持っていないので他に試せたのは純正の『DUALSHOCK 4』とHORI製の『ワイヤードコントローラーライト for PlayStation 4』だけなのですが、それらではOLEDの表示がPS5:ASとならず、実際に8分経過で接続が解除され使用できなくなりました。

いくつかサイトやオフィシャルのdiscordのチャンネルなどでDUALSHOCK 4でも認証が通るような記述も見たと思うのですが、とりあえず手元ではうまくいきませんでした。

現状のまとめ

とりあえず私の手元では、特定の機器との組み合わせにおいてUSBパススルー機能を利用することでPS4本体で8分の制限を受けることなくGP2040-CEを利用することができることを確認しました。

v0.7.6で対応となったXBOX系については、XBOX Oneについてはそのうち動作確認をしたいと思っていますが、持っているはずの対応機器(MAGIC-X)が見当たらないので少し後回しになると思います。

(なおPS5は所持しておらずまた購入予定もないことから当面検証の予定はありません。またSeries X/Sは所指示しておらず購入予定もありませんので検証の予定もありません。)

*1:このエントリを執筆している2023/12/26現在はv0.7.6-RC2

ジャンクのファイティングスティックV3をマルチアケコンに改修してみた

随分昔に入手してそのまあま放置していたファイティングスティックV3のジャンク品を多機種で使うマルチアケコンに改修(改造?)してみました。

Befor

After

改修内容

改修内容の概要は以下です:

  • 基板類はすべて撤去し、NEOGEOやΣ8000TB、CBOX互換のアサインのD-SUB15ピンで引き出す
    • D-SUBコネクタはNEOGEO/初代ファミコン互換のケースグランド無しのロングタイプ
  • レバーは三和電子製JLF-TP-8YTに交換
    • 平鉄板付きタイプ
    • ケースにもともとある未使用のネジ穴を利用することで無加工で取り付け可能
      • レバーの個体によっては底板に微妙に当たることアリ。その場合は書こうが必要
  • ボタンはケース部はファイティングスティックV3についていたものを利用、内部のスイッチを三和電子製SW-68に交換
    • SW-68はOBSF-30の内部のものと同じです
    • もともとついていたものに無加工で取り付け可能

接続方式について

内部に基板は内蔵せず、外付けのアダプタを介することで多機種に接続できる方式としています。 ピンアサインはNEOGEOの拡張、シグマ電子の8000TBやCBOXと互換のあるものにしています。 NEOGEOや一部のMVSマザーボードやいくつかのアーケード基板用コントロールボックスにそのまま接続できますし、この手の改造を行う場合採用している人が比較的多い形式でもあります。

接続にはNEOGEOや初代ファミコンの拡張コネクタで採用されたロングタイプのD-SUB 15ピンメスコネクタ付きのケーブルを採用しています。

前述の通りNEOGEOや一部のMVSマザーボードに刺さるという利点もありますが、15芯のケーブルで細さと柔軟さ、コストパフォーマンスの良さというメリットも大きいと思っています。 最近日本のリアル店舗ので入手性は私は把握していませんが、Aliexpressやヤフオクなどを利用すれば一本当たりの値段は1000未満で入手可能とおもいます(2023年12月現在の観測範囲では)。

レバーについて

三和電子製JLF-TP-8YTがそのまま無加工で取付できました。使用したネジは径3.5mm×長さ10mmのタッピングネジです。 今回手元にあったJLF-TP-8YTは特に問題なく取付できました。が、ネットで少し調べてみたところ個体差なのか不明ですが底板に少し干渉するケースもあるようです。 その場合は底板の干渉する範囲に穴を開けるのが最も手っ取り早いと思います。穴を開けた場合はレバーボールの取り外しや締め直しがやりやすくなるというちょっとしたメリットもあります。

今回は平鉄板付をそのままつけましたが、平鉄板無しで取り付けることも可能です。ただしその場合は透明のレバーガイドに4か所ビス穴を開ける必要があります。今回は詳しく触れませんがネットを検索すれば情報はすぐ見つかると思います。

また同じ三和電子製で取付穴位置に互換のある現行品のJLX-TP-8YTやJLX-TPML-8YTもネジ穴的にはそのまま取付可能と思いますが、厚みやレバー長などの点でケースにそのまま収まるのかは私は情報を持っていません。

ボタンについて

ボタンホールの大きさ・形状的には30mm径のアーケードゲーム用プッシュボタンは大抵取り付け可能と思います。ただしケース底までの高さにあまり余裕はないので三和電子の場合は長寿命タイプのOBSF-30RGは取付が厳しいと思います。そのほかのボタンについても高さ(長さ)については注意してください。三和電子の場合OBSF-30はそのまま入ります。

今回はもともとついていたものとOBSF-30に形状と内部スイッチに互換があったため内部スイッチのみSW-68に入れ替えました。これは単純にコストダウンの為です(大体半額くらい)。

ボタンでもう一点注意すべき点は、ファストン端子で接続する場合は微妙に底板に干渉する点です(特に絶縁スリーブをつける場合)。 今回は端子を少しハの字に曲げることで対応しました。

スタート/セレクトなどのサブボタンは、元々連射スイッチなど一緒に配置されたパネルを加工し不要な穴をふさぎ、手元にあった安価なプッシュスイッチを取り付けました。 パネルにもともと開いている穴のうち不要なものを塞ぐために、私は余っていて近々使い切る必要があるポリパテがあったためそれを使用しました。が、手間がかかるので通常はおすすめしません。楽なのはパネル上のモールドをサンドペーパーなどで削り取った上で0.5㎜~1mm程度の適当な板材(プラバン、塩ビ版、アクリル板、木板などお好みで)で全面をふさぎ、利用する穴だけ再度開ける方法だと思います。また穴だけを何かでふさぐ場合もポリパテ系ではなくエポキシ系のパテを使う方が楽ではないかと思います。

その他

今回は天板は適当に100均で買ったカッティングシートを張りました。 天板に凝りたい場合もこのファイティングスティックV3は比較的楽な部類です。天板は4A用紙にギリギリ入るサイズのためA4フチなし印刷できるプリンタがあれば自分で出力できます。自分で天板を印刷する場合は、ラベル用紙を使用して直接貼り付けるよりも普通の写真用紙に印刷したうえでアクリル板などで挟む方式の方が楽かもしれません。

動画

今回もまた練習がてら、動画にしてYoutubeにアップしてみました。上記で解説しているポイントなども動画内で紹介しています。 もし興味があれば見てもらえると嬉しいです。

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

ループレバー搭載のUSBジョイステック『GRS Super Joystick Ikari Warriors edition』が日本からも注文できるようになってた(現在プレオーダー受付中)

SNKの怒シリーズをはじめとするアーケードゲームで採用されていたループレバーを家庭用のUSBジョイスティックとして再現したThunderstick Studio の『GRS Super Joystick Ikari Warriors edition』に、日本向けにも出荷可能な「International Ver」が追加されてプレオーダーの受付が始まっていました。

GRS Super Joystick | Ikari Warriors Limited Edition (International Ver)thunderstickstudio.com

Webサイトの記述によればSNKのオフィシャルライセンスを受けているそうで、またSteamでリリースされているWindows向けの「SNK 40 ANNIVERSARY COLLECTION」で使用できるとのこと。

This limited-edition GRS Super Joystick Ikari Warriors edition(サイト:https://thunderstickstudio.com/products/grs-super-joystick よりキャプチャ)

Webサイトの記述によれば製品は組み立てキットになっているようで簡単な組み立て作業が必要になるようです(ハンダ付け等は不要)。

サイトにある写真を見ての推測ではありますが、付属のボタン類はアメリカの標準仕様の28Φボタンでプッシュのストロークも深めものだと思われるので、日本の30Φのスイッチが好みの場合は改造が必要になると思います。とはいえキットの形状になっていることもありそのあたりをDIYでどうにかするのはむしろやりやすいのではないかと思います。

ループレバーは現代においては部品の入手が難しくオリジナルの挙動が再現しにくいデバイスであり、そのため怒シリーズやT・A・N・K などのアーケードオリジナルの操作性を自宅で再現するのは少なくともこの辺りの技術を持たない私にとっては非常にハードルが高い状態でした。

この製品もリリースのニュースを最初に聞いたタイミングでは日本向けの出荷を受け付けていませんでしたが、それでも(少し為替レートが落ち着いたら)転送業者さん経由で絶対買おう、と思ってました。

そして昨日。少し円高傾向になってきたので『しとりあえず転送業者さん経由で購入したらどれくらいになるんや?』と試算しようとサイトを開いたときに目に飛び込んできたのが以下の文言。

ということでプレオーダー完了です。

Windows版のSNK 40 ANNIVERSARY COLLECTIONのIKARやで往年のループレバーで怒やT・A・N・K、ゲバラをプレイしたい人はチェックされると良いのではないでしょうか!