2022年3月20日日曜日

【Android USB oscilloscope】(19) Kotlin簡単タイマースレッド

余っているAndroidスマホをオシロにしよう!

半導体入手難について.

USB2.0を使えるARM CPUっていうと、STM32F205が価格とパッケージと開発環境を考えると唯一の選択と言ってよろしいかと思います.他メーカーにも同様の機能のCPUはありますが開発環境が有料だったり、BGA packageだったりして日曜大工では手を出せません.

かれこれ2年近く続く半導体不足はますます深刻化している様子で、中華通販でのSTM32F205の価格が¥1200ぐらいにまで高騰しています.この価格となるともはやDigiKeyの表示価格と同じです.中華通販の意味が無くなった.
それでも中華様にはまだ在庫があるだけマシで、DigiKeyは価格表示はあれど在庫ゼロがずーっと続いています.
ちなみにSTM32F205は、2021年11月頃では¥800ぐらいで中華通販から調達できました.さらに1年前の価格は¥250でした.

ハイパーインフレ.終わりだ、終末の時だ.

ーーーー
わたしはハードウエア設計はプロ並みのスキルを身に着けているけれどソフトウエアは素人です.
ハード屋の性ゆえ、Cを書いているとメモリ展開をイメージしてしまいます.
ところがJAVAやKotlinでメモリ展開をイメージするのは無駄な努力のようで、メモリ展開を考えないようにするのにようやく慣れてきたところです.それでもこのインスタンスはいつ消えるんだろう?という内心のざわつきは未だ消えませんが.

ハード屋の性で、たとえスマホのアプリと謂えども定期的割り込みが入らんことには足腰が不安定というか、心に痛みを感じます.

そこでタイマスレッドで良いものは無いかしら?と物色したら簡単なのがありました.
タイマに関係するところのみを抜粋すると下記の青の部分です.onCreate()で仕込んであとは自走させるだけ.Android Studioのlogcatで観測すると毎秒”callback”文字列が表示されます.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Timer().schedule( 0, 1000, {       // 1sec timer
            Log.d("times", "callback")
            //this.cancel()  //1回で終了する場合
        })
    }
}

ふむ、簡単でよろしか.しかしラムダ記法ってのはなんかキモい.


かしこ

18 件のコメント:

  1. >JAVAやKotlinでメモリ展開をイメージするのは無駄な努力
    少なくとも、私は
    「そんなことはない」
    と、思っています。
    ・ただし「プロのプログラマ」でも、「これが出来る」といえる人は、少数派ではないかと思います。

    >ハード屋の性ゆえ、Cを書いているとメモリ展開をイメージ
    おそらくこれは、あたかも
    ・HDL(Hardware Description Language)が、論理ゲートやフリップフロップに展開される
    (まぁ実際、回路規模は「NANDゲート換算」で、なんぼ、とか言われるわけですが。)
    ような感じだと思いますが、あくまで、これは、
    ・空間的展開
    に、過ぎません。(普通の「Cコンパイラ」は、コンパイルしたオブジェクト配置が
    「動的に変わることはない」ので、アナロジーとしては、これは正しい。)

    これが、「C++」「Java」などの、いわゆる「オブジェクト系言語」になると、
    ・コンパイルしたオブジェクトが「動的に変化」します
    (基本的に「オブジェクトの、生成/消滅を繰り返す」ことによって処理が成り立っています。
    Classは、あくまで「定義」に過ぎず、Newされないと、メモリに「実体」として生成されない。)
    ※具体的には、メモリ配置的に言えば、ObjectAは、最初、0x100番地に生成されていたものが、
    処理が進むにつれ、0x200番地に移動、0x100番地には、ObjectBが生成されている、みたいな感じ。)
    つまり、空間だけでなく、
    ・時間的な展開
    も、同時に考えなければいけなくなります。(まぁ、これを簡単にするためにデバッガなどでは、
    「メモリの番地」ではなくて、「オブジェクト名」で、トレースできるようになってたりするわけですが。)
    ※この辺になると「プロのプログラマ(要はそれで食ってる職業プログラマという意味)」でも、
    ・オブジェクトの、空間的配置・時間的配置を、同時に思考できる人は少数派
    ではないかと思います。
    ※以前書いた「スレッドは、プロでもあまり使いたくない『秘儀の一種』である」
    と書いた理由が、このあたりにも関係します。
    この辺は、C++とかは、
    ・少ないメモリを、効率的に使う(メモリが無限にあれば「毎回新しく割り当てれば済む」ので、こんな心配はいらない。足りない空間を時間で補ってる、みたいな発想。)
    ことから考えられた言語という歴史もあります。(Javaも、これに近いような気がする。)

    >このインスタンスはいつ消えるんだろう?
    この辺は、「ガベージコレクション機構」が、裏でゴニョゴニョやってます。
    (この辺も、深入りすると幾らでも深みに嵌っていきますが。)

    >しかしラムダ記法ってのはなんかキモい
    そもそも「ラムダ記法」は、数学の証明あたりから来てます。
    ・個人的には「数学書のラムダ記法」の説明は「非常に難解」と思っていて、まだ「Java」などの、ラムダ記法のほうがわかりやすいと思ってます。

    返信削除
    返信
    1. >空間的配置・時間的配置

      メモリがどう扱われているかは処理系任せでさっぱりわからんちんです.しかし想像してたよりも動的みたいですね.
      debuggerのmessageを眺めていると、メモリ処理系のwarningなどがポロポロでてるのは知ってるけど読む気はしないです.

      数学のラムダくんについて知ってるのは名前ぐらいですねわたしは.
      逆ポーランドみたいなもんか、とナメてるけど全然違う予感はしてるという.

      削除
    2. >逆ポーランドみたいなもんか
      残念ながら、
      ・全く違います
      としか、言いようがありません。
      (ちょっと混乱を招くかもですが、「逆ポーランド記法の処理系を、ラムダ式で書くことは出来る」はずです。(どこかで見たことある)が、直接の関係はありません。)

      ※今気づきましたが、
      「逆ポーランド」じゃなくて
      「バッカス記法」って、言いたかったのでは?
      ・ならば、ちょっと関係ありますね。(多分)
      バッカス記法で記述された定義が「正しいかどうか」は、ラムダ式で計算してみればわかる(ラムダ式は、証明に使えるから。)のではないでしょうか?
      ※もう、この辺までは理解できなくても、何の問題もないです。
      このあたりになると「コンピュータサイエンスと数学の区別があいまいな領域」になってしまうのではないでしょうか。
      (というか、市井のプログラマが、全員こんなこと理解しながらプログラムを組んでいるとは思えない。)

      削除
    3. >メモリ処理系のwarningなどがポロポロでてる
      まぁ、どういうメッセージかはわかりませんが、
      ・「まだ使われてる領域(たいがい、メモリ解放忘れですが)」に、
      「次の変数領域を割り当ててしまう」と、これは即
      「メモリリーク」になってしまいますね・・・
      (場合によっては、致命傷になる。)
      ※まぁ、Debuggerも万能ではないので「~の恐れがあります」くらいしかわかんないです。定義のみで未使用の変数は上書きされても大丈夫だし。
      (なので、未使用変数はバグの元になるので警告が出る。)

      削除
    4. やっぱ逆ポーランドではなかったですか.ちなみにバッカスは初耳でした.

      メモリ処理系warning/messageは、足りないから増やすみたいなのが出てきます.

      削除
    5. >バッカスは初耳

      https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AB%E3%82%B9%E3%83%BB%E3%83%8A%E3%82%A6%E3%82%A2%E8%A8%98%E6%B3%95
      バッカス・ナウア記法(こっちが正式名称ですが、「バッカス記法」と略されることもよくあります。)
      言語のマニュアルなどで、よく見かける記述方法です。
      これ自体が「一種の言語」とも言える構造をしています。
      ※なので「どこかで見たことはある」のではないかと。

      削除
    6. やたらと<>が多くて、やたら()が多いLispを思い出してしまいました.

      削除
    7. >メモリ処理系warning/messageは、足りないから増やすみたいなのが出てきます.
      これこそ、
      >この辺は、「ガベージコレクション機構」が、裏でゴニョゴニョやってます。
      の、メッセージかもしれません。動的メモリ管理のプロセスが裏で走ってるんでしょう。

      削除
    8. >やたら()が多いLisp
      「オブジェクト系言語のご先祖様」ですね。
      ・学生の時に、これの勉強会があって、一通りやったはずなのだが、
      あんまり覚えていない。car と cdr (という命令があること)しか覚えていない。
      あと、2分木(一番簡単なDB構造)

      削除
    9. Lispってエディタのemacsのスクリプトみたいので使うんですよね.
      ()で目がチカチカして見にくくてなんかもぅです.

      削除
  2. 相変わらず宇宙語はサッパリですが…

    >ハイパーインフレ.終わりだ、終末の時だ.
    まさに、懸念されていた(予定されていた?)とおり、着実に”スタグフレーション”が進行しています。今後の日本経済を少しでも明るく語るヤシは、○キか詐欺師です。

    返信削除
    返信
    1. 建築部材は価格2倍ぐらいな気がしてるんですけど、半導体は5倍とか在庫ゼロとかワケワカメ.建築部材は3倍になったら誰も建てなくなるんじゃなかろうか.

      コンテナ海運業の社員はバブル状態でうらやましいでぇす.

      オイルショックの時はインフレ基調→スタグフレーションだったイメージでいます.
      しかし現在の日本はデフレ→スタグフレーションなので、ハコテン間際で役満振り込むみたいでなんだかなー

      削除
    2. >終末の時だ
      なんか、前々から、「陰謀系、ないしは、スピリチャル系」で囁かれていた、
      ・資本主義の終わり
      が、本当に来るのかもしれません・・・
      そうなると、
      ・紙幣が紙くず
      どころの騒ぎではありませんね。
      正直、何がどうなるのか、さっぱりわからないです。

      削除
    3. また金本位制に戻す説がスイスの銀行の辺りから出てきてます.
      徳政令をやる気でしょうか.
      あーぼくらの年金が...

      削除
    4. >「陰謀系…資本主義の終わり
      ”経済系陰謀論者”はドタマぱっぱらぱァ〜ですから、まぁそれは由として...

      >>資本主義(経済)はなくならない...
      資本主義の対義は共産主義ですので、さすがにもう20世紀でそれは懲りたでしょう(まだ一部は...)。
      しかし、そのカタチは変わっていくでしょうね...ってかもういい加減変えろよ! ってかてか本来の”資本主義”に戻せよ!!。

      >金本位制…
      それは、リアルなお宝の奪い合いになります。ヒャッハー〜♪な世界が到来します(ちょっと期待するかも^^)。

      「信用貨幣制度(銀行預金)・管理通貨制度(為替)」を悪だと言う人(とくに資産・金融市場関係に顕著…⇐どの口が!)もいますが、これらがなければ間違いなく今日の人類の発展はなかったでしょう。ただ、優れたシステムも運用者がアホゥならアホゥなものとなるのは道理。そもそも、なんでこのシステムが出来たのか?っを考え直すべきでしょうね(ってか99.9%の人は、↑をよく理解してないんですけどね^^;)。

      削除
    5. 金本位制はアタマいたい.戦争おきます.

      削除
  3. 知り合いから簡単な表示装置を液晶込みで1万円くらいで作って売りたいというお話があったのですが、もう無理な感じになってしまいました~。商社と直接やりとりできるご身分ではないので市中在庫を集めて作ろうと思ったのですが、全然どうにもこうにも・・。
    中長期的には改善されるのでしょうが、数カ月単位では見通しも立てられず。

    返信削除
    返信
    1. 事業計画たてるの難しいんじゃないでしょうか?
      わたしですら絶賛崩壊中ですから.
      低級品のつもりで開発したけど部品高騰で中級品を超えちまうみたいな.

      各社が在庫を抱える経営に切り替えてるところなんじゃないですかね.ハイパー

      削除