ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

lineworks-api-ruby作り始めた

今年はLINE WORKSを活用する予定なのでRubyでアクセスできる様にということで年末から少しずつやっている。
LINE用の

github.com

で endpoint を変更するだけで使えるかと思って作業していたが、APIが異なるのでそうでもないことが分かってきた。
line-bot-sdk-rubyにlineworksフォルダを作って分離して作業していたが、line-bot-sdk-rubyを参照して別Gemにするべきと気づいて

github.com

こちらに独立させた。
最後のrubyは不要ではないかという気もするが、line-bot-sdk-rubyに倣って入れてみた。
後で削除するかもしれない。

今のところ勝手仕様で進めているので、後で都合が悪くなるとバッサリ作り変えるかもしれないので、使う場合は注意を。
しばらく誰の目にも止まらないと思うけど…

Fusion360で基板上の名前が表示されなくなったとき

何らかのタイミングでR1とかU1とかのデバイスの名前が表示されなくなった。

こちらが解決策

www.autodesk.co.jp

  • 部品を選択し、右クリック
  • 位置を復元を選択
  • このまま続けて部品の基準点(+マーク)を次々クリックしていくと次々と復元されていく

Fusion360で基板作成時のネットクラス(Net class)設定

Fusion360で基板を作成した事はあるが2年前でもう忘れてしまった。
というか回路作成するところから忘れていたのだが検索を頼りになんとか作れた。

基板の配線をする段階でオートルータで線を引いていくがどうも線が細い気がする。

当然思い出せないのだけど、ネットクラス設定が必要の様だ。
その設定の仕方が分からない。Fusion360は機能が多いので操作を覚えきれないのでメモしておく。

ネットクラス設定

  • デザインマネージャータブを選択する
  • ビューから信号を選択する

  • ネットクラスのビューで右クリックすると編集メニューが表示される。

  • POWRクラスを追加ボタンで作成し関連するメンバー(線番号)をグループ化する
    • 最初VCCやGNDだけ入れていたが、スイッチなどにつながっている線などもあってそれを入れてなかった
    • 電源に関する線はなんらかわかりやすい名前を入れて選びやすくする様にした方が選択肢やくすなる

  • ルールタブで線幅やクリアランスを設定する。
    • 前回何か見て設定した数値を今回も用いる。
    • 本来はきちんと電流値を調べて設定しないといけないと思うが…

という事で基板レイアウトができるところまで来た。

M5Stamp TimerPower

暫く前にM5Stamp TimerPowerを買っていたが放置していたのを試してみた。

公式ドキュメントを見るタイミングでメンテナンスになっていたのか404でどうしょう?ってなったけど次の日には復旧していた。

docs.m5stack.com

サンプルコードはこちらにある。

github.com

M5Atomでの例なのでM5Atom Liteと接続する。
配線はこの様にする。

TimerPower M5Atom Lite 備考
SCL G21(SCL) 4.7KΩプルアップ
SDA G25(SDA) 4.7KΩプルアップ
5V OUT 5V
GND GND
HOLD G19
3V3EN G23
BAT IN リチウムバッテリープラス側
GND リチウムバッテリーのマイナス側

BAT INは3.7Vを想定している様でとりあえずエネループ3本を使用した。

TimerPowerがGROVEコネクタ対応だったのでGROVEコネクタで試したがWireはG21, G25の組み合わせになっていてはまった。
おまけにプルアップしてなくて通信がうまくいってなかった。

動作

動作は次の様になっている。

  • TimerPowerのボタンを押す。
    • これでバッテリーからDC-DCコンバータで5Vが供給されM5Atom Liteが動作する。
    • M5AtomのIO出力がされるまで押さないと電源が切れてしまう。
    • M5AtomがRTCとI2C通信できるとLEDが緑色になる。
    • 通信が失敗するとLEDが紫に色になる。
  • M5Atomのボタンを押す
    • LEDが青色になる。
    • 3V3ENをLOWにするので3V3 OUTの出力が停止し0Vになる。
  • M5Atomのボタンを押す
    • LEDが白色になる。
    • 3V3ENをHIGHにするので3V3 OUTの出力がでて3Vになる。
  • M5Atomのボタンを押す
    • RTCに2秒後にWAKE UPする様にセットしHOLDをOFFにし5V OUTが停止しM5Atomの電源が切れる。
  • 2秒後
    • RTCからTimerPowerがWAKE UPされ再びM5Atomの電源が入る。
  • M5Atomのボタンを長押し
    • LEDが赤色になる。
    • ボタンを離すと電源が切れる。次の起動はTimerPowerのボタンで投入する必要がある。

TimerPowerの出力が切れるので今までM5Atomをdeep sleepさせてもぶら下がっているセンサーやデバイスのせいで待機電流が下がらないのを解決できそう。

TimerPowerのボタンを押して最初の電源を投入したが、WAKE入力があるのでそこから引き出してスイッチと接続して電源投入スイッチとして使うのがよさそう。

5VINから供給するとバッテリーを充電してくれる。多分。

                        rtc.WakeAfterSeconds(2);

の秒数を変えるとインターバルを変更できる。

Duolingo 130日

Duolingoの連続記録が130日を迎えた。
最初の何週かは連続フリーズで2、3日繋いだので実際は130日より少ないんだけど365日を目指したいところ。

リーグが10個あって、30名の中で獲得したXPの上位何名かが、上のランクに上がっていける。
130日にしてようやく最上位のダイヤモンドリーグに昇格した。

英語を学習しているというより、どうやってリーグを上がっていくかというのが目的になっている感じで継続できている。

ダイヤモンドリーグに上がるには5000XP近くは必要になる。
その時のメンバーの力量によって変わるので5000XPは目安である。
朝、昼、晩合わせて1時間半から2時間くらいやってる感じがする。

この先上位10名がトーナメントに進めるらしいが、これ以上時間をかけることはできないのでそこに上がっていくのは無理そう。
というかこの時間維持するのも大変なので、ダイヤモンドリーグに居続けるのも難しいと思っている。
ダイヤモンドと黒曜石リーグを行き来する感じになるかと思う。

課金すればもっと楽にできるんだけど。

肝心の英語であるが全然進歩は感じられない。
1年、2年後にどうかで判断しよう。

最近中国語も始めた。
最初は数字の読み方だったりするのでレッスンが簡単に終わりハートの回復に役立つ。
ダイヤモンドリーグに昇格できたのも中国語で稼げたからで、中国語も難しくなってきたので次回にダイヤモンドリーグ昇格する際は難しいかもしれない。

英語は1レッスン10分近くになる事もあって大変で、おまけにあと一問のところでハートが尽きてXPを獲得できなかったりするとがっかりだ。
中国語は発音がさっぱりなので発音のテストでは運任せな感じのところがある。

書いてる間に131日に更新した。


追記

初のダイヤモンドリーグは最下位30位の洗礼を受けて終了した。
流石にここまで登ってくるのは強者揃いで手を抜かない輩ばかりだった。
リーグに居残るのに5000XP近く必要そうだった。

undefined method ActiveSupport.deprecator がでた

Sinatraプロジェクトで更新しようとしたら以下のエラーがでた。

~/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-7.1.1/lib/active_support/core_ext/array/conversions.rb:108:in `<class:Array>': undefined method `deprecator' for ActiveSupport:Module (NoMethodError)

  deprecate to_default_s: :to_s, deprecator: ActiveSupport.deprecator
                                                          ^^^^^^^^^^^
Did you mean?  deprecate_constant

ActiveSupportを一旦削除して再度入れ直して直った。
悪さしているバージョンのみ削除すればいいと思う(多分7.1.x)がbundleでインストールしなおせばいいかということで全削除した。

% gem uninstall activesupport

Select gem to uninstall:
 1. activesupport-6.1.4.1
 2. activesupport-6.1.7.2
 3. activesupport-6.1.7.3
 4. activesupport-6.1.7.6
 5. activesupport-7.0.4.2
 6. activesupport-7.0.4.3
 7. activesupport-7.0.5
 8. activesupport-7.0.6
 9. activesupport-7.0.7.2
 10. activesupport-7.0.8
 11. activesupport-7.1.1
 12. All versions

> 12

.
.

Continue with Uninstall? [yN]  y
Continue with Uninstall? [yN]  y
Continue with Uninstall? [yN]  y
Continue with Uninstall? [yN]  y
Successfully uninstalled activesupport-7.1.1

% bundle init

こちらを参照した

github.com

基本演算子

Swiftの基本演算子を読んで知らなかった事。

www.swiftlangjp.com

Overflow演算子

Swiftでオーバーフローは通常できないが&を使うとできる。

let a = UInt8.max &+ UInt8(1)  // -> 0

剰余演算子

a % b でbが負数になっても結果は変わらず