2011年7月24日日曜日

曜日の計算

あなたの誕生日は何曜日でしょう?など、曜日を教えるなんてネタがありますが、意味の理解しやすい曜日の計算方法がネットでもなかなか見当たらないので、私なりに考えてみました。
(ネットで調べられる計算方法や公式は、計算量を減らしたりするために工夫がしてあるので、私には素直に理解がしにくいので、工夫はおいおいしてみるかな。)

まず規則の確認から。

<規則>
曜日は、7日周期。
1年は原則365日(平年(へいねん))だけど、
以下に該当する年は366日(閏年(うるうどし))。
4で割り切れる年は閏年。
ただし、100で割り切れる年は平年。
ただし、400で割り切れる年は閏年。

<計算方針>
求めたい年月日が、曜日の解っている日(基準日)から何日経過しているか計算し、その値を曜日周期の7で割った余りが0なら基準日と同じ曜日、余りが1なら基準日の次の曜日、、、となる。

西暦元年元旦から計算できるよう、解りやすくするため、基準日を西暦1年1月0日(紀元前1年12月31日)とする。

<計算方法>
求めたい年月日を、Y年M月D日とする。
(たとえば2011年6月15日とすると)

求めたい年月日が基準日から何日経過しているかをEとする。
Eは、以下の和である。

SY = 基準日から求めたい年の前年の末日までの日数
(1年1月0日から2010年12月31日までの日数)
SM = 求めたい年の前月の末日までの日数
(1月0日から5月31日までの日数)
D =  求めたい月の求めたい日までの日数
(6月0日から6月15日までの日数)

E = SY + SM + D

SYを計算する。
ここでSYは閏年があるので、ちょっと厄介であるが、考えてみると、
4年に1度の閏年は平年より1日増え、
100年に1度の平年は閏年より1日減ったとも言えるし、
400年に1度の閏年は平年より1日増え、閏年より1日減り、結局は閏年なので1日増える。
数式にした方が分かりやすいか。。

SY = 365 * (Y-1) + floor{(Y-1)/4} - floor{(Y-1)/100} + floor{(Y-1)/400}

※floor(x)とはxを越えない最大の整数という意味。つまり小数点以下を切捨て。

SMを計算する。
SMは月によって日数が異なるし、閏年か平年かで2月の日数も異なるので、月の条件判定が必要だが、ひとまず強引に数式にすると、

SM = sum{n=1→M-1, g(n)}

※g(x)とはx月の日数を表す関数とする。
※sum{n=1→m,f(n)}とは、nが1からmまでのf(n)の和。

ひとまず、月の日数g(x)の定義を確認すると。
1,3,5,7,8,10,12月は31日。
4,6,9,11月は30日。
2月は平年が28日、閏年が29日。

ある月までの日数の和は、以下。
1月までは31日。
2月までは59日。(閏年は60日)
3月までは90日。(91日)
4月までは120日。(左の数値に+1。以下同様)
5月までは151日。
6月までは181日。
7月までは212日。
8月までは243日。
9月までは273日。
10月までは304日。
11月までは334日。

結局、まとめると、
Y年M月D日の曜日Eを求める数式は、以下となる。

E = mod[365 * (Y-1) + floor{(Y-1)/4} - floor{(Y-1)/100} + floor{(Y-1)/400}
      +  sum{n=1→M-1, g(n)} + D , 7]

※mod(x,y)とは、xをyで割った余り。

Eが0なら基準日と同じ曜日、1なら基準日の次の曜日、、、、となる。

<補足>
では、基準日(西暦1年1月0日)は何曜日か計算すると、この閏年の規則であるグレゴリオ暦が始まったのが、1582年10月15日(金)なので、このときEは、

E = mod(577736,7) = 5

つまり、基準日は金曜日の5日前の日曜日。
おお、西暦元年元旦(1年1月1日)は月曜日から始まっててキリがいいな。

確認のため、西暦2011年6月15日を計算すると、

E = mod(734303,7) = 3

つまり基準日の日曜日から3日後の水曜日。
カレンダーで確認しても確かに水曜日。

<注意事項>
補足でも記述しましたが、この閏年の規則(グレゴリオ暦)が適用されたのは、1582年10月15日(金)からなので、基準日を含めてこれ以前で、上記で計算できる曜日は計算の都合上の曜日です。
ただ、コンピュータで計算している曜日計算は、式は違えど、グレゴリオ暦前提が多いようです。

さらに、もっと前から曜日を正確に把握できるよう、wikipediaで調べると、
グレゴリオ暦の以前はユリウス暦という規則で、閏年は単純に4年に一度だったり、さらに紀元8年から閏年が開始(紀元4年は平年)しているし、その前は、3年に一度の閏年だったり、例外的に閏年を止めた年があったり、当然さらに前は閏年がなかったり、月の日数が異なり、超複雑です。もっと言うと、グレゴリオ暦を採用した年月日が国によっても違うので、もうわけが分からなくなります。

まあ、人類誕生や地球誕生は何曜日でしょう?とかビッグバンは何曜日でしょう?など天文学的になると曜日なんて意味ないから、いいか。

20110724 境港にて

海鮮丼を池田屋で食べ、夢みなとタワーにのぼり、おさかなセンターで岩ガキとサザエを買って帰った。

特上海鮮丼 2100円
上海鮮丼 1500円
夢みなとタワー 300円

海鮮丼は値段相応の美味しさ。お店独自の醤油がネタやお米にすごくマッチしていて美味しかった。特にイカとタイが旨い。ただ、旬のはずのマグロがいまひとつ脂がのってなくて残念だった。マグロって、近海の穫れたてより、もしかしたら遠洋で冷凍した方が旨かったりするのかなぁ。

2011年7月9日土曜日

円周率の簡易計算Javascript



*円周率を計算する。

アルゴリズムは、アルキメデスの内接、外接多角形の応用。
円の半周の長さはπで、内接N角形の外周の半分より大きく、外接N角形の外周の半分より小さい。
Nと2Nの関係は漸化式で表せるので、Nを大きくしていけば(計算回数)πに近づき、内接、外接の多角形の外周の半分の値が同じ桁はπと同じ。



計算回数を入力






2011年7月8日金曜日

ブログ、SNS投稿のメール連携

メールにコンテンツ記入し、宛先に各ブログ、SNSを指定して一括で投稿するという方法もありえるよな。画像はサムネイルには使えるかもしれんが、本文内にリンク貼り付けは無理そう。あとは、モバイルからのメールしか受け付けないとこが多いので、Senderなどをどの程度偽装するのかも知らないとな。

2011年7月7日木曜日

ダメ人間になるソフト(KeyHoleTV)

リアルタイムでテレビ視聴できる無料のPCソフトを発見。

KeyHoleTV

以前、発見した「テレビなう」は録画(Youtubu投稿)された番組なので、リアルでは見れなかったけど、これはリアルでP2P配信。けど、最近特にサーバー負荷が高いそうで、画質荒い。でも、PCの子画面で見る分には申し分ない。

PCの前で、アメトークみながら、DVDバックアップしながら、円周率の計算アルゴリズム考えながら、Javascriptのテストしながら、ブログに投稿しながら、ネットサーフィンしながら、合間にpodcast聴きながら、本当に家で動かない生活が実現できる。。ダメ人間向けソフト。

本当は、素晴らしいソフトを作って運営している方々に、感謝してます。

不満足ながら投稿の連携中

ここ2,3週間(2011年6月25日頃~7月7日)、ブログとfacebookとmixiの投稿の連動の仕組みを調査、試験してて、機能に不満はあるが、ようやく、一応、連携できるようになった。

仕組みは、以下。

<概観>
(1) Gmail→ (2) Blogger → (3-1) facebook
                                    → (3-2) mixi

(1)(2) Gmailでコンテンツを下書きし、BloggerガジェットにコピーしてBloggerへ
(2)(3-1) facebookアプリのRSSGraffitiが半時間毎に自動で、Bloggerの最新投稿をfacebookのウォールへ。
(2)(3-2) 自宅PCにてRSS52mixiというWindowsアプリを起動して、投稿したいBloggerの記事を選択して、mixiの日記へ投稿アップ。

<感想>
他人様が作ってくれたWin,Webアプリを試したが、どうやら各SNSの内部仕様が変更などしてて、うまく動かなくなっているものが多かった。
たぶん、スパム対策などで。

これからは、特に、Blogger→mixiへは今は手動対応なので、RSS自動更新に対応したい。が、今のところ自前のサーバーを建てて修正したPHPスクリプトを自動実行しなければ対応はできなさそう。でも、今どき自前のサーバー管理は面倒。でも、自宅内LANのNASに付属するWebサーバー機能をハックしてみるのは、楽しそうかも。

次に、Blogger→facebookは、本当は、facebookウォールじゃなくてノートに投稿したい。でないと、画像が張り付けられないし。本来ならRSSGraffitiでなくて、ノートの外部ブログのインポート設定で対応できるはずなのだが、僕の環境では動かなかった。facebookサポートの連絡もなく、諦め中。

まあ、気が向けば、自前でアプリ開発するのもありだが、さすがにシンドイ。とりあえず仕様に目を通してみると、mixiもfacebookもAPIでは外部連携はできそうなんだが。

運用してみる前からわかるけど、そもそも、自動で管理しているすべてのSNSに投稿されるとなると、匿名性などの観点から、コンテンツの内容に慎重にならざるを得ない。

殺虫成分を含まない殺虫剤

殺虫成分を含まない殺虫剤を発見。

なんか、謎かけみたいですが、毒性のある薬剤を使わずに、冷凍して殺してしまうので、人間に掛かっても安心。子供部屋やキッチンなどでも使えそう。

もともと、バルサンが「飛ぶ虫氷殺ジェット」というのを出していたが、噴射時に可燃性ガスを多量に必要としていたので、引火事故が起きて自主回収、生産終了となったらしい。
これをフマキラーが真似て、安全なモノを出したようです。
製品説明では、ゴキブリ対応にはなってないようだが、利用者のブログなど見ると効果はあるらしい。

フマキラー 瞬間凍殺ジェット 這う虫用 450ml
http://www.fumakilla.co.jp/products/insect/variety/tousatu-jet-hau.html


バルサンの製品の説明だと、人間くらい大きな体であれば凍傷になることもないらしい。
けど、プラスチック製品は変色するかもって。



そういえば、スプレーって、危険なのに、なぜ可燃性ガスを高圧で使うんだろうと思ったら、温暖化対策のための代替フロンとして安価なのがLPガスやブタンなどだかららしい。ものによっては、二酸化炭素や窒素を使うスプレーもあるようだが、どうも高価なんだろうな。
特に、この冷却系のスプレーでは気化熱を奪うのに、LPガスなどの沸点が低くて効果が高いのも理由のよう。

温暖化という長期的なリスクを減らすために、事故という短期的なリスクが高くなるって感じか。


2011年7月6日水曜日

エネルギー比較

エネルギーについていろいろ比較整理しておく。

■重量あたりのエネルギー量比較

ガソリン 100とすると、

バター 71
チョコチップクッキー 50
ステーキ 25
TNT 6.5

ブタノール 91
エタノール 67
メタノール 50
石炭 50

TNT 6.5
天然ガス 130
水素ガス液体水素 260
ウラン、プルトニウム核分裂 2億
水素核融合 6億
半物質 2000億

核反応が桁違いにエネルギー密度高い。
しかも、水素や重水素なら無尽蔵。
半物質もさらにエネルギー密度高いが、どんな容器に閉じ込めるか問題だし、反物質を作り出すのに必要なエネルギーはもっと必要なので収支が合わない。

水素は、普通化合物なので水の電気分解などで取り出すが、燃やすしたのでは分離エネルギーの30-40%しか利用できない。

■キロワット時あたりのコスト比較
石炭 1とすると、

天然ガス 5.7
ガソリン 18.3
自動車バッテリー 35
パソコンバッテリー 666
単4電池 16万6666

電池は便利だが、なんて無駄なんだ。

■太陽光エネルギー
1平方メートル 1kW
1平方キロメートル 1GW

ただし、太陽電池は量産型で変換効率15%で、実験的に良いものでも40%。

小型車はだいたい50馬力=50kW必要。

円周率の再考

円周率πについて、分かっているようで解ってないなあ。
どうやって求めるのか考えてみた。

円周率の求め方は、もちろん歴史的にもいろいろ研究されているけど、やっぱり分かりやすいのはアルキメデスによる円に内接・外接する多角形の外周から求める、幾何学だろう。微積分を使うのも、抽象的で思考だけで行けそうだが、幾何学で図形と三角関数程度で理解できると、説明しやすいよな。

<定義>
半径1の円の周りの長さの半分を円周率πとする。

<説明>
さっそく、半径1の円に内接、外接する正多角形の図を描いてみる。単純でも複雑でも理解は難しいので、正六角形くらいにしてみる。

















上側の半円だけ見れば、
内接正六角形の外周の半分 < 円周率π < 外接正六角形の外周の半分
となることが分かる。

また、直線ABは半円の中に6個。直線ACは半円にちょっとはみ出しながら6個あるから、
直線AB×6 < 円周率π < 直線AC×6

補助線を引いて、理解しやすい三角形を探しておくと、
内接正六角形では、△OAB。外接正六角形では、△OACが見えてくる。
∠ABと∠ACの角度は、π(180度)の1/6であり、三角関数を用いて、

直線AB = sin(π/6)
直線AC = tan(π/6)

6×sin(π/6) < π < 6×tan(π/6)

という関係が分かり、正六角形で求めたことを考えると、
一般に内接・外接する正n角形に対して、

式(1)    n×sin(π/n) < π < n×tan(π/n)    n = 3,4,5,6,7,8・・・

が成り立ち、nを大きくすれば、円周率πを上下から挟み込んで精密に求められるようになる。
(四角形、八角形でも図を描いてみればわかります。しかも、三角形や五角形でも成り立つ)


けれど、式(1)をじっくり眺めてみると、三角関数sin,tanの意味をなるほどと感心するだけで、これじゃ、求めたいπは、訳がわからん。


方針を変えて、要するに正多角形の角数を多くすると、外周はどのような規則で増えていくのか考えてみる。いわゆる漸化式。

ここで、半径1の円に内接・外接する正n角形の外周の半分を、それぞれ
I(n), O(n)とすると、

I(n) = n×sin(π/n)
 O(n) = n×tan(π/n)

である。
ここでコツが入ります。nが1ずつ増えることを考えるより、2倍、3倍と増えるときを考えれば、三角関数の倍角の公式などが使えて計算しやすいだろうと推測する。さらに、基本的にsinとtanだけになるように計算を進めれば、漸化式になるだろうと。

O(2n) = 2n×tan(π/2n)
(計算式1) 




使った公式
(公式1) tan(x/2)の公式




I(2n) = 2n×sin(π/2n)

(計算式2)




使った公式
(公式2) sin(2x)の公式




結局、
1/O(2n) = {1/O(n) + 1/I(n)}/2
I(2n) = √O(2n)×I(n)








となる。
僕はこの三角関数の計算に相当、苦労しました。ミソは、O(2n)は逆数にすれば綺麗になるということ、I(2n)はO(2n)が求まっているので利用してよいことと、sinに対してcosを割ってtanにしてもcosが残るが、sin×cosになればsinの倍角の公式でsinになるので、2乗してみればいいことに気付くこと。

<計算確認>

正しいのか、正三角形と正六角形で試してみると、

(計算式4)







図から求めたのと一致するので、確からしい。
これで、順番に正12角形、正24角形、、、、と増やせば、円周率がπに近づく。こういう順番に計算していくのはコンピュータが得意とするところです。


ダメ人間になるソフト(テレビなう)

PCでテレビを見れるようになって、久しいが。
まだ、ワイヤレスでPCでテレビを見ている人は少ないのではないかと思う。

TVチューナー付きのノートPCを購入したが、結局アンテナ線を繋ぐとノートPCの可搬性がなくなり不便なので、使わなかった。

そこで、ワイヤレスでTVを視聴できるソフトを探してたら、あった。

テレビなう

これをPCの画面に表示しながら、ネットサーフィンやブログ、電子書籍を読んでると、家に戻るとPCから一歩も離れられなくなってきた。
ダメな人間になるな。



※このソフトは、テレビをリアルタイムに視聴するのではなく、Youtubeに投稿されたTV映像を自動で流しているので、タイムラグがある。

※本気でやろうと思えば、ワイヤレスTVの製品もあるし、HDDレコーダーのDLNA機能を使って無線LANで飛ばす手もあるけど、出費がかさむ。PC標準で付いているのは今はNECくらいで、スペックがいまいち。

2011年7月1日金曜日

LED電球購入

そろそろ電球型蛍光灯が暗くなって寿命っぽいし、節電ブームに乗って、LED電球を購入してみた。

玄関の電球とリビングのレール付けスポットライトの2つ。

玄関のは、夜に宅配が来たときなどに、スイッチを付けても、最初は半分くらいの明るさしかなく、徐々に明るくなって10分くらいでやっと充分な明るさになり、蛍光灯は不向きだったんよね。

玄関には、以下。
東芝LDA9L E26口金 電球色 650lm 9.4W
寿命6万時間 明るさ一般電球40W相当 4480円
禁止:調光機能、HID器具、リモコン、密閉型、断熱材施工、水滴、直流電源

玄関は温かみがほしいので、電球色に。昼白色なら800lmくらいが売ってるが、この店では電球色は650lmが最大の明るさだったので、これに。配光が全方位のものはlmが低く、価格高いので、ヤメ。

電球よりちょっと大きいけど、電球型蛍光灯よりは小さい。ズッシリ重い。意外かもしれないが、すぐに結構熱くなる(電球ほどでない)。光が一方向で、口金側や側面は暗い。スイッチオンですぐに最大の明るさになるので、良かった。

リビングのスポットライトは、以下。
SHARP DL-L60AV リモコン調色調光 SERIES600 E26口金 昼白色〜電球色相当 430〜300lm 7.8W 寿命4万時間 7980円
禁止:調光機能、HID器具、リモコン、密閉型、断熱材施工、水滴、直流電源

取り付け後、リモコンが効かず、器具の相性があるのかと焦ったが、ボタン電池を新品に交換すると正常に。付属の電池が放電してたみたい。

リモコンはかなり便利。普段の夜は電球色で温かみある落ち着く感じにして、書類を書くときは昼白色でくっきり明るく、ソファで寛ぐときは暗くできる。

お店で気づいたこと。
1500円くらいの安いものもあったが、E26口金のみで、400lm程度の暗め、もちろん全方位はない。最新型は高いよな。それに店でたずねると、電球仕様の器具は原則、LEDが正常動作するか保証はないらしい。LEDメーカーは電球ソケットならどこでも使えるような表記をカタログでしてるけど、器具メーカーとしては古い器具までテストできないしな。

まぁ、電球2つで12460円とは時代は変わったな。