ホーム » スタッフ (ページ 89)
「スタッフ」カテゴリーアーカイブ
macOSのOneDriveでキーチェーンのパスワード
OneDrive アプリの更新がかかったら、「キーチェーンが一致しない」というエラーで OneDrive が起動しなくなった。
対応法法を調べると、キーチェーンのリセットとか書いてあるので色々と調べたけど、いい方法がない。グダグダ考えてもアプリの一時的な問題かと思い、macOS を再起動かけたら、普通に起動してくれた。
はぁ…
高専ライブ:2018年4月15日(第570回)
収録放送でお送りしました。
- オリエンテーション合宿の話
- 乗り物の話
- サイエンス共和国 第27回「テラヘルツの話」
- ディズニーランドの話
担当:田中(2C,MC)、山野(2EI,MIX)、西島(4EI)、中島(4C),西(教員)
オブジェクト指向(2018) / ガイダンス
専攻科2年のオブジェクト指向プログラミングの授業の1回目。最初に授業全般の概要を説明した後、オブジェクト指向の歴史とC言語の構造体の説明。
オブジェクト指向プログラミングの歴史
最初のプログラム言語のFortran(科学技術計算向け)の頃は、処理を記述するだけだったけど、 COBOL(商用計算向け)ができた頃には、データをひとまとめで扱う「構造体」(C言語ならstruct …}の考えができた。 その後のALGOLの頃には、処理をブロック化して扱うスタイル(C言語なら{ 文 … }の複文で 記述する方法ができて、処理の構造化・データの構造化ができる。これが「構造化プログラミング(structured programming)」 の始まりとなる。
この後、様々なプログラム言語が開発され、C言語などもできてきた。 一方で、シミュレーションのプログラム開発(例simula)では、 シミュレーション対象(object)に対して、命令するスタイルの書き方が生まれ、 データに対して命令するという点で、擬人法のようなイメージで直感的にも分かりやすかった。 これがオブジェクト指向の始まりとなる。
この考え方を導入した言語の1つが Smalltalk であり、この環境では、プログラムのエディタも Smalltalk で記述したりして、オブジェクト指向がGUIのプログラムと親和性が良いことから普及が拡大する。
C言語にこのオブジェクト指向を取り入れて、C++が開発される。さらに、この文法をベースとした、 Javaなどが開発される。最近の新しい言語では、どれもオブジェクト指向の考えが使われている。
構造体の導入
C++でのオブジェクト指向は、構造体の表記がベースになっているので、まずは構造体の説明。
// 構造体の宣言 struct Person { // Personが構造体につけた名前 char name[ 20 ] ; // 要素1 int phone ; // 要素2 } ; // 構造体定義とデータ構造宣言を // 別に書く時は「;」の書き忘れに注意 // 構造体変数の宣言 struct Person saitoh ; struct Person data[ 10 ] ; // 実際にデータを参照 構造体変数.要素名 strcpy( saitoh.name , "t-saitoh" ) ; saitoh.phone = 272925 ; for( int i = 0 ; i < 10 ; i++ ) { scanf( "%d%s" , data[ i ].name , &(data[ i ].phone) ) ; }
情報構造論ガイダンス
情報構造論のガイダンス
プログラム作成でのポイント
この授業で恒例の、プログラムを作る場合に何に気をつけてプログラムを作成するかを聞いてみた。今年は、以下に示す3要素をうまく答えてくれたかな。
- プログラムの速度
- プログラムのわかり易さ
- メモリの使用量
プログラムを作る場合、この3要素がトレードオフの関係にある。プログラムの速度を優先すると、プログラムが分かり難くなったり、メモリを大量浪費するものだったりする。
プログラム例
例えば、配列の中から、目的データを探すプログラムの場合、最もスタンダードなプログラムは以下の方法であろう。
// ((case-1))
// 単純サーチ O(N)
#define SIZE 1024
int a[ SIZE ] ; // 配列
int size ; // 実際のデータ数(Nとする)
int key ; // 探すデータ
for( int i = 0 ; i < size ; i++ )
if ( a[i] == key )
break ;
しかし、もっと早く探したいのであれば、2分探索法を用いるだろう。
// ((case-2))
// 2分探索法 O(log N)
int L=0 , R=size ; // プログラムは複雑になった
while( L != R ) {
int M = (L + R) / 2 ;
if ( a[M] == key )
break ;
else if ( a[M] < key )
L = M + 1 ;
else
R = M ;
}
でももっと速いプログラムとしたければ、
// ((case-3))
// 添字がデータ O(1)
// 探すデータが電話番号 272925 のような 6 桁ならば
int a[ 1000000 ] ;
a[ key ] に保存
// 処理速度はクソ速いけど、メモリは大量消費
良いプログラムを作るとは
プログラムを作る時には、メモリが大量に使えるのなら、速いものを使えばいい。だけど実際には、そのシステムには限られた予算があるだろう。
実際には、限られる予算から、メモリやCPUが決まり、その会社の人員やら経験やらで、プログラム開発に使える時間がきまる。プログラムをデザインするとは、限られた条件の中で、適切な速度のコンピュータ、適切な量のメモリでコンピュータを用意し、限られた納期の中でシステムを完成させることである。
動作時間の予測
ここで、プログラムの実行時間を細かく分析してみる。例えば、前節のcase-1単純サーチをフローチャートで表せば、以下のように表せるだろう。フローチャートの各部の実行回数は、途中で見つかる場合があるので、最小の場合・最大の場合を考え平均をとってみる。また、その1つ1つの処理は、コンピュータで機械語で動くわけだから、処理時間を要する。この時間を とする。
この検索処理全体の時間 を考えると、平均時間とすれば、以下のように表せるだろう。
ここで例題
この単純サーチのプログラムを動かしてみたら、N=1000で、5μ秒かかったとする。では、N=10000であれば、何秒かかるだろうか?
感のいい学生であれば、直感的に 50μ秒 と答えるだろうが、では、Tβ,Tα は何秒だったのだろうか? 上記のT(N)=Tα+N ✕ Tβ に当てはめると、N=1000,T(N)=5μ秒の条件では、連立方程式は解けない。
ここで一番のポイントは、データ処理では N が小さな値の場合はあまり考えない。N が巨大な値であれば、Tαは、1000Tβに比べれば微々たる値という点である。よって
で考えれば良い。これであれば、T(1000)=5μ秒=Tβ×1000 よって、Tβ=5n秒となる。この結果、T(10000)=Tβ×10000=50μ秒 となる。
高専ライブ:2018年4月8日(第569回)
- 入学式の話
- 健康の話
- サイエンス共和国 第26回「壮大な借金の話」
担当:水島(4C,MC),越後(2E,MIX)、田中(2C)、中村(教員)
高専ライブ:2018年4月1日(第568回)
- うその話
- 桜の話
- サイエンス共和国 第25回「新幹線の重さの話」
- 高専ライブの話
担当:坂田(2C,MC)、西島(4EI,MIX)、山野(2EI)、西(教員)
高専ライブ:2018年3月25日(第567回)
- 卒業式の話
- 専門教科の話
- サイエンス共和国 第24回 「飛行機が飛ぶ仕組みと温暖化で困る話」
- 新年度の話
担当:越後(2E,MC)、西島(3EI、MIX)、木村(F3)、中村(教員)
卒業生のお土産
謝恩会で卒業生からのお土産を頂きました。
電子マネー派な私のことをわかってるね。 んで、アマゾンギフトカードの入れ物も、宅配ダンボール風なのに、マグネットで蓋が閉まったりと意外と凝った作り。さすがアマゾン。
ということで、知り合いとのウケ狙いで、名刺入れに活用してみた。そのままじゃ味気ないのでクロネコの送付状を縮小印刷して貼ってみた。
システム開発のジレンマ
現在、他の先生と共同で発達障害者支援システムの開発をしているけど、3/21に利用者を交えた事例検討会があった。
参加者の意見交換の中で、いくつかのシステム作りのジレンマを感じる意見があった。簡単にまとめると…
「支援システムのおかげで、支援能力は2倍になった。でも便利だからこそ、保護者は先生から3倍のサポートを期待する。」(N倍は感覚をわかってもらうための便宜的な数字)
この両者の不足分の「1」は…
- 先生への過度の負担にならないか…
- コンピュータ屋的には、PDCAサイクルもう1周まわして4倍にすりゃいいじゃん…でも、その開発費はどこから?
- ICTによる支援も大事だが、親と子供の直接の関わりを疎遠にさせてはいけない。