Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

ポケステをハックするのがブームと聞いて感化されてしまった

ポケステ部なるものがあるらしい

追記2017/09/17:他のツールも動いたので最後に追記した。

最近自作キーボードをウォッチしている後輩が、色々と有益な情報(散財の元)をくれる。 キーボードのイベントでポケステをハックしてる人たちがいたらしく、わくわくする画像を見かけた。

何で今更ポケステなのか全くわからないけど、すごく楽しそうである。

ここで疑問。さてはて、ライターはどうやって準備してるんだろう???

ポケステ部のハッシュタグを追っていくとこのツールで書き込んでるようだった。

github.com

知らなかったけど、わざわざこんなツールを用意している人がいるとは頭が下がる。対応ハードウェアは3つあるみたいで

  • DexDrive
  • MemCARDuino
  • PS1CardLink

の3つ。arduinoベースのものがあるからこれを使うのが無難そう。とはいえ接続するアダプタとか準備を考えるとめんどくさそうである。

実はメモリカードアダプタを持ってる

PS3の初期?にメモリカードアダプタという商品が出ている。これはPS3にPS1のデータを持っていってPS1アーカイブスのゲームがプレイできるという優れものである。PS1のゲームはPS Vitaで遊べるのでPS1のメモカからデータを吸い出せればPS Vitaで昔のセーブデータが再生できる。懐かしい!!!

しばらく前に、モンスターファーム2がPS Plusで配布されていたときにすげーやりたくなったのでこの商品を探したところ、全く入手ができずプレミアがついてることがわかり愕然とした・・・。 しかし、何でも持ってる先輩に聞いたところ、やっぱり持っていて譲っていただいたのである。何でも持ってる人は何でも持ってるのである。

そんなこんなで1年以上前にもらったメモリカードアダプタのドライバがあれば、手元のポケステが動くのでは?と思ったわけである。

価格.com - 『メモリーカードアダァプゥタァァァァッ!!!が抜き差しできねぇ!!』 SONY プレイステーション3 HDD 60GB のクチコミ掲示板 純正メモカだったのに、この症状と同様に抜けなくなったのでSonyに送って抜いてもらったことがある。慎重に指すようにするか少し緩くなるように何か考えるかしないと危険な商品ですw

時代は64ビットOS・・・

遠い昔、みんながハックしてた頃は32ビットOSのため色々今だと動かないことがわかった。今回の環境はWindows10 64ビットだ。

64bit OSでMCRWwin.EXEを使いたい! - KAZZ underground

このページを参考に、各種ツールとドライバーを入れていく。注意事項としては、ツールは32ビットでも問題ないが、ドライバーが64ビットじゃないといけないこと。

手順としては、ざっと以下の通り。

  • MCRWwin.EXEから読み書きツールをダウンロードする
  • 汎用USBドライバの64ビット版 uusbd64.sys をダウンロードする
  • ドライバーの署名無効でWindowsを起動してドライバをインストールする。(署名無効はここを参照)

無事インストールした後に、MCRWwin.EXEと同じフォルダにuusbd.dllを配置する。これはオリジナルの配布元にあるDLLで動作する。

無事読み取りまで成功

アインハンダーのセーブデータも残ってるぜ!!!やったー

f:id:Nilfs:20170916020448j:plain

本日のビールはヤッホーブルーイングのゆずセッションエールあら塩仕立てでした

でもまだ何も書き込めていない。PocketStation Read-Writeを見るととりあえず今回の環境で書き込みはできそう。 ポケステのゲームのビルドの仕方とか調べていかないといけば、何かできそうだ。

続く・・・かも

その他試したこと

配布されている汎用USBドライバの64ビット化

配布されている汎用USBドライバは32ビット版しかない、とりあえずビルドが通れば使えるかなと思って確認してみた。VS2015でビルドしようとしたところVC6プロジェクトからの変換は半分成功したけど、そのままではビルドできなかった。32ビット前提のコードがないか?細かい定義の置き換えは問題ないか?慎重にやれば、できそうだけど元気が足りなかったのでやめてしまった。

UUSBD.DLLの概要

2017/09/17追記 PS1 Memory Card Readerも動いた

メモリカードアダプタを持っている幸せな人は他のツールでも動く。

Pocketstationにある。

以下の手順でツール起動まで確認ができた

  • PS1 Memory Card Readerのところにあるダウンロードリンクから本体をダウンロード
  • ドライバインストール時に\usb_driver\PS3_MemoryCard_Adaptor.infを選択してインストールする(ほかのものをインストールしている場合は先にアンインストールすること。Readme通りexeを叩いても動かなかった)

解凍したZipのルートフォルダに移動して、

ps3mca-ps1mc.exe  r backup.mc 0 1024

のようなコマンドを実行すると、何かデータが書き出されるのが確認できた。バックアップ完了!

こっちのツールだと64ビットも最初から対応していて安心。CUIなのでちょっと困るけども

Cloud Drive Syncを使い始めたらエラーが止まらないのが無事に解決した

調べたことの備忘録。

Cloud Drive Syncを使い始めた

あんまりDropboxを使わなくなったけど、アカウントを捨てるほどではないのでどっかに置いておきたいという動機から、QnapのCloud Drive SyncでNASに退避を行なった。

同期はとりあえず成功したので、いいかと思ったらエラーログが出続けて全然解決しなくて困ったことになってしまった。エラーログをスマホで受け取るようにしてあったので今日も順調にエラー出てるなという感情を抱くように・・・

別にCloud Drive Syncのエラーがわかりづらい

同期はできてるようにみるのだが、実行後に必ず

[CloudDriveSync] Sync job [XXXXXX同期してるパス] finished with errors. Please check your event log for more details.

と表示されるようになった。このログの詳細とやらが全くどこにあるのかわからなくて困った。

フォーラムで困っている人が他にもいて

Cloud Drive Sync log files? - QNAP NAS Community Forum

SSHでログインして、それっぽいログを探せという回答だった。ログの詳細はWebUI上からは 見れないのかもしれない。

1. cd /share/CACHEDEV1_DATA/.qpkg/CloudDriveSync/data/500

というパスは見つからなかったが、.qpkgというパスからどこかアプリケーションのインストールパスに置かれているログを見ればいいと判断。

cd share
find . -name "CloudDriveSync"

という形でそれっぽいフォルダを発見できた。

CloudDriveSyncフォルダに移動して、ちょうど

./data/500/sync/1/log/syncengine.log

のログファイルをtailコマンドで調べていくとエラーログを発見し、NotFoundErrorの文字が躍るのを確認した。 フォルダ名にCaseConflictとついてるフォルダが軒並み失敗していることがわかった。

リンクされている別のコンピュータで同期されないファイルがある場合 - Dropbox のヘルプ - Dropbox

Dropboxには大文字小文字で衝突しているフォルダがあった場合に自動で別名のフォルダを作成する仕様になっているようだ。これは怪しい・・・。 試しにCaseConflictとなっているフォルダを全て削除してみたところ。エラーメッセージは全部なくなった。

Barocco MD600はHHKBにはならなかった

みんな大好き分割キーボードの新作?Mistelのキーボードを買ってみました。 だいたい2週間ほど、使ってみた感想をまとめます。買ったのは赤軸です。

www.mistelkeyboard.com

動機

高まる分割キーボードブームの乗りたくて、Ergodox EZとかが欲しくなりこんなイベントに行ってみたりしていました。 Ergodoxの値段も去ることながら配列が普段使っているHHKBと異なっているのですぐに慣れるのか?モヤモヤしていて早数ヶ月すっかりキーボードを買えずにいました。 なかなか新しい分割キーボードが出ないこともありたまに調べてはモヤモヤする日々が続きました。

ググっていると知らないメーカーからHHKBのような形状でキーボードが出るじゃないですか!これなら俺でも使えそうだと思って、早速発売ちょっとしてからアキバへ行き買えず、ヨドバシオンラインで注文することに

使ってみた

開封の儀はあちこちで見かけたので特に触れず気になったところだけ。

キーを外す奴とキーキャップがおまけで付いてました。

f:id:Nilfs:20161119161607j:plain

このキーボードの特徴としてカスタマイズできるレイヤーが3つあり、それぞれで自由にマクロが組めるということになっています。 これを使えばHHKB風の配列に書き換えて、HHKBが割れただけにできるのでは?と考えていたわけです。

ところが様々な障害が待っていたわけで

Fnキーレイヤーにマクロが設定できない問題

HHKBであれば、Fn + ;←キーになります。一方、MD600では、Fn + J←キーになります。

MD600でFn + ;Insertキーに割り当てられています。これをマクロで置き換えようとするとできません。Fnキーで切り替わるキーにマクロを割り当てることが現在できないためです。 日本の代理店に聞いたところでは、ファームウェアで改善できるのか確認中とのこと。

Fnキーレイヤーの重要なキーはやっぱりマクロ登録できない

マクロ登録をハードウェア完結な形で実現しているので、買う前に想像しておけよという感じもありますが、説明書に出現するキーをマクロで置き換えることはできないようです。 HHKB風にするなら、Fn + ? ↓キーになって欲しいのですが、そこにはLayer3キーが配置されていて置き換えできないことがわかりました。

この時点でHHKB風にするのはできないことがわかりました。

できるだけは合わせたかったので、

  • 左Alt、Windowsキーを入れ替え
  • CapLockを消してCtrlに差し替え

だけ設定をして使っています。異なるキーがいくつかありますがだいたいこの設定だけで大きな支障なく仕事ができています。キーレイアウトは慣れの問題でしかないのかも。

Fnキーの入力順問題

問題はこれだけではなかったのです・・・。

MD600ではFn + L→キーなので、範囲選択をキーボードでしようとする場合は

Shift + Fn + L

と入力します。

ここで

Fn + Shift + L

と入力するとShiftキーが食われてしまい、→キーが入力されてしまいました。

MD600を使い始めるまで気づかなかったのですが、HHKBを使っているときは順番がどっちでも、範囲選択ができていて、たまに入力順が入れ替わる癖が自分にあるようでした。 そのため、MD600を使ってからめちゃくちゃ誤爆するようになりました。

この挙動は、Altキーでも発生するします。Fn + Escで`が入力されるので日本語切り替えをしようとする場合はAlt + Fn + ESCと入力する必要があります。 この時のAltキーも順番を間違えると意図した通りの結果になりません。

日本語切り替えについては、何か別のキーに割り当てるとして、カーソルキーについては努力するしかなさそうです。 コードを書いていてよく範囲選択してコピペとか削除とかをするので困ったものです。

(この件については問い合わせ中)

ハードウェア上でマクロ設定するのが難しい

やる前からこれもわかるけど、実際にやってみてやっぱり入力が難しい。 前述の設定不能な場所などの情報がなかったので入力ミスなのか仕様なのかわからなくてつらい。 プログラマーような特殊な人しか買わないだろうし、Yamlとかで設定を書くような仕様でもよかったのでは?と思ってしまう。

複雑な入力パターンも作れるのですが、入力が難しいことと使い道を考えつかなかったのでキーリマップの範囲を超えるような設定はしていません。 いい使い方があれば、教えて欲しい。 (キーボード側に設定を持つので環境に左右されずマクロが組める部分はいいのかも、仕事であっちこっちのPCに移動して作業しないから普段使っているエディタの機能で十分だと思う)

日本語サポートがよかった

そろそろよかったことも書いていこうかと思います。 Mistelのページ上にファームウェアで何が変わったかとか、マクロできないキーがあるとかの細かい使用についてなど全然情報が見つけられなくて困っていた。 日本の代理店にメールを投げたら丁寧に対応してもらえたので、不満があれば色々伝えると改善してもらえる可能性がありそう。

まとめ

分割キーボード自体の可能性を感じる。赤軸は今までのより軽くて気持ちいいな。などあれこれ思うこともあり、トータルではそこそこ満足しています。 あまり売れなくて次が出なかったり、ファームウェアが更新されないんじゃ・・・という心配ぐらいです。 最後プロダクトが終わってしまう前にファームウェアが公開されたら自分で書き換えて改造したいなぁと思うところ。

あとはキーボードの間に入れるものを考えないと

  • タッチディスプレイを置いてTouch Bar風のショートカット集を作る
  • トラックボールを置いてみる
  • 飲み物を置く

などいくつかアイディアをもらっているのですが、どうしたものか・・・

皆さんBarocco MD600を買って分割キーボードへの投資をしましょう!w

C++で型情報を持ったままにしておく

やりたいこと

型情報なしに管理したいがないと削除時に困る。削除時だけは型情報が欲しい。

コード

#include <iostream>

using namespace std;

class Foo
{
public:
    Foo()
    {
        cout << "Foo" << endl;
    }

    virtual ~Foo()
    {
        cout << "~Foo" << endl;
    }

protected:
    void *m_data;
};

template<typename T>
class Bar : public Foo
{
public:
    Bar()
    {
        cout << "Bar" << endl;
           m_data= new T;
    }

    virtual ~Bar()
    {
        delete reinterpret_cast<T*>(m_data);
        m_data = nullptr;

        cout << "~Bar" << endl;
    }
};


class Member
{
public:
    Member()
    {
        cout << "Member" << endl;
    }

    ~Member()
    {
        cout << "~Member" << endl;
    }   
};

int main()
{
    Bar<Member> bar;
}

出力結果

Foo
Member
Bar
~Member
~Bar
~Foo

呼び出し順も想定通りなのでこれでいいはず。

日本酒会201606その1

最近サボっていた定例会日本酒会を久々に開催。過去の会もそのうちまとめたいところ。

江戸川橋!初めて来た。よく探すなぁと予約してくれた人には感謝。 f:id:Nilfs:20160612220050j:plain

見たことある寿司が一つも出てこなかったぞ。酢飯

本日のメイン、予約してもらったお店は酢飯屋です。超美味しかった。

www.sumeshiya.com

酢飯屋ではこんなお酒をいただきました

飲んだことがないお酒ばかりですごく楽しかったです。3人で1合ずつもらったので結構種類も飲め満足です。振り返ると九州のお酒が多く、そもそも都内で見かけないものばかりのような気がします(観測範囲)。九州だと、天吹ぐらいしかすぐに出てこないです。

1つ目はたまゆら。長野県、橘倉(きつくら)という酒蔵のお酒です。スパークリング日本酒で日本酒苦手な人でも飲めそうなお酒です。 f:id:Nilfs:20160612182646j:plain f:id:Nilfs:20160612182826j:plain

www.kitsukura.co.jp

福岡、山口酒造。庭のうぐいす。 f:id:Nilfs:20160612204755j:plain

niwanouguisu.com

神奈川、泉橋酒造。黒蜻蛉。トンボのマークがかわいい。 f:id:Nilfs:20160612204836j:plain

izumibashi.com

夏やごっていうまた虫のラベルのお酒もあって虫が好きなのでしょうか・・・。 夏ヤゴ13 発売 | 泉橋酒造株式会社 Izumibashi SAKE Brewery.

熊本、花の香酒造。 f:id:Nilfs:20160612205024j:plain

www.hananoka.co.jp

熊本、墨守。瑞鷹という酒蔵。

f:id:Nilfs:20160612183101j:plain

www.zuiyo.co.jp

知らなかったですが造語ではなく存在する言葉のようで

自己の習慣や主張などを、かたく守って変えないこと。 だそうです。 墨守(ボクシュ)とは - コトバンク

料理はどれも見かけないものばかりでした

どれも美味しいし、話も面白いしいい体験だった。

最初はめかぶ。料理はそれぞれ解説があったのですがすぐにメモしてなかったのでところどころわからないものがあって残念です。

f:id:Nilfs:20160612182617j:plain

載っていたのは、からし菜の種の酢漬けだったはず。硬いので少しつけておいて柔らかくしているのとのこと。魚は石鯛

f:id:Nilfs:20160612182703j:plain f:id:Nilfs:20160612182717j:plain

魚の名前が思い出せなかったですが、2文字ぐらいだったような f:id:Nilfs:20160612182731j:plain

タカエビ。甘エビみたいにすごく甘かった記憶が。 f:id:Nilfs:20160612182744j:plain

名前が思い出せない貝の貝柱。すごいでかいですね。白たまりのみりん漬け。もともと真珠を取る貝で、地元でしか食べられていないものという説明でした。 f:id:Nilfs:20160612182755j:plain f:id:Nilfs:20160612182808j:plain

白たまりは、昔白醤油と呼ばれてたものらしく大豆ではなく小麦粉が多く入っているものだそうです。 使ったことがないので単体でどういう味だか、今度試してみたい。 日東醸造(愛知県碧南市) - 職人醤油

トビウオだったか、キビナゴだったかちょっと記憶が怪しいです。おからを巻いてあるものと外に置かれているのは別の魚と記憶しています。寿司の成り立ちとこの寿司について説明をしてくれて非常に勉強になります。 f:id:Nilfs:20160612182842j:plain

酢飯屋のページに詳しい事書いてありましたね。 キビナゴのおから寿司 / 郷土寿司プロジェクト / 酢飯屋 - 文京区水道、江戸川橋にある寿司、カフェ、ギャラリーの複合店

古代米と金目鯛。銚子で一本釣りをしたもので傷のない綺麗なものだそうです。傷の有無が魚の値段に大きく影響するらしくなかなかの高級魚だとか。30秒ぐらい噛むようにとの指示。噛めば噛むほど味が出る。 f:id:Nilfs:20160612213335j:plain

うー、マンボウマンボウのホルモンとサワラ。魚じゃなくて肉、ってかなんだこれは!と衝撃を受けた。比較的、ホルモンは日持ちするらしくどうにか食べれるそうです。 f:id:Nilfs:20160612213648j:plain

もずく寿司。すごいつるつるで麺のよう。 f:id:Nilfs:20160612213919j:plain

千歳ちゃん。一頭一頭名前をつけて出荷しているこだわりの強い牧場の牛を一頭買いして寿司にしているらしい。 f:id:Nilfs:20160612214107j:plain

かんぴょう巻きと、納豆巻き。すごいスペックの海苔で巻かれた寿司。海苔の世界でトップクラスとのこと。 f:id:Nilfs:20160612214555j:plain

穴子が2巻出ました。塩ゆず、山椒の葉。どちらも美味でした。今日一の予感! f:id:Nilfs:20160612215100j:plain

デザートにどら焼きと、羊羹をいただきました。(どこのやつだったか説明してもらったけど覚えてない・・・) f:id:Nilfs:20160612183136j:plain

f:id:Nilfs:20160612183128j:plain

料理もお皿も、かかっている絵も何でも知ってるすごい店員さんだったな。

飯田橋を散歩しながら二軒目を見つけたけど、また今度まとめよう。

CollectionViewを使おうと思ってSwiftでCocoaBindingを使ってみた

XCode Version 7.1.1 (7B1005) Swift2.1で試しました。

iOSのアプリは書いたことがあったけど、OSXのアプリは書いたことがなくて色々ハマっている。 iOSだったらUIXXってクラスを使ってGUIを構築してたけど、OSXだとNSXXってクラスを使っていくようだ。

iOSにはなかった気がするけど、CocoaBindingという機能があるらしい。かなり前からあるみたいだけど、普段はWPFでMVVMなコードを書いているのでVM的なものが簡単に実装できるのですごく便利そうだ。

Cocoa Binding : バインディングって何なのさ

ちなみにAppleのドキュメントはこちら developer.apple.com

下のリンクを参考にしながら、コピペでコードを書いてたところ少しハマったのでまとめておく qiita.com

ビルドが通らなくなる

Storyboard上でCollectionViewを追加したところ

Unknown segue relationship : Prototype

というようなエラーが出てビルドが通らなくなってしまった。

答えはこちら。 stackoverflow.com

追加したタイミングで、CollectionViewからCollectionViewItemへのsegueが登録されていた。これが犯人らしく、一度CollectionViewItemを削除して、CollectionViewItemを追加したらビルドが通った。 stackoverflowの通り手動でItemViewの関連づけをしてやる必要がある

実行時にエラーが出た

[73280:1183774] *** NSForwarding: warning: object 0x6080000454f0 of class 'Foo.Bar' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[Foo.Bar addObserver:forKeyPath:options:context:]

のようなエラーが出た。バインド元になっている自分で定義したクラスにインターフェイスがないとのこと。NSObjectを継承させることでうまくいった。

iOSと同じつもりでコードを書いてるとちょこちょこハマってしまうのが辛い・・・

AppDelegateでStoryboardからNSWindowControllerを取得してウィンドウを表示するだけでハマった

XCode Version 7.1.1 (7B1005) Swift2.1で試しました。

かなりはまってしまったが、答えはここにあった。表示したいウィンドウのNSWindowControllerをメンバ変数等で拘束しておかないと正しく動作しなかった。 stackoverflow.com

最小コードにすると以下のようにshowWindowするときにインスタンス化されたコントローラーを束縛しておかないといけない。myControllerへの代入コードを除去すると表示されなくなってしまう。

var myController:NSWindowController? = nil

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let controller = mainStoryboard.instantiateInitialController() as? NSWindowController
    myController = controller
    myController?.showWindow(nil)
}