takashiskiのブログ

覚書の殴り書き

MFT2018で展示します

H/14-03 Self Made Keyboard in Japanに混ぜてもらって展示します。

makezine.jp

私の展示物は、最近作ってるキーキャップです。XD75に乗せて展示します。

提案としては2点です。

  1. 意外と移行コストがでかいオーソリニアな自作キーボードへの導入・学習コストを減らしたJP配列の提案
  2. ダサいダサい言われてるけどComic Sans可愛いじゃん!!!

XD75は名前のごとく75キーの格子配列キーボードです。

最近のキーキャップ活動は以下のモーメントにまとめたので気になる人は見てみてください。

twitter.com

概ねモーメントのままだけど、C94でちょっとだけ売り出す予定なので興味があったら見に来てね!

個人事業主になるときに確定申告のために準備しておきたいこと

とりあえず4点。覚書としてかく。

記帳サービスと契約する

私はMFクラウド

freeeとかそれ以外でもいいと思うけど以下の2点は満たすサービスにしたい。

  1. WEBでできる(オフライン保存でない)
  2. 金融機関と連携できる

書き方がよくわからなくても、とりあえずなんとなく自分で考えて記帳すると商工会や税務署の記帳相談をしにいくとすごい勢いで解決する。

自分で考えずに適当に書いてると、わからないがわからなくて質問もできない、目の前に大量に記帳しなきゃいけないことがあることだけわかる、という状況になる。

税金とか会計?の本を一冊読む

金を出さない限り基本的にだれも守ってくれない。自衛のために読む必要がある。

口座・クレジットカードなど金の移動する経路を分ける

事業で使う口座の中の金の出し入れは全て記帳する必要がある。

まめにやっていれば問題ないが、まとめてやる場合は生活で細かい出し入れが多いと非常に面倒になる。

事業用口座で分けてしまえば、「全て事業に関するやり取り」とわかるのでわかりやすくなる。

領収書の管理方法を決める

紙ですべて保管しなければならないことになっている。 糞めんどくさいけど節税のために必要なのでやるしかない。

とりあえず以下のものは必ず買うことをお勧めしたい。

  • A4コピー用紙
  • テープのり
  • クリアファイル
  • 書類入れ
  • 印刷機

クリアファイルは100枚単位で買ってしまうのが良いだろう。月別・記帳/未記帳で分けて管理するのがよい。

領収書の管理フロー

領収書はすべてA4サイズで管理する。 A4のものはそのまま、A4に満たないサイズのものはA4コピー用紙に貼り付ける。 大小さまざまな領収書のサイズをそろえることで、扱いやすさと見落としを減らすことが目的である。 見通しがよくなるので、レシートの束よりは怖くない。

記帳済みかそうでないかが判断つく状態にしておくのも重要。

店頭購入の場合

作業場に帰ったときか、一日の最後にA4コピー用紙にレシートを貼り付ける。余白はレシートと同じ大きさ程度とることが望ましい。また、管理の簡便化のために、日付別で用意するとよいだろう。

余白には何を買ったのかメモする。特に品名が詳細に書かれていないレシートは必ずやること。 これをやらないと後で思い出せなくて非常にめんどくさいことになる。絶対思い出せない。なんだよ部門01って。

A4コピー用紙に貼り付けたら、元気がないときは未記帳クリアファイルに入れる。元気があったら記帳して記帳済みクリアファイルに入れる。

ネット注文の場合

糞面倒なことに、紙保管をしないといけないので印刷しておくしかない。ネットの海から領収書を探すのは非常に面倒である。

注文を受け取り次第、領収書が発行できるようになるはずなので領収書のPDFをダウンロード、印刷する。

クレカ払いであればクレカ連携で読み込めるので、品名のメモだけ書いて記帳する。

最後に、記帳済みクリアファイルに入れる。

引っ越し手続きのときのあれこれ

引っ越ししないといけなくなりそうなので必要そうな手続きを書き出す。他に何かあったら教えて。

[toc]

役所系

大体平日しか受け付けていないので休みとっていかないといけない。クソ。

転出/転入(マイナンバー)

運転免許証住所変更

所得税の納税地変更届

  • 現在の納税先税務署に提出する
  • 新しい納税先では手続き不要
  • 写しをもらうために2部用意することを忘れずに

[手続名]所得税・消費税の納税地の変更に関する届出手続|国税庁

自立支援

  • 新しい受給先自治体の保健所等でやり取りを実施
  • 仕事が変わる場合は新しい保険証が必要

持ち物

  • 保険証
  • 最新の課税証明書
  • 受給証
  • 印鑑
  • マイナンバー
  • (診断書写し)

インフラ系

立ち合いが必要なのは退去時立ち合いくらいだと思う。

退去立ち合い

水道

ガス

電気

インターネット

  • 大体期間縛りがあるので違約金がいる...
  • 回線が引き込み済みであっても、大手プロバイダはアカウント発行まで2週間程度時間かかるので引っ越し一月くらい前から新しい契約考えないと入居後にしばらくネットがつかえない。クソ。
  • 繋ぎのプロバイダに、アカウント即発行してくれる府中インターネットがある。基本的にはクソ遅いのでひと月くらいのつなぎにのみ有効。

クレジットカード

  • 住所変更してないと転送不可でどっかとんでいったりする

郵便物

たいていの郵便物は郵便局への転居届で転送される。ただし、転送不可の郵便物が届きそうなクレカなどはきっちり住所変更すること。

ヤマトの荷物はヤマトのメンバーズに加入しておくと転送してくれることがある。佐川はだめっぽい。

楽天はクソ。明示的に会員情報を変更しないと旧住所に荷物送ってしまう。

amazonは注文したときで変更受けられる。

郵便局

e転居

ヤマト

amazon

楽天

ヤフーショッピング

モノタロウ

aliexpress

その他会員登録したもの

  • 大体はDMだとか会員証だとか送ってこないし、送ってきても転居届出してれば届くし、発送時に住所聞かれるので思い出したときに変えればよい

ロータリーエンコーダーを使う

ロータリーエンコーダーを使うことになった。ライブラリを使うほどではないだろうということで自分で書いたけどなかなかめんどくさかった。

ロータリーエンコーダー

くるくる回すとカチカチ言いながら無限に回るやつ。

www.marutsu.co.jp

接点が二つずれておいてあるらしい(AとB)。 ずれていることにより正転・逆転でハイローの立ち上がりタイミングがずれるので、それを監視して、正転もしくは逆転に1段階分動いたと判断する。

一段階回すと以下の図のように立ち上がるらしい。1がハイ、0がローとする。

f:id:takashiski:20180630212700j:plain

考え方

AかBに変化が生じたときに、前の状態に対して今の状態がなんであるか、を読むことで状態が判断できる。 例えば、平常時は A : 0, B : 0だが、正転するとA : 1, B : 0になる。これらをそれぞれ組であらわすと、それぞれ2ビットで表現できる([0,0]->[1,0])。上位2ビットを前の状態、下位2ビットを現在の状態にすることで4ビットで表現できる([0,0,1,0])。

上の図を使って状態を確認すると、正転逆転それぞれ4状態ある。

状態を常に監視してもよいが、マイコンには割り込みという便利な機能があるのでせっかくだから使ってみる(使ったことなかった)。

割り込み

特定のピンの状態を監視して、指定した変化が起きたときにだけ特定の処理を呼ぶ方法。Arduinoだと、setup内でattachInterrupt(digitalPinToInterrupt(pin),ISR,mode)を呼ぶことで設定できる。

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

注意点としては2点、使用できるピンとISRだ。

ISRは制限がいくらかある。例えば引数と戻り値が設定できない、delayやmillisが動かない(らしい)などである。

使用できるピンは非常に大事である。上記URLから確認してほしい。

UNOは2,3のみ、MEGAでも2,3と4ピンしかない。これ以外のピンを指定するとどれだけ待っても永遠に動いてくれないので辛い。

また、pinは数値で指定してもよいが、割り込みで使う番号とピン番号が異なるのでdigitalPinToInterrupt(pin)で変換して突っ込むことが推奨されている。対応表は上記URLの最後に書いてある。2,3ピンに関してUNOとMEGAは一緒の割り込み番号だが、Leonardoは逆である。歴史的理由らしい(For historical reasons)。

コード

ざーっと書いてたぶん動いた。A,Bどちらかの状態が変化するごとに正転/逆転の判定をして、カウンターを加算/減算している。

単純に、割り込み受けて条件判定だけをするとAとBで同じ状態を見てしまうどころか同じピンに対する割り込みで同じ状態なのに割り込まれてる。

対策として、割り込み検出しても、前の状態と現在の状態が同一だったらreturnするようにした。

for using rotary encoder on Arduino without librar ...

反省・課題

常に4ずつ加算/減算されるはずなのだが、たまに2ずれる。早く回すと取りこぼしがあるっぽい?

もうちょっとうまい状態判定の方法がありそうだけどよくわからなかったので愚直に書いた。最低でもifかswitchで書くべきだった気がする。

初期化関数と割り込み関数用意してライブラリ化すべきなきがする。

チャタリング対策はコードでは最小限にして、回路で工夫したほうがいい気がする。コンデンサ突っ込むとか。

8ビットのうち上位4ビットがどうせ余っているので、prevは<<2した上で+=currentしてもよかったかもしれない。そうすれば過去3状態も監視できる。

どうやら4単位で動くのはクリックタイプで、ノンクリックタイプもあるらしい。

最初、「ロータリーエンコーダーってなんだ...なにもわからない...」というときに色々な実装例をみたけれども、割り込みで片側のピンしかみてない、そもそも割り込み使ってない、一部状態しか監視していないなど色々なバリエーションがあった。流石にごっそり間引くのはよくないと思う...

参考文献

Arduino Unoでロータリーエンコーダを使う – 桜のはなびらどっとねっと

kokensha.xyz

ロータリーエンコーダーを使ってみる - 忘れないページ

www.arduino.cc

イベントでハッシュタグツイートを促す方法を考える

イベントで毎度思うのだけど、まだ誰もやってるのを見たことがないので書く。

背景

SNSでイベントの感想を探すのは難しい。イベント名はユニークでないと検索がしづらいが、ユニークでも誤字により引っかからなくなってしまう。

twitterでの解決策としてイベントの専用ハッシュタグを設定するということがある。イベントが設定していなくても、一部のユーザーが独自に設定して呟いてくれることもある。

現在までに見たことがある告知方法を列挙する。

  • 募集ページ(atnd、compassなど)に記載する
  • 開会や発表の頭に告知する
  • 入口や会場内に掲示する

これはどれも「投稿者がハッシュタグを入力しなければならない」という問題がある。

イベントのたびに毎回なんでやらないんだろう、と思っていた解決案を手元で試してみたので書く。

提案法

web intentsを呼び出すQRコードを作成・掲示/配布する、というものである。

web intents

web intentsとは、ダイレクトリンクからツイートなどの動作を行える仕組みである。例えば https://twitter.com/intent/tweet?text=これをツイートします というリンクを呼び出すと、「これをツイートします」という文字列がすでに入力された投稿準備画面が開かれる。ユーザーは投稿ボタンを押すだけでツイートができるのだ。以下のリンクを踏むことで確認ができる。

Post a Tweet on Twitter

ハッシュタグhashtags で設定できる。カンマ区切りで複数設定することが可能である。

QRコードの作成

今回は以下のURLを利用する

https://twitter.com/intent/tweet?text=〇〇さんのブース最高だったのでみんな言ったほうがいいよ。%0aスペースは東あ01aね。&hashtags=ステマ用ツイート&url=https://google.co.jp

今回は以下のサービスでQRコードを作成した。

QR Code Generator - Erstellen Sie hier kostenlos QR Codes

作成したQRコードは以下である。 これをQRコードリーダーアプリか、twitterのフォロー用QRコードリーダーを利用して読み込むことで、概ね想像した通りのツイートができる状態にできる。

f:id:takashiski:20180630182246j:plain

twitterアプリからの利用は以下。

help.twitter.com

狙い

ハッシュタグはある程度投稿があると、ツイート投稿時に#を打ち込むだけでサジェストされるようになる。 すぐにハッシュタグを付けてツイートできる方法を用意することで利用をしやすくするということが狙いである。

また、ハッシュタグだけ乗せたweb intentsだけでは、序盤のツイート数が増えないことが予想される。 解決方法として、例えばネタ感が強いステマ的定型web intentsのQRコードと「写真とって一緒にツイートしよう!」という文面を併記するというものを提案する。 実質定型文をそのままツイートするだけにも拘わらずイベントに参加しているという印象を強く得ることができるのではないだろうか。

運用案

A4用紙にステマ用とハッシュタグ用のQRコードと説明を併記し、クリアファイルに挟んで吊るす、という運用はどうだろうか。

クリアファイルだと反射して認識しづらい可能性があるので、平置きも用意しておくのがよいのかもしれない。

また、A-oneの名刺用紙などに印刷し、配布するということも考えられる。

課題

QRコードリーダーにもよるが、twitterアプリでなくブラウザで開かれてしまうことがある。モバイルでログインしていないユーザーの場合はログインというステップが必要になってしまうため煩雑である。

twitterのフォロー用QRコードリーダーを使えば上記は回避できることが分かっているが、知名度が低く、すぐに選択できるユーザーは少ない。

help.twitter.com

参考文献

qiita.com

blog.yuhiisk.com

Overview — Twitter Developers

blog.twitter.com

誘導ミサイル完全マスターを見ている

メモを見ながら適当にしている。まだ33分/50分くらいまでしか見てない。

www.youtube.com

ホーミングレーザー

運動方程式から「ある時刻にある地点に到達するための加速度」を求める 加速度を運動方程式に適用する 時間を勧める を繰り返すと絶対に着弾するミサイルができあがる 加速度に上限を設けると、ぎりぎりまで引き付けることで避けることができるようになる

線形補完でも実現できるが、着弾時間と運動方程式を使うほうが応用が利くので良い ex1. 飛び初めに別方向への速度を持たせる ex2. 最初に遊びをもたせる ex3. 着弾後にスクロールさせる

PvEでは自分の弾は必中であるべき。ロックオンして発射したにもかかわらず避けられると理不尽

誘導ミサイル

等速で角度調整だけで突っ込む感じ? Quaternion.Lerpはやめとけ(応用効かない) バネトルクがお勧め バネトルクはUnite2017の講演みてね バネトルク適用するとちょっと遅延して角度が追従する AngularDragを大きくすると敵にあたるようになるけど大きくし過ぎると同じ動きになる 同じ動きにならないようにゆらぎを突っ込む

トレイルの描画

  • テクスチャの両端ドットは透過にする

    トレイルねじれ問題はたいへん

  • 発生条件

  • ノード間の間隔がせまい(みさいるがおそい)
  • トレイルの幅が広い
  • スクリーン上の2d座標で内積求めて角度が大きいところの透過度をあげて解決させた

昔話

  • 整数のみ、割り算が重くて使えないハードウェアがあった
  • 4096を1.0とする
  • 掛け算をするたびに4096で割る
  • 割り算は使わないよりほかにない...

運動方程式の適用

  • 1秒60fの場合、1秒を60とすればdeltaTimeは1
  • 加速度の再計算は2のべき乗時間のみに間引き。ビットシフトのみで割り算できる 神は二階微分に宿る

コンピュートシェーダー

  • 二つの命令をCPUからGPUへ送る
    • SetData
    • Dispatch
  • CPUはGPUの結果を待たない。めいれいするだけ
  • 通常シェーダーもコンピュートシェーダーも呼び出されるタイミングは一緒なので特に遅延は考えなくてよい
  • [numthreads(8,8,8)]を関数の前につけると512並列
  • 並列数は超えると実行時エラー吐く
  • ミサイルの位置情報をCPUに置かないことを目標にしてコンピュートシェーダー実装

課題1:ターゲット情報はCPUで枚フレーム更新

ターゲットバッファを256バイト用意して毎フレームSetData

課題2 : ミサイルの管理

  • ミサイル生成関数をミサイルの誘導関数の前に置く
  • オブジェクトプール的なミサイル配列
  • 初期位置・初期角度・ミサイルID・生死に加えて乱数を付加しておくと便利

課題3 : ミサイル描画

IMUのデータをBLE notifyで受けてCubeを回す

以下の記事の応用です。

takashiski.hatenablog.com

やってること

  • IMU(慣性計測装置)で姿勢(Quaternion)を求めてBluetoothモジュール経由でBLE notifyで投げる
  • BLEで飛んできた姿勢を受けてCubeに反映する

動画

  • 任意向きを正面とした回転ができるように変更

www.youtube.com

* 初期位置の北向きが正面になるらしく(今回の場合)、西向きなので正面が右になってしまっている

www.youtube.com

コード

github.com

Unity側

  • android8.0でのみ動作確認済み
  • Bluetooth LEを利用しているため、EditorやUnity remoteでは通信部の動作確認不可
  • ストアアセット"Bluetooth LE for tvOS, iOS, android"を利用

ESP32側

機材

  • Feather ESP32(ESP-WROOM-32)
    • LiPo用PH2端子と充電回路が載っている
    • Devkit-Cでも可
  • GY-BNO055(BNO055)
    • bno055が載っていればなんでもよい
    • 処理を書き換えれば別のIMU(MPU6050など)でも可能
  • ブレッドボード
  • ジャンパ線
  • LiPo電池
  • マスキングテープ(LiPoの簡易固定用)

開発環境

  • Arduino core for ESP32 WiFi chipsを使用
  • 導入は過去記事参照

github.com

takashiski.hatenablog.com

注意

  • ESP32にヒートシンクを追加するか、使用していないときは電源を落とすこと
    • BLEのadvertizeやnotifyが実行されたままだとESP32が発熱する
    • 冷えるまで動作が不安定になることがある

課題

[解決]姿勢の基本向き設定

  • 座標系がちょっと違う。今回はIMU:(x,y,z,w)->Unity:(x,z,y,-w)と変換した。
  • ある時点のIMUの逆回転を保存しておいて、最初に反映させると 、任意の向きを(0,0,0,1)にすることができる。 * 上記座標系変換をした場合、姿勢が北向き基準になる。
  • 単純に逆回転のQuaternionを掛ければ基準向き変えれるかな?と思ったけどうまくいかなかった。

IMU以外のデータ送信

  • ボタンのオンオフはbit立てることで実現できそう
  • 追加で数値送るのは厳しいかもしれない

データ送信長

  • BLE notifyの送信可能データ長はデフォルトが実質20octetsだそう。
  • Quaternionを送る場合は16octets占有されるのであと4octetsしか空きがない。
  • ネイティブコード側で設定を変更すれば拡張できそう
    • 送信時間長くなるから何か影響がある気がする...

https://qiita.com/hituziando/items/50c7ba7fb9f8917e1ebfqiita.com