ホーム » 2024 (ページ 4)
年別アーカイブ: 2024
情報ネットワーク基礎・ガイダンス
情報ネットワーク基礎では、インターネットがどのような仕組みなのか、どのようにして動いているのかを説明する。TCP/IPって何? IPアドレスって何? セキュリティって何?
あなたが使っているネットワーク機能は?
まずは、Teams にて「あなたが使っているネットワーク機能は?」を返信にて書き込んでください。
ただしネットワークを使うことでコンピュータがどう動いているかの視点で答えてほしい。
共有:ネットワークプリンタ、ファイル共有… – サービスを利用する視点
(ハードウェアや情報を共有)
分散:大量のコンピュータで負荷分散、リスク分散… – サービスを提供する視点
(仕事を分散し全体で高速化, 沢山のコンピュータの1台が壊れても全体は動く)
ネットワークの歴史
昔のコンピュータは、開発にお金がかかるため1台のコンピュータを全員で使うもの(TSS: Time Sharing System/時分割システム)だった。冷戦の時代、軍の重要な処理を行うコンピュータでは、コンピュータのある所に核攻撃を加えられ、軍の機能がすべて動かなくなることは問題だった。1970年頃にアメリカ国防総省ARPANETがインターネットの原型(TCP/IP)を作る。
1980年代には、パソコンが同じ組織内でネットワークで繋がるようになるLAN(Local Area Network)が使われるようになる。1990年代には、LANどうしを遠隔地接続をするWAN(Wide Area Network)が発達し、Internet(広域コンピュータネットワーク)という言葉が広く普及していった。欧州原子核研究機構(CERN)で、ティム・バーナーズ=リーがWorld Wide Web/httpを開発(1989)。1995年、マイクロソフトの家庭用パソコンのOS Windows95の普及と共にWWWが普及する。
- 1980年代:パソコン通信※
- 1997年:weblog(blog:自分で作るwebページの拡大)
- 1998年:Google検索
- 1999年:2ch
- 2003年:SNSの誕生(2004:mixi)
- 2006年:Twitter,Facebook(一般開放)
コンピュータインタフェースとネットワーク(物理層)
ネットワークにおける情報伝達において、伝送媒体(電気信号,光)にて0/1を伝えるための取り決めは、物理層という。まずは、コンピュータと機器の接続について考えると、シリアル通信とパラレル通信に分類できる。(シリアル通信は時間を細かく区切って複数の信号を送ることから時分割多重通信と呼ぶこともある)
通信の高速化に伴い、伝送の配線はコンデンサやインダクタンスを考慮したインピーダンスマッチングが重要となる。このため、高速通信のインタフェース両端は終端抵抗(ターミネータ)が必要だった。
1本の信号線で単位時間あたりのデータ通信速度が同じであれば、パラレル通信の方が高速であるが、長い通信路ではノイズ対策が重要でありノイズ対策をきちんとした線が複数本あるとケーブルが太くなることから、長い通信路ではシリアル通信が使われる。少ない信号線に対してノイズ対策をきちんと施すことができるので、長い通信路ではシリアル通信の方が高速となる。
パラレル通信の例:パラレルポート(プリンタ用)IEEE 1284、ハードディスクATA(IDE)、計測器GP-IB
シリアル通信の例:RS-232C、IEEE1394(FireWire)、ハードディスク(SATA)、USB1.1, USB2.0, USB3.0, USB3.1 Gen2, USB3.2 Gen2x2…、有線LAN/Ethernet
有線LAN/Ethernetの種別
- 半二重通信 – 送信/受信を1本の信号線でおこなう。
- 全二重通信 – 送信用の信号線、受信用の信号線がそれぞれ別。送信受信を同時にできる。
- 複信 Simplex(一方的な放送), Half Duplex(半二重), Full Duplex(全二重)
- 10BASE/* – 10Mbit/sec
- 10BASE/5 – ケーブルに針を刺して増設 – 半二重通信/ターミネータが必要
- 10BASE/2 – T型BNCケーブルで延長 – 半二重通信/ターミネータが必要
- 10BASE/T – HUBで分配(終端抵抗などの問題はHUBが解決してくれる) – 全二重通信
- 100BASE-T – 100Mbit/sec / CAT5
- 信号線のノイズ対策は、シールドで覆う、信号線を“より線”(ツイストペア)にするなどの対策が重要
- シールドや”より線”の方式でカテゴリー CAT5,CAT6,CAT7 などで分類される
- 信号線のノイズ対策は、シールドで覆う、信号線を“より線”(ツイストペア)にするなどの対策が重要
- 1000BASE-T ギガビット – 1000Mbit/sec = 1Gbit/sec / CAT6
- 10000BASE , 10GBase – 10Gbit/sec / CAT7
![]() 同軸ケーブル |
![]() ツイストペアケーブル |
ツイストペアケーブルがノイズに強い理由
理解確認
- ネットワークにおける共有と分散について例をあげて説明せよ。
- TSSのような通信によるコンピュータと、TCP/IPによる通信網を比べ何がどう良いのか?
- シリアル通信とパラレル通信、それぞれの利点欠点は?
- 10BASE/5,10BASE/2,10BASE/Tのそれぞれの問題点は?
- CD1枚のデータを1000BASE-Tのネットワークで転送するのに何秒かかる?
- サンプリングレート44.1kHz,16bit,ステレオ2ch,74分
データベースガイダンス2024
インターネットの情報量
インターネット上の情報量の話として、2010年度に281EB(エクサバイト)=281✕1018B(参考:kMGTPEZY)で、2013年度で、1.2 ZB(ゼタバイト)=1.2✕1021B という情報があった。ムーアの法則の「2年で2倍」の概算にも、それなりに近い。 では、今年2024年であれば、どのくらいであろうか?
- ムーアの法則でいけば、281EB(2010年)×214/2=36ZB(2024年)だけど
- 大塚商会の2016年度における2020年度の予測では…
- アメリカのIDCの2020/5月の発表では、59ZB!? — 236ZB
しかし、これらの情報をGoogleなどで探す場合、すぐにそれなりに情報を みつけてくれる。これらは、どの様に実装されているのか?
Webシステムとデータベース
まず、指定したキーワードの情報を見つけてくれるものとして、 検索システムがあるが、このデータベースはどのようにできているのか?
Web創成期の頃であれば、Yahooがディレクトリ型の検索システムを構築してくれている。(ページ作者がキーワードとURLを登録する方式) しかし、ディレクトリ型では、自分が考えたキーワードではページが 見つからないことが多い。
そこで、GoogleはWebロボット(クローラー)による検索システムを構築した。 Webロボットは、定期的に登録されているURLをアクセスし、 そのページ内の単語を分割しURLと共にデータベースに追加する。 さらに、ページ内にURLが含まれていると、そのURLの先で、 同様の処理を再帰的に繰り返す。
これにより、巨大なデータベースが構築されているが、これを普通のコンピュータで実現すると、処理速度が足りず、3秒ルール or 5秒ルール (Web利用者は次のページ表示が3秒を越えると、次に閲覧してくれない)を実現するための能力が不足してしまう。だからこそ、これらを処理するには負荷分散が重要となる。
Webシステムの負荷分散
一般的に、Webシステムを構築する場合には、 1段:Webサーバ、2段:動的ページ言語、3段:データベースとなる場合も 多い。この場合、OS=Linux,Web=Apache,DB=MySQL,動的ページ生成言語=PHPの組合せによる、 LAMP構成とする場合も多い。
OS = Linux [ Webサーバ 動的Web言語 データベース ] User - - - - - Apache ----- PHP ----- MySQL
一方で、大量のデータを処理するDBでは、フロントエンド,セカンダリDB(スレーブDB),プライマリDB(マスタDB)のWebシステムの3段スキーマ構成となることも多い。
フロントエンドは、大量のWebユーザからの問合せを受ける部分であり、必要に応じてセカンダリDBに問合せを行う。
大量のユーザからの問合せを1台のデータベースシステムで捌くには処理の負荷が高い場合、複数のデータベースで負荷分散を行う。プライマリDBは、複数のデータベースシステムの原本となるべきデータを保存される。負荷分散の為に分散されたセカンダリDBは、プライマリDBと内容の同期をとりながらフロントエンドからの問合せに応答する。
データベースシステム
データベースには、ファイル内のデータを扱うためのライブラリの BerkleyDB といった場合もあるが、複雑なデータの問い合わせを実現する 場合には、リレーショナル・データベース(RDB)を用いる。 RDBでは、データをすべて表形式であらわし、SQLというデータベース 問い合わせ言語でデータを扱う。 また、問い合わせは、ネットワーク越しに実現可能であり、こういった RDBで有名なものとして、Oracle , MySQL , PostgreSQL などがある。 単一コンピュータ内でのデータベースには、SQLite などがある。
リレーショナルデータベースの串刺し
|
このような表データでは、たとえば「みかん」の単価が変更になると、2行目,4行目を変更しなければいけなくなる。巨大な表の場合、これらの変更は大変。
そこで、この表を2つに分類する。
|
|
||||||||||||||||||||||||||||
必要に応じて、2つの表から、以下のような SQL の命令で、データを抽出する。
select 単価表.商品名, 単価表.単価, 販売表.個数, 単価表.単価*販売表.個数 from 単価表, 販売表 ; |
データベースに求められるのACID特性
データベースシステムと呼ばれるには、ACID特性が重要となる。(次に述べるデータベースが無かったら…を参照)
- A: 原子性 (Atomicity) – 処理はすべて実行するか / しない のどちらか。
- C: 一貫性 (Consistency) – 整合性とも呼ばれ、与えられたデータのルールを常に満たすこと。
- I: 独立性 (Isolation) – 処理順序が違っても結果が変わらない。それぞれの処理が独立している。
- D: 永続性 (Durability) – データが失われることがない(故障でデータが無くならないとか)
しかし、RDBでは複雑なデータの問い合わせはできるが、 大量のデータ処理のシステムでは、フロントエンド,セカンダリDB,プライマリDB の同期が問題となる。この複雑さへの対応として、最近は NoSQL(RDB以外のDB) が 注目されている。(例: Google の BigTable)
データベースが無かったら
これらのデータベースが無かったら、どのようなプログラムを作る 必要があるのか?
情報構造論ではC言語でデータベースっぽいことをしていたが、 大量のデータを永続的に扱うのであれば、ファイルへのデータの読み書き 修正ができるプログラムが必要となる。
こういったデータをファイルで扱う場合には、1件のデータ長が途中で 変化すると、N番目のデータは何処?といった現象が発生する。 このため、簡単なデータベースを自力で書くには、1件あたりのデータ量を 固定し、lseek() , fwrite() , fread() などの 関数でランダムアクセスのプログラムを書く必要がある。
また、データの読み書きが複数同時発生する場合には、排他処理(独立性)も 重要となる。例えば、銀行での預け金10万の時、3万入金と、2万引落としが 同時に発生したらどうなるか? 最悪なケースでは、 (1)入金処理で、残金10万を読み出し、 (2)引落し処理で、残金10万を読み出し、 (3)入金処理で10万に+3万で、13万円を書き込み、 (4)引落し処理で、残金10万-2万で、8万円を書き込み。 で、本来なら11万になるべき結果が、8万になるかもしれない。
さらに、コンピュータといってもハードディスクの故障などは発生する。 障害が発生してもデータの原子性や永続性を保つためには、バックアップや 障害対応が重要となる。
iOS18, macOS Sequoia 更新でWiFi注意
iOS18, iPadOS18, macOS Sequoia などが9/20に公開されインストールした人も多いとは思いますが、学内のWiFi fnct-student などに接続する際には、MACアドレス認証機能を使っているので、固定したMACアドレスの必要があります。しかし、iOS18, iPadOS18, macOS Sequoia をインストールした際にセキュリティ対策にて「プライベート WiFi アドレス」のオフの設定が外されるようです。
Apple系端末で 学内の WiFi に繋がらないというトラブルの際には、下記のように「プライベート WiFi アドレス」= オフに改めて設定をする必要があります。
IchogoJamのロボット制作のメモ
2024年9月15日(日) 09:30~11:30
プログラム自動起動
IchigoJam で自走ロボットを作ると、モニターやキーボードをつけて動かすのは困難。このため、IchogoJam を起動したらすぐにプログラムを起動したい。
この場合は、プログラムを “SAVE 0” で保存しておき、IchogoJam を起動させるときに BTN() 機能で使う基板上のボタンを押しながら起動する。これにより起動時に “LOAD 0” を実行してくれる。
プログラムの切り替え
かにロボコンでは、スタート地点からボールの回収フィールドまでライントレースで移動し、回収の動作をして、再びライントレースでスタート場所に戻る必要がある。この際、ライントレース動作と回収動作は異なる動きとなる。
また、右コースか左コースかの違いによってプログラムを変化させたいかもしれない。こういう場合は、“LRUN” 機能を使う。
例えば、ライントレースの処理を “SAVE 0” で保存しておき、回収フィールドの処理を “SAVE 1″ で保存してあるのであれば、ライントレースの処理の中で「回収フィールドに到達した」と判断した時に、”LRUN 1” を実行すれば “LOAD 1″を実行してプログラムを起動できる。
IchigoJamと MableSylup への電源
IchigoJam を MapleSylup に接続してロボットとして動かす場合には、ジャンパーピン”J1″に注意が必要。
通常 IchigoJam と MapleSylup でロボットを使う場合、ジャンパーピン”J1″をショートさせて、MapleSylup に接続した乾電池などの電源を IchigoJam に供給して動かす。しかし、電流をたくさん使うようなモータ制御をする場合、乾電池だけでロボットを動かすと電流を モータに使われ、IchigoJam が誤動作する場合がある。
こういう場合には、IchigoJam には USB のモバイルバッテリーなどを搭載させ、IchigoJam はモバイルバッテリー、MapleSylup とモーターは乾電池で動かす。この場合には、ジャンパーピン”J1″ は抜いて動かす方がよい。
中間発表会の資料作成
- 0923_3期生_中間発表会のための資料 ([019]2024-クラフテックラボ)
- 6足歩行ロボットの組み立て(9/14)
- IchigoJamと光センサー(8/17)
- IchigoJamとMapleSylup(7/25)
6足歩行ロボットの組み立て
2024年9月14日(土) 13:00~15:30
6足歩行ロボット
音センサー歩行ロボット製作セット(楽しい工作シリーズNo.166)の「Cタイプ-6足歩行ロボット」を参考に6足歩行ロボットを作成する。
ギアボックスが、左右2chでシャフトが長いので2cmほど切り詰める作業が必要となった。
パーツも、今回の車体のベースとしているリモコンロボット製作セット(楽しい工作シリーズ No.162)の部品では、シャフトとか足りないので、実験室にあった以前購入しておいた別のキャタピラ型リモコンロボット製作セットの部品を流用。
車体の速度をあげるには
歩行速度を上げるには、どうすればいいか?
- モータの電圧を上げる
- モータを高速なタイプに交換
- ギアボックスのギア比を変える
- 脚を伸ばす
- 中央のクランクアームの半径を伸ばす
IchigoJamと光センサー
7/31(水) 18:30~20:00 風邪のため
8/17(土) 09:30〜12:00
光センサーの機能
光センサーを GND=MapleSylupのGND, VCC=MapleSylupのVCC=5V, D0=IN2 に接続。
IN1 は BTN につながっているので、入力に接続するときは IN2, IN3, IN4 などを使うこと。
まずは電圧を測ってみよう。
MapleSylup V+ = 5.03V 白テーブルの時 D0 = 0.19V 黒線 の時 D0 = 4.96V
このような状態にならないのであれば、光センサー中央の青い調節ボリュームを動かして、黒線の上でだけ 4V を超えるように調整をする。
IchigoJam で光センサーを読み取る
IN() 関数は、指定した入力ポートが High=1 か Low=0 かを読み取る。
ANA() 関数は、指定した入力ポートの電圧を 0〜1023 の値で読み取る。0Vで0, 3.3Vで1023となる。黒線の上だと電圧が4.9V なので 1023 となる。
((( 黒線 ))) PRINT IN(2) 1 PRINT ANA(2) 1023 ((( 白線 ))) PRINT IN(2) 0 PRINT ANA(2) 61
IN命令は、ポート番号を指定しない IN() で呼び出すと、IN1,IN2,IN3,IN4 の値を IN1=1,IN2=2,IN3=4,IN4=8 の和で返す。(2進数の考え方)
2進数の各けたが次のような意味になっている。
8 4 2 1 IN4,IN3,IN2,IN1
ロボットを動かす最初の実験
最初のロボット制御の実験として、車体を進ませて、黒線の所まで走ったら停止させてみよう。
- 車体を前進させるためのポート (OUT1,OUT2) 左モーター, (OUT5,OUT6) 右モーター をつなぐ。
- 「 OUT ‘010001 」 で車体が前に動くか確認する。
- OUT1=1,OUT2=0 , OUT5=1,OUT6=0
- 回転方向が揃っていないと車体が回転するので、方向が違っていたらモータの+端子,-端子を入れ替える。配線を直さないのなら、OUT1,OUT2などの1,0を入れ替える。
- 「 OUT ‘010001 」 で車体が前に動くか確認する。
- IN2 左光センサー、IN3 右光センサーにつなぐ。
<<の部分には何を書けばいい?>> 10 OUT <<前進>> 20 IF IN(2) = <<白>> THEN GOTO 10 30 OUT <<停止>>
車体をゆっくり動かす
ここまで説明した方法だと、車体が速く動きすぎるかもしれない。ゆっくり動かすにはどうしたらいいだろうか?
直流モータをゆっくり動かすには、モータに加える電圧を下げればいい。ただし、モーターの中身の電磁石はただの電線。電気がたくさん流れるのであまり良い方法ではない。
ゆっくりうごかすには、ちょっと動かして、ちょっと止める…を繰り返せばいい。
10 OUT <<前進>> : WAIT 1 20 OUT <<停止>> : WAIT 1 30 GOTO 10
車体を曲がらせる
車体の進行方向を曲げたかったら、片方を止めて、もう一方を動かせばいい。
- 停止OUT1=0,OUT2=0 , 前進OUT5=1,OUT6=0
でも、これだと左タイヤを中心に回転してしまう。少しづつ左にまがるようにするにはどうすればいいだろうか?
2つの光センサーの扱い
ポートを指定しないIN()命令をつかうと、IN1,IN2,IN3,IN4 の値をまとめて読むことができる。今回の実験では、IN2,IN3に光センサーを接続する。この場合 IN() で読み込むと、以下のような値が読み込める。
左 | 右 | IN() | 値 |
---|---|---|---|
黒 | 黒 | IN4,IN3,IN2,IN1 = 0110 | 6 |
黒 | 白 | IN4,IN3,IN2,IN1 = 0010 | 2 |
白 | 黒 | IN4,IN3,IN2,IN1 = 0100 | 4 |
白 | 白 | IN4,IN3,IN2,IN1 = 0000 | 0 |
しかし IN()では IN1,IN4 の値も読み込んでしまい、IN1,IN4には何もつながない状態であっても、他の電圧などの影響でIN1=1,IN4=1といった値になる場合もあるため、IN1,IN4の値が1であっても強制的に0に変化させたい。
2進数での論理積 &
論理積演算命令 x & y は、2進数の各桁が 両方とも1 の所だけ 1 になる計算命令。
x = `0101 IN()=`1110 y = `0011 `0110 x & y = `0001 `0110
このことから、IN()&6 (6=`0110)を使えば、IN2,IN3 の値だけを取り出すことができる。
ライントレース処理
光センサー1個で、白黒の境界を走る。
光センサー2個で、黒線の上を走る。
10 A=IN()&6 20 IF A=6 THEN OUT <<<前進>>> 30 IF A=2 THEN OUT <<左前進>> 40 IF A=4 THEN OUT <<右前進>> 50 IF A=0 THEN OUT <<止まる>> 60 GOTO 10
急カーブ対策
ライントレースでは急なカーブがあるとコースから外れることもでてくる。こういう時は車体の大きく曲がらせるようにモータを制御すればいい。しかし大きく曲がるようにすると、車体が左右に頻繁に首を振る動きとなり、移動が遅くなってしまう。
こういう時は、どうすればいいだろうか?
「前回のセンサーの値」と「今回のセンサーの値」が、白黒とか黒白の場合。
「前回のセンサーの値」と「今回のセンサーの値」が、黒黒とか白白の場合。