カテゴリー
金融

Arm時代が

暫く続くと思ったらRISC-Vにが来ていた。

カテゴリー
学術

Every Circuitで振幅偏移変調多重化通信回路をシミュレーションしてみた

カテゴリー
学術

パソコンから出力した音声信号から10KHz付近のみバンドパスして全波整流してみた。#電子工作

カテゴリー
学術

FlutterAppとWebViewで交信してみた

function executeJavascript() {
    return "Execute JavaScript."
}

function sendFlutterApp() {
    flutterJavaScript.postMessage("Post message from JavaScript.");
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Javascript Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Javascript Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  late WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: WebView(
        onWebViewCreated: (WebViewController webViewController) async {
          _controller = webViewController; // 生成されたWebViewController情報を取得する
        },
        initialUrl: 'https://mymyser.com/flutterjs.html',
        javascriptMode: JavascriptMode.unrestricted,
        javascriptChannels: {
          JavascriptChannel(
            name: 'flutterJavaScript',
            onMessageReceived: (result) async {
              print(result.message);
            },
          )
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _executeJavascript,
      ),

    );
  }

  Future<void> _executeJavascript() async {
    String result = await _controller.runJavascriptReturningResult('executeJavascript()');
    print(result);
  }
}
カテゴリー
学術

FlutterWebとNativeAppで交信してみた

    function js2Dart(message) {
      console.log(message);
      window.postMessage(message, "*");
    }

    function js2Swift(message) {
      console.log(message);
      webkit.messageHandlers.js2Swift.postMessage(message);
    }

    function js2Java(message) {
      console.log(message);
      Android.js2Java(message);
    }

    function js2Native(message) {
      console.log(message);
      const ua = navigator.userAgent
      if (/android/i.test(ua)) {
        js2Java(message)
      }
      else if (/iPad|iPhone|iPod/.test(ua)) {
        js2Swift(message)
      }
    }
window.addEventListener("message", (event) {
    _incrementCounter();
});
 void _dart2Js() {
    _incrementCounter();
    setState(() {
      context.callMethod('js2Native', ['dart2Js']);
    });
 }

 floatingActionButton: FloatingActionButton(
     onPressed: _dart2Js,
     tooltip: 'Increment',
     child: const Icon(Icons.add),
 ),
    @Override
    public View onCreateView(
            LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState
    ) {

        binding = FragmentFirstBinding.inflate(inflater, container, false);
        webView = binding.webView;
        webView.addJavascriptInterface(new WebAppInterface(getContext()), "Android");
        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://demo.mymyser.com/index.html");
        return binding.getRoot();

    }

    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        binding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                webView.loadUrl("javascript:postMessage('Send Native Message.');");
            }
        });
    }
    @JavascriptInterface
    public void js2Java(String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }
        let config = WKWebViewConfiguration()
        let userContentController: WKUserContentController = WKUserContentController()
        userContentController.add(self, name: "js2Swift")
        config.userContentController = userContentController

        webView = WKWebView(
            frame: CGRect(x: 0, y: 64,
                          width: view.frame.size.width,
                          height: view.frame.size.height-64),
            configuration: config
        )
    @IBAction func onClickButton (_ sender: UIButton) {
        webView?.evaluateJavaScript("js2Dart('Send Native Message');", completionHandler: { (object, error) -> Void in
            print("⭐️:Send Native Message")
        })
    }
extension ViewController: WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if(message.name == "js2Swift") {
             print("⭐️: \(message.body)")
        }
    }
}
カテゴリー
学術

オペアンプで全波整流してみた。パソコンから正弦波を出力し741Cで増幅した後に458Cの半分を使って全波整流した。#ocilloscope #オペアンプ #電子工作

カテゴリー
学術

M80C85A-2

M80C85A-2
M80C85A-2

ChatGPTに聞いてみた。

M80C85A-2は、インテル社の8ビットマイクロプロセッサ、8085の互換品であり、8085のアセンブリ言語で書かれたプログラムを実行できます。M80C85A-2は、クロック周波数が最大5MHzで動作し、最大64KBのメモリをサポートします。また、内蔵の割り込みコントローラとシリアルインタフェースを備えています。

M80C85A-2は、8ビットのデータバス、16ビットのアドレスバス、3つの8ビット汎用レジスタ、1つの16ビットスタックポインタレジスタ、1つのプログラムカウンタ、8ビットの割り込みマスク、8ビットの割り込み優先度など、8085と同様のアーキテクチャを持ちます。しかし、M80C85A-2は、8085に比べていくつかの改良が施されており、パフォーマンスが向上しています。

M80C85A-2は、マイクロコントローラや組み込みシステムなどで使用されます。しかし、最近では、より高性能で低消費電力のマイクロプロセッサが普及しており、M80C85A-2のような古い製品はあまり使用されなくなってきています。

カテゴリー
学術

TMP8085AP-2

TMP8085AP-2
TMP8085AP-2

ChatGPTにこれは何か聞いてみた。

User
TMP8085AP-2は何ですか。

ChatGPT
TMP8085AP-2は、インテル8085マイクロプロセッサのクローンです。インテル社が開発した8085は、8ビットのマイクロプロセッサであり、広く使用されてきました。TMP8085AP-2は、同じピン配置と互換性を持ちながら、8085と同等のパフォーマンスを提供するように設計されたクローンです。

TMP8085AP-2は、8ビットのデータバス、16ビットのアドレスバス、3つの8ビット汎用レジスタ、1つの16ビットスタックポインタレジスタ、1つのプログラムカウンタ、8ビットの割り込みマスク、8ビットの割り込み優先度など、8085と同様のアーキテクチャを持ちます。

このマイクロプロセッサは、最大4MHzのクロック周波数で動作し、最大で64Kバイトのメモリ空間にアクセスすることができます。また、内蔵の割り込みコントローラを備えており、高速で正確な割り込み処理が可能です。

TMP8085AP-2は、8085と互換性があり、8085のアセンブリ言語で書かれたプログラムをそのまま実行することができます。そのため、8085を使用していたシステムを、より安価な代替品に置き換える場合に便利です。しかし、最近では、より高性能で低消費電力のマイクロプロセッサが普及しており、TMP8085AP-2のような古いクローンはあまり使用されなくなってきています。

カテゴリー
学術

回転走査と回転照合は傾きに耐性がある

カテゴリー
学術

微細加工で波形を記録すればアナログ記憶が出来るかも

と思いChatGPTに聞いてみた。

User

微細加工で波形を記録すればアナログ記憶が出来るかもと思うのですがいかがですか。

ChatGPT

微細加工を使用して波形を記録するアイデアは面白いですね。これはアナログ記憶の一種と言えるかもしれません。微細加工技術を利用して波形を物理的に記録する方法は、一部のアプリケーションで有用かもしれません。たとえば、センサーデータや環境モニタリングに応用できるかもしれません。

しかし、このアプローチにはいくつかの課題も考える必要があります。記録された波形の読み出しや再生、長期間の保存、およびデータの効率的な取り扱いが挙げられます。また、デジタル記憶と比べて情報の変更や編集が難しい場合もあります。

具体的な用途や要件によっては、このアイデアが適しているかどうか検討する必要があります。システムエンジニアとして、詳細な検討とプロトタイプの開発が役立つでしょう。一貫性のあるアプローチで取り組むことが大切です。

User

レコードもこの一種ですよね。

ChatGPT

はい、レコードは一種のアナログ記憶デバイスと言えます。音楽の波形がレコードの溝に刻まれ、針で読み取ることで音楽が再生されます。この方式は長い間音楽再生のために使用されてきました。音楽の波形情報を物理的に記録し、再生することができる媒体です。

レコードはアナログ技術の代表的な例であり、音楽愛好家にとっては音質やアナログの温かみなどから人気があります。その一方で、デジタル音楽も普及しており、利便性やデータの編集・複製が容易な点で優れています。

微細加工を用いて波形を記録するアイデアも、このようなアナログ記憶デバイスの一種として捉えることができます。用途によっては、アナログ記憶が有用な場合もあるでしょう。

User

ありがとう。

ChatGPT

どういたしまして。何か他の質問や情報が必要な場合はいつでもお気軽にお尋ねください。お手伝いできることがあります。

カテゴリー
学術

計算機科学入門

 計算機を使って学術的な正当性を主張するならばそれを支える揺るぎない理論的裏付けが必要で、数学がそれを叶えてくれると思いました。

ChatGPTに聞いてみた。

M.アービブ著の計算機科学入門はどんな本ですか。ChatGPT

M.アービブ著の『計算機科学入門』は、計算機科学の初学者向けに書かれた入門書です。コンピューターサイエンスの基礎的な概念や理論、プログラミング言語、アルゴリズムなどについて詳しく解説されています。

本書は、計算機科学の基礎知識を習得したい初学者向けに書かれており、特にプログラミングを初めて学ぶ人にも分かりやすいように構成されています。章ごとに重要なポイントをまとめた要約や、練習問題なども用意されているため、学習の効果を高めることができます。

『計算機科学入門』は、計算機科学に興味を持っている人や、プログラミングやアルゴリズムの基礎を学びたい初学者にとって、非常に役立つ一冊となっています。また、数学や物理学などの分野に興味がある人にとっても、コンピューターサイエンスにおける数学的な考え方やアルゴリズムの応用などを学ぶことができるため、広い層の人々にとって興味深い本となっています。

カテゴリー
学術

システム構成技術

岩波講座 マイクロエレクトロニクス 10 1988年2月発行

 当時の巨大な通信システムの構造が分かりそうですが、私には馴染みのない内容でした。

カテゴリー
学術

VLSIコンピュータⅡ

岩波講座 マイクロエレクトロニクス 9 VLSIコンピュータ II 1987年7月発行

 汎用CPU以外のVLSIが色々解説されています。じっくり勉強してみたい本です。

カテゴリー
学術

VLSIコンピュータⅠ

 16ビットCPUまでがLSIで32ビットからVLSIとなっていくようです。命令も高機能になり従来よりも一命令に必要なクロックサイクルが長くなりました。

 一つの命令を実行する過程の一部を見てみると、CPU内部の回路が同時に全て動作はしません。空いている回路にも演算させるためにパイプライン技術が登場します。

 同時に実行できる命令を増やすために並列化も登場し回路同士を協調させる機構も必要です。更にソフトウェア開発の作業を軽減させるために高機能な命令をどんどん増やされていきました。

 ICの実装技術の向上が高機能VLSIを登場させたと思います。本来の原始的な機能では足りず高機能化と高効率化を追い求め更にエネルギー効率を向上させた結果に富嶽やスマホの実現があります。

 初期型16ビットCPUとそれ以降とが分水嶺なんですね。

カテゴリー
学術

プログラミング言語とVLSI

岩波講座 マイクロエレクトロニクス 7 1988年1月発行

 Smalltalkを使い並列処理で人工知能を実現するためそれ用のVLSIを開発しようとしていたが逐次処理のプロセッサーの進化が速すぎて実現できなかったようです。

 1980年代中庸、ImPP(UPD7281)も同じような理由で消えていったのでしょうか。

 現在はCPUコアの複数化やCPU自体をたくさん積むなど並列処理全盛ですがこの頃の技術が生きていいるのでしょうか。

カテゴリー
学術

マイクロコンピュータのプログラミング

岩波講座 マイクロエレクトロニクス 6 1987年8月発行

 MS-DOSやらLattice Cやらが出てきてとても懐かしいです。ここから先は専門なのですが、知らなかったことも多くありますので真面目に勉強します。

カテゴリー
学術

マイクロコンピュータのハードウェア

岩波講座 マイクロエレクトロニクス 5 1984年11月発行

 16bit時代のマイクロコンピュータのハードウェアが解説されています。各社の主なCPUを取り上げているところが勉強になります。ハードウェアの基礎が解りやすく解説されていました。

カテゴリー
学術

VLSIの設計

岩波講座 マイクロエレクトロニクス 3 1987年9月発行

 VLSIという言葉自体が古めかさを感じる時代ですね。人手ではなく専用システムを使って設計できるからこそ集積度が上がっていったのでしょう。これも個人で作ることができないので参考にならなかったです。

カテゴリー
学術

マイクロエレクトロニクス素子

岩波講座 マイクロエレクトロニクス 1 1987年11月発行

 集積回路の構造を素材から解説している。当時の技術なので今は違うと思うがICすら個人では作れないので遠い出来事のようでした。

カテゴリー
学術

情報と符号の理論

 岩波講座 情報科学4 1985年8月発行

 距離に関わらず情報を“正確”に伝えることは大変な理論と工夫が必要なのがわかりました。それは一つのデバイスの中でさえも情報を確実に伝えるのは難しいテーマなのです。誤りの訂正から暗号へ発展していくこともわかる気がします。