記事一覧

「カレンダー」をcgi化

うちのHPにある「カレンダー」、これは社内PCが毎日htmlファイルを作成してサーバーにアップロードするという方式をとっていました。

まあ、自動なのでそのままでも私としては面倒はないのですが、どうせならとcgi化しました(自分でcgiを書いたのではなくフリーのcgiを使っただけですが)。

会社の休日を表示する仕組みとしては、年に一回(休日を変更した場合にはその都度)休日データを作成してアップロードするという方式をとったので、以前のように

「トラブルのせいでカレンダーが更新されない」

という現象はなくなります。でも、以前の方式は、ftpやその他ネット関連、サーバーのトラブルが分かりやすいというメリットはあったんです。メリットって言って良いものか分かりませんが。

「管理人の独り言」移設

もともとこのページは、HPを作る際に何となく書き始めたものです。当時はブログもなかったですし、CGIに対する知識もなかったのでとりあえずHomePageBilderというHPを作るためのソフトで書いていました。

で、問題は「更新がすごく面倒くさい」ってことです。何か書きたい時にイチイチhtmlエディタなんて使っていられないんですよ。この状況、どげんかせんといかん、とずっと思っていました。

一度はlivedoorのブログに移しては見たのですが、やはり外に置くってのはどうなんだろう。ということで、いろいろと掲示板CGIや日記CGI、ブログCGIを探して、ようやく現在のCGIに行き着きました。これでようやく落ち着くのかな?

IT

ファイル 30-1.jpgファイル 30-2.jpg

ITという言葉が使われ出したのはいつからでしょう。森首相がイットと読んだなんて事もありましたが、このITって言葉は最近は以前に比べると耳にする機会が減ったように思います。

今日ガソリンを入れたんですよ。「軽自動車だから軽油だと思って入れてしまった」なんて話を思い出して「でもきちんと見ればちゃんと間違えないための表示があるじゃないか。ほら、ハイオクは黄、レギュラーは赤、軽油は緑に色分けされているし」と思いつつ給油を始める。すると、給油口のフタの裏にちゃんと油種を表示したシールが貼ってあることに気付く。しかし、、、赤色のシールで「無鉛プレミアム」って、色も言葉も一致しないじゃん!別のガソリンスタンドをみると、今度は赤と緑が逆になっている。

ITというと電子化やコンピュータが頭に浮かぶが、その前にもっと基本的なことをしっかりおさえて電子化やコンピュータが必要ない仕組みを作るのが本当のITなんだろうと感じたのですが、どうなんでしょう。

サーバー移転

2000年の8月にHPを開設して依頼、ずっと同じところのホスティングサービスを利用してきました。月額3500円で50メールアカウント、メール容量無制限、HP容量50MBと必要十分だったのですが、メールアカウントの設定を変更すると、時々きちんと設定が反映されずにおかしな動きをする、SPAMメールに対してなすすべがない、等から移転を決意しました。

で、今度の移転先は、メールアカウントは50、ディスク容量はGB単位、SPAMメール対策あり、WebMail機能あり、ネットショップを開設する機能あり等、とても便利そうです。しかも値段は3900円と以前とほとんど変わらず。

今回の移転を機会に、「新着情報」をCGIに変えたり「ここ」をlivedoorに移したりと、少し手をいれてみました。

SMTP認証

最近のSPAMメール急増により、いろいろなところでPOPbeforeSMTPやSMTP認証、ポート25ブロックなどが行なわれているようです。そして、うちが借りているSMTPサーバもSMTP認証必須に。
さて、一般のメールソフトは問題ないんですが、自動で社員等にメールを送っているプログラム、これがちょっと問題。何が問題かって、現在SMTP認証に対応していないってのが問題。
このプログラム、bsmtp.dllというモジュールを使ってメールを送信しています(2003/12/25参照)。で、ところが、bsmtpはSMTP認証に対応していないから、必死で対応しているモジュールを探す。
一時間ほど探していると、なんと、bsmtpでのSMTP認証のやり方がうまくいかない、なんて質問にヒット。。。ってことは、bsmtpってSMTP認証に対応しているってこと?
ということで調べてみると、Fromのところに

" & vbTab & "user:password"

というようにユーザー名とパスワードを付け足すだけでSMTP認証への対応完了(^_^;)

吉見町にBフレッツがきた!

先日、「NTT東のHPで吉見町がBフレッツのエリアに入ったかの確認」を行なうと、予想に反して△(一部エリア)になりました。ビックリして調べてみると、吉見町の中でも吉見工場がある久保田はNGで、塗装工場がある久米田がOKだと分かりました。なので早速申し込み、めでたく塗装工場はBフレッツが開通しました。

やっぱり、ADSLよりはるかに速くて快適です。しかも値段は大差ない。はやく久保田にもBフレッツがきて欲しいものです。

マイライン、電話

最近はあまり聞かなくなった「マイライン」、うちの会社はと言うと

   NTTコム-プラチナライン(県内3分8円、県外3分15円)4回線分

となっています。以前は東京電話でしたが、県内市外通話が多い弊社にとってはプラチナラインはとても都合が良いので変更しました。

で、ある日NTT「ひかり電話」を調べてみたのですが

[現状のISDN2本(プラチナライン)]
  月額7,060円で4回線、県内3分8円県外3分15円

[ひかり電話オフィス(追加1チャネル)]
  月額3,800円で4回線、対固定電話3分8円

[ひかり電話オフィス(追加3チャネル)]
  月額5,100円で6回線、対固定電話3分8円

[ひかり電話オフィス(追加5チャネル)]
  月額5,900円で8回線、対固定電話3分8円

[ひかり電話(安心プラン、ダブルチャネル)]
  月額1,400円で2回線、対固定電話3分7.2円、無料通話1,152円分付

[ひかり電話(もっと安心プラン、ダブルチャネル)]
  月額3,900円で2回線、対固定電話3分7.2円、無料通話4,320円分付

   *ひかり電話は、Bフレッツ使用が前提のサービス
   *ひかり電話の場合、ナンバーディスプレイは+400円
   *ひかり電話オフィスの場合、ナンバーディスプレイは+1,200円
   *ダイヤルイン番号は、一般電話800円に対してひかり電話は100円とお得

現状の4回線(FAX込み)は時々回線が埋まってしまうので、ひかり電話オフィス6回線(これにナンバーディスプレイを足しても6,300円)を考えていましたが、会社の代表電話をIP電話に換えるというのはなかなか抵抗感があるため、とりあえずひかり電話ダブルチャネルを発信専用として追加して様子を見てみることにしました。
 ひかり電話導入のオマケとして、追加番号が100円なことを利用して電話番号を追加してみました。いずれオフィスタイプにした時に部署毎のダイヤルイン番号を割り当てようかと。

導入で一番問題だったのは、「ひかり電話で発信すると、相手に通知される番号が代表番号と異なる」ということでした。特に携帯電話相手だと着信履歴で折り返しかけてきたりしますね。
ところが、実際にやってみると、弊社のPBXは携帯にかけると自動的に「0033」を付加、するとひかり電話では発信できないので自動的にISDN(プラチナライン)から発信されます。一安心。


代表用アナログx4、FAX用アナログ、通信用ISDN
(アナログx2をISDNx1と置き換えれば基本料金ダウン!)

代表用ISDNx2、FAX用アナログ、通信用ISDN
(代表とFAXが局番が違うので間違いFAX多発。FAX番号移行を計画)

代表用ISDNx2、新FAX用アナログ、FAX用アナログ、通信用ISDN
(旧FAXを廃止)

代表用ISDNx2、新FAX用アナログ、通信用ISDN
(FAXが回線を占有するのはもったいない)

代表用ISDNx2(新FAXはダイヤルインに)、通信用ISDN
(FAX込みで4回線だと、時々回線が埋まる)

代表用ISDNx2、ひかり電話(ダブルチャネル)、通信用ISDN1本

NASの導入(挑戦者のLanTank)

最近データ量がとても増え、サーバ一台に入れておくのが辛くなってきました。そこで、IO-DATAという会社が「挑戦者」というブランド名で出しているLanTankという製品を購入。これは、ハードディスクを入れてネットワークに繋いで、みんなでデータの読み書きができるという、一般にNetwork Attached Storageと言われている物です。
すでに社内にはBuffalo製のLinkStationというNASを導入しているのですが、これは内蔵ディスクにトラブルが発生した時に困ってしまいます。しかし、LanTankはディスクを 2個内蔵でき、どちらかが壊れてもOK。

 さて、購入して箱を開けると、パーツがたくさん入っていて自分で組み立てるようになっていました。しかも中にマニュアルはありません。まさにブランド名通り。。。
 1.LanTankに入れる予定のディスクをパソコンに繋ぎ、パッケージに入っていたCD-ROMを使って OS(UNIX)を入れる
 2.LanTankにディスクを入れて組み立てる
 3.Sambaをインストールする

大雑把に書くとこんな感じの作業ですが、とても大変でした。ネットでいろいろ情報を探して何とか終了しましたが、まさに「挑戦者」って感じでした。

ここからはメモ。

1.OSをHDDに書き込み
 CD-ROMでブート可能なPCがあればOK。

2. LanTank組み立て
 上記リンクの通りでOK。ただし、ケースを閉めるのは本当に最後。

3.ウェブブラウザーで設定1
 LanTankの後ろ、スイッチをMDI-X側に変え、LanTankとパソコンをLanケーブルで直結。パソコン側のIPアドレスを192.168.0.2に固定する。
 http://192.168.0.200 でLanTankにアクセスすると、ディスクモードを聞いてくるので選択する。
 この後、本来ならhttp://192.168.0.200 (ID:admin,PWD:)で設定ページが開くはずだが IEのキャッシュのせいで開かないので、IEの[ツール]-[インターネットオプション]でインターネット一時ファイルの削除を行なってから設定ページを開く。

[管理者設定]の項目から「telnetサービスの動作」を開始させ、[ネットワーク設定]の項目からIPアドレス、サブネットマスク、GW、DNSを設定する。ここで、GWとDNSのどちらかうまく設定できない場合があるがとりあえず無視。IPアドレスを変更したのでLanTankを会社のネットワークに繋げる

4.マイネットワーク設定 LanTankの設定をするPCにマイネットワーク設定をする(このページの5に記述あり)

5.アップデートをする
 必要なファイルを、上記4で作ったネットワークプレースから/share/othersにコピー。
  lantank-update_1.0_sh4.deb
  mt-daapd4LANTANK/ (フォルダ含む複数ファイル)
 ターミナルソフト(TeraTermとか)でLanTankにtelnet(ID:admin,PWD:password)。ログイン画面が出るまでとても時間がかかる
 rootに(su[enter]と入力してからパスワードtmaster)。
 cd /share/others
 dpkg -i lantank-update_1.0_sh4.deb
 reboot
 Lantankが再起動するので、ウェブブラウザーでGW,DNSをきちんと設定し直す。
 もう一度telnetでログイン。su後
 cd /share/others/mt-daapd4LANTANK/
 dpkg -i mt-daapd_0.2.2-1LANTANK_sh4.deb

6.sambaをインストール
  samba_3.0.14a-3_sh4.deb
  samba-common_3.0.14a-3_sh4.deb
  samba-dbg_3.0.14a-3_sh4.deb
  samba-doc_3.0.14a-3_all.deb
  libcupsys2-gnutls10_1.1.23-10_sh4.deb
  libkrb53_1.3.6-2sarge2_sh4.deb
  libroken16-kerberos4kth_1.2.2-11.2_sh4.deb
  swat_3.0.14a-3_sh4.deb
  (ファイルの入手はiohack)
 を5と同じように/share/othersにコピー
 dpkg -i samba*.deb lib*.deb swat*.deb
 この際、選択を要求されたらそのまま[enter]。ただしワークグループ名入力は必須かな?

7.ここらでパスワードを変更
 まだtelnetのまま、
  passwd root
  passwd admin
 で、それぞれパスワードを変更する。また、LanTankにアクセスする予定のユーザーを
  useradd ichipre_taro
  passwd ichipre_taro
 のように登録しておく。

8.inetd.confを編集
 vi /etc/inetd.conf で最後の行を編集
  swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat
 のように、#でコメントアウトしていたのを有効にする
 これが終わったらreboot

9.sambaの設定
 http://XXX.XXX.XXX.XXX:901 (ID:root, PWD:7で設定したパスワード)でsambaの設定画面(SWAT)を開き
 [PASSWORD]からユーザーを追加
 [SHARES]から共有フォルダを設定
 [STATUS]からsmbdをrestart

CAIボックスから自動でDL

昨年、あるお客さんとのデータのやりとりが専用回線,H/W,S/WからJNX接続CAIボックス経由になりました。これによりコストはかなり削減することができました。しかし、オペレーションがかなり面倒。。。ということで、当然目指すは自動化。

 しかし、CAIボックスはftpやhttp基本認証といった単純な方法ではなく、かなり特殊。そこで、手動オペレーションを自動化することにした(開発は当初VB5.0、のちにACCESS97)。

 まず、IEを起動する方法を調べる。

 Dim tWeb As WebBrowser
 Set tWeb = CreateObject("InternetExplorer.Application")
 tWeb.Visible = True
 tWeb.Navigate "https://www.cai-site.net/bhive/bhive/servlet/IndexView"
 WaitWhileBusy '(注:赤字はオリジナル関数で、後に記す)

難しいと思っていたが、これであっさり表示できました、ちょっと拍子抜け。しかし、ここからが本番。次はユーザー名とパスワードを入力し、ログインする処理。

 If tWeb.LocationName = "共通基盤 情報ポータルへようこそ!" Then
  tWeb.Document.Forms(0).elements("username").Value = uid$
  tWeb.Document.Forms(0).elements("password").Value = pwd1$
  ClickObj tWeb.Document.Forms(0).Document, "ログイン@Value"
  WaitWhileBusy
 End If

ここはちょっと悩みました。しかし、ClickObj関数を作ることで解決。ちなみに、このWebBrowserオブジェクトを使う時には注意が必要です。withを使って省略しようとすると実行時にエラーになってしまうパターンが存在します。

これでログインがうまくいきました。次に待っているのがパスワード変更画面。

 If tWeb.Location = "共通基盤 パスワード変更" Then
  tWeb.Document.Forms(0).elements("old").Value = pwd1$
  tWeb.Document.Forms(0).elements("new").Value = pwd2$
  tWeb.Document.Forms(0).elements("new2").Value = pwd2$
  ClickObj tWeb.Document.Forms(0).Document, "パスワードを変更@Value"
  WaitWhileBusy
 End If

こんな感じで二個のパスワードをローテーションで使うようにしました(しかし、動作確認が月に一回のため実際に使っているコードが有効か判断しきれていない。。。)

次はログインが成功しているかの確認です。

 If tWeb.Location <> "B-HiVE Main Window" Then
  'ログインに失敗
  Exit Function
 End If

ログインに成功したら、次は未受信ファイルの一括DL画面を表示。

 ClickObj tWeb.Document.frames("bhive_menu").Document,_
                                "4_未DL要求@InnerText"
 WaitWhileBusy
 If tWeb.Document.frames("bhive_body").Document.NameProp _
                               <> "[DataMailList]" Then
  '未DLファイル受信画面への移動に失敗
  Exit Function
 End If

次に、未DLファイルがあるかチェック

 If tWeb.Document.frames("bhive_body").Document.Forms(1).Value = "移動" Then
  If tWeb.Document.frames("bhive_body").Document.Forms(1).Disabled <> False Then
   'DLするものがない
   Exit Function
  End If
 End If

未DL一括DLをクリック

 ClickObj tWeb.Document.frames("bhive_body").Document, _
            "ページ内ダウンロード未要求の一括ダウンロード@Value"
 WaitWhileBusy

DL'フォルダを指定しDL開始

 tWeb.Document.frames("bhive_body").Forms("load_place").Value = DL_Folder$
 ClickObj tWeb.Document.frames("bhive_body").Document, " OK @Value"
 WaitWhileBusy

最後に、DLが終了したかの判定なんですが、appletからその情報を取得する方法が分かりません(知っている人がいたらぜひ教えて欲しいです)。そこで、受信ファイルのリストアップとファイルサイズの監視という原始的な方法を取ることにしました。さっぐりと

 Dim i&, st$
 For i = 0 To tWeb.Document.frames("bhive_body").Document.All.length - 1
  If tWeb.Document.frames("bhive_body").Document.All(i).tagName = "IMG" Then
   If tWeb.Document.frames("bhive_body").Document.All(i).NameProp _
                                    = "file.gif" Then
    st$ = tWeb.Document.frames("bhive_body").Document.All(i + 1).InnerText
    If Left$(st$, 1) = " " Then st$ = Right$(st$, Len(st$) - 1)
    Debug.Print st$
   End If
  End If
 Next

のような感じでリストアップし、FileLen関数で動きを調べています。

 tWeb.Application.Quit

プログラムの最後で上記のようにIEを終了させ、まあ、かなり雑ではありますが、こんな感じで自動化を行ない

 CAIよりファイルをDL
 トランスレータでファイルを変換
 社内DBにデータを追加
 処理結果をメールで担当者に通知

といった処理が自動化されました。この、IEを自動で操作するというのは結構便利に使えますね。

上記で使用したオリジナル関数

Private Function WaitWhileBusy()
 With tWeb
  Do While .Busy = True
   DoEvents
  Loop
  .Visible = True
  Do While .Document.ReadyState <> "complete"
   DoEvents
  Loop
 End With
End Function

Private Function ClickObj(obj As Object, ByVal st$) As Boolean
 Dim i&, j&, flag As Boolean
 Dim Name$, Text$, tagName$

 i = InStr(st$, "@")
 If i = 0 Then Exit Function
 Text$ = Left$(st$, i - 1)
 Name$ = Mid$(st$, i + 1, 256)
 Select Case Name$
  Case "Start", "Alt", "Name", "Value"
   tagName$ = "INPUT"
  Case "NameProp"
   tagName$ = "IMG"
  Case "InnerText"
   tagName$ = "A"
 End Select

 For i = 0 To obj.All.length - 1
  If obj.All(i).tagName = tagName$ Then
   Select Case Name$
    Case "InnerText"
     If Text$ = obj.All(i).InnerText Then flag = True
    Case "Start"
     If Text$ = obj.All(i).Start Then flag = True
    Case "Alt"
     If Text$ = obj.All(i).alt Then flag = True
    Case "Name"
     If Text$ = obj.All(i).Name Then flag = True
    Case "Value"
     If Trim$(Text$) = Trim$(obj.All(i).Value) Then flag = True
    Case "NameProp"
     If Text$ = obj.All(i).NameProp Then flag = True
   End Select
   If flag = True Then obj.All(i).click: Exit For
  End If
 Next
 ClickObj = flag
End Function

川口本社、光ファイバーを導入

ついに川口本社、光ファイバー化となりました。2000年の7月末にCATV経由でインターネット接続を始めてから約3年半、弊社のような小さな会社でも光ファイバーが導入できるなんてすごい時代ですね。

といろいろ書いている今は実は2009年の8月。「あれっ、川口はいつ光ファイバーになったんだっけ?」と思って調べてみたら何も書いていなかったことに気付いて慌てて書いてみました。