CGIの基本サンプル
専攻科実験でのRSSを用いた、情報活用の実験で、 パラメータの入力などの希望があったので、 最も簡単なCGIのサンプルを示す。
CGIサンプル
最初に、CGIを使えるようにするために、.htaccess ファイルにて、 CGI を使えるような設定を加える。
(( .htaccess )) Options ExecCGI AddType application/x-httpd-cgi .cgi
CGI モジュールを使う、極力短いサンプルコード。 セキュリティについては、考慮していないので十分に注意すること。
#!/usr/bin/perl # なお、このサンプルプログラムは、 # セキュリティについては考慮していない。 use CGI qw/:standard/ ; use Jcode ; my $cgi = new CGI ; # cgiのパラメータをもらう my $DATA = Jcode->new( param('DATA') )->utf8 ; # データ前後の空白を取る $DATA =~ s/\s+$// ; $DATA =~ s/^\s+// ; if ( "$DATA" eq "" ) { # パラメータが無い時は、ファイルから読み出す if ( -r "data.txt" ) { open( FH , "data.txt" ) or die( "Can't access for read" ) ; $DATA = <FH> ; close( FH ) ; } } else { # パラメータがあったら、ファイルに書き込む open( FH , ">data.txt" ) or die( "Can't access for write" ) ; print FH "$DATA\n" ; close( FH ) ; } # CGIの最初の決まり文句を出力 print header(-charset=>'UTF-8') ; print start_html(-title=>'Title', -charset=>'UTF-8', -encoding=>'UTF-8', -lang=>'UTF-8') ; # 画面に出力するHTMLの内容 print "<form method='GET' action='test.cgi'>\n" ; print "<input type='text' name='DATA' value='$DATA' />" ; print "</form>\n" ; print "入力値は<pre>$DATA</pre>\n" ; # CGIの終わりの決まり文句を出力 print end_html ;
2013年11月24日(第348回)
学生さんがテスト期間中につき、教員による収録でお送りしました。
- まるよし Train Pops ~ 国語と遊ぼう! 第32回 「主語」
ゲスト:歴史科 手嶋先生
担当:長水先生、丸山先生、金田先生、川上先生、西
PICAXEだってさ

PICの応用された新製品。 プログラム書き込みも、ステレオプラグを使ったシリアル通信でできて、 書き込み後は、単体で動かすことができるので、実際に動かすときは、 外付け部品ほどんどナシ。
プログラムも、GUI な環境で動く BASIC 言語っぽいもので書ける。
書き込みケーブル(1500円) (USB-ステレオプラグ/内部にUSB-Serialが入っているんだろうな)と、 ステレオプラグ-ライタの変換(320円)さえあれば、 PICAXE-08M2(8ピン)なら、1個240円とな。
cifsでマウントしたディレクトリをsamba共有かけたら…

バックアップ用のNASを、Debian/Linuxなサーバに接続して使っているが、 その一部フォルダを、サーバ利用者にバックアップ用に使ってもらおうと、 さらに samba で共有をかけた。 しかし、そのディレクトリ内部は、すべてファイル扱いされるトラブルが発生。
状況をメモ
NASは、下記のような設定で、automount されるようにしてある。 この /nfs/nas は、個別にアクセスができることは確認済み。
(( /etc/auto.nfs )) nas -fstype=cifs,rw,credentials=パスワードファイル, uid=xxxx,gid=xxxx,file_mode=0664,dir_mode=0775 ://XX.XX.XX.XX/path
このディレクトリを、他の利用者にも活用してもらうために、 samba のファイル共有で公開する。
# 直接 NAS を利用者に使わせるのは、NASの設定が面倒なのでパス
(( /etc/samba/smb.conf )) [nas] path = /nfs/nas write list = @group read list = @group create mask = 0775 directory mash 0775 force user = nobody browseable = yes
しかし、この公開されたファイル共有を Mac OS X で接続すると、 /nfs/nas の内部のファイルは見えるんだけど、ディレクトリが、 ファイル扱いを受けてしまい、ディレクトリ内部にアクセスできない…
(( 確認 )) iMac$ ls -al /Volumes/nas -rwxrwxr-x 0 xxxxxx xxxx ..... dir1 ← ディレクトリなのに... -rwxrwxr-x 0 xxxxxx xxxx ..... file1
ひとまず動いたのは…
色々設定を試したけど、どうも サーバ側の samba がおかしい様子。 ひとまず、以下の設定をはずしたら、ディレクトリとして 扱われるようにはなった。
(( /etc/samba/smb.conf )) - unix extensions = no + # unix extensions = no ← コメントアウト
演習室のノートパソコンのDHCP設定

学内のネットワークでは、学生さんのPCを学内有線LANに 勝手に接続させないために、ネットワーク接続設定を自動化 するための DHCP サーバを動かさない方針となっている。
しかし、演習室のノートパソコンは、気軽に移動先の実験室 で使ったりという運用を行うことから、ネットワーク接続に 設定を変更したりする機会も多い。
ただ、利用後にネットワークの設定を正しく元に戻して あれば問題はないが、慌てて設定を行うと単純ミスで 間違った設定になってしまうことも多かった。
そこで、演習室内のネットワークにて、MACアドレスを 利用して、登録PCにだけ対応IPアドレスを割り振るDHCPを 稼働させた。
(( /etc/dhcp/dhcpd.conf )) : host ei-n01 { hardware ethernet XX:XX:XX:XX:XX:XX ; fixed-address 10.120.11.YYY ; }
(専攻科実験)WebService::Simple
RSSフィード活用のプログラム作成のテーマだけれど、 もう少し応用も体験してほしいので、Google Search と関係づけてもらいたい。 でも、調べてみると Google Search API は、ajax からの活用を中心に するようになったので、ちょいと変換が必要で、少し面倒…
ひとまずは、WebService::Simple が簡単っぽい。 でも、Debian/testing のサーバでも、perl-module の命名習慣から推測し、 libwebservice-simple-perl といったパッケージを探すけど、見つからない。 しかたがないので、CPAN からインストール
# perl -MCPAN -e shell cpan[*]> install WebService::Simple
同じモジュール、自室サーバと学科仮想サーバに入れたけど、 仮想サーバは底力あるから速っ!!
WebService::Simpleを必要最小限動かす
まずは、Google などの検索エンジンで、AND や ORを使った、 細かい条件付き検索のテクニックを以下URLに示す。
上記のような検索キーワードでの検索を行うのであれば、 以下に示すように WebService::Simple を呼び出せば良い。
#!/usr/bin/perl use WebService::Simple ; use Data::Dumper ; use Jcode ; my $google = WebService::Simple->new( base_url => "http://ajax.googleapis.com/ajax/services/search/web", response_parser => "JSON", params => { v => "1.0", rsz=> "large" } ); my $response = $google->get( { q => Jcode->new( "ねこ site:tsaitoh.net" )->utf8 , start => 0 } ); my $xml = $response->parse_response ; # print Dumper $xml->{responseData}->{results}->[0] ; foreach my $item ( @{$xml->{responseData}->{results}} ) { print $item->{title}."\n" ; print $item->{url}."\n" ; }
2013年11月17日(第347回)
まるとれ30回到達記念!! ~中村先生1時間ジャック~
中村先生が高専ライブの1時間を丸ごとジャックして丹南FMスタジオから生放送!
- 工場見学旅行について
- まるよし Train Pops ~ 国語と遊ぼう!
- 高専に入学する理由
ゲスト:福井高専OB 油谷様
担当:前田勝(4EI)、中村(教員)
(専攻科実験)Perlでのメール送信
専攻科の実験で、RSS による情報フィードの活用のテーマのプログラム作成中。 実験学生が、作ってみたいプログラムの案にメールの事例が多かったので、 メールの送信方法について記載しておく。
もっとも簡単なメール送信例
メールを送るためには、メール形式について理解が必要となるので、以下の資料参照。
特に、日本語などの様々な言語でメールを送る場合には、 メールヘッダの"Content-Type:… charset=…"によって、送信する文字コードなどを 指定すれば良い。ただし、日本の古いガラケーでは、JIS コード以外だと文字化けする 場合も多いため、特に問題がないのなら日本語でメールを送るには、 JISコード(ISO-2022-JP)にすべきである。
以下に、最も単純な日本語メールを送るサンプルプログラムを示す。
#!/usr/bin/perl use Jcode ; use Email::MIME ; use Email::MIME::Creator ; # メールの形式に応じたデータを作る my $mail = Email::MIME->create( # メールヘッダの必須パラメータ header => [ # (注) headerは配列へのリファレンス # "foo@example.co.jp"と書くと # @exampleの部分が配列とみなされるので''を使う。 From => 'foo@example.co.jp' , To => 'bar@example.co.jp' , # ヘッダでの漢字は、MIME形式でエンコードしないとダメ。 Subject => Jcode->new( "実験" )->mime_encode() , ] , # その他のパラメータ attributes => { # (注) attributesはハッシュへのリファレンス content_type => 'text/html' , charset => 'ISO-2022-JP' , encoding => '7bit' , } , # メールの本文 body => Jcode->new( "こんにちは" )->jis ) ; # sendmail を使ってメールを送る。 # "-t" オプションをつけるとヘッダ部を追加できる # open( FH , "|..." ) で出力をプログラムにパイプで渡す。 open( FH , "| /usr/sbin/sendmail -t" ) or die( "Can't open sendmail" ) ; print FH $mail->as_string ; close( FH ) ;
台湾への工場見学旅行のお土産もらいましたぁ。
今週1週間、3EIの学生さんは工場見学旅行で、今年は前年に引き続き台湾となりました。 先程、先に無事にもどられた西先生より、おみやげを頂きました。 特に大きなトラブルもなく、見学先の大学との学生間交流もできたようでした。
まだ、3EIの学生さんは自主見学旅行の途中でしょうが、無事に帰ってきてくださいませ。
『今日は1限目から3EIの授業、先週のネタからすると××の説明するぞ!!』と 教室に向かったけど、誰もいませんでした…
# 気づくの遅っ!!