TypeScript+Electronでビルドかけると大量のエラーが出るやつ

ERROR in C:/PATH/TO/YOUR/PROJECT/node_modules/electron/electron.d.ts(****,**):
****:** Cannot extend an interface 'NodeJS.EventEmitter'. Did you mean 'implements'?

こんなのがぶぁーっと出てくる奴。
最初なーんでnode_modules以下は自動でLintかからないはずなのに?って思ったんだけど、
エラー吐いてるのはアンビエント宣言の部分であって実際にエラーが起きてるのは実装部分(Lint対象のコード)って事っぽいね。

解決策は@Typesのバージョンを変える事。
Electronが9.0なのに対し、@Typesが12じゃないといかんところを14とか入ってるのが原因やった。
コマンドで下記をぼーん。

npm i @types/node@12

以上

参考
https://github.com/electron/electron/issues/21612

カテゴリー: IT, 雑記 | コメントする

ゲーム(Undertale)のメモリを覗いてHP値を監視する

【追記】この記事はクソだ

http://cheatwhatever.com/blog-entry-20.html
Cheat Engineには、下記手順を自動でやってくれるポインタスキャン機能がある。
あくまで以下の内容は「こういう事をやってるんだ、へー」程度にとどめてほしい。

がいよう

エミュレータで動作するゲームと違い、PCゲームのチートは読み出したいメモリアドレスが一意である保証は無い。
これはただ一度だけ数値を書き換えたい場合と違い、「常にHPの値を監視して変動があったか判定する」ようなケースで問題になる。

今回はPCゲーム「Undertale」を例に、この問題を解決する。
具体的には、

  1. HPを指す動的なメモリを指す、静的なメモリを見つける
  2. 別Processのメモリを読み出すようなプログラムをC++で書く

の2ステップだ。

続きを読む

カテゴリー: IT | 2件のコメント

youtube-dlでYoutubeチャンネルの動画を一括DLする

がいよう

Youtubeとかいうクソはいつわけわからん理由で動画やらチャンネルやらが消されるか分かったもんじゃないので、
自分のチャンネル含め公開されている動画を一括で保存する方法を書く。

内容としてはyoutube-dlのちょっと突っ込んだ使い方なんだけど、英語読めるんなら大本のDOC読んだほうが良い。
https://github.com/ytdl-org/youtube-dl

続きを読む

カテゴリー: 雑記 | 2件のコメント

WROOM 02にArduinoで書き込む(CP2102使用)

何か知らんけど絶対お前それ試してないだろみたいな記事が散見したので備忘録として記事にする。
ベースはここが比較的わかりやすいが、何故か配線図が乗ってない。

使ったもの↓
CP2102モジュール
WROOM02

CP2102モジュールのブレークアウト基盤には(出来損ないのパチもんでなければ)既に3.3Vのレギュレータが乗ってるのでそれを使う。

抵抗は全部10k。あとはArduino側の書き込み方式を選ぶところでReset Method:dtr(aka nodemcu)を選べば良い。

カテゴリー: 電子工作 | コメントする

Electronで意地でもCross Origin Resource Sharingを突破しiFrameを触る

英語読めるならここ読んで終わり。
https://stackoverflow.com/questions/55898000/blocked-a-frame-with-origin-file-from-accessing-a-cross-origin-frame

Chromium 67以降はWebSecrityをFalseにしてもCORS制約を突破できない。
appのreadyイベント発生前にChromiumへコマンドを送る下記の一行を追加すれば良い。
app.commandLine.appendSwitch('disable-site-isolation-trials');

もっともこんな手段を使わずになんとか出来るならそれに越したことはない。postMessageとか手段はあるんだから。
今回これが必要になったのはyoutube iFrame APIを弄るためだが、こいつの出来が悪いんだ全く。

カテゴリー: IT | コメントする

webpack環境下でnode-fetchがうまく動かない問題(solved)

環境:vue-cli-plugin-electron-builderでボイラープレート生成→background.jsで下記のようなコードを書く

const fetch = require("node-fetch");

//中略

fetch("https://drroot.page/wp").promise((d)=>{
    //中略
});

ここで下記例外が発生。
UnhandledPromiseRejectionWarning: TypeError: fetch is not a function

解決策は、requireの書き方を変える。

const fetch = require("node-fetch").default;

参考
https://github.com/node-fetch/node-fetch/issues/450

理由はWebpackの処理が怪しい事らしい。
javascriptのimport/require周りはイマイチ挙動が怪しくて気に食わん。

カテゴリー: IT | コメントする

WROOM 02(ESP8266)でソケットサーバを建てる

がいよう

WROOM02は650円で買える結構ハイスペなWiFi内蔵マイコンモジュール。
http://akizukidenshi.com/catalog/g/gK-09758/
こいつで宅内のWiFiに接続し、ローカルネットワーク内に固定IPのサーバーを建てる話。
オリジナルのソースを読めば一発で分かる話だが、備忘録として残す。
やってる事は「TCPソケットでメッセージを受ける」だけで、想定としてはネットワークにぶら下がったPC等から自作デバイス(WROOM02)を操作するみたいな感じだ。

ぜんぶん

#include <ESP8266WiFi.h>

/**************************/
/*wifi static configration*/
/**************************/
char ssid[] = "WiFiのSSID";
char pass[] = "WiFiのパスワード";
IPAddress ip(192, 168, 1, 111);
IPAddress gateway(192,168,1,255);
IPAddress subnet(255,255,255,0);
WiFiServer server(11111); //port

/////////////////
const int led = 2; //status led pin

void beginConnect() {
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
  }
  server.begin();
  digitalWrite(led, HIGH);
}

/************************/
/***  main functions  ***/
/************************/
void setup() {
  pinMode(led, OUTPUT);
  WiFi.config(ip,gateway,subnet);

  //use for debug
  Serial.begin(115200);
  Serial.println("\nbegin");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    WiFiClient c = server.available();
    if (c) {
      while(c.connected()){
        if(c.available()){
          char str[64]={0};
          c.read((uint8_t*)str,63);
          Serial.println(str);
        }
      }
    }
  }
  else {
    beginConnect();
  }
}

かいせつ

Wroom02のWiFiライブラリは、ArduinoオリジナルのWiFiクラスに概ね準拠している。
そのためArduino公式のリファレンスを見ればサンプルとしては十分機能する。
https://www.arduino.cc/en/Reference/WiFi

躓きポイントとして、WiFi.config(ip,gateway,subnet);がある。
オリジナルではWiFi.config(ip);のみで動作するが、WROOM02ではgatewayとsubnetを省略出来ない仕様である。
それさえ指定してやれば固定IPでネットワークにぶら下げられる。

またこれは本家ライブラリの躓きポイントなんだが、loop()内でネットワークのリクエストを捌く仕様上、while(c.connected())で処理を固める必要がある。
whileを活用しないとブロックを抜けてしまい、コネクションが即座に断たれてしまう。
…loop関数の存在が前提のArduinoと、割り込み的に発生するリクエストの処理は本質的に相性が悪い気がする…。

カテゴリー: IT, 電子工作 | コメントする

GBA用ROM吸い出し機を使ってBIOSも吸い出す

gaiyou

https://drroot.page/wp/?p=158
ハードウェア的には前回のこれと同一。
ようはBIOS欲しいけどネットから落とすと微妙にグレー度が上がるし自前で吸いたいなーみたいな時に使える(?)。

続きを読む

カテゴリー: 電子工作 | コメントする

GBA用ROM吸い出し機を大体2000円弱くらいで自作する

# がいよう 例のスタンガン配信は思いっきりエミュでのプレイなので、ROMの引っこ抜きどうやってんのって話をする。 その際LPC1768用のROMダンパをもっと安いLPC11u35に移植出来たので折角だから記事にした。 割と雑に移植したら動いたみたいな感じなので全権利は元のファーム製作者にある事だけ注意。 # 用意するもの ・LPC11u35 マイコンボードキット http://akizukidenshi.com/catalog/g/gK-12144/ 秋月で850円也。 ・SDカードスロット 何でも良い。MicroSDでも普通のSDでも何でも。 Amazonだとこのへん→https://www.amazon.co.jp/dp/B010PZZXNI/ref=cm_sw_r_tw_dp_U_x_pca2DbEJWNEP5 秋月で11u35と一緒に買うならMicroSDのスロットがこれ→http://akizukidenshi.com/catalog/g/gK-05488/ 何かしらんけど最近MicroSDが高いから普通のSDがお勧めかも。 ・ブレッドボードもしくはユニバーサル基板等 ちゃんと基板にはんだ付けしても良いけど持ってないならブレボ買うのがお勧め http://akizukidenshi.com/catalog/g/gP-02314/ ↑配線材とブレボ一緒になって650円。一個は持っとけ ・SDカード これも何でも良い。適当に。上記スロットに刺さるやつな。 ・GBA本体 SPでも多分行ける。試してないけど。持ってるならそれを使えばいいし、ジャンク屋を適当に漁ってきても良い。 なまじ古いものなので、吸い出しは上手くいくのにROMが壊れてるみたいな事が起こる。ガッツリ端子をふーふーしとけ。 ・GBA用通信ケーブル これもジャンク屋で拾ってくる。どうせぶった切って使うので正規品である必要はまったくない。 # てじゅん ## 通信ケーブルを捌く 通信ケーブルをぶった切って中の線6本を引き出す。 テスタか何かで配線を確かめて、線にマークか何かを付けておくと良い。 お好みで引き出した線の先にピンヘッダかなんか付けると取り回しが向上する。 ## 配線する ざっくりこんな感じで配線する。より厳密に言うと、 [SD] [LPC11u35] 1 DAT2 NoUse 2 CD/DAT3 P0_2 (DigitalOut cs) 3 CMD P0_9 (SPI mosi) 4 VDD 3.3V 5 CLK P0_10 (SPI sclk) 6 VSS GND 7 DAT0 P0_8 (SPI miso) 8 DAT1 NoUse 9 NoUse 10 NoUse [LPC11u35] [GBA] GND 6-GND P0_21 3-SI P0_22 2-SO P1_15 5-SC こう。ざっくり、というのはSDスロットによって微妙に名前の表記が違うので、 そこらへん各自で翻訳してほしい。 ## ソフト編 http://akkera102.sakura.ne.jp/gbadev/index.php?NO.110%20dump https://akkera102.sakura.ne.jp/gbadev_old2/110_dump.zip 移植元のこちら↑のページにある「110_dump.zip」を落として、中に入ってる「test.gba」を予めSDカードのルートディレクトリに置いておく。 Windows8以前のPCなら、MbedのSerialポートドライバも入れておく(そうでないなら、挿した瞬間認識する)。 下記URLの「Arm Mbed Windows serial port driver」から。 https://os.mbed.com/docs/mbed-os/v5.13/tutorials/windows-serial-driver.html 持ってないならTeraTermあたりのターミナルソフトも入れておく。シリアルポートでMbed Virtual Portみたいな名前のポートが見えりゃおk。 LPC11u35には以下のファームを書き込む。 https://drroot.page/wp/wp-content/uploads/2019/11/firm.bin 11u35を初USB接続、または右のボタン押しっぱなしで接続すると「CRP DISABLED」というストレージデバイスが認識されるので、そこに置いてあるfirmware.binを削除した後上記ファイルをD&Dすればいい。 ## 実践編 1.GBAに吸い出したいゲームのROMを挿入し、一旦普通に起動して接触不良なんかが起きない事を確かめる 2.GBAの電源を切っておく 3.PCにLPC11u35を接続する 4.TeraTermを開き、LPC11u35とシリアル接続する 5.GBAのスタートボタンとセレクトボタンを押しながら電源を入れる 6.ひたすら待つ 多分この段階でTeratermにずらーっと文字列が出てくるはず 7.結構時間かかるのでとにかく待つ 8.↓こうなりゃ吸い出し完了 SDカードにdata.binという名前でROMが吸い出されてる

カテゴリー: 電子工作 | 3件のコメント

AOM-5024L-HD-Rを使って高音質なバイノーラルマイクを作る

がいよう

前回中々使える奴と判明した5024くんを使って、SN比重視のバイノーラルマイクを作った。
本当はメイキングを動画で挙げたかったのだが、編集が一向に終わらんので先にこっちを投稿だ。

結論から言うとやっぱ音質にクセがある。またソースフォロアをそのまま出力しているので、どっかでゲインを稼ぐ必要がある。
ファンタムを吐けるレコーダー、編集時のEQなんかは必須だと思う。
また、今回は動作させられる最低限の状態、いわゆる「バニラ」なので、使い勝手を求める場合は更に工夫の余地がある。

その代わり5000円でお釣りがくるくらい安い。購入品と購入先のリストは末尾に記載する。

続きを読む

カテゴリー: 電子工作, 音響関係 | 4件のコメント