カテゴリー
学術

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

カテゴリー
学術

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

と思い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月発行

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

カテゴリー
学術

情報ネットワークの理論

 岩波講座 情報科学5 1982年6月発行 コンピューターの通信のみならず放送や通信までにも渡る基礎から説いてあります。デジタル通信の元にアナログ通信があります。広い範囲が良くまとまっている本でした。

カテゴリー
学術

熱輻射論講義

 私の知能では難しくて解りませんでした。

 なので、ChatGPTに聞いてみた。

User
マックス・プランク著の熱輻射論講義という本は知っていますか。

ChatGPT
はい、知っています。マックス・プランクが提唱した量子論の発展において非常に重要な役割を果たした、彼の著書の一つです。この講義で、プランクは物質と放射線の相互作用についての理論を提唱し、熱放射のスペクトルの解析に成功しました。この成果は、量子力学の発展につながり、量子力学の基礎を築くことになりました。

User
読んでも良く解らなかったので内容を要約できますか。

ChatGPT
「熱輻射論講義」という書籍は、マックス・プランクが開発した量子論の重要な発展に関する著書です。この講義では、物質と放射線の相互作用についての理論が提唱され、熱放射のスペクトルの解析が行われました。

熱放射とは、温度によって放出される電磁波のことであり、それらの波の振幅や周波数は温度に依存することが知られています。プランクは、この現象を量子論に基づいて説明するために、エネルギーの量子化の考え方を導入しました。

具体的には、プランクは放射エネルギーを、周波数に比例する一定の値(プランク定数)をかけたエネルギーの小さなパケット(量子)として考えました。このアプローチは、当時の物理学者たちにとっては奇妙であったものの、実験結果と合致し、量子論の基礎を築くことになりました。

この講義で示された理論は、現代の物理学においても重要な位置を占めています。

カテゴリー
学術

自作ROMライター そのC

 今までuPC741Cを何個もブレッドボードに並べて回路を構成していました。機能を拡大するにつれ配線が複雑になり動作の不安定化を招いていたのです。

 でもuPC458Cはオペアンプが4個入っているので一つの小さい方のブレッドボードで1チャンネルの信号を処理するようにしてみます。4チャンネルを一つの大きい方のブレッドボードで構成するよりも組み易くなると思っています。

カテゴリー
学術

自作ROMライター そのB

 今までの失敗は、正負電源が貧弱で充分な電力を供給できなかったのと、パソコンからの信号処理する回路が複雑になり安定した動作を期待するほど実装能力が無いのが原因です。

それでuPC458Cで作り直してみます。

カテゴリー
学術

確率の哲学的試論

 ラプラスという人は単なる数学者ではなく激動のフランス革命を生き抜いた偉人だったのは知りませんでした。賭け事が好きな人にお勧めしたい一冊です。

カテゴリー
学術

真空マイクロエレクトロニクス

カテゴリー
学術

Flutterで状態管理あれこれ2

 状態管理の元となるInheritedWidgetを理解するためにカウンターアプリを改造して実装してみましたがとても複雑でした。

 それで流行りのパッケージを実装してみました。使いやすいように InheritedWidget をラップしているのでコードは短くなるのですが、バージョンによって細かく記述方法が異なりなり正解にたどり着くのが大変です。

  flutter_hooks: ^0.17.0
  hooks_riverpod: ^0.14.0+4
  state_notifier: ^0.7.0
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

final viewModel = StateNotifierProvider((_) => ViewModel());

class ViewModel extends StateNotifier<int> {
  ViewModel() : super(0);
  void increment() => state++;
  void decrement() => state--;
}

void main() {
  runApp(
    ProviderScope(
      child: CounterApp(),
    ),
  );
}

class CounterApp extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final _viewModel = useProvider(viewModel);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('CounterApp')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'You have pushed the button this many times:',
              ),
              Text(
                _viewModel.toString(),
                style: Theme.of(context).textTheme.headline4,
              ),
            ],
          ),
        ),
        floatingActionButton: Column(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            FloatingActionButton(
              heroTag: 'increment',
              onPressed: () => context.read(viewModel.notifier).increment(),
              child: Icon(Icons.add),
            ),
            Gap(15),
            FloatingActionButton(
              heroTag: 'decrement',
              onPressed: () => context.read(viewModel.notifier).decrement(),
              child: Icon(Icons.remove_circle_outline),
            ),
          ],
        ),
      ),
    );
  }
}

 このコードもパッケージのバージョンがちょっとでも上がれば直さなくなると思います。

Flutterで状態管理あれこれ2
Flutterで状態管理あれこれ2

実機のスクリーンショットは
flutter screenshot
で撮れます。プロジェクトフォルダーに画像が保存される。

カテゴリー
学術

Flutterで角を丸くする

 TextFieldやDropdownButtonの角を丸くしてみた。結局ConainerのBorderを丸くして角が丸くなったように見せるだけだった。

Flutterで角を丸くする
Flutterで角を丸くする
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';

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

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

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    String dropdownValue = 'One';
    return Scaffold(
      backgroundColor: Colors.grey,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ClipRRect(
              borderRadius: BorderRadius.all(Radius.circular(30)),
              child: Container(
                width: 200,
                height: 100,
                color: Colors.yellow,
                child: Padding(
                  padding: const EdgeInsets.all(8),
                  child: const TextField(
                    obscureText: true,
                    decoration: InputDecoration(
                      border: InputBorder.none,
                      labelText: 'Pass',
                    ),
                  ),
                ),
              ),
            ),
            Gap(20),
            Container(
              padding: const EdgeInsets.symmetric(horizontal: 5),
              width: 200,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.blue),
                borderRadius: BorderRadius.circular(20),
              ),
              child: const TextField(
                obscureText: true,
                decoration: InputDecoration(
                  border: InputBorder.none,
                  labelText: 'Pass',
                ),
              ),
            ),
            Gap(20),
            Container(
              padding: const EdgeInsets.symmetric(horizontal: 5),
              width: 200,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.blue),
                borderRadius: BorderRadius.circular(20),
              ),
              child: DropdownButton<String>(
                value: dropdownValue,
                icon: const Icon(Icons.arrow_downward),
                iconSize: 24,
                elevation: 16,
                style: const TextStyle(color: Colors.deepPurple),
                onChanged: (String? newValue) {},
                items: <String>['One', 'Two', 'Free', 'Four']
                    .map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }).toList(),
              ),
            ),
            Gap(20),
            Text(
              'You have pushed the button this many times:',
              style: TextStyle(color: Colors.white),
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}