ホーム » t-saitoh の投稿 (ページ 189)

作者アーカイブ: t-saitoh

2025年5月
 123
45678910
11121314151617
18192021222324
25262728293031

検索・リンク

UPKIオープンドメイン証明の申請

学術研究機関を対象とした、無償のSSL認証キーの発行サービスの申請のTSVファイル生成を行う。 手順が長いので、肝心な所は記載しないが、その入力などの内容をメモ。 最終的に、電子情報工学科のTSVファイルと、緊急連絡システム用のTSVファイルを作った。

# mkdir /etc/apache2/ssl.key/
# cd /etc/apache2/ssl.key/
# cp 大きいファイル1 randfile1.txt
# cp 大きいファイル2 randfile2.txt
# cp 大きいファイル3 randfile3.txt
# openssl genrsa -des3
-rand randfile1.txt:randfile2.txt:randfile3.txt 2048
> maisy.key
Enter pass phrase: [passphrase]
Verifying - Enter pass phrase: [passphrase]
# lv maisy.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,xxxxxxxxx
:
-----END RSA PRIVATE KEY-----
# openssl req -new -key maisy.key -sha1 -out maisy.csr
Enter pass phrase for maisy.key: [passphrase]
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:Academe2
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Fukui National College of Technology
Organizational Unit Name (eg, section) []:Electronics and Information Department
Common Name (eg, YOUR name) []:www.ei.fukui-nct.ac.jp
Email Address []:.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
maisy:/etc/apache2/ssl.key# lv maisy.csr
-----BEGIN CERTIFICATE REQUEST-----
:
-----END CERTIFICATE REQUEST-----
maisy:/etc/apache2/ssl.key# openssl req -noout -text -in maisy.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, L=Academe2, O=Fukui National College of Technology,
OU=Electronics and Information Department,
CN=www.ei.fukui-nct.ac.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
https://tsvtool.nii.ac.jp/cgi-bin/tsvtool.cgi
TSV作成ツール:発行申請TSV
・CSRファイルから maisy.csr [CSR送信]
CSR
主体者DN CN=www.ei.fukui-nct.ac.jp,OU=...
サーバFQDN www.ei.fukui-nct.ac.jp
dNSName   なし
加入者Email 自分のメール
加入者氏名   斉藤 徹
加入者所属   福井工業高等専門学校電子情報工学科
ソフトウェア名等  Apache 2.2.9
[完了]
[ダウンロード]
issue-YYYYMMDD.tsv

実際に鍵を登録

UPKIの事務局に、issue-YYYYMMDD.tsv を送ったら、 鍵を入手するための「UKPI-ODCert]Webサーバ証明書発行受付通知」なるメールが 送られてきた。指定されたURLをアクセスして、サーバ証明書を受け取る。 ファイル名は、"サーバFQDN.cer"であった。(Apacheへの登録では"*.crt"に直す)
これに加えて、別途 "nii-odca2.crt" を入手しておく。

# cd /etc/apache2/ssl.key
# mv ...PATH.../サーバFQDN.cer ./maisy.crt
# vi /etc/apache2/sites-enabled/100-default-ssl
:
SSLCertificateFile    /etc/apache2/ssl.key/maisy.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/maisy.key
SSLCertificateChainFile /etc/apache2/ssl.key/nii-odca2.crt
:
# /etc/init.d/apache2 restart
起動すると、鍵作成時のパスフレーズを聞かれるので、入力する。

継承を説明

データを拡張してプログラムを作成することを通して、継承の概念を説明する。

C言語での限界

struct Person {
char name[ 10 ] ;
int   age ;
} ;
void print( struct Person* p ) {
printf( "%s %d\n" , p->name , p->age ) ;
}
struct Jyoshi {
struct Person person ;
int size ;  // 部下の人数
struct Person* table[ 10 ] ; // 部下へのポインタ
} ;
void print_jyoshi( struct Jyoshi* p ) {
print( &p->person ) ;
for( int i = 0 ; i < size ; i++ ) // 本人と部下のデータを表示
print( p->table[ i ] ) ;
}
void main() {
struct Person saitoh ; // 初期化も適度に行うとする
struct Jyoshi  ashida ;
print( &saitoh ) ;
// print( &ashida ) ;  // saitohと同じ様にprintしたいけど、できない
print( &ashida.person ) ;
print_jyoshi( &ashida ) ;
// 部下の表示が不要だとしたら
// わざわざJyoshiバージョンを作るのが面倒。
}

unionを使えば…

union PERSON { // 初期化の処理は省略
struct Person person ;
struct Jyoshi jyoshi ;
} ;

こういう方法を使えば、jyoshi の先頭部分はpersonであり、 共用体によって、同じ部分に person が配置されている。 こういった共用体を使って、拡張部分のあるデータを同じように扱うテクニックは、 unix のグラフィックシステム X11 に見られる。 例年は、共用体を使うテクニックまでは解説しないけど、 今年度は受講者が電子情報出身者だけになったので、解説を行った。

派生と継承

データを拡張しても同じように扱うテクニックとして、派生があることを説明。 前の例みたいなことは、C++であれば以下のように行う。

class Person { // データの共通部で元になるものを
private:       // 基底クラスと呼ぶ。
char name[ 10 ] ;
int  age ;
public:
Person( char s[] , int a ) { strcpy( name,s ) ; age = a ; }
void print() { printf( "%s %d\n" , name , age ) ; }
} ;
class Jyoshi : public Person { // 派生クラス
private:
int size ;
Person* table[ 10 ] ;
public:
Jyoshi( char s[] , int a )
: Person( s , a )  // 基底クラスの初期化
{ size = 0 ; }
void buka( Person* p ) { table[ size++ ] = p ; }
} ;
void main() {
Person saitoh( "saitoh" , 45 ) ;
Jyoshi ashida( "ashida" , 60 ) ;
ashida.buka( &saitoh ) ;
saitoh.print() ;
ashida.print() ; // ここがミソ:基底クラスのメソッドを流用
}

最後のJyoshiのデータ ashida において、print メソッドは存在しないが、 基底クラスのprintメソッドを流用してくれる。これを継承と呼ぶ。

void Jyoshi::print() {
Person::print() ;
for( int i = 0 ; i < size ; i++ )
table[ i ]->print() ;
}

上記のような、Jyoshi専用のprintを定義してもいい。

舞鶴高専交歓試合バドミントン

1005231317_320x240.jpg

ロボット技術講習会のプラットフォーム

ロボット系の技術講習会を開催予定だけれど、その実験環境を選別中。 ライントレース実験をしたいのだけれど、 昨年度は車体に4chリモコンロボット製作セットDX(TAMIYA)約7,000円を使ったけれど、 ギアボックスの組立などで手間もかかるし、別途光センサーなども必要だったりする。 そこで、実習も簡単に行うために自分の子供用に購入したKIROBO(ELEKIT)約5,700円 の方が便利そう。

KIROBO(ELEKIT)

KIROBOは、CPUにPIC16F88を使って動くロボット。IconWorks なるソフトで、 ブロック状のコマンドを並べてプログラミングもできる。IconWorksのプログラム転送には、 音声ジャックを用いている所なんかも特徴的。 タイヤのギアボックスも、サーボモータのギアボックスみたいに既に完成しているから、 子供でも1時間ほどで組み立てられる。光センサーや触覚センサーも付いているし、 IconWorks を使えば、小学生でも自律ロボットを簡単に扱える。

しかし、技術講習会では、Arduinoなどを用いてC言語のプログラミングなどを経験して もらうのが目的としているので、CPUボードは使わずに、センサー周りの回路をブレッドボード で組んで、Arduinoで動かすほうがより実践的な講習会にできる。

ということで、添付の回路図を確認。 周辺の光センサーとはブレッドボードのジャンパピンで簡単に配線できそう。 モータ用の電池ボックスなども入っているし、便利。 難点とすれば、車体前輪のタミヤ模型ならボールキャスタが使うんだろうけど、 KIROBOは、ツルツルした丸みのあるプラスチック。 ライントレースのコースに、黒のガムテープだと滑りが悪そう。 極力車体は軽くしたい。

KIROBO回路図

Arduinoの電源周りの確認

車体を軽くしたいので、KIROBOの電池ボックス(単3×4=6V)をArduinoで有効活用したい。 ArduinoのホームページのHardware にて、Duemilanove の回路図を見ると、 Vinなる端子から5V3端子レギュレータを通して5Vを生成している。ここに乾電池をつなげばいいだろう。

ということで、KIROBOの車体と光センサーを使い、この車体上に小さいブレッドボードと、 Arduino(Duemilanove)をつんで動くライントレーサロボットを作るという目標で、 材料の見積もりを取ろう。

必要機材

全員各1つ
Arduinoをはじめようキット 4,200円
USBケーブル(A-Bタイプ) 100円
グループで1つ
KIROBO 5,775円
TA7291P×2個 110円×2
220Ω×2個,47KΩ×2個 10円×4

2人1グループであれば、1人あたり7,320円。LEDやCdsがArduinoはじめようキットに入っているから、細々と部品を買い集めなくっても揃うから、簡単。 光センサーもアナログポートに直結し、閾値調整はソフトで行えばいい。

Arduinoなどを考慮して作られた、初心者向けの回路図エディタ Fritzing も試しにつかってみた。 初心者向けのブレッドボード回路図をそれなりに簡単に作れるなぁ…

合同ゼミ中間発表

高久先生と合同でゼミの中間発表をしようと相談。 例年になく斉藤研では、宿題ネタの途中結果の発表会を実施しているが、 合同中間発表だし最終目標の発表としたい。 卒研で目指す最終目標のシステムは、どんな構成で・どんな処理をするの かを発表して欲しい。

atoi(),itoa()にて演習

N進数・文字列・数値の範囲・文字コードとデータの基本が理解出来たところで、 文字列から整数値を取り出すatoi() , 数値を文字列に変換する itoa() のプログラムにて、 演習を行う。 演習用の雛形プログラムを示し、そのプログラムの挙動を示し、以下の課題とする。

int my_atoi( char s[] ) {
int ans = 0 , i ;
for( i = 0 ; s[i] != '
int my_atoi( char s[] ) {
int ans = 0 , i ;
for( i = 0 ; s[i] != '\0' && s[i] >= '0' && s[i] <= '9' ; i++ ) {
ans = ans * 10 + (s[i] - '0' ) ;
}
return ans ;
}
char* my_itoa( char ans[] , int x )
{  int i ;
ans[ 5 ] = '\0' ;
for( i = 0 ; i < 5 ; i++ ) {
int d = x % 10 ;
ans[ 4 - i ] = '0' + d ;
x /= 10 ;
}
return ans ;
}
' && s[i] >= '0' && s[i] <= '9' ; i++ ) { ans = ans * 10 + (s[i] - '0' ) ; } return ans ; } char* my_itoa( char ans[] , int x ) { int i ; ans[ 5 ] = '
int my_atoi( char s[] ) {
int ans = 0 , i ;
for( i = 0 ; s[i] != '\0' && s[i] >= '0' && s[i] <= '9' ; i++ ) {
ans = ans * 10 + (s[i] - '0' ) ;
}
return ans ;
}
char* my_itoa( char ans[] , int x )
{  int i ;
ans[ 5 ] = '\0' ;
for( i = 0 ; i < 5 ; i++ ) {
int d = x % 10 ;
ans[ 4 - i ] = '0' + d ;
x /= 10 ;
}
return ans ;
}
' ; for( i = 0 ; i < 5 ; i++ ) { int d = x % 10 ; ans[ 4 - i ] = '0' + d ; x /= 10 ; } return ans ; }

課題

my_atoi() については、 (a) 8進数・2進数・16進数で動くように、 (b) より一般的にN進数で動くように、 (c) 小数点を含む値が処理できるように (d) C言語の定数のように先頭の"0x(16進数)","0(8進数)"で 自動的に基数を判別するように、といった改良のいずれかを行うこと。 また、my_itoa については、同様に、(e) 8,2,16進数、(f) N進数、(g) 浮動小数 といったテーマより、それぞれ1つづつを選んで取り組むこととした。

レポートには、プログラム・説明・動作検証(異常動作の検証)・異常動作についての考察 を記載することとする。

課題に取り組んでもらっている中で、関数のプロトタイプ宣言を説明を行う。

インターンシップ(夏季実習)依頼中

4年担任として、インターンシップの受入れを企業にお願いする作業を、連日行っています。 現在、20名分(4EI=38名)の企業から、OKもしくはたぶんOKといった内諾をもらえている。 豊橋や長岡のオープンキャンパスの申し込みもたぶんOKとなるだろうし、 検討中のところも含めれば、山場を越えたあたりかな。

企業を選ぶにあたって、楽そうな雰囲気で選んでいる人もいるけど、 報告会だったり、実際に就職の際には、楽なインターンシップを選んだ人は、 ちょっと後悔するんじゃないかと思うのだが….

どちらにしろ、数社からはお断りだったり、寮無し自己負担だったりで、 受入れを再検討してもらっている人も出てきている。まだまだ調整は大変だけど、 慣れない電話仕事をもう少しがんばろう。

薬物乱用防止講習会

近年、大学生による大麻などによる逮捕といった事例として、 身近なところでも薬物乱用が広がっており、数年前より全4年を対象に 「薬物乱用防止講習会」が行われている。

今日は、保護師の方が、取り扱った人の事例を交えながら、薬物乱用の 怖さを語ってくれた。 当初、PRビデオの上映を予定していたが、事前動作確認はされていたものの、 年期の入った古いビデオであるためか、急に動かなくなってしまった。 このため、お話し主体の講演となった。
# おかげで話の繋がりが分かりにくかったかな…

再帰方程式part2+メモリ使用量と配列

再帰方程式の応用として、再帰による2分探索法とマージソートについて、 再帰方程式を示し代入法による一般解の予測により、 O(log N)O(N log N) を示す。 [参考昨年度資料]

テストのひねり問題で、再帰2分探索で間違った記述で処理時間がO(N)になるコードを 出題するってぇのもいいなぁ…

後半は、名前のデータベースを作るというネタで、固定サイズ配列の問題点を示す。

隠蔽化(Complex)の解説+演算子オーバライド

例年どおり、複素数のクラスを直交座標系で記述して、 隠蔽化を考慮してプログラムを書けば、後でデータ構造を極座標系に変更しても 利用者側のプログラムは一切変更不要…というネタで解説する。

今年度は、すでに受講者が電子情報のみになっているので、 例年説明をしていない演算子オーバーライドや"cout<<…<<endl" といった、iostream系の紹介(詳しい解説はしない)を行った。

途中にて、Complex::add( Complex& ) といった宣言で、「引数を参照宣言するのはなぜ?」 といった質問がでる。例で示した複素数といったオブジェクトであれば、関数呼び出しで コピーを伴う「値渡し」でも実行効率は悪くならないが、巨大オブジェクトではコピーを避けるために 「参照渡し」が一般的であるため、実務で見かける機会の多い「参照渡し記述」をしていると説明する。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー