2009年9月5日土曜日

HDDのフォーマットにやられた

家でMacintoshを使ってる。そこで大きなファイルバックアップファイルがあるのだが、それをバックアップ用の2.5インチにコピーしようと思った時のお話。普通に2.5インチの持ち運び用のHDDにファイルをドラッグしてコピーしようと思ったら、何故かunknown errorが発生してしまった。何で??と思ったが、何度やってもうまくいかない。仕方ないのでterminalで強引にcpとかscpってやってみた。するとコピーを始めた。やったぁ〜、と思ったが、コピーされたファイルのリストを取ると、サイズが4GBぐらいでカットされていた。むむむ???何が起こってるの???

 で、ディスクユーティリティーでディスクを見ていて気づいた。フォーマットがFAT32になってる。あれ?なんでやろ?もしかしたら買った時のフォーマットのままなのか?それにしてもFAT32とは...仕方ないのでフォーマットをMac拡張(ジャーナリング)にしてみた。そしたら7GBぐらいのファイルもコピーできた。そんな落とし穴があったなんて....

Mac OS-Xでのcronの設定

家でMacintoshを使っている。仕事場ではWindowsとFreeBSDを使っている。FreeBSDだと当然のようにcronでいろいろと自動の処理をさせているが、一応FreeBSDベースと言われているMac OS-Xではつかっていなかった。そこで、使おうと思ったのだが、困ったのがどこにcrontabがあるのか?ということ。crontabを書き直して、cronデーモンを再起動するのがFreeBSDでの作戦だった。crontabは
/etc/crontab
だし、cronデーモンの再起動は
/etc/rc.d/cron restart
でよいのだが、Macintoshだとどうすればいいの?
 そこで、
man crontab
としてみた。すると、crontabというコマンドあるらしい。どうやら、
crontab -l
でリストが取れて、
crontab -e
でエディットできるらしい。実際にやってみると確かにエディットできた。へぇ、そうやって使うんや、と思った次第だった。

2009年7月8日水曜日

gmailの不思議

 メーラーとして,文章中に広告が入らなく,かつ,フリーなので,よくgmailを使っている。browserを使ってどこからでも見れる,というのも気に入っている理由だけど。ところが,browserを使ってgmailを見るのに,時々おかしな振舞いをすることがある。browserはfirefoxを主に使っている。理由はweb開発に便利なツールがアドインとしてあるから。欠点は動作が重いこと。もう少し軽いともっといいだけどねぇ。

 そのfirefoxでgmailを見に行くと大抵は普通に見れるのだが,時々認証後にメールを表示しようとしてプログレスバー(横長の棒の長さが時間と共に徐々に長くなって,処理の進み具合を図示してくれるもの)がでるけど,プログレスバーの最後のところで止まってしまってうんともすんとも言わなくなる,という現象が起こる。そうなったら仕方ないので,右下にでる「簡易版で読み込む」みたいな表示を押して簡易版にするとメールが読める。その後,ログアウトした後にもう一度ログインしようとしても,やはり同じことが起こる。しかし,firefoxを閉じると元に戻って,また普通にメールを見れるようになる。

 問題は「時々」発生して,その原因がわからないこと。対策のしようもない。そんな問題に遭遇して数ヶ月が経つが,ちょっとだけ進展があった。どうやらメールを見ようと思ってログインするけど,新規のメールがないからと「すぐにログアウト」しようとすると上記のような状況に陥るみたい。きっとJavaScriptをいっぱい読み込んでいて,画面を表示するのに時間がかかっているんじゃないかと思っている。ところが,メールがきてないからとさっさとログアウトしようとすると,処理の途中で読込みが中断されて中途半端な状況になるみたい。でも,それ以上はまだ何が起こっているのかわからない。しかし,そんな状況になったからって,毎回firefoxを再起動してたら時間がいっぱいかかって仕方ない。firefoxは起動が遅いのが一番の欠点なのに~~

 そんなこんなでいろいろ試していて,いいことに気づいた。どうやらfirefox自体を終了しなくても,メールを見ようとしていたタブだけ消して開きなおすと,普通にメールが見れる状態になる,ということがわかった。これなら大して時間はかからない。根本的な解決に至ったわけじゃないけど,とりあえずはいいことにして,この問題はよしとしておいた。

2009年6月24日水曜日

最近新規の投稿がない

 このブログに最近新規の投稿をしていない。理由は,投稿できるようなことがないからです。このブログはコンピュータや,バイクなど(コンピュータとバイクって偉い違うなぁ)の技術的なことを書こうと思って作ったので,何かないと投稿するネタがありません。FreeBSDも触っているけど,技術的にどうこう,ってのはあまりなくて,webのコンテンツの中身をいじってたりします。あとは,自分の興味がどこに向いているか,かな?バイクも,ツーリングに行った記録は別のブログに書いてるので,バイクをごそごそいじらないとここには投稿しないんですよねぇ....

 このブログって,数回にわたってある程度濃い感じのFreeBSDネタを書いたので,結構検索でひっかかってきます。みんなやりたいことは似てるんですよね。perlで587番ポートにメールを送りつけたいとか,JavaScriptでformをsubmitしたいとか...少しでもこのブログが皆さんの役に立てればうれしい限りです。

2009年4月21日火曜日

レッツノートで無線LANが使えない,音が出ない

レッツノートを普段使っているが,この間,急に無線LANが使えなくなった。このレッツノートには無線LANのON-OFFスイッチがついていて,それをオフにして使い,その後オンに戻してもだめだったので,最初はスイッチの不良かと思った。接触不良かもしれない,と思い,オンオフを何度もやってみたが,復帰する気配がない。接触不良のようなトラブルなら,オンになったり,またオフになったり,という感じになるが,全く,全然オンになる気配がない。これは本格的に壊れたか?と思い,Panasonicに電話してみた。このマシンはマイレッツ倶楽部を通して買ったので,マイレッツ倶楽部に電話してみた。電話をしながら,ふと,これはソフトウェアの問題かもしれないと思い,担当の人といろいろ話をしてみた。担当の人は,ソフトの問題かハードの問題かがわからないなら,一度サポートセンターの人に電話をしてもらいます,ということになり,サポートの人からの電話を待った。

 しばらくしてサポートの人から電話があった。とても丁寧な対応。その担当の人に指示に従って,無線LANのチェックが始まった。まずは,無線LANのインジケータがタスクバーにあるのだが(イナズマっぽいマーク),それが×になっているかとか,ワイヤレスネットワーク接続で,周囲の無線LANネットワークを探しても何も出ないとか,Intel(R) WiFi Link 5100 AGNというネットワークアダプタを使っているが,そのプロパティの詳細設定(デバイスマネージャーで出てくる)で見てワイヤレスオンとなっているか,など。それらのチェックで単純なミスではない,というのが判明。その次の指示は,マイコンピュータの中のc:\util\wswitch\wswitch.exeというのを起動してみてくれ,というものだった。これはタスクバーの中のイナズママークを表示しているソフトなのだが,起動する度にインストールとアンインストールを交互に行うものだった。今回は「アンインストールする」というのが出ていたので,担当者の指示に従ってアンインストールした。するとアンインストールできた。担当の人が言うには,アンインストールできたということは,無線LANの電源は実際にオンだったはず。そうでないとアンインストールできないから,ということだった。これでソフトが原因の可能性が高くなった。そして再起動。するとちゃんと無線LANが働いていた。どうやらこのwswicthというソフトがおかしく,変に無線LANが使えない状態でロックされてしまっていたみたい。これで一個解決~。念のためにソフトは再インストールしておいた。

 さらに再起動の待ち時間に音がでない話もしてみた。すると,こちらもソフトの可能性が高い,ということで,さらにチェック。まずはFnキー+F1やF2を押すようにとの指示。やってみると画面の明暗が変わる。でも担当者によると画面中央にインジケータがでるはず。しかしそれがでない。音関係(F4, F5, F6)でも同様にインジケータがでない。これも無線LANの時と同様にソフトかもしれない,ということになって,今度はc:\util\hkeyapp\hkeyapp.exeを起動してくれとの指示。起動すると「インストールする」という表示がでた。おや?このソフトは起動していなかったみたい。これをインストールして,再起動すると,やったぁ,音が出た。どうやら,ミュートの状態でこのhkeyappを消してしまったみたい。で,ミュート状態でロックがかかって,音がでなかったみたい。
 いやぁ,家電製品のサポートですぐに,しかもちゃんと問題が解決したのはこれがはじめてかもしれない。やるなぁ,Panasonicのサポートくん。

2009年4月9日木曜日

FreeBSD: portupgradeとperl

再びFreeBSDネタ。今回はportupgradeとperlの話の続き。何かと言うと,perlのバージョンが上った時にモジュールを入れなおさないといけないけど,便利なコマンドないかなぁ?と考えていた。 数回前の投稿にそんなことを書いておいた。で,いろいろ検索してやっと見つけました。答えは
perl-after-upgrade
ってコマンド。これはPerl自体をアップデータした時に,モジュール類を新しいバージョンの方に移すためのコマンドらしい。 man perl-after-upgradeってすると英語で説明してくれるが,日本で説明を載せておきましょう。
---------------------------------------------------------------
portupgrade等を使ってPerlをアップグレードした場合の処理

 (1) perl-after-upgradeを実行して,どのportに変更が加えられるかをチェックする。
   perl-after-upgradeに引数なしで実行すると,チェックのみ実行され,書き換えは行われない。
 (2) perl-after-upgrade -fを実行して,前述の内容を実際に実行する。
  ・問題が報告されている場合にはこの段階で修正する。
  ・操作できないパッケージがある場合は報告される。その際は手動で make deinstall と make install clean 等を行う。
 (3) /usr/local/lib/perl5/site_perl/5.8.8/の下にディレクトリだけ残り,他のファイルが残っていないことを確認する。
   もし,残ファイルがある時には再インストールするなどしてから,/usr/local/lib/perl5/site_perl/5.8.8 /を削除する(らしい)。
 (4) Perlを使ったプログラムが動作しているか確認する。
 (5) /var/db/pkg/*/+CONTENTS.bakといったバックアップファイルを削除する。
---------------------------------------------------------------
実際にやってみたら,perlのモジュールのせいでうまくいっていなかった portupgrade が,確かに perl-after-upgrade -fの後はうまくいくようになった。やっぱり考えてる人はいるんやねぇ。

2009年3月30日月曜日

「ノート型コンピュータにUSB HDD」に気をつけろ

再びコンピュータネタ。今回もFreeBSDであげているサーバーのお話。タイトルを見たら想像つくと思うけど,ノート型マシンにFreeBSDを入れて,サーバーとして使っているが,バックアップをしようと思い,USB接続のHDDをつないでみた。つないだのは2.5''のポータブルHDD。どこ製だっけ?忘れてしまった。とりあえず他でバックアップ用に使っていたポータブルHDDの容量が足りなくなってしまったので,新たに購入して,余った奴をFreeBSDのバックアップ用に使った。手順はと言うと,まず,
(1) sysinstall --> Configure --> Fdisk でfdiskの実行。
確か,これでフォーマットをしたことになると思う。HDDをいくつのドライブに切るかとか,どのフォーマットでフォーマットを行うか,などの指定をする。変更の書き込みを確実に行うために「W」を押した方がよい。終了は「Q」。次に
(2) sysinstall --> Configure --> Label
これで /xxx などのドライブのラベルを書き込むことができる。ここでも変更の書き込みを確実に行うために「W」を押した方がよい。終了は「Q」。書き込みをしたら,いっぱい数字が出たはず((1)の作業の後だっけ?)
 次にマウントポイントを作っておく。
(3) mkdir /xxx
(2)の作業と整合性を持たせておいた方がいいはず。そして,まずは
(4) mount -t ufs /dev/da0s1d /xxx
でマウントしてみる。そういえば,/dev/da0s1dってのはどうやって知ったんだっけ?dmesgかな?/var/log/messagesかな?(2)の作業を終えたらどれかのメッセージで読み取れた。うまくいけば、/etc/fstabに以下の行を加える。
/dev/da0s1d             /xxx          ufs     rw              2       2
ufsはFreeBSDのファイルシステムであることを表し、rwは読み書き可能、2 2はダンプコマンドと,起動時のfsckをする順番であり,ルートが1,それ以外は順に番号をふればいいみたい。
 さて,上記の作業で無事バックアップ用の外付けHDDをFreeBSDにつけれたので,早速rsync + cronでバックアップさせるべく,scriptを用意した。そして,バックアップを始めた。すると数分してマシンが凍った!!なんてことだっ!もしかしてHDD壊れてた?あるいはマシン内臓のHDDが壊れた??かなり焦ってしまった。仕方ないので,マシン本体の電源ボタンを長押しして強制終了。そして再び電源を入れてみた。HDDが物理的に壊れたんじゃなさそうな雰囲気だった。でもしっかりファイル情報は壊れていたみたいで,エラーがでた。その後,数回強制終了と電源オンを繰り返したが,ある時は「xxxの情報が壊れてる。Help !!」みたいなメッセージが出て,root用のプロンプトがでたり,ある時はfsckで「xxxの情報がおかしい。直すか?」みたいなメッセージが出たりした。ここで焦ってはいけない。rootのプロンプトが出た時は,折角なので手動でfsckをかけるのがよい。
# fsck /dev/ad0s1a
みたいにね。特に起動ディスクは起動後はfsckがフルにかけれないので,この場で行うのがよいみたい。手動だろうが自動だろうがfsckが起動して,もし「xxxの情報がおかしい。直すか?」と言われたら,基本的に「y」を押しておいた。そしたらなんとか復帰してくれた。でもまたバックアップしようとするとマシンが凍る!,の繰り返しだった。困ったぞ。そもそも何が悪いんやろ?仕方ないので,バックアップを細切れにしたりしてみた。そうこうするうちに,バックアップする量が少ないと上手くいくが,大量(大きなファイルとか数が多い)にすると凍るみたいだった。そういえばやたらとマシンが熱い。もしかしたら外付けのドライブを駆動するのに電源がアップアップなのかもしれないと思い,電源つきのUSBハブを挟んでみた。すると,トラブルが起きなくなった。そっか,外付けのHDDは場合によっては危険なのか。それと,今は多少空気の流れが悪いところにマシンを置いているので,あまり激しくするとマシンに負荷がかかりすぎて,マシンの温度が上るのも悪さをしているかもしれない。とりあえず外付けHDDとマシンの間に電源つきのUSBハブを挟んで,かつ最初のバックアップ(ほぼ全部をコピーするので時間かかる)の時だけ,マシンを風通しのよいところにおいてバックアップしてみた。そしたら,今のところトラブルは起こっていない。状況を変えるといろんなトラブルが起こるねぇ。

2009年3月25日水曜日

onSubmitで,戻り値がfalseなのにsubmitが実行されてしまう

cgiとJavaScriptを使ってweb siteをいじっている。その中ではformを使って同じcgiにPOSTでいろんな情報を投げている。その際,入力値が複数あるのだが,入力値の間違い等をformを飛ばした後(submitした後)に判断をするんじゃなくて,飛ぶ前(submitした直後で次のプロセスの直前)に判断をさせたいと思った。どうするか?webで検索すると,
<form action="http://xxxx.xxxx.xxx/yyy.cgi" method="post" onSubmit="zzz();">
を使うとでてくる。ここで zzz() はJavaScriptで書かせた関数。この関数 zzz() の戻り値を false にすると,submitがキャンセルされる,と書いてある。なので、zzz() の中で入力値の判断を行い、最後に false を返せば、submitされずに入力画面のままとなるはず。これはいい,と思ってさっそくJavaScriptを書いてみた。
 ところがやってみるとこれがうまくいかない。確かに zzz() って処理をしているが,submitがキャンセルされない。なんで??いろんなサイトを見てもその点については書いてくれてない。困った。実は1ヶ月ほど前にも似たような状況になって,あきらめて処理を変更した,というケースがあった。今回もあかんかな?と思ったら,ブログサイトでその件について書いてあるところがあった。でも,そのサイト忘れちゃった。その内容はというと,
<form action="http://xxxx.xxxx.xxx/yyy.cgi" method="post" onSubmit="zzz(); return false;">
のように,onSubmitで実行する関数のところに,return false; ってのを書いておく,って作戦。そうしないとzzz()から戻ってきた時に,submitが実行されてしまうらしい。return false; ってのを入れておくと確かにうまくいった。ちゃんと submit がキャンセルされて、入力画面のままになった。他の onSubmit について書いてるサイトではこの記述を見なかったけど,みんな苦労してないのかなぁ??それともそのようなトラブルにあった事ないのかなぁ?
 そういえば,上記のようにするとreturn false;で戻った時に確かにsubmitはキャンセルされるが,困ったことに今度はsubmitがうまくいかなくなった。その時どうしたかというと,xxx()の処理の最後に
document.yyyyy.submit(); return false;
ってのを入れておいた。そしたらOKの時にはちゃんとsubmitして,途中でreturn false;で戻った時にはちゃんとsubmitがキャンセルされてた。よかったよかった。

2009年3月19日木曜日

MacでもJcode.pmとNet::SMTP::TLS

先日FreeBSDでJcode.pmを使った話をしたが,Mac OS-Xも基本的にFreeBSDなので,そちらでもJcode.pmを使いたくなった。で,いろいろ検索してみた。するとmakizou.comというのがひっかかった。読んでみると,
# perl -MCPAN -e shell
とすればいいみたい。なんや,FreeBSDと同じやんか(って,基本はFreeBSDだから当たり前?)そこで,さっそく実行~。FreeBSDの時と同じような質問をいっぱいされたけど,ほとんどそのままリターン。唯一はmirrorサイトを選ぶのに,地域(Asia)と国名(Japan)ってのを数字で選んだぐらい。そしたらなんかいけたみたいやった。で,さっそく
nohighlight pre> install Jcode
としてみた。するとなんだかうまくいったみたいで,最後に
.....
Running make install
Installing /Library/Perl/5.8.8/Jcode.pm
Installing /Library/Perl/5.8.8/Jcode/Nihongo.pod
Installing /usr/local/share/man/man3/Jcode.3pm
Installing /usr/local/share/man/man3/Jcode::Nihongo.3pm
Writing /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Jcode/.packlist
Appending installation info to /System/Library/Perl/5.8.8/darwin-thread-multi-2level/perllocal.pod
/usr/bin/make install -- OK
というのが出て,インストールが終了した。どこにインストールされたんだろ?Encode.pmのように最初から入ってるモジュールは
/System/Library/Perl/5.8.8/
に入っているから,そこにインストールされるかと思いきや,別の場所だった。使えるのかね?と思ってさっそくテストしてみた。そしたら普通のFreeBSDでもMac OS-Xでも同じ結果になった。一応動いていそうだ。
 となると,Net::SMTP::TLSもインストールしてみたくなった。というか,こっちを使いたかったんだけどね,ほんとは。
cpan> install Net::SMTP::TLS
としてみた。結果は
.....
Manifying blib/man3/Net::SMTP::TLS.3pm
Installing /Library/Perl/5.8.8/Net/SMTP/TLS.pm
Installing /usr/local/share/man/man3/Net::SMTP::TLS.3pm
Writing /Library/Perl/5.8.8/darwin-thread-multi-2level/auto/Net/SMTP/TLS/.packlist
Appending installation info to /System/Library/Perl/5.8.8/darwin-thread-multi-2level/perllocal.pod
/usr/bin/make install -- OK
だって。FreeBSDで作ったテストのスクリプトもちゃんと働いたぞ。
 おぉ,これで快適CPAN生活がMac OS-Xでもいけるやん。FreeBSDやとportsとCPANがごちゃごちゃになるので,基本的にはportsから入れるようにしてる。MacもMacPortsがあるからやってみないといけないかなぁ?
 そうそう,最後はちゃんと
cpan> exit
としてCPANから抜けておきましょう。

追記:Mac OS 10.6 (Snow Leopard) にアップグレードしてみた。
すると、crontabで設定しておいたPerlスクリプトが上手く働かなくなってしまった。
どうやらJcode.pmやTLS.pmが使えないみたい。
何故かな?って思ったら、Perlのバージョンが上がっていた。
そこでCPANからJcode.pmを再インストールしようと思った。
そしたら、何故かうまくインストールできなかった。
そういえば、Xcodeをインストールしてなかったなぁ、と思い出したので、Mac OSのインストールDVDをいれて、Xcodeをインストールしてみた。
そしたらCPANからのインストールもうまくいった。
いやぁ、めでたしめでたし

2009年3月17日火曜日

FreeBSD,Perlで,プロバイダの認証あり587番ポートへのメール送信

 Net::SMTP::TLS は2006年1月以来更新が止まっていて,2016年時点ではすでに非推奨になっている。 そこで,2016年11月に FreeBSD で,Perl で gmail からメールを送る:Net::SMTP::TLS をやめて,Net::SMTP,IO::Socket::SSL,Authen::SASL を使うことにした というのを書いたので,そちらも参照してみて欲しい。
 後日 FreeBSD,Perl スクリプトで,GmailのSMTPからメールを送るというのを書いた。 そちらも参考にしてみて欲しい。
とあるプロバイダの下にあるサーバーにいろいろと作業をさせているが,そいつからのメールを受け取りたい時があった。サーバーではPerlで作業をさせている(cgiやけど)ので,Perlでメールを送りたいと思ったが,プロバイダの下流なのでちょっと制限があった。その話。

プロバイダはスパムメールを避けるために,SMTPの認証を要求してくる。さらにサブミッションポートが587番になっている。そこにPerlからメールを送りたい,というのが今回のミッション。きっとCPAN辺りにいいモジュールがあるに違いないと思って検索してみた。今回ヒットしたのが,Net::SMTP::TLSとかNet::SMTPなど。Net::SMTPもSASL認証(SMTP-AUTH認証)をしてくれるが,サブミッションポートの指定の仕方がわからなかったので,今回はNet::SMTP::TLSを使ってみることにした。ただし,名前の通りTLS(暗号化通信)を使うためのモジュールなのだが,うちのプロバイダはTLSを使うとなっていないので,TLSを使わない,という指定が必要だった。