オイラーの公式って不思議な式だよね

そういえばお仕事的にはたまにオイラーの公式を教えることがあるのだが、これ美しい公式とは思う物の、これが如何に奇天烈な式かなかなか一見してわからんよね。さらっと理系の常識的な事を言うやつほど分かってないように思う。私もわからんわ・・・

オイラーの公式はこんな式

eix=cosx+isinx e^{ix} = \cos x + i \sin x

この公式の奇妙さは三角関数の存在だと思うのよね・・・ nnを整数として、sin(π/2+2nπ)\sin (\pi/2+2n\pi)は1だから、

ei(12+2n)π=i e^{i(\frac{1}{2} + 2n)\pi} = i

左辺と右辺を入れ替えて、両辺をii乗する

ii=[ei(12+2n)π]i=e(i[12+2n)π]i=e(12+2n)π \begin{align*} i^i &= [e^{i(\frac{1}{2} + 2n)\pi}]^i \\\\\\ &= e^{(i[\frac{1}{2} + 2n)\pi]i} \\\\\\ &= e^{-(\frac{1}{2}+2n)\pi} \end{align*}

ということで、iiii乗は無限に多数の「実数」なのだが、n=0n = 0の時を主値と言って、実際に計算機で計算すると約0.207879576と言う無理数になる。これはGoogle先生もそのようにこえてくれる。問題はn=1n = -1、1ですら想像がつかない数に・・・ n=1n = 1のときは約0.000388203204、n=1n = -1の時は約111.317778。指数関数だから、この値の変化は当たり前か。あとこれらの値はすべて超越数であることが分かっている。
さらに奇妙な方向として1π1^\piを考える。そんなの1じゃんという向きはこの公式を堪能していただきたい。

eix=cosx+isinx e^{ix} = \cos x + i \sin x

nnを整数として、xx2πn2\pi nを代入

e2πni=cos2πn+isin2πn=1 \begin{align*} e^{2\pi ni} &= \cos 2\pi n + i \sin 2\pi n \\\\\\ &= 1 \end{align*}

となるのだが、これを右辺左辺入れ替えて両辺π\pi乗する

1π=e2π2ni=cos2nπ2+isin2nπ2 1^\pi = e^{2\pi^2ni} = \cos 2n\pi^2 + i \sin 2n\pi^2

となって、nnが0の時は期待通り1、それ以外の時は2nπ22n\pi^2π\piの整数倍にはならないので、無限に多くの複素数になる。というか、他でも似たような物だけど、累乗って指数に対数関数が来るので、複素数までを考えるなかなか手強い・・・ 新しく公式を習ったらとことん使ってみましょうってことなのですね。
というのが昨日宴会の帰りに酔っ払った状態で購入して読みふけった志賀先生の本のネタでした。

数学という学問 Ⅱ: 概念を探る (ちくま学芸文庫)
数学という学問 Ⅱ: 概念を探る (ちくま学芸文庫)
posted with amazlet at 12.05.12
志賀 浩二
筑摩書房
Amazon.co.jp で詳細を見る

もっと読む

2012年の目標

気がついたら2月になってしまったが、今年もよろしくお願いします。年末は割と記事を書いていたのだけど、正月に風邪を引いてしばらく調子悪かったのと、わりとバタバタ忙しかったので、気がつくと2012年も1ヶ月終わってしまったというわけでした。
IMG_4144.JPG

そんなわけでつらつら考えていたのだけれど、目標無くぼーっと過ごしても気合いが入らないので、今年の目標などを書き連ねてみる。
今年はなるべく日本語で書かれた書籍を買わないようにする。ここ最近本を買わないようにしているとは思う物の、ここ数年買ったは良いが積ん読になって、やっぱり読まないから処分というループに入っていることが非常に多い。基本的に資料系のものや参考書はしかたないにしても、整理していきたいところ。
白物家電の寿命サイクルに突入しているので、昨年の冷蔵庫に引き続き、今年は洗濯機を見直す必要がありそう。最近めちゃくちゃ恐ろしい音が出るときがあるので、寿命はぼちぼちであろう。できればシャツ類の洗濯を自宅でしたいので、ダメージが少ないものを選択して、可能であればアイロンかけスキルを手に入れたい。
写真撮影について、昨年はとても写真を撮る気分でなかったことと、春先から秋口までそもそも落ち着かない生活だったこともあり、活動に手が着かなかった。今年はなんとか活動していきたい。というものの、コンスタントに撮影する被写体を見いださねばという大きな問題が目の前にある。花と都市風景・夜景だけでモチベーションを維持できないので、いろいろ思案中。布石は打ったのだが、どうなるか。昨年も実は布石を打ったのだが、うやむやになって撮影する気力自身が無くなった・・・こんなに写真を撮るまでがきついとはなかなか思わなかった。ほんの6年ちょっと前までには考えられなかったな。まあがんばって行きましょう。
今年は気合い入れて勉強しようと思っている。何をと言われれば僕の場合はもうアレしかないし、分かる人には分かるので詳しく書かない。まあいろいろ逃げ道なくなっているので。書籍を買わないようにするという目的もこれの一環であるが・・・いろいろ莫大なモチベーションをもって事にあたらないとダメだなという話ではあるので、ダイエットがなんとかなったんだからなんとかなると信じてひたすらがんばる。毎日3時間~4時間くらいをどう稼ぐかが大きな勝負であると思うが、通勤を巧く使っていく。
ということで、分かるような分からないような目標を立てた。とりあえずゆるゆるやっていこうと思う。みなさま、今年もよろしく。

Perl 5.14.2とImageMagick/PerlMagickのアップデート

毎年年末年始に帰省しないせいか、いつも休みに入るとサーバー関係の更新作業を行っているのだが、今年は長らく懸案事項となっていたPerlのバージョンアップとImageMagick/PerlMagickのアップデートをやってみることにした。Perlのバージョンアップ自体はたいした作業ではないのでメモレベルなのだが、PerlMagickが異様に難しいので、バイナリパッケージをインストールって言う人は手を出しちゃいけません。
ImageMagick/PerlMagickは最後にうまくビルドできた6.4.1からバージョンを上げることができず、それでいながらMovableTypeでは必須。ということで、今回も懲りずに6.7.4-2にアップデートしてみてから、PerlMagickにトライすることにした。今回の作業をまとめると、いままでPerlMagickがインストールできなかったのは、どうもImageMagickやPerlMagickだけでなく、Perlのコンパイルオプションにも秘密が隠されていた。(おそらくamd64環境で問題になりそうで、x86だと問題ないと思う。) 我が家のOS環境はFreeBSD9.0RC3であるが、OS付属以外のユーザーランドはFreeBSD7環境なので、作業自体はFreeBSD7を導入しているマシンで行い、rsyncでバイナリを同期している。GCC周りで問題もあろうと思うので、いつかの段階でLLVM/Clangに乗り換える必要がありそう。CPANライブラリはMovableTypeが動かせるようにそろえるというこれまで通りの方針で進める。

Perlのインストール

./Configure -Dprefix=/usr/local/perl-5.14.2 \
  -Dvendorprefix=/usr/local/perl-5.14.2 -des -Accflags=-fPIC
make
make test
sudo make install

ポイントはCCFLAGSに-fPICを渡すこと。PICにする御利益は「bkブログ: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか」を参照することとして、ライブラリの呼び出し元の要求だから合わせざる得ない。いずれにしてもlibperlが-PICでコンパイルされてないとダメだった。
ImageMagickのインストール

これは割と普通にインストールできるが、うちの環境ではPangoとかでコンパイルエラーとなるので、–without-xとした。ImageMagickを使い始めてもう10年以上になるはずだが一度もXで動かしたことがない・・・ Magick++のコンパイル中にこけるので、GCCを4.4系に入れ替えててビルド。(最近いろんなアプリケーションのC++のコンパイルが通らなくなっているように思う。) あとこの設定でCGIからImageMagickを呼び出すと・・・ libgomp.so.1: Undefined symbol “pthread_create” なるエラーがでるので、OpenMPを無効化。まあいらんでしょう。

./configure CC=/usr/local/gcc4/bin/gcc CXX=/usr/local/gcc4/bin/g++ \
  CPP=/usr/local/gcc4/bin/cpp CXXCPP=/usr/local/gcc4/bin/cpp \
  --prefix=/usr/local/ImageMagick-6.7.4-2 --with-included-ltdl \
  --with-ltdl-include=/usr/local/gnu/include \
  --with-ltdl-lib=/usr/local/gnu/lib --without-x --disable-openmp
make -j3
make install
make cllean

PerlMagickのインストール

さてはまりの本題。いろいろビルド過程を見ているとlibperlを探せていないので、直接指定することとした。PerlMagickのMakefile.PLにて、

my $LIBS_magick = '-L../magick/.libs -lMagickCore -lperl -lm';

のライブラリ指定箇所を

my $LIBS_magick = '-L/usr/local/perl-5.14.2/lib/5.14.2/amd64-freebsd/CORE -L/usr/local/ImageMagick-6.7.4-2/lib -L../magick/.libs -lMagickCore -lperl -lm';

として・・・

make perl Makefile.PL
make
sudo make install

で、OKのようです。こんなのわからんわ・・・ あとlibMagick.soが探せないとか言うことがあるので、ldconfigのキャッシュを書き換えましょう。うちの場合はchroot環境でhttpdを動かしているので、そっちは単純にchrootした環境で/var/runにキャッシュファイルをコピー。

sudo /etc/rc.d/ldconfig restart
cp /var/run/ld-elf* /chroot/var/run

XML::LibXMLとXML::Parser

WebをさまよっているとXML関係のライブラリをインストールできないような記事が多いのだが、これは純粋にlibxml2とlibexpat依存なので、ちゃんと指定すればOK。うちの環境ではテキスト処理関係は/usr/local/text、GNU関係は/usr/local/GNUにまとめてインストールしているので、適当に読み替えること。
まずXML::LibXMLの方はライブラリをLIBSで、includeファイルをINCできっちり指定することと、FreeBSDの場合はlibiconvも必要なので、こちらも指定。こんな感じ。

perl Makefile.PL LIBS='-L/usr/local/text/lib -L/usr/local/gnu/lib' \
  INC='-I/usr/local/text/include/libxml2 -I/usr/local/gnu/include'
make
make install

XML::Parserはlibexpatを指定すればいいので、

perl Makefile.PL EXPATLIBPATH=/usr/local/text/lib \
  EXPATINCPATH=/usr/local/text/include
make
make install

でおしまい。
DBD::mysql

あとビルドに使っているPCではMySQLのバイナリは置いてあるもののMySQLは動かしていないので、DBD::mysqlのインストールはどうしたものかと思っていたが、テストをすっ飛ばせばインストールできるだろうと言うことで、make testしないでインストール。DBD::mysqlのパッケージディレクトリにて、

perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -lz" \
  --cflags=-I/usr/local/mysql/include/mysql --testhost=127.0.0.1
make
make install

まあ巧く動いていそうなので問題ないでしょう。
追記

うちの環境ではPortsやpkgsrcは使っていません。それぞれのアプリケーションは/usr/localみたいなディレクトリにアプリケーション名-バージョンのようなディレクトリを作成してそこにインストール。/etc/rc.confにて

ldconfig_paths=`echo /usr/lib /usr/lib/compat /usr/*/lib /usr/local/*/lib`

みたいな感じでライブラリを検索しています。(それ故このメモも自分か、ああなるほどという人にしか通用しない個人的なメモの域を出ない。)

もっと読む

FreeBSD7から9RC3への長い道のり

もともとこの日記の目的は備忘録であった。たまにこういうネタを書いていけばリハビリになるだろうなあ。
我が家のWebとメールとDNSのサーバはもうかれこれ7年ほどFreeBSDで、2004年から2008年のゴールデンウィークあたりまではFreeBSD5.X時代、2008年からつい最近までがFreeBSD7時代が半分くらいという感じで、ずっとメインバージョンを固定して必要最小限のマイナーバージョンのアップデートを繰り返してきたのであるが、ぼちぼちFreeBSD7時代もおしまい(正式な保守期限は今のところ2013年2月いっぱいまで)のようなので、一期に移行作業を行うことにして新時代を生きていこうと思ったわけである。今回はディスクのマウントに不安があるので、多少手の込んだ手順での移行となる。

事前環境の保存

FreeBSD7までのライブラリが失われると厳しいので、いったん保存。あとでldconfigで検索パスに追加する。

%cp -a /lib /usr/local/FBSD7rootlib
%cp -a /usr/lib /usr/local/FBSD7usrlib

ソースの取り寄せ

最近はCVSup前提なのか、どんどん旧来のCVSサーバが失われているように思うことと、Ports運用はしていないのでCVSupといわれても困る。そんなわけでSVNに乗り換え。SVNの場合はこんな感じで持ってこれる。いったんFreeBSD7.4からFreeBSD8.2に切り替えるため、

%svn checkout svn://svn.freebsd.org/base/stable/8 /usr/src-8
%ln -s /usr/src-8 /usr/src

こんな感じで。後にFreeBSD9RCxを追いかけるときは

%svn checkout svn://svn.freebsd.org/base/releng/9.0 /usr/src-9
%rm /usr/src
%ln -s /usr/src-9 /usr/src

などをして切り替え。(Subversionの使い方ようしらんでなあ・・・)
システムの構築(前半戦)

いったん make clean とかしてから、FreeBSDハンドブック: ワールドの再構築を参考にしながら作業する。

/usr/objのお掃除

%cd /usr/obj
%chflags -R noschg *
%rm -rf *

Worldとkernelの再構築をした後に実行しておいた方が良さそう。(末尾の後片付けに書き足した。)

KernelとWorldの再構築

ハンドブック通りに進める。シングルユーザーモードに落としてからやった方が数段速いのでシングルユーザーモードに手作業する。あとFrees9以降はbuildworldを先に実行しないといけないようだ。(8でも先にやった方が良さそうだな。) makeの分散処理は適当に。うちはいつも-j4としている。

%cd /usr/src
%script /var/tmp/mw8.2.out
%make -j4 buildworld
%make -j4 buildkernel

7.4→8.2の移行チェック(Filesystem関係)

FreeBSD7系から8系への移行で苦労した話をちらほら聞いたので、いったんちゃんとマウントできるかどうかをチェック。いけそうだったらFreeBSD8に切り替え。うまくいかなかったら本格的にインストールし直しとなるのだが・・・うちの環境ではうまくいった。(ネストしたGEOM周りではまったという話なのだが、うちは割と素直な設定だったようだ。) まず、念のため現行カーネルのバックアップ。

%cd /boot
%cp -a kernel kernel.hoge7

カーネルの仮インストール

基本的にメジャーバージョンアップするときだけ念のためにやっておくべきだろう。いったんkernelを仮にインストールする。もしうまくいかなかったときもリブートすれば元のカーネルで起動できる。インストール先は適当に読み替えること。

%make installkernel INSTKERNNAME=kernel.8

動作確認

リブートしてローダメニューで Loader Prompt を選んで、

%unload kernel
%boot kernel.8 -s

シングルユーザーモードで起動後シェルを/bin/shとして、

%mount -a

ここで、必要なファイルシステムが全部マウントできてたらOK。終了時にはアンマウント。その後再起動。手順としてはこんな感じ。

%sync (適当に何回か)
%umount -A
%reboot

ちなみにうちではそもそもkernel.8が見つからないというトラブルが発生した。どうもgmirrorしているボリュームのうち1台目のHDDが同期されておらず、ずっと片肺運用となっていた。ミラーし直したら見えるようになった。この手の作業を始める前には注意しておこう。
システムの構築(後半戦)

カーネルのインストール

ハンドブック通りにカーネルをインストールして、再起動。

%make installkernel
%sync (適当に)
%reboot

ワールドのインストール

一連の作業が終わるまで、シングルユーザーモードにて作業をする。先の手順でシングルユーザーモードで起動後シェルを/bin/shとして…

%mount -u /
%mount -a

1行目は/を読み書き出来るようにマウントし直す。これをやらないと何も書けない。

/etcをバックアップ・書き換え

/etcはいったんバックアップを取る。なおルートファイルシステムに作る必要はないので読み替えること。

%cp -a /etc /etc.orig

まず/etcの最低限の最低限のアップデートを行う。

%mergemaster -p

一応メジャーバージョンアップなので最低限のチェックを行ったほうが良さそう。ただし/etc/passwd(master.passwd)と/ets/group周りは手で修正しましょう。(ほとんど修正項目はないけれど。)

ワールドのインストール・/etcのアップデート

ハンドブック通りの手順で進めていく。

%make installworld
%mergemaster -UPiF

いつもなやむmergemasterのオプションであるが、-UPiFでよさそう。で、下記のファイルは書き換えないように。

  • /etc/passwd
  • /etc/group
  • /etc/master.passwd
  • /etc/ssh/*
  • /etc/shells
  • /etc/mail/mail.conf

リブート

%sync
%reboot

で基本はおしまい。問題なく再起動して正常稼働していればOK。
後片付け

/usr/objのお掃除

%cd /usr/obj
%chflags -R noschg *
%rm -rf *

ここでやっておけば、毎度作業前にしなくて済む。

いらないファイルのチェック・削除

新しいバージョンでいらなくなったファイルとライブラリをお掃除してくれる。ライブラリは消しちゃうといろいろひどい目に遭うので注意しましょう。まずは、古いファイルやディレクトリ、ライブラリの確認。

%cd /usr/src
%make check-old

内容を確認して消して良さそうであれば、削除を行う。

%make delete-old
%make delete-old-libs

やってみると分かるが、膨大な回数の削除の可否を問うてくるので、きっとうんざりすることに。ええいっ、全部一気にという向きの人は…

%yes | make delete-old
%yes | make delete-old-libs

という恐ろしい滅びの呪文を使うのはアリ。(こうしても良いように古いライブラリを別のディレクトリにコピーしておいたわけだ。)
最後に

これと同じ作業をFreeBSD 8.2→FreeBSD 9.0RC2→FreeBSD 9.0RC3と行った。(RC2→RC3はだいぶん手順はしょったが。)そんなわけでうちはFreeBSD8をスキップすることになった。FreeBSD9のビルドはLLVM/Clangのビルドが異様に長いので気長にやりましょう。
あと自分のサーバに自分のサーバのワールド再構築のメモとか書いても、肝心なときに読めない・・・いったい誰が得する文章なのだろう。(同じ文章を他にも書いているというべきか、他からこっちにコピーしたので大丈夫ではあるけれど。) 深刻な間違いなどがあったら、コメントにください。

もっと読む

ぶらぶらと散歩写真

先週ちょっとしたレンズを入手してしまったのと、今週末は珍しく晴れて気持ちの良い日だったので、土曜日に元町方面に出かけてみた。そんなわけで重たいレンズを抱えて、試し撮り。(使いたくて仕方なかったとも言う。)まずは中華街方面へ、中華街の外れの方にある雑貨屋?さんにて撮影。この雑貨屋さんの売り物だと思うのだが、行く頻度が開きすぎていることもあって、いつも異なる物がぶら下がっている。なかなか良いなと思っても自宅にぶら下げても仕方ないので、写真を撮るだけ。
IMG_4413s.JPG

続く2枚は山手の方へ、博物館の庭に咲いていたバラと、有名な電話ボックス。外人墓地のあたりは歴史のある洋館が多くて散歩して歩くにはなかなか良い感じ。
IMG_4422s.JPG
もう花のシーズンもおしまいかな? ぼちぼち銀杏の紅葉でも見に行かなくては。
IMG_4442s.JPG
こんな洋風な電話ボックスもここくらいにしかないよなあ。
最後に元町の商店街にて。陽も落ちて街の明かりが煌びやかな冬になってきた感じを・・・
IMG_4450s.JPG
日が暮れても違和感なく撮れるのは良いのだけれど、使いこなしはもっと勉強せねばならないな。使う機会をいろいろ作りたいと思うレンズである。(でないと元とれん! でも持ち歩くのも考えちゃうレンズだけど。) 撮影データは書かないことにするけれど、分かる人にはなんであるかは分かるだろう。なかなかオールドな描写をする癖のあるレンズである。

もっと読む