2011年1月20日木曜日

FreeBSDでPerlのバージョンを5.10から5.12にする

とあるサーバーで FreeBSD を使っているのだが,Perlのバージョンが 5.10 のままだった。ところが,/usr/ports/UPDATING を見ると,最新版は 5.12 みたいだった。そこで Perl のアップデートに挑戦した。まずは,/usr/ports/UPDATING の記述を見る。すると,
20100915:
  AFFECTS: users of lang/perl5.12
  AUTHOR: skv@FreeBSD.org

  lang/perl5.12 has been updated to 5.12.2.  You should update everything
  that depends on perl.  The easiest way to do that is to use
  "perl-after-upgrade" script supplied with lang/perl5.12.
  Please see its manual page for details.

  If you want to switch to lang/perl5.12 from lang/perl5.{8,10} please
  follow instructions in the entry 20100715 in this file.
というのがあったが,結局は次の(下の)エントリーを見ろということだった。
20100715:
  AFFECTS: users of lang/perl*
  AUTHOR: skv@FreeBSD.org

  lang/perl5.12 is out. If you want to switch to it from, for example
  lang/perl5.10, that is:

  Portupgrade users:
    0) Fix pkgdb.db (for safety):
        pkgdb -Ff

    1) Reinstall new version of Perl (5.12):
        env DISABLE_CONFLICTS=1 portupgrade -o lang/perl5.12 -f perl-5.10.¥*

    2) Reinstall everything that depends on Perl:
        portupgrade -fr perl

  Portmaster users:
        portmaster -o lang/perl5.12 lang/perl5.10

        Conservative:
        portmaster p5-

        Comprehensive (but perhaps overkill):
        portmaster -r perl-

  Note: If the "perl-" glob matches  more than one port you will need to
        specify the name of the Perl directory in /var/db/pkg explicitly.
というのが見つかった。この 2010/7/15 の記述に従って,まず pkgdb -Ff を実行してから,Perlのバージョンを 5.10 から 5.12 にアップデートした。 最後に Perl を使っているアプリケーションを全て強制的に再インストールしたので,その後も問題なく動いている。よかったよかった。

2010年12月5日日曜日

ports のお掃除

FreeBSD でアップデートをしていると,ports の中身や,ダウンロードしたファイルでいらなくなったものがたまってくる。それらを掃除するコマンドがあったのだが,すっかり忘れていた。で,検索して見つけたので,メモがわりにここに書いておこう。
 中身は全部他の人が作ったサイトにあったもので,オリジナリティは全然ないけど,メモなので許してください。
# portsclean -C:portsのインストールの際に、make cleanし忘れてたとかとかで残ってしまったworkディレクトリ
# portsclean -D:バージョンアップで不要となったportsのソースファイル

# portsclean -P:バージョンアップで不要となったpackage

# portsclean -Ln:重複しているライブラリを表示(-nが重要)
# portsclean -Li:重複しているライブラリを対話的にお掃除(-iが重要)

2010年12月4日土曜日

FreeBSD で gtk-2.22.1_1 のインストールにはまる

FreeBSDでweb serverを動かしているのだが,今回,gtk-2.22.1_1 のインストールができなくて困ってしまった。今回はその顛末を書こう。

 FreeBSDでアプリケーションをインストールにはportsというのを使うと便利にできている。これはLinuxのrpmなどと同じようなもので(と勝手に思ってる)依存関係や更新も管理してくれる。なので結構重宝している。具体的には,/usr/ports/の下のアプリケーション名のディレクトリに入り,そこにあるMakefileを使って,make install clean とすれば新規にアプリケーションをインストールでき,また,portupgrade や portmaster というコマンドを使うと,アップデートがあれば自動でアップデートを行うことができる。また,/usr/ports/UPDATING というファイルに最新の更新情報が書いてあったりする。また,その ports 自信は cvsup というコマンドで更新できる。

2010年11月14日日曜日

IE6 no more !!

 ネットのニュースサイトを見ていた時の事,「『IE6』用アプリが『Windows 7』導入の問題に」という記事をみた。私が見たのはやほ~のニュースサイト経由だった。記事の内容はIE6が独自のJavaScriptの文法を持っていて,いちいちサイトをIE6でちゃんと見れるようにするのは大変で,コストがかかるという話。すでにGoogle,YouTube,Yahoo ! Japanなどが,IE6など古いブラウザのサポートを終了しているらしい。なのに未だにIE6以降で最適化しているとどうどうと言うサイト制作者がいるのが信じられないが…

 その記事の中に「IE6 no more」というサイトがあると書いてあったので見てみた。そこではIE6はもうやめよう,ということで,簡単なコードをサイトの上の方に埋め込んで,IE6をやめるように世の中に広めよう,というものだった。この考えに私も激しく賛同しているので,自分のサイトに日本語用のコードを埋め込んでみた。ところがこれがうまく確認できなかった。FirefoxでUser Agentをいじったり,IE8で互換モード対応にしてみたりしたがうまくいかなかった。(ちなみにIE6 no moreのサイトの日本語のコードにはミスがあるようで,「IE6はもういらない IE6 No More」の配布コード間違いを見て欲しい)仕方なく,問題のコード見てみた。すると,中身は大体わかったのだが,どうしてもわからかったのがコードの最初と最後の命令(?)文。
<!--[if lt IE 7]>
....
<![endif]-->
apacheにはそんなやつなかったよなぁ…。だいたい「it」ってなんやろ…?これでしばらく悩んでしまった。

 最終的にこれが私の嫌いなMicroSoftの「コンディショナルコメント」という事がわかるまでにしばらく時間がかかってしまった。検索しても最初の方にでなかったし…。

 これはInternet Explorer独自の命令らしい。webの中にコメントという形でコマンドを入れれる,ってやつ。ここで「it」と思っていたのは「lt」だった。大文字で書くと「LT」。つまり「less than」のことだった。つまり「if lt IE 7」は「IE 7より下のバージョンのIEだったら」という意味だった。それで何が書いてあるかが理解できた。つまりIE6以下のバージョンだったら,警告文を表示する,というもの。ここを「if lt IE 9」とすると IE8 でもメッセージが表示された(当然,確認後すぐに戻したけど。)これで私も IE6 no more 運動に賛同してると意思表示できる!!

(追記)ちなみにこのページにもコードを埋めこんである。でも,そもそもこのサイトってIE6で見れるのかなぁ?

2010年10月26日火曜日

procmailで特定のメールの広告を消して携帯に転送してみた

 便利なのでメールの一部を携帯に転送している。当然,サイズが大きいものは転送しないようにしている。他にもブラックリストがあって,そのリストにあるメールアドレスからのメールも転送しない。で,その携帯に転送しているメールの中に,警察の交通取り締まりをチェックするサイトからのメールがある。交通取り締まりをしてるのを見かけると,みんなで投稿する,ってやつ。ところが,そのサイトからのメールに広告がついてくる。最後についてくるのならいいのだが,最初に入っている。そのため,携帯の通知メールには広告しか入れず,肝心の情報を得るにはサーバーからメールのメインパートをダウンロードしてこないといけない。それって余計にお金がかかるってことやん。そこで,メールの先頭の広告を削ってから携帯に転送をかけようと考えた。今回はその顛末を書こう。

2010年10月23日土曜日

なんで今さらIE6やIE7に合わせたサイトを作る??

 この間,とあるサイトを見た。JavaScriptを多用しているサイトなのだが,表示させると表示がずれたり,全部を表示しなかったりしてうまく見れなかった。よく使っているのが Firefox なのだが,広告をブロックするアドオンをいれてるので,そのせいかもしれない,と思ってそのサイトで広告ブロックを無効にしてみた。するとほんの少しだけ表示がましになった。しかし,まだ全然ちゃんと表示されてるというには程遠い感じだった。そこで,ブラウザをかえてみた。試したのは Opera と Safari と IE8 (Internet Explorer) 。しかし,どれも同じようにしか表示されない。なんで??Firefox だけちょっと表示がおかしいところがあるが,他のも基本的に同じように表示が崩れている。どうも JavaScript の部分でおかしなことが起こっているみたいだった。個人的には,JavaScript を使ってサイトを作る時には,まず Firefox で動作を確認している。それはいろいろツールがあるからなのだが,それでちゃんと表示されない,ってどういうこと?というのが最初の印象だった。そこで,サイトの管理者にメールをしてみた。メールは別の理由でしたのだが,ついでにそのメールにサイトの動作について書いた,ってのが正しいのだが…。するとサイト管理者がサイトの動作についてなんと言ってきたか?

 なんと
ブラウザによって当HPの振る舞いが変わる件につきましては、今後も対応する予定はありません。
IE6.0以上にて最適化してありますので、IEで閲覧して頂きたく思います。
よろしくお願いします。
と言ってきた。ちなみにそのサイトが最初に作られたのは2009年頃だったと思うし,現在のバージョンは2010年の初夏に新しくした,と書いてあった。ということはつい最近じゃないか??ところが,IE6以上に最適化した,と堂々と書いている。おかしくないか???IE6やIE7はJavaScriptの標準化が全然できてなくて,web site 製作者にとっては手間がかかる最悪のブラウザやのに…。おまけに管理者はどうやらIT技術者らしい。プロがそんなんでいいのか?いや,逆に田舎でwebを頼むような人間はまだ古いブラウザを使っていて,自分たちが時代遅れなのを棚にあげて自分がちゃんと見れないから,って文句を言うのか?そもそも古いブラウザはセキュリティホールだらけやからやめるべきやのに…。だいたい IE も IE9 からは標準化に従うとネットのニュースに出てたじゃないか!!(この記事は2010/10/23に書いてる)世の中標準化に向かってるのに,未だにIE6やIE7のユーザーに媚びてどないすんねん!!どうして世の中こうもアホが多いのかなぁ??ちゃんとしたものが作れないなら JavaScript を使う資格なんてないよなぁ。皆さんはどう思いますか?

2010年10月16日土曜日

GPS付きのデジカメを買って緯度経度情報から住所をゲットしてみた

 以前からバイクでツーリングに行く時にPanasonicのLUMIXシリーズのTZ7 (DMC-TZ7)というデジカメを使っていた。それまでNikonの古いやつを使ったいたのだが,ディスプレイが小さいためとても使いにくかったので,そろそろ機も熟したと思って買ったのがTZ7だった。ポイントはなんといっても12倍の光学ズーム。かなり遠くまで撮れるのでかなり重宝している。実際には,写真の解像度を下げているため,実質の倍率は光学20倍程度になっているらしい。以前の光学3倍と比べると写真のバリエーションが増えて楽しい。光学ズームの倍率が高い分デジカメ自体のサイズは大きいが,軽くて小さなやつはきゃしゃですぐ壊れたりするので,ツーリングの時に持って行くには多少大きくても丈夫な方がいい。なので大きさは全然気にならなかった。色は赤が良かったが,店に残っていたのが茶色だけだったので茶色だった。慣れるとそれなりにいい感じの色と思えてきた。TZ7に欠点がないかといえば,ないことはない。一番はバッテリーのもち。結構大きいバッテリ-だが,意外と早くなくなってしまう。なので予備のバッテリーは必需品らしい。

 そのTZ7をちょっと他の人に貸したらシャッター部分が壊れてしまった。壊した(壊れた時に持っていただけ?)本人は何もしてない,と主張していたが,なんでそれで壊れるんやぁ!!!とりあえず壊れたデジカメは電気屋に持って行って直してもらっている。で,問題は私のカメラ。バイクに乗りたいのにデジカメがない…困った。そこでいろいろな交渉の結果,新しいデジカメを買うことにした。できればすぐに手に入るのがいいと思っていたところ,ネットでTZ7の後継のTZ10 (DMC-TZ10)が2万円ほどで買える,というのを見つけてしまった。幾つかの販売サイトがあったが,以前他のものを購入した実績のあるサイトから購入することにした。そこなら夕方6時までに購入手続きをしたら当日発送ということだったし,色もそのサイトなら黒,銀,金,赤の中から選べたしね。色は今回は念願の赤色にしてみた。支払いは手数料かかるけど代引きにした。振込だと振込の確認に時間がかかったりするので時間がもったいないと思ったから。TZ10とTZ7の違いはあまりないのだが,一点だけ大きく違うのが,TZ10にはGPSがついている。GPSはバイクのツーリングの記録をする時には便利そう。さてどの程度使えるものやら…

2010年9月8日水曜日

「PHP 5.3.x で推奨されない機能」にひっかかって Uber_Uploader が動かなくなった

(追記)2017/6に,FreeBSD で fine-uploader を使ってみた(その1)というのを書いた。 そこでは fine-uploader という JavaScript のライブラリを使ったファイルのアップローダーについて書いている。 Uber Uploader はすでに古く更新されていないので,fine-uploader など新しいアップロードライブラリを使うことをお薦めする。
(追記)2011/8時点での Uber-Uploader の最新版についてはUber-Uploader 6.8.2 の使い方(その1)で述べているので,参考にしてみて欲しい。

個人で細々と web site を運用している。そこで結構重宝してるのが,Uber_Uploader というソフト。以前,web へのファイルのアップロードの進捗状況がわかるようなアップローダーが欲しくていろいろ調べて,uber_uploaderを使った,という感じのことをこのブログに書いた(cgiとutf8とphpとjs)。その時は,Uber Uploaderのバージョン 6.5 を使っていた。その後バージョンアップがなされ,今はバージョン 6.8.2 になっている。バージョン 6.5 から 6.8.2 になるまでに,途中で結構大きな構造の変更がなされ,見た感じはちょっと違ったものになっている。どちらも使えるようになっているが,今日の話題はバージョンの違いではなくて,uber_uploader がうまく働かなくなってしまった話題(以下の現象はバージョンが 6.5 か 6.8.2 かに関係なく発生した)
 web site は,古いノートマシンを使って運用している。われながらかなり危険なことをしてるなぁ,と思っているが,なにせ先立つモノがないと…。OSはFreeBSDを使っている。サーバーに入れてるバージョンは FreeBSD 8.0 にしている。FreeBSD の場合,いろいろなアプリケーションソフトは ports というシステムで管理されている。アプリケーションのアップデートをする場合は portupgrade というアプリケーションを使ってやると,勝手にアップデートしてくれる。めんどくさいので,よく portupgrade -a (全てアップデート対象ならアップデートするという設定)を実行している。多くの場合は特に問題はないのだが,これをやると時々サーバーの動作がおかしくなる時がある。
 この間も portupgrade -a をすると,emacs を使った時の感触が違っていた。どうもカーソルの動きがおかしい。どうやら,emacs のバージョンが22から23に上がり,内部の文字コードが utf8 になったために起こる現象みたいだった。これは,PuTTY の設定で UTF-8 を使う,とするとなんとかそれっぽく動くようになった。
 他にも apache や perl がバージョンアップするといろいろとトラブルに見舞われたりする。Perl の場合は影響が大きく,いろいろなものが動かなくなってしまったりする。それなら portupgrade -a を使わずに一個一個 upgrade すればよさそうなものだが,これが結構数が多くて,めんどくさいからついつい portupgrade -a をしてしまう…


 で,やっと今回の本題に入ろう。今回は portupgrade -a をしたら,急に uber_uploader が働かなくなってしまった。どうなったかというと,
(1) サイトの上の方に「 date 関数は危険だから気をつけろ」みたいなメッセージがいっぱい出てきた。
(2) (1) のメッセージを無視すると,アップロードできそうになるのだが,アップロードボタンを押しても,うんともすんとも言わず,ブラウザのステータス欄に「完了」と出て終わる。かと言って,ファイルはアップロードされていない。普通なら,アップロードボタンを押すと,ファイルをアップロードする様子(進捗状況)が棒グラフで出るはずなのに,何も出ず,ただただ止まってしまう。
 と,こんな感じになってしまった。エラー表示が出ても,ファイルがアップロードさえできればいいのだが,ファイルがアップロードされない,というので困ってしまった。この二つを解決するのに数日かかってしまった。その顛末を書こう。

2010年7月23日金曜日

Perl+ExifTool で写真の日付をいじる

この間,多数の写真をもらったのだが,困ったことに写真の日付がかなり実際からずれていた。1枚や2枚ならいいのだが,100枚程度あり,どうしたものかと困っていた。そこで,PerlのExifToolを使って写真の日付を一括して変更するルーチンを書いてみた。と言っても,インターネットで検索して,他の方のルーチンをコピーした,というのが正しいが…

 ExifToolについては,ExifTool by Phil Harveyに英語の文章があり,Perl用のモジュールについてはThe Image::ExifTool Perl Library Moduleに英語の説明がある。また,ExifToolの処理で使われる「Shift」についてはImage::ExifTool::Shift.pl に英語の説明があるので,見てみて欲しい。
 また,以前このblogでthumbnailを作るというのを書いたが,そこでもExifToolについて少し書いている。こちらも見て欲しい。

 やり方としては,(1) 処理するファイルのマスク(*.JPGなど)を引数とする,(2) 日付はShiftを用いてずらす。ずらす量は,2つの日付・時刻を引数として入力させて,その差を取る,(3) バックアップファイルを残す,残さない,を引数で指定する,(4) ファイルの日付を写真のCreateDate タグと一致させるかどうかも引数で指定する,としてみた。

2010年7月1日木曜日

FreeBSD,Perl スクリプトで,GmailのSMTPからメールを送る

 Net::SMTP::TLS は2006年1月以来更新が止まっていて,2016年時点ではすでに非推奨になっている。 そこで,2016年11月に FreeBSD で,Perl で gmail からメールを送る:Net::SMTP::TLS をやめて,Net::SMTP,IO::Socket::SSL,Authen::SASL を使うことにした というのを書いたので,そちらも参照してみて欲しい。
 後日 FreeBSD, Perl の Net::SMTP::TLS ではまるというのを書いた。 そちらも参考にしてみて欲しい。
2009年3月に FreeBSD上でPerlのスクリプトを使ってプロバイダの認証あり587番ポートからメールを送信する,という話を書いた。

今回,似たようなことをしたので,それを記録に残しておこうと思う。やった作戦は何かというと,Gmail(Googleのmail)のSMTPとPerlのスクリプトを組み合わせて,googleのアカウントからメールを送る,という作戦。なんでこんな作戦をしたくなったかというと,同窓会関係のメールの一斉送信のため。個人的に高校の同期の同窓会のサイトを作っているのだが,そのメンバーに一斉にメールをしたいことがあるのだが,メールする先はPCだったり携帯だったりする。それまでは,GmailでBcc: フィールドにアドレスを100以上並べて送信したのだが,この間その方法で送信すると,携帯で受け取った人から「文字化けで全然あかん」というお叱りを多数受け取った。そのうちPCで受け取った友人からも文字化けを指摘された。いろいろ見てみると,携帯によってはBcc:フィールドを他の目的で使うことがあるみたい。また,Bcc:フィールドを長くするとトラブルを生じるみたい。また,文字コードをデフォルトに設定していると,変な文字があるといつものISO-2022-JPではない文字コードにされてしまうみたい。そのため,ひどい文字化けが起こったようである。