はてなキーワード: 閏年とは
元号バグを聞いて「日付をシリアル値で管理して出力後に変換テーブルを噛ませばいいんじゃないの?」って思ったんだ。
でも銀行だったら昔のデータもあろうから使えないって気付いたので、「じゃあもっと昔から起算すればいいのでは?」と思ったので作ってみた。
西暦 | 十干 | 十二支 | 十干(漢字) | 十二支(漢字) | 連番 | 何巡目? | グレゴリオ暦の閏年判定 | グレゴリオ暦によるシリアル値 |
4 | 1 | 1 | 甲 | 子 | 1 | 1 | 閏年 | 1 |
5 | 2 | 2 | 乙 | 丑 | 2 | 1 | 平年 | 367 |
6 | 3 | 3 | 丙 | 寅 | 3 | 1 | 平年 | 732 |
7 | 4 | 4 | 丁 | 卯 | 4 | 1 | 平年 | 1097 |
8 | 5 | 5 | 戊 | 辰 | 5 | 1 | 閏年 | 1462 |
9 | 6 | 6 | 己 | 巳 | 6 | 1 | 平年 | 1828 |
10 | 7 | 7 | 庚 | 午 | 7 | 1 | 平年 | 2193 |
11 | 8 | 8 | 辛 | 未 | 8 | 1 | 平年 | 2558 |
12 | 9 | 9 | 壬 | 申 | 9 | 1 | 閏年 | 2923 |
13 | 10 | 10 | 癸 | 酉 | 10 | 1 | 平年 | 3289 |
14 | 1 | 11 | 甲 | 戌 | 11 | 1 | 平年 | 3654 |
15 | 2 | 12 | 乙 | 亥 | 12 | 1 | 平年 | 4019 |
16 | 3 | 1 | 丙 | 子 | 13 | 1 | 閏年 | 4384 |
17 | 4 | 2 | 丁 | 丑 | 14 | 1 | 平年 | 4750 |
18 | 5 | 3 | 戊 | 寅 | 15 | 1 | 平年 | 5115 |
19 | 6 | 4 | 己 | 卯 | 16 | 1 | 平年 | 5480 |
20 | 7 | 5 | 庚 | 辰 | 17 | 1 | 閏年 | 5845 |
21 | 8 | 6 | 辛 | 巳 | 18 | 1 | 平年 | 6211 |
22 | 9 | 7 | 壬 | 午 | 19 | 1 | 平年 | 6576 |
23 | 10 | 8 | 癸 | 未 | 20 | 1 | 平年 | 6941 |
24 | 1 | 9 | 甲 | 申 | 21 | 1 | 閏年 | 7306 |
25 | 2 | 10 | 乙 | 酉 | 22 | 1 | 平年 | 7672 |
26 | 3 | 11 | 丙 | 戌 | 23 | 1 | 平年 | 8037 |
27 | 4 | 12 | 丁 | 亥 | 24 | 1 | 平年 | 8402 |
28 | 5 | 1 | 戊 | 子 | 25 | 1 | 閏年 | 8767 |
29 | 6 | 2 | 己 | 丑 | 26 | 1 | 平年 | 9133 |
30 | 7 | 3 | 庚 | 寅 | 27 | 1 | 平年 | 9498 |
31 | 8 | 4 | 辛 | 卯 | 28 | 1 | 平年 | 9863 |
32 | 9 | 5 | 壬 | 辰 | 29 | 1 | 閏年 | 10228 |
33 | 10 | 6 | 癸 | 巳 | 30 | 1 | 平年 | 10594 |
34 | 1 | 7 | 甲 | 午 | 31 | 1 | 平年 | 10959 |
35 | 2 | 8 | 乙 | 未 | 32 | 1 | 平年 | 11324 |
36 | 3 | 9 | 丙 | 申 | 33 | 1 | 閏年 | 11689 |
37 | 4 | 10 | 丁 | 酉 | 34 | 1 | 平年 | 12055 |
38 | 5 | 11 | 戊 | 戌 | 35 | 1 | 平年 | 12420 |
39 | 6 | 12 | 己 | 亥 | 36 | 1 | 平年 | 12785 |
40 | 7 | 1 | 庚 | 子 | 37 | 1 | 閏年 | 13150 |
41 | 8 | 2 | 辛 | 丑 | 38 | 1 | 平年 | 13516 |
42 | 9 | 3 | 壬 | 寅 | 39 | 1 | 平年 | 13881 |
43 | 10 | 4 | 癸 | 卯 | 40 | 1 | 平年 | 14246 |
44 | 1 | 5 | 甲 | 辰 | 41 | 1 | 閏年 | 14611 |
45 | 2 | 6 | 乙 | 巳 | 42 | 1 | 平年 | 14977 |
46 | 3 | 7 | 丙 | 午 | 43 | 1 | 平年 | 15342 |
47 | 4 | 8 | 丁 | 未 | 44 | 1 | 平年 | 15707 |
48 | 5 | 9 | 戊 | 申 | 45 | 1 | 閏年 | 16072 |
49 | 6 | 10 | 己 | 酉 | 46 | 1 | 平年 | 16438 |
50 | 7 | 11 | 庚 | 戌 | 47 | 1 | 平年 | 16803 |
51 | 8 | 12 | 辛 | 亥 | 48 | 1 | 平年 | 17168 |
52 | 9 | 1 | 壬 | 子 | 49 | 1 | 閏年 | 17533 |
53 | 10 | 2 | 癸 | 丑 | 50 | 1 | 平年 | 17899 |
54 | 1 | 3 | 甲 | 寅 | 51 | 1 | 平年 | 18264 |
55 | 2 | 4 | 乙 | 卯 | 52 | 1 | 平年 | 18629 |
56 | 3 | 5 | 丙 | 辰 | 53 | 1 | 閏年 | 18994 |
57 | 4 | 6 | 丁 | 巳 | 54 | 1 | 平年 | 19360 |
58 | 5 | 7 | 戊 | 午 | 55 | 1 | 平年 | 19725 |
59 | 6 | 8 | 己 | 未 | 56 | 1 | 平年 | 20090 |
60 | 7 | 9 | 庚 | 申 | 57 | 1 | 閏年 | 20455 |
61 | 8 | 10 | 辛 | 酉 | 58 | 1 | 平年 | 20821 |
62 | 9 | 11 | 壬 | 戌 | 59 | 1 | 平年 | 21186 |
63 | 10 | 12 | 癸 | 亥 | 60 | 1 | 平年 | 21551 |
64 | 1 | 1 | 甲 | 子 | 1 | 2 | 閏年 | 21916 |
65 | 2 | 2 | 乙 | 丑 | 2 | 2 | 平年 | 22282 |
66 | 3 | 3 | 丙 | 寅 | 3 | 2 | 平年 | 22647 |
67 | 4 | 4 | 丁 | 卯 | 4 | 2 | 平年 | 23012 |
68 | 5 | 5 | 戊 | 辰 | 5 | 2 | 閏年 | 23377 |
69 | 6 | 6 | 己 | 巳 | 6 | 2 | 平年 | 23743 |
70 | 7 | 7 | 庚 | 午 | 7 | 2 | 平年 | 24108 |
71 | 8 | 8 | 辛 | 未 | 8 | 2 | 平年 | 24473 |
72 | 9 | 9 | 壬 | 申 | 9 | 2 | 閏年 | 24838 |
73 | 10 | 10 | 癸 | 酉 | 10 | 2 | 平年 | 25204 |
74 | 1 | 11 | 甲 | 戌 | 11 | 2 | 平年 | 25569 |
75 | 2 | 12 | 乙 | 亥 | 12 | 2 | 平年 | 25934 |
76 | 3 | 1 | 丙 | 子 | 13 | 2 | 閏年 | 26299 |
77 | 4 | 2 | 丁 | 丑 | 14 | 2 | 平年 | 26665 |
78 | 5 | 3 | 戊 | 寅 | 15 | 2 | 平年 | 27030 |
79 | 6 | 4 | 己 | 卯 | 16 | 2 | 平年 | 27395 |
80 | 7 | 5 | 庚 | 辰 | 17 | 2 | 閏年 | 27760 |
81 | 8 | 6 | 辛 | 巳 | 18 | 2 | 平年 | 28126 |
82 | 9 | 7 | 壬 | 午 | 19 | 2 | 平年 | 28491 |
83 | 10 | 8 | 癸 | 未 | 20 | 2 | 平年 | 28856 |
84 | 1 | 9 | 甲 | 申 | 21 | 2 | 閏年 | 29221 |
85 | 2 | 10 | 乙 | 酉 | 22 | 2 | 平年 | 29587 |
86 | 3 | 11 | 丙 | 戌 | 23 | 2 | 平年 | 29952 |
87 | 4 | 12 | 丁 | 亥 | 24 | 2 | 平年 | 30317 |
88 | 5 | 1 | 戊 | 子 | 25 | 2 | 閏年 | 30682 |
89 | 6 | 2 | 己 | 丑 | 26 | 2 | 平年 | 31048 |
90 | 7 | 3 | 庚 | 寅 | 27 | 2 | 平年 | 31413 |
91 | 8 | 4 | 辛 | 卯 | 28 | 2 | 平年 | 31778 |
92 | 9 | 5 | 壬 | 辰 | 29 | 2 | 閏年 | 32143 |
93 | 10 | 6 | 癸 | 巳 | 30 | 2 | 平年 | 32509 |
94 | 1 | 7 | 甲 | 午 | 31 | 2 | 平年 | 32874 |
95 | 2 | 8 | 乙 | 未 | 32 | 2 | 平年 | 33239 |
96 | 3 | 9 | 丙 | 申 | 33 | 2 | 閏年 | 33604 |
97 | 4 | 10 | 丁 | 酉 | 34 | 2 | 平年 | 33970 |
98 | 5 | 11 | 戊 | 戌 | 35 | 2 | 平年 | 34335 |
99 | 6 | 12 | 己 | 亥 | 36 | 2 | 平年 | 34700 |
100 | 7 | 1 | 庚 | 子 | 37 | 2 | 百年おきの平年 | 35065 |
101 | 8 | 2 | 辛 | 丑 | 38 | 2 | 平年 | 35430 |
102 | 9 | 3 | 壬 | 寅 | 39 | 2 | 平年 | 35795 |
103 | 10 | 4 | 癸 | 卯 | 40 | 2 | 平年 | 36160 |
104 | 1 | 5 | 甲 | 辰 | 41 | 2 | 閏年 | 36525 |
105 | 2 | 6 | 乙 | 巳 | 42 | 2 | 平年 | 36891 |
106 | 3 | 7 | 丙 | 午 | 43 | 2 | 平年 | 37256 |
107 | 4 | 8 | 丁 | 未 | 44 | 2 | 平年 | 37621 |
108 | 5 | 9 | 戊 | 申 | 45 | 2 | 閏年 | 37986 |
109 | 6 | 10 | 己 | 酉 | 46 | 2 | 平年 | 38352 |
110 | 7 | 11 | 庚 | 戌 | 47 | 2 | 平年 | 38717 |
111 | 8 | 12 | 辛 | 亥 | 48 | 2 | 平年 | 39082 |
112 | 9 | 1 | 壬 | 子 | 49 | 2 | 閏年 | 39447 |
113 | 10 | 2 | 癸 | 丑 | 50 | 2 | 平年 | 39813 |
114 | 1 | 3 | 甲 | 寅 | 51 | 2 | 平年 | 40178 |
115 | 2 | 4 | 乙 | 卯 | 52 | 2 | 平年 | 40543 |
116 | 3 | 5 | 丙 | 辰 | 53 | 2 | 閏年 | 40908 |
117 | 4 | 6 | 丁 | 巳 | 54 | 2 | 平年 | 41274 |
118 | 5 | 7 | 戊 | 午 | 55 | 2 | 平年 | 41639 |
119 | 6 | 8 | 己 | 未 | 56 | 2 | 平年 | 42004 |
181 | 8 | 10 | 辛 | 酉 | 58 | 3 | 平年 | 64650 |
182 | 9 | 11 | 壬 | 戌 | 59 | 3 | 平年 | 65015 |
183 | 10 | 12 | 癸 | 亥 | 60 | 3 | 平年 | 65380 |
184 | 1 | 1 | 甲 | 子 | 1 | 4 | 閏年 | 65745 |
185 | 2 | 2 | 乙 | 丑 | 2 | 4 | 平年 | 66111 |
186 | 3 | 3 | 丙 | 寅 | 3 | 4 | 平年 | 66476 |
187 | 4 | 4 | 丁 | 卯 | 4 | 4 | 平年 | 66841 |
188 | 5 | 5 | 戊 | 辰 | 5 | 4 | 閏年 | 67206 |
189 | 6 | 6 | 己 | 巳 | 6 | 4 | 平年 | 67572 |
190 | 7 | 7 | 庚 | 午 | 7 | 4 | 平年 | 67937 |
191 | 8 | 8 | 辛 | 未 | 8 | 4 | 平年 | 68302 |
192 | 9 | 9 | 壬 | 申 | 9 | 4 | 閏年 | 68667 |
193 | 10 | 10 | 癸 | 酉 | 10 | 4 | 平年 | 69033 |
194 | 1 | 11 | 甲 | 戌 | 11 | 4 | 平年 | 69398 |
195 | 2 | 12 | 乙 | 亥 | 12 | 4 | 平年 | 69763 |
196 | 3 | 1 | 丙 | 子 | 13 | 4 | 閏年 | 70128 |
197 | 4 | 2 | 丁 | 丑 | 14 | 4 | 平年 | 70494 |
198 | 5 | 3 | 戊 | 寅 | 15 | 4 | 平年 | 70859 |
199 | 6 | 4 | 己 | 卯 | 16 | 4 | 平年 | 71224 |
2000 | 7 | 5 | 庚 | 辰 | 17 | 34 | 四百年おきの閏年 | 729025 |
2001 | 8 | 6 | 辛 | 巳 | 18 | 34 | 平年 | 729391 |
2002 | 9 | 7 | 壬 | 午 | 19 | 34 | 平年 | 729756 |
2003 | 10 | 8 | 癸 | 未 | 20 | 34 | 平年 | 730121 |
2004 | 1 | 9 | 甲 | 申 | 21 | 34 | 閏年 | 730486 |
2005 | 2 | 10 | 乙 | 酉 | 22 | 34 | 平年 | 730852 |
2006 | 3 | 11 | 丙 | 戌 | 23 | 34 | 平年 | 731217 |
2007 | 4 | 12 | 丁 | 亥 | 24 | 34 | 平年 | 731582 |
2008 | 5 | 1 | 戊 | 子 | 25 | 34 | 閏年 | 731947 |
2009 | 6 | 2 | 己 | 丑 | 26 | 34 | 平年 | 732313 |
2010 | 7 | 3 | 庚 | 寅 | 27 | 34 | 平年 | 732678 |
2011 | 8 | 4 | 辛 | 卯 | 28 | 34 | 平年 | 733043 |
2012 | 9 | 5 | 壬 | 辰 | 29 | 34 | 閏年 | 733408 |
2013 | 10 | 6 | 癸 | 巳 | 30 | 34 | 平年 | 733774 |
2014 | 1 | 7 | 甲 | 午 | 31 | 34 | 平年 | 734139 |
2015 | 2 | 8 | 乙 | 未 | 32 | 34 | 平年 | 734504 |
2016 | 3 | 9 | 丙 | 申 | 33 | 34 | 閏年 | 734869 |
2017 | 4 | 10 | 丁 | 酉 | 34 | 34 | 平年 | 735235 |
2018 | 5 | 11 | 戊 | 戌 | 35 | 34 | 平年 | 735600 |
2019 | 6 | 12 | 己 | 亥 | 36 | 34 | 平年 | 735965 |
2020 | 7 | 1 | 庚 | 子 | 37 | 34 | 閏年 | 736330 |
2021 | 8 | 2 | 辛 | 丑 | 38 | 34 | 平年 | 736696 |
2022 | 9 | 3 | 壬 | 寅 | 39 | 34 | 平年 | 737061 |
2023 | 10 | 4 | 癸 | 卯 | 40 | 34 | 平年 | 737426 |
2024 | 1 | 5 | 甲 | 辰 | 41 | 34 | 閏年 | 737791 |
2025 | 2 | 6 | 乙 | 巳 | 42 | 34 | 平年 | 738157 |
2026 | 3 | 7 | 丙 | 午 | 43 | 34 | 平年 | 738522 |
2027 | 4 | 8 | 丁 | 未 | 44 | 34 | 平年 | 738887 |
2028 | 5 | 9 | 戊 | 申 | 45 | 34 | 閏年 | 739252 |
2029 | 6 | 10 | 己 | 酉 | 46 | 34 | 平年 | 739618 |
2030 | 7 | 11 | 庚 | 戌 | 47 | 34 | 平年 | 739983 |
2050 | 7 | 7 | 庚 | 午 | 7 | 35 | 平年 | 747288 |
1900年を1年目と内的処理していた場合、年数が2桁から3桁になる。また、年号を下2桁だけで処理していたシステムの一部で年のエントリで99をエラーコードや例外値として扱っている物があったとされ、そのようなシステムでは1999年になった途端に正当な1999年とエラーとを識別できず不具合をおこすことが懸念された。又、9が5つ並ぶ1999年9月9日にエラーが発生することも懸念された。
GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から1024週後にあふれて0に戻る。
年数を下2桁だけで処理していたシステムや、2000年を平年(閏年ではない)と誤解したシステムに問題が起こる。
1970年1月1日0時からの秒数が十進法で9桁から10桁になる。経過秒数を文字列表現に直してソートしたことで、「1,000,000,000 < 999,999,999」と判断してしまい、項目の新旧が正しく処理されない問題が実際に幾つかのシステムで発生した。
2000年以降も年数を下2桁だけで処理していたシステムで、かつ年を文字列で格納していた場合に、先頭が0の場合には八進数として扱われる処理系があり、その場合2008年の時点で年の処理が不正となる場合がある。ごく一部のperlで作成されたネットゲームで誤作動が発生した事例がある。
潜在的なバグが発覚した。シチズン電波時計やソニーのゲーム機「プレイステーション3」(閏年処理)、オーストラリアのクイーンズランド銀行でのシステム誤動作、ドイツジェムアルト社のICカード使用不能など。シチズンのケースでは、年の内部表現に西暦下2桁のBCDを使っていた。
GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から2048週後にあふれて0に戻る。(10ビットでは2回目)
1930年 - 2029年を下2桁で表現しているシステムに問題が起こる。同様のものに2050年問題や2070年問題などがある。
1900年1月1日0時からの秒数が32ビットからあふれ、NTPに問題が起こる。
Unixなど。1970年1月1日0時(Unix epoch)からの秒数が31ビットからあふれ、32ビット符号付きで処理しているシステムに問題が起こる。
GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から3072週後にあふれて0に戻る。(10ビットでは3回目)
HFSのタイムスタンプは2040年2月6日までしか取り扱えない。
System zのSTCK命令で取得する64ビットのTODクロックは2042年9月17日中にオーバーフローする。
2038年問題の1980年起点版。FATファイルシステムのタイムスタンプなどが1980年起点である。
1950年 - 2049年を下2桁で表現しているシステムに問題が起こる。同様のものに2030年問題や2070年問題などがある。
1970年 - 2069年を下2桁で表現しているシステムに問題が起こる。同様のものに2030年問題や2050年問題などがある。
FATファイルシステムのタイムスタンプの起点の1980年1月1日を基点として、年数を下2桁だけで処理するソフトウェアなどは、その起点の99年後(2079年12月31日)までしか正常動作しない。
2000年以降に作られた年数を2桁で表すシステムや、2100年を閏年と誤解したシステムに問題が起こる。
FATファイルシステムのタイムスタンプは2107年12月31日までしか取り扱えない。
更新されたGPSは内部処理で週数を13ビットで管理しており、この頃にあふれて0に戻る(正確な日時は未定)。
2286年問題-2286年11月20日17時46分40秒に起こる。原因は、2001年問題と同じ。
Visual C++において、3000年1月1日以降の日付処理に不具合が生じる。
昔、父親がなんか興奮気味に言ってたんだけどさ。
父親「昔、実況で『今年はオリンピックがあるので、閏年なんですねー』ってのがあったんだけど、その時は100年に1回の閏年が無い平年のはずだから間違いのはずだったんだけど、400年に1回は閏年になるよってルールもあるから、逆の逆で正解だったんだよねー」
父親が語ったんだから、そういう年があったと思うんだけど。いつの話だ?
いやいや、2000年のことらしいな、ググッタら。シドニーオリンピックのことか。
つか、400年に1回じゃなくて、900で割ったあまりが200と600か。まあ、400年って言い方も直近400年前って意味では大同小異か。
でも、俺の記憶では、もっと昔の話だったなあ。俺が小学生、つまり、20年くらい前に聞いた覚えがあるんだよその話。つまりシドニーオリンピックの話がでるのはおかしい。
俺の記憶違いってのが濃厚なんだけど。
でもなんだろうなー。
せめて、その当の実況動画とか見れないかなあ。
Apple Watchを使っている奴が馬鹿なのではなくて、Apple Watchを使っているユーザーの中にいるとある馬鹿に煽られたので書く。
俺は機械式時計を昔から使っているが、その馬鹿が「腕時計なんて携帯があればいらないだろ」と一方的に突っかかってきていて鬱陶しかった。
携帯を見れば問題ないと思っている人にとって腕時計は必要ないものだ。そしてそういう人はたくさんいるだろうし、彼がそう思うのは全く否定しない。
そいつが馬鹿なのは、その主張にもかかわらずApple Watchを買い、お世辞にも使いやすいとはいえないインターフェースで、メールとかの通知を必死に読もうとしていることだ。
諦めて携帯出せよw
その馬鹿のことはともかく、Apple Watchのおかげで機械式腕時計も注目度が上がってきて嬉しい限りだ。
せっかくここまで読んでくれた人に、俺の「主観的な」機械式腕時計の良い所と悪い所を挙げてみたいと思う。
機械式腕時計は電池がいらない。充電もいらない。ゼンマイを巻けばすぐに時計が動き出す。これが一番大きなポイントだ。
久々にクオーツ時計を使おうとしたときに、電池がなくて使えなかった経験をした人は多いのではないだろうか。
USB充電式の時計だと、充電忘れなんて日常茶飯事だ。携帯ですらたまに忘れるのに、さらに充電が必要なアイテムを増やすのは辛い。残り容量を気にして生活するのも辛い。
機械式だと、リューズと呼ばれる横のゼンマイをチャチャっと巻くだけですぐに動き出す。
自動巻きの機械式腕時計ならば、腕につけているだけで自動的にゼンマイを巻いてくれるので、腕に着けている限り巻き直す必要もない。
すぐに動き出さないという難点はあるが、ソーラー時計も似たような特性があるので、毎日ゼンマイを巻くのが面倒な人は、自動巻きかソーラー式が良いだろう。
自分はメインでは手巻きの機械式時計を使っていて、それをつけている時は夜寝る前に巻いてから寝ている。USBよりはよほど楽だし、一日の最後に時計を巻くのは楽しい。
機械式時計は時間が狂う。超精密な時計であっても、月に15秒くらいは狂う。
クォーツ時計もその程度は狂うのだが、携帯電話や電波時計などはいつも正確な時間を指すので、それらに比べると明らかに時間が狂う。
機械式時計には「トゥールビヨン」と呼ばれる、重力の影響を可能な限りキャンセルして時間を狂わせなくしようとする機構もあるが、それでも機械式である以上狂う。
なので機械式時計を使う以上、時刻を合わせる必要がある。自分の時計は1ヶ月で1分ほど狂うので、1ヶ月に1回くらい合わせているが、この頻度をどう判断するかは人それぞれだ。
特に、ラッシュアワーとかの乗り換えで秒単位を認識しながら行動している人にとっては、電波時計やスマートウォッチ(Google WearやApple Watch)を使ったほうがいいだろう。
機械式時計にSiriはついていないが、それでも日頃必要になる機能は大体ついている。
一番よくあるのがデイト、すなわち今日が何日かを表示する機能だ。外回りとかで入館証明を書かされたりするとき、デイトがあると便利である。
高価なのになると永久カレンダーと言って、30日31日の判定はおろか閏年までしっかり対応してくれる。安いやつは月初に自分で合わせることになる。
次に、好きな人が多いクロノグラフ。乱暴に言うとストップウォッチ内蔵腕時計だ。これは機能よりも見た目の格好良さで好まれることが多い。
ワールドタイマーは、海外とのやりとりの多い人には便利だろう。時差のある国の時間も同時にわかる機構だ。2国だけの場合もあれば、複数の国の時間が一気にわかることもある。
自分は仕事で日本以外に海外二拠点とやりとりが必要なことがあり、その時にはワールドタイマーの腕時計を着けているが、大変重宝している。多分スマートウォッチより見やすいと思う。
ミニッツ・リピーターという、時代遅れの機能も人気だ。光が一切ない夜に時間を知りたくなったことを想定して、今が何時何分か音で知らせる機構である。
今のご時世、電気のつかない暗闇なんてものはそう滅多にないので実用性はほとんどないが、ゼンマイ式なのに音を出せるその複雑な機構のファンは大変多い。
これらの機能はみな電池式の時計でも可能なものばかりだが、機械式のメリットを享受したままこれらの機能が使えるのが嬉しい。
機械式時計ならでは機能もある。ドレスウォッチは薄型がフォーマルだが、機械式だと電池の厚さ以上に薄いフォーマルな時計もある。(充電型だともっと薄いものもあるにはあるが)
スケルトンの時計も電池だと格好わるいだろう。ミステリークロックの腕時計版、ミステリーウォッチなんてものは、スマートウォッチでは到底実現出来ないだろう。
こういった機能はもう自己満足の世界かもしれないが、電気を使わずカラクリだけでこういった機能が実現出来るのに魅力を感じる人は多い。
実際の所、今まで挙げてきた色々な機能は、ソーラー式の電波時計を買えば大体まかなえる。
ソーラー式の電波時計は、充電の必要もなく、常に正しい時刻を刻んでくれる。そして機械式時計に比べればまだ安い値段で買える、大変良い選択肢である。自分も1本持っている。
それに比べて、機械式時計は高い。ちょっとしたものでもノートパソコンくらいするし、50万円くらいの時計もたくさんある。数百万から1000万円超えも高級時計のラインナップに普通に並ぶ。
機械式時計は大体3年に1回オーバーホールに出す必要があり、そこで費用がさらに発生することもある。色々と高くつくのだ。
一方、機械式時計の価格の大きなメリットの一つとして、価値が落ちないというものがある。ノートパソコンは10年も経ったら間違いなくゴミだが、高級な機械式時計は50年くらいは余裕で動作する。
結婚生活でずっと身につけて欲しいという思いから結納返しの定番商品であるし、親から子供に自分の使っていた時計をプレゼントするのも機械式時計ならよくある話だ。
生活を一緒に歩む、気持ちを込めた道具としての腕時計、という側面は、機械式時計ならではのものだと思っている。
これを読んで、機械式時計もちょっといいな、と思う人が出てくれたら嬉しい。ソーラー電波がいいなと思ってくれても嬉しい。やっぱりApple Watchいいじゃん、でも結構嬉しい。
いきなりですが、僕は毎日2時間オナニーをしていた時期がありました。
平日は1回、休日は2〜4回。我ながらやりすぎなのではないかというくらいです。
4回した日にゃ、たまたまその後にエロいものをみて反応してしまったときの息子の痛さときたら、、、。
そこで僕はいったい人生でどれだけの時間をオナニーに費やしたのだろうと考えました。
==========================
「Q1 頻度は?」。
・「ほぼ毎日」81人
・「1週間に2、3回」138人
・「1週間に1回」48人
・「それ以下」33人
「Q2 1回にかける平均時間は?」。
・「5分」41人
・「10分」93人
・「20分」53人
・「30分」70人
・「40分」12人
・「60分」26人
・「61分以上」5人
「Q3 1日にした最高回数は?」。
・「1回」18人
・「2回」79人
・「3回」92人
・「4回」33人
・「5回以上」78人
by:http://news.livedoor.com/article/detail/7974505/
==========================
ここで僕には統計学の知識がないので、以上の質問と回答で最も人数の多い回答結果を利用したいと思います。
よって、今回のサンプル男性は、
「1週間に2、3回(ここでは回=日とします)、1回に10分、1日に3回もオナニーをする男性」とします。
となると、この男性がいつオナニーを始めたかも気になりますよね?
と思って、ぐぐると女性のオナニー事情についての記事がでてくるわでてくるわ。
僕は男のオナニーが知りたいのに。。。
参考までに載せておきますね。
http://sextechnique.net/anan15
http://enq-maker.com/result/an2ZHxb
http://www.xn--u9ja5c230uvnfg8kc0ap9b411ht4x.com/
http://kagai110.web.fc2.com/onani2.html
ここによると、12歳が最もおおいため、12歳から始めたと仮定します。
サンプル男性は、1回に10分のオナニーを1日に3回し、その作業を1週間に3日しています。
1年間(この場合、閏年ではないと仮定します)では、4770分です。
この作業をこのペースで行えるのを30歳までとしましょう。
12歳から始め、30歳まで行うので、18年間です。
18年間では、85860分です。
さらに、一番最初に紹介したアンケート結果のサイトでは、以下のようなことをおっしゃっています。
==========================
30歳以上になると、「1週間に1回以下。平均時間は約21分」
==========================
ということで、30歳から40歳までを上記のペースで行うと仮定します。
これを10年間続けるので、11130分。
12歳から40歳までのオナニー時間を合計すると、96990分。
人生は80年あると仮定すると、時間に換算して700,800時間。
これだけを見たら、意外と人生のうちに占めるオナニーってたいしたことないじゃんと思いますよね。
==========================
週休二日制とすると月に8日前後休日+(GW+年末年始+祝日で年間合計20日休日)=
年間休日は116日程度
一生の内訳は
by:http://miya-j.com/archives/31
==========================
どうですか?
人生の自由な282,710時間のうち、1616.5時間がオナニーの時間です。
そうでもないでしょう?
だいたい30分程度でしょうか。
ということで、サンプル男性の時間の3倍の時間を費やしているので、4849.5時間。
それでも、1.7%です。
でも、よく考えてください。
この1.7%をもっと有意義な時間にしたら、この積み重ねが人生の差を決めるのです。
「僕はこのままオナニーばかりしてていいんだろうか?」
僕はある日疑問に思いました。
「この時間を、もっと自分の成長する時間に費やしたらどうなんだろう」
そう思い、オナニーの時間を削減するwebサービスを作りました。
これは、RSSができるだけでなく、外部サイトで気になった動画ページを他の端末、アプリと共有するためのブックマーク機能もついています。
他の人のRSSも見れるので、新しいエロサイトとの出会いもあります。
ここで皆さんが短時間にテクノブレイクする寸前までいってくれることがこのサービスのコンセプトです。
皆さんはきっとお気に入りのエロサイトがたくさんあるでしょうから、一度にまとめてすべてのサイトの更新をチェックして、是非オナニー時間を短縮してください。
Joel氏の採用面接ゲリラガイドにもあるように、デキる開発者と一緒に仕事をしたいというのは、開発者なら誰でも思うことだ。
そこで、自分が面接する側だったら、初歩の初歩レベル、即ちプロとしてあり得ないレベルの人を足切りするような、くだらない質問を2つ考えてみた。
Java、VB.NET、C/C++、PHP、Perlといったオープン系では広く普及している言語で、ごく普通のPCやサーバで動作するコードを想定し、実装方法を考えてもらうというもの。
ここでポイントとなるのは「プログラムに正解はないが、明らかな間違いはある」という考え方。
つまり2つの質問に対して、明らかに間違った回答をしてきた人が失格ということ。
では上の問いで想定している明らかな間違いは・・・
どっちも教科書でよく見るやり方だけど、仕事でそれやるのは頭悪すぎて話にならないということで。
ちなみにそれぞれの質問で何を見ているか、デキる開発者には一目瞭然だと思うけど、説明すると
結局、コードを書くときに一番大事なのはそういう能力であって、間違っても努力や気合じゃないってこと。
数百行、果ては数千行もある関数やメソッドが何故生まれるのか、どうしても理解できない。それ仕様の通りに動かそうと思ったら、テストもデバッグもライフワークになるよね?それとも未完成でも納品するってこと?もしかしたら「勝手に関数/メソッド作るな」司令が出てるのかもしれないけど、だったら「できません」と断ったほうが絶対楽だと思うぞ。あ、楽といえばこういうコードのレビューは楽だよ、「長すぎて読めない、書き直し」で終わるから。
条件分岐やループを何重にもネストしたコード。スクロールさせるとうねって見える。それさ、正常系の処理だとして一番最後の行の直前はどこ通るの?即答できないなら書き直せ。即答できても「こういう複雑なコードを書けるのがプロ」とか誇らしげな表情しちゃう人はただの勘違いバカだから、その姿勢改めるまで可愛がられるかサクッと見捨てられるかでしょう。
ANDやORが入り組みまくった条件式だけどさ、お前一体何がしたいの?それ多分お前しか理解できないから、システムがEOLになるまで面倒見てあげてね。
「1からnまでの総和」とか、公式がありそうなものをロクに調べもせず、n回ループする方法しか思いつきませんでした的に書いたコード。そんなバカ丸出しの実装で恥ずかしくないの?バカはプログラマに向いてません。それは前述の勘違いバカもそうだけど、頭を捻るセンスが無いのも致命的。
閏年を始めとする日付の計算アルゴリズムとか、標準提供されていそうなものまで手で実装したコード。お前それ辛くないか?てかマニュアルやヘルプはちゃんと読もう、な?
なんで同じコードをコピペするの?共通ルーチン作らなくてもgrepで直して回れば修正漏れも起きないって魂胆?同じ処理が出てくるたびに読んでてうんざりしてくる人も少なからずいることを理解して仕事してください。頼むよ。
DBのテーブルから全レコード取得して、必要なデータか判定して処理するコード。WHERE句って知ってる?データが数億件とかあってもそれでいいと思ってる?
その処理は本当にコードで書かないとダメなの?書かないで済みそうなことまで何故書くの?書かなきゃいけないとして、どうやって短く書くか工夫しないの?コードが増えただけバグも増えることを、もっと深刻に受け止めて欲しい。
最後にコードじゃないけど、巨大なディスプレイに高解像度で極小フォントという環境で開発ってどうなのよ。そこまでしてコード全部表示しないと書けないんだ?今まさに書いている部分なんて、変数もアルゴリズムも自分の頭の中にあるんだから画面に表示する必要なくね?確かに開発用のディスプレイは大きいものが複数あったほうがいいけど、それらはそういう使い方をするためにあるものじゃないと思うぞ。
よくよく観察するとw
直近の投稿?何?スゴすぎ?会社で勉強大会しているのかなぁ~^^;
http://ameblo.jp/mystandardjp/entry-11018488804.html
注目度ナンバー1!ホットケナイ!ホットなキーワードをチョイス!
■ 9月15日の話題
9月15日(くがつじゅうごにち)はグレゴリオ暦で年始から258日目(閏年では259日目)にあたり、年末まであと107日ある。
1590年 - ウルバヌス7世 (ローマ教皇) ウルバヌス7世が教皇 ローマ教皇に選出される(在位13日で死去。在位期間史上最短の教皇)。
1821年 - コスタリカ、グアテマラ、ホンジュラス、ニカラグア、エルサルバドルがそれぞれスペインからの独立を宣言。
1830年 - イギリスで世界初の鉄道開通。開通式典で死亡事故。
1835年 - ビーグル (帆船) ビーグル号による世界探検を途上にあったチャールズ・ダーウィンがガラパゴス諸島に到達する。
1868年(慶応4年7月29日 (旧暦) 7月29日)- 戊辰戦争: 二本松城が落城する。
http://mystandardjp.cocolog-nifty.com/
旧暦9月15日は9月 (旧暦) 旧暦9月の15日目である。六曜は六曜#大安 大安である。
慶長5年(グレゴリオ暦1600年10月21日) - 関ヶ原の戦い
慶長18年(グレゴリオ暦1613年10月28日) - 支倉常長ら仙台藩の慶長遣欧使節が日本を出発
建炎4年(ユリウス暦1130年10月18日) - 朱子、朱子学の祖(+ 1200年)
貞享2年(グレゴリオ暦1685年10月12日) - 石田梅岩、思想家(+ 1744年)
文政8年(グレゴリオ暦1825年10月26日) - 岩倉具視、政治家・明治維新の元勲(+ 1883年)
http://ameblo.jp/mystandardjp/entry-11017507873.html
チャンピオンズリーグ | 今ホットな話題情報
注目度ナンバー1!ホットケナイ!ホットなキーワードをチョイス!
■ チャンピオンズリーグの話題
大会名
開始年 1955
終了年
参加チーム数 32
(3回目)
(9回)
備考
欧州クラブシーンにおける最も権威ある国際大会であり、各国リーグ戦の上位クラブが総登場することから世界的な注目を集める。勝ち上がるごとにクラブには莫大な収益がもたらされ、優勝クラブは名実共に欧州一の称号を得られることから、自国のリーグ戦よりもこちらで勝つことを優先しているクラブも数多い。
優勝クラブは「クラブ世界一」を決めるインターコンチネンタルカップ (サッカー) インターコンチネンタルカップやFIFAクラブワールドカップへの出場権を得られるが、世界の有力サッカー選手は軒並み欧州のクラブに集中しているため、この大会で優勝したクラブが実質的には世界一のクラブであるというのが衆目の一致するところである。
http://w.livedoor.jp/nihonerimo/
■ チャンピオンズリーグ (曖昧さ回避)の話題
チャンピオンズリーグ(Champions League)
EHFチャンピオンズリーグ(ハンドボールのヨーロッパクラブNo.1を決める大会)
FUTSAL地域チャンピオンズリーグ
チャンピオンズリーグ (麻雀)
cs:Liga mistr?
da:Champions League
Champions League
http://www.geocities.jp/nihonerimodel/
■ チャンピオンズリーグ (麻雀)の話題
チャンピオンズリーグは、日本プロ麻雀連盟が主催する麻雀のタイトル戦。
古くは内外タイムス杯。2001年度前期までは王座杯という名称。2001年度後期よりチャンピオンズリーグへ改称。
半荘4回戦×5節。1半荘は時間制限ありの50分+1局で打ち切り。準々決勝からは現チャンピオンズリーグの1名を加えた16名で行う。決勝は準決勝勝ち上がりの4名で半荘5回戦。その半荘5回戦合計総合計ポイントトップ者が今年度の優勝者となる。
まぁ、色々な幸運?が重なってそこまでデカイ障害にはなっていないように見える今回PS3の閏年問題。
しかし、SCEはこれから対処しなければならない問題があり、企業の障害対策の観点から言えばここからが本番だ。
一応サービス業に従事するものとして、勉強を兼ねて緊急度別にどんな問題を解決しなければならないのか挙げておこうと思う。
まぁ、コレがぶっちゃけ一番でかいよね。なんせ金取ってるし。
全部の商品を調べたわけではないが、基本72時間単位で課金をしている事から見て、今回の障害で72時間中最大24時間、
実に契約期間の1/3も利用不可の状態にしてしまったわけで、このまま白を切るワケにはイカンよね。
何らかの保証が必要でしょう。
PSNの利用規約にざっと目を通したところ、「ナニが起こっても基本的にSCEに責任ありません」とか、
「最悪保証する場合も購入金額を超える保証はしません」というこの手のサービスによくある記述しか無いため
どのような保証がなされるのかは現段階で不明。
せめて障害期間に被ったレンタル契約に関しては全額返金するぐらいの対応をすれば、
多少の痛手と引換に今後のブランドへの信頼感を得られるのではないでしょうか。
つか、何の根拠も無い俺の個人的な予想では、痛手ですら無い額だと思うけどね。
上とまとめても良かったんだけど、ビデオレンタルは利用期間が短く障害の影響がほかと比べて甚大すぎる為切り分けました。
その他課金サービスに関しては、殆どがSCEを通して他の企業が提供しているサービスなので、企業間契約でSLAがどうなっているか
によるのですが、ぶっちゃけその辺の契約なんて分かる訳ないので割愛。まぁ、丸一日商売の邪魔したわけなので、
お咎めなしってワケには行かないでしょうね。お偉方が菓子折り持って謝罪行脚程度で済めばいいんですが。
ウチのPS3は運良く障害期間に全く利用しなかったのと、まだ情報を集めてないのでコレがどうなったか分かってないんですが、
報告にはセーブデータがイカれた、テーマがイカれた、トロフィーデータが消えた等の報告が上がってました。
トロフィーは同期してない分は復旧無理だろうけど、ぶっちゃけ他に比べたら緊急度低すぎてココに含めなくても良かったぐらいですが
一応おなじデータって分類なのまとめました。
購入したDLCについてはアカウント情報さえ手元にあれば購入履歴から再度DLし直せばいいので、謝罪文のみですむ場合がほとんどでしょう。
ただ、セーブデータに関しては対応を間違うと今後の商売に響きかねないので注意が必要でしょう。
とはいえ、たぶん最終的には諦めてもらうしかないんですけどね。
セーブデータに関しては、発売当初誰とでもセーブデータの交換がネットを通じて出来ると言う恐ろしいまでのオープンな姿勢から一変、
オンラインゲームが増えてきたこともあり管理が非常に厳重となっております。万が一破損フラグを立てるだけでデータはそのまま残っていた場合でも
コレをパッチ等で復旧させるのは、技術的には簡単でもPSNの今後を考えると絶対に行えない対処です。
なぜかというと、今年に入ってPS3のファームウェアが完全にクラックされてしまった可能性があるからです。
iphoneのJailBreak等で名を馳せたとあるクラッカーが年末年始あたりからPS3に手を出し、実質5週間で完全にクラックした、という報告を自身のサイトで
発表したと言うニュースがありました。コレがすぐ割れにつながるわけではないですが、最高レベルのシステム権限すら握れてしまうらしく、事実であるなら
破損フラグ除去パッチなど、どう考えても配信できる訳ない。手がかり無しで自体を把握しなければならないクラッカーにわざわざヒントを与えることになりかねず
泥棒に追い銭やるようなもんだからです。
というわけで、誤って起動してデータが破損してしまった方は残念ですが諦めた方が良さそうな感じ。
オンラインに関係ないゲームなどは多少融通が効くかもしれないですが、そのへんはゲームタイトルによるのかもしれません。
まぁ、緊急度ゼロでも良かったんだけどwww
コレはぶっちゃけどうでもいい。大した影響ないから。外野が多少喚いたところで今のPS3の勢いなら何の影響もないでしょう。
長々と書いたけど、こんなもんじゃなかろうか?どう対応するのか見ものです。
何もしないってことは.....流石にないよね?特に課金関連。
まぁ、他人事なので興味深く見守りたいと思います。
流石にいくらなんでもそんなしょーもないミスはないだろう,と.
だって閏年を忘れたんじゃなくて,閏年じゃない年を閏年だと判定したってことなんだから状況がおかしい.
閏年の判別なんてmod 4を取って,後は100と400に関して調べればいいだけ.
2000年が終わったから100とか400とかやる必要が事実上無いと考えてもmod 4を取ればいいだけ.
流石に間違えようがないだろう.
しかも20G,60Gと40Gモデルでだけ起きるってのも変な話.
まさかとは思うが2006年からスタートする内部時計(ソニータイマー)を保持していて,
インポートするときにTimeクラスではなくTimeSonyクラスを使ったとか.
そうすると2010年はソニー歴の閏年になるわけで,PS3は間違っていない.
20G,40G,60Gでは起きて,基盤が大きく異なる80Gと薄型では起きないという説明もこれでうまくいく!
datetimeって2.0系列で閏年の扱いが曖昧だからじゃね。
leapdays()のバグ(こっちは2.0だと直ってる)と同じく、timedeltaのdaysって400で割り切れる年を平年と見なす(本来は閏年)バグが入ってるだろ。
友達に、こう指摘してみてよ。
よく分かりません。誰か解説してください。
まず変数宣言。
時間と日付を変数に入れてる。2009-6-5 23:53:0だね。
最初のfor文で、2008年までの秒数を足そうとしてる。
しかし、閏年の処理が変なので上手くいかない。
(400で割って1余る年と、4で割って1余る年は、別に閏年じゃない)
月が2だったら、2678400を足してる。
その後は特筆のおもしろさ。
monthが2でかつ、monthが3でかつ、urがtrueなら2505600を足してる。
(さっきのurの扱いに注目。去年が400で割って1余る年か、4で割って1余る年の時だけ)
しかし、判るとおりmonth が 2 で かつ 3 なんて素っ頓狂な事にはならない。
つまりここは、month が 2 かそれ以外かの処理しかない。
if(month == 2){ sec += 2678400; }
要はこう圧縮できる。
最後に日付(月の頭からその日付)の前日までの秒数を足して
時間と分と秒を、全部秒に直して足して、
表示してる。
3月1日を月曜日とする。29日は1日と同じ曜日だから3月31日の翌日である4月1日は木曜日である。同じように5月以降の1日は順に土、火、木、日、水、金、月、水となる。つまり全ての曜日が揃っている。ここまで閏年は関係ない話なので、13日の金曜日は毎年必ず訪れる。
さて
ある年の元日を月曜日とする。平年なら翌年の元旦は…火曜日と曜日が一つ進み、閏年なら水曜日と曜日が二つ進む。閏年は4年に一度、しかし100年に一度平年、さらに400年に一度は閏年になる。よって400年で+400 +(400/4) -(400/100) +(400/400) 曜日が進むが、整理すると7の倍数となり、つまるところ400年前の曜日と同じになる。
訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。
注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、Joel氏が本当に以下のように述べているとは限りません。
なぜMicrosoft Officeファイルフォーマットはこんなにもややこしいのか (そしてその対処法を幾つか)
Tuesday, February 19, 2008
先週、MicrosoftはOfficeのバイナリフォーマットを公開したが、このフォーマットは殆ど正気でないように見える。Excel 97-2003ファイルフォーマットは349ページのPDFファイルだ。でも待って、それで全部じゃない。このドキュメントには次の面白いコメントが書いてある。
それぞれのExcelワークブックは1つのcompound fileに収められている
つまり、Excel 97-2003ファイルはOLE coumpound documentで、それは結局、1つのファイル内にあるファイルシステムである。これは、理解するのにあと9ページはスペックを読まなくちゃならないぐらいには十分に複雑だ。そしてこれらの「スペック」は、普通我々が考えるようなスペックというよりは、Cデータ構造みたいに見える。これ全体が階層的ファイルシステムなのだ。
もしあなたが週末を、Wordドキュメントをブログにインポートしたり、あなたの個人的な財務データからExcelフォーマットのスプレッドシートを生成するような気の利いたコードを書くのに使おうと思ってこれらのドキュメントを読み始めたなら、このスペックのややこしさと長さがそんな気をあっという間に失せさせるだろう。普通のプログラマはこのOfficeバイナリファイルフォーマットについて次のような結論を下す:
この4つ全てについて、きみは間違っている。ちょっとだけ掘り下げて、これらのファイルフォーマットがどうしてこんなに信じがたいくらいに複雑なのか、なぜMicrosoftの悪いプログラミングを反映しているのではないのか、そしてそれを回避するためにあなたに何ができるか、を明らかにしよう。
理解すべき最初のことは、これらのバイナリファイルフォーマットはちょっと違ったデザインゴールを持って設計されたということだ。たとえばHTMLとは。
これらはすごく古いコンピュータで速く処理できるようにデザインされた。Excel for Windowsの初期のバージョンでは、1MBのRAM、20MHz動作の80386が Excelを快適に走らせることができるための妥当なものだった。このファイルフォーマット内には、ファイルを素早く開いたり閉じたりするための最適化が沢山仕込まれている:
これはライブラリを使うことを想定して設計されている。もしあなたがバイナリをインポートするものを1から書き上げたいと思ったら、Windows Metafile Format (何か図を描く場合) や OLE Counpound Storage みたいなものをサポートしなくてはいけなくなる。もしあなたが Windows上でやるのなら、そうしたことをたいしたことのない作業にするためのライブラリのサポートが存在する... そういったフィーチャーを使うことは(元々)マイクロソフトチームのためのショートカットだった。でもあなたが全部を自分でスクラッチから書くなら、全部の作業を自分自身でやらなくてはいけない。
オフィスはcompound documentsに対して広範囲のサポートを持っている。例えば、スプレッドシートをWord文書に埋め込んだりできる。完璧なWordファイルフォーマットのparserは、同じように、埋め込まれたスプレッドシートで何かインテリジェントなことが出来るべきだろう。
それは相互協調性(interoperability)を意識してデザインされてはいない。仮定されていたのは、WordファイルフォーマットはWordからのみ読み書きされなくてはいけない、ということで、それは当時においては十分に合理的なものだった。これは、Wordチームのプログラマがファイルフォーマットをどう変更するかについて決定を行う場合にはいつでも、彼らが気にするのは (a)何が高速か (b)Wordのコードベースにおいて最小の行数になるのは何か、だったことを意味する。SGMLやHTML-interchangeableといった標準ファイルフォーマットのようなアイデアは、最初にインターネットがドキュメントの相互交換を実現するまで現実のものにはならなかった。それはOfficeバイナリフォーマットが最初に考案されてから10年後のことだったのだ。ドキュメントを交換するのにインポーターとエクスポーターを使うことができるという仮定が常にあった。実際Wordは簡便な交換のために設計されたRTFと呼ばれるフォーマットを持っており、そのフォーマットは殆ど最初のころからあり、今も100%サポートされている。
それはアプリケーションの全ての複雑さを反映していなくてはいけない。 全部のチェックボックス、全部のフォーマッティングオプション、そして全部の、Microsoft Officeのフィーチャーは、ファイルフォーマットのどこかで叙述されていなくてはいけない。Wordのパラグラフメニューにある、"Keep With Next" と呼ばれるチェックボックス、これはパラグラフを、その後ろのパラグラフと同じページに置くのに必要な場合は、次のページに移動させるもの(?)だが、これもファイルフォーマットの中に無くてはいけない。そしてこれはつまり、あなたがWordドキュメントを正しく読み込める完璧なWordクローンを実装したいなら、そういったフィーチャーを実装しなくてはいけないということだ。Wordドキュメントをロードする競争力のあるワードプロセッサを作っているのなら、ファイルフォーマットからそのビットをロードするコードを書くのには1分しかかからないかもしれないが、ページのレイアウトアルゴリズムをそれに対応させるのに何週間もかかるかもしれない。もしあなたがそうしない場合、カスタマーがあなたのクローンでWordファイルを読み込んだら、全部のページがぐちゃぐちゃになってしまうだろう。
それはアプリケーションの歴史を反映していなくてはいけない。 このファイルフォーマットに見られる多くの複雑さは、古く、複雑で、愛されず、めったに使われないフィーチャーを反映している。それらはファイルフォーマットのなかに後方互換性のためにまだあり、そしてMicrosoftにとってその辺りのコードを残しておくことには何らコストはかからない。しかしあなたがこれらのファイルフォーマットをparseおよびwriteする一貫した完全な仕事をしたいと思うなら、Microsoftのインターンが15年前にやったのと同じことを全て、またやらなくてはいけない。要点は、何千人年の仕事が今のWordやExcelには費やされてきたのであり、これらのアプリケーションの完璧なクローンを作りたいと本当に欲するなら、あなたは何千人年を費やさなくてはならないことになる、ということだ。ファイルフォーマットは単に、アプリケーションがサポートする全てのフィーチャーの簡潔なサマリーなのだ。
手始めに、小さな例を一つ、深く見てみよう。Excelのワークシートは色々なタイプのBIFFレコードの集まったものだ。私はスペックの一番最初のBIFFを見てみたい。1904と呼ばれるレコードだ。
Excelファイルフォーマット仕様のこのレコードについての記述は非常に曖昧なものだ。そこでは単に、1904レコードが「1904日付システムが使われているかどうか」を示すレコードだ、と述べているだけだ。ああ、使えない仕様書の典型的な一例だ。あなたがExcelファイルフォーマットで何かしている開発者で、そしてファイルフォーマット仕様にこう書いてあるのを見つけたなら、あなたがMiocrosoftは何かを隠しているのだと結論付けたとしても無理はない。この情報の断片は十分な情報をあなたに与えはしない。あなたには幾ばくか外部の情報が必要で、私は今ここで、それを提供しよう。Excelワークシートには、2種類ある。日付のエポックが1900/1/1のもの(これには、Lotus 1-2-3 との互換性のために故意に入れられた閏年に関するバグがあるが、ここでそれについて述べるのは退屈すぎる)、および、1904/1/1のものだ。Excelは両方をサポートしているが、それはExcelの最初のバージョンはMac版であり、それは単に簡単だったという理由でOSのエポックを使っていて、しかしWindows版のExcelは1-2-3のファイルをインポートできなくてはならず、そしてそれは1900/1/1をエポックとして採用していたからだ。あなたが涙ぐむのも無理はない。歴史のどの時点においても、プログラマが正しいことをしなかった、という時はないのだが、しかし現実にあなたが手にしているものはこれなのだ。
1900と1904のファイルタイプは両方とも世の中には広く存在しており、それは通常、ファイルがWindowsとMacのどちらで作られたかによる。一方のタイプから他方のタイプへ黙って変換するのはIntegrity的に問題があるので、Excelはファイルタイプを変換することをしない。Excelファイルをparseするためには、あなたは両方を扱わなくてはならない。それはファイルからこのbitをロードするだけの問題ではなく、あなたが日付表示と両方のエポックを扱うparsingのコードまで書き直さなくてはいけないということを意味する。実装には何日かかかるだろうと私は思う。
実際、あなたがExcelクローンの作業をするなら、日付の扱いについて、あらゆる種類の微妙なディティールを発見することになるだろう。Excelは日付の値をいつ変換するのか? 表示の整形はどうやっているのか? なぜ1/31は今年の January 31と翻訳され、また一方で1/50はJanuary 1st, 1950と翻訳されるのか? Excelのソースコードと同じだけの量のドキュメントを書かないがぎり、振る舞いに関しての微妙なビットを全て完全に記述することはできない。
そしてこのレコードは、あなたが扱う何百もあるBIFFレコードの最初の1つに過ぎず、しかももっとも単純なものなのだ。他のレコードの殆どは、より多くのプログラマーを涙に暮れさせるぐらいには十分複雑だ。
唯一導き得る結論はこれだ。
MicrosoftがMicrosoftとOfficeのファイルフォーマットをリリースしたことは大変有用なことだが、しかしそれでOfficeファイルフォーマットをインポートしたり保存したりするのが楽になるということは全く無さそうだ。それらは狂気じみて複雑で、リッチなアプリケーションで、そしてあなたは人気のある20%の部分を実装して80%の人々を幸せにするというくらいのことしかできない。バイナリファイル仕様によってなされるのは、多く見積もっても、著しく複雑なシステムのリバースエンジニアリングにかかる時間を何分か削減するくらいだろう。
オーケー, 私はいくつか回避法を教えると約束した。良いニュースは、殆どの良く知られたアプリケーションにとって、Officeバイナリファイルフォーマットを読み書きしようと試みることは誤った決定だということだ。あなたが真剣に考えなくてはいけない代案が2つある。Officeそのものにそれをやらせるか、書き込むのが簡単なファイルフォーマットを使うかだ。
ヘビーな仕事はOfficeにやらせよう。WordとExcelは実に完全なオブジェクトモデルを持っており、COMオートメーションの手段が可能で、これであなたは何でもプログラムでやるようにできる。多くのシチュエーションでは、Office内のコードを再利用するほうがそれを実装しようとするよりも良い。ここにいくつか例がある。
この手のアプローチは、全ての種類の一般的なOfficeタイプについての、サーバ上であなたがやりたいと思うであろうアプリケーションで、うまくいくだろう。例えば:
これらのケースの全てにおいて、Officeオブジェクトにインタラクティブ動作でないことを教えてやる方法があり、だから表示をアップデートするのに煩わされたり、ユーザに入力を促す必要はない。ところで、このようなやりかたでいく場合には、gotchas(?)がいくつかあり、そしてそれはMicrosoftは公式にサポートしているものではない。だからあなたがそれを始める前にはKnowledge baseの記事を読むように。
書き込むファイルにはもっとシンプルなフォーマットを使いなさい。単にOfficeドキュメントをプログラムで生成したいなら、殆どいつでもOfficeバイナリフォーマットよりももっと良いフォーマット、WordやExcelでも問題なく開くことができるようなフォーマットが存在する。
いずれにせよ、全てのOfficeファイルを完全に読み書きできるような、文字通りのOffice競合製品を作ろうとする(その場合には、何千年もの作業があなたに予約される) のでない限り、Officeバイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。