MW211 EXIT

devlog
設計/日時表記
2013年05月23日
基本的に各頭文字を桁数分並べるのが基本となるが、
月(Month)と分(Minutes)の頭文字が「M」で重複するためいくつかの方式に分かれる。
┌─┬─┬─────────┬────────────────────────┐
│年│Y │「Year」に由来    │Y、y、YYYY、yyyy                                │
├─┼─┼─────────┼────────────────────────┤
│月│M │「Month」に由来   │M、m、MM、mm                                    │
├─┼─┼─────────┼────────────────────────┤
│日│D │「Day」に由来     │D、d、DD、dd                                    │
├─┼─┼─────────┼────────────────────────┤
│時│H │「Hour」に由来    │H、h、HH、hh                                    │
├─┼─┼─────────┼────────────────────────┤
│分│M │「Minutes」に由来 │M、m、MM、mm                                    │
│  │I │「mInutes」に由来 │I、i、II、ii                                    │
│  │MI│「MInutes」に由来 │MI、mi                                          │
├─┼─┼─────────┼────────────────────────┤
│秒│S │「Second」に由来  │S、s、SS、ss                                    │
└─┴─┴─────────┴────────────────────────┘
また、年月日を区切る記号にも「/」と「-」がある。
これらの組み合わせで方式はさらにいろいろ派生していく。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
仕様書の標準としては「ISO8601(JIS X 0301)」に規定があり、以下のようになる。
┌──────────┐
│YYYY-MM-DDThh:mm:ss │(例)「2013-06-18T18:26:59」
└──────────┘
時分秒の先頭に「T」で区切られているのが特徴か。
ただし、各プログラムの仕様をそのまま記載するのが一般的な仕様書上の記載か。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
プログラム等の各分野での代表例は以下のとおり。
┌──────┬───┬───┬───┬───┬───┬───┐
│            │  年  │  月  │  日  │  時  │分(*2)│  秒  │
├──────┼───┼───┼───┼───┼───┼───┤
│UNIX(C)     │%Y(%y)│%m    │%d    │%H    │%M    │%S    │
├──────┼───┼───┼───┼───┼───┼───┤
│PHP(*1)     │Y(y)  │m(n)  │d(j)  │h(g)  │i     │s     │
├──────┼───┼───┼───┼───┼───┼───┤
│MySQL       │%Y(%y)│%m    │%d    │%k(%r)│%i    │%s    │
├──────┼───┼───┼───┼───┼───┼───┤
│PostgreSQL  │YYYY  │MM    │DD    │HH    │MI    │SS    │
├──────┼───┼───┼───┼───┼───┼───┤
│VisualBasic │yyyy  │mm    │dd    │hh    │nn    │ss    │
├──────┼───┼───┼───┼───┼───┼───┤
│Windows     │yyyy  │MM    │dd    │hh    │mm    │ss    │
└──────┴───┴───┴───┴───┴───┴───┘
  *1:PHPでもCの仕様を継承しているものについてはCの表記方式と同じ。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
つまりまとめると日時表記には以下のような候補があることになる。
┌──────────┬──────────┬────────────────┐
│          -         │          /         │                                │
├──────────┼──────────┼────────────────┤
│yyyy-mm-dd hh:mm:ss │yyyy/mm/dd hh:mm:ss │(月と分が重複する)              │
│YYYY-MM-DD HH:MM:SS │YYYY/MM/DD HH:MM:SS │(月と分が重複する)              │
│YYYY-MM-DDThh:mm:ss │YYYY/MM/DDThh:mm:ss │ISO                             │
│YYYY-MM-DD hh:mm:ss │YYYY/MM/DD hh:mm:ss │                                │
│yyyy-mm-dd HH:MM:SS │yyyy/mm/dd HH:MM:SS │UNIX系                          │
│yyyy-MM-dd hh:mm:ss │yyyy/MM/dd hh:mm:ss │Windows系                       │
│yyyy-mm-dd hh:ii:ss │yyyy/mm/dd hh:ii:ss │Web系                           │
│YYYY-MM-DD HH:MI:SS │YYYY/MM/DD HH:MI:SS │                                │
│yyyy-mm-dd hh:nn:ss │yyyy/mm/dd hh:nn:ss │VB系                            │
└──────────┴──────────┴────────────────┘
分類:設計
設計/書庫形式および圧縮形式のまとめ
2013年04月06日
独断と偏見でまとめてみた。
┌─┬─┬──────┬─┬─┬───────────────────────┐
│PC│UX│    形式    │庫│圧│                                              │
├─┼─┼──────┼─┼─┼───────────────────────┤
│-│○│tar[.tar]   │○│-│オプションで指定すれば他の圧縮とも連携できる  │
├─┼─┼──────┼─┼─┼───────────────────────┤
│-│○│compress[.Z]│-│○│かつてはUNIX系の標準であったが                │
│  │  │⇔uncompress│  │  │特許の問題でフリーでなくなった衰退            │
├─┼─┼──────┼─┼─┼───────────────────────┤
│-│○│gzip[.gz]   │-│○│UNIX系の標準                                  │
│  │  │⇔gunzip    │  │  │「GNU ZIP」の略                               │
├─┼─┼──────┼─┼─┼───────────────────────┤
│○│-│LHA[.lzh]   │○│○│かつてPC系標準であった国産圧縮形式            │
│  │  │            │  │  │近年、ウイルススキャンで                      │
│  │  │            │  │  │中身を検出できない問題を抱える                │
├─┼─┼──────┼─┼─┼───────────────────────┤
│○│○│ZIP[.zip]   │○│○│PC系の標準、UNIX系もあり                      │
│  │  │            │  │  │書庫も兼ね備えるが圧縮しながら書庫に入れる感じ│
│  │  │┌─────┤  │  ├───────────────────────┤
│  │  ││ [.jar]   │  │  │Java用標準だが、その実体は「ZIP」             │
└─┴─┴┴─────┴─┴─┴───────────────────────┘
             PC…Windows向け、UX…UNIX系向け、庫…書庫機能あり、圧…圧縮機能あり
分類:設計
設計/ユークリッドの互除法(最大公約数)
2013年03月07日
「x ≧ y」が前提で、以下の再帰関数を使えば最大公約数が求まるらしい。
┌──────────────────────────────────────┐
│int gcd(int x, int y) {                                                     │
│    return (y == 0) ? x : gcd(y, x % y);                                    │
│}                                                                           │
└──────────────────────────────────────┘
大きい方から小さい方を削除する。
それを繰り返すだけで最大公約数が求まるってことらしい。
もちろん、最後にきれいにゼロになった時だけで、
そのゼロになる瞬間の直前の値が最大公約数ってこと。
ま、たいていは「1」になってしまうもんだけど、「2」以上の場合もある。
(っていうか「2」以上の場合の方が最大公約数の代表みたいな感じだけど)

以下に例をあげてみた。大きい方か小さい方を削っていくだけだ
┌──────────────────────────────────────┐
│24→ 6→ 6→ 6      ←最大公約数 6                                          │
│18→18→12→ 6→ 0                                                          │
├──────────────────────────────────────┤
│ 4→ 1              ←最大公約数 1                                          │
│ 3→ 3→ 2→ 1→ 0                                                          │
└──────────────────────────────────────┘

大きい方と小さい方が変わらず何回か繰り返す部分があるが
これを端折ってくれるのが剰余(プログラムでいうところの「%」)。
┌──────────────────────────────────────┐
│24→ 6              ←最大公約数 6                                          │
│18→18→ 0                                                                  │
├──────────────────────────────────────┤
│ 4→ 1              ←最大公約数 1                                          │
│ 3→ 3→ 0                                                                  │
└──────────────────────────────────────┘
こんな感じでショートカットしてくれる。

プログラムっていうよりこれ考えたユークリッドが偉い!って感じ。
因数分解とかして求めるより断然速いらしい。

設計の上をいく設計って感じだ。
分類:設計
設計/エラー対処のパターン
2013年03月01日
エラーが発生した場合に対処するパターンとしては以下がある。

・気にしない                      →気にしなくていいのなら
・既定値だと解釈する              →そういうことも織り込み済みなら
・違う処理を試す                  →試す価値があるのなら
・入力や処理をやり直す(限度あり)  →何回かやればうまくいきそうなら
・再起動する                      →チャラにしたらうまくいくかもしれないなら
・上位に通知(継承)する            →自己解決できないのなら
・打ち切る                        →お手上げ

どれもエラーログとかに発生自体を記録しておくことになるであろう。
分類:設計
設計/排他制御(2)共有ロックと排他ロック
2013年02月24日
排他制御の宣言について代表的なものとして
「共有ロック」と「排他ロック(占有ロック)」がある。

この二つの関係について、もし先約があって、そこで宣言しようとした場合、
ロックができる場合(○)と、ロックができず待機となる場合(×)を以下にまとめた。
┌────┬─────┐
│        │   先約   │
│        ├──┬──┤
│        │共有│排他│
├─┬──┼──┼──┤
│宣│共有│ ○ │ × │
│  ├──┼──┼──┤
│言│排他│ × │ × │
└─┴──┴──┴──┘
「排他」は何らかのロックがかかっていると待機するという潔癖症。
「共有」は「排他」がかかっていると待機するという控えめな性格。
ただし、「共有」同士なら気にせず共有してしまう。

「共有ロック」は読込系で、「排他ロック」は書込系で使う。

読込時は他に影響を与える訳ではないので占有する必要がないように思えるが
読み込んでいる横から書き込まれるとぐちゃぐちゃになってしまう。
だから、最小限「読み込んでる時には書き込まないでくださいね」と宣言する。
分類:設計
設計/排他制御(1)排他とは
2013年02月23日
排他制御とは、同時に複数から操作させると不都合な場合に、
占有を宣言して独占的に操作させるようにする仕組みである。
ファイルの書き込み処理などが対象となる代表例である。

占有を宣言することをロックといい、その解除を宣言することをアンロックという。

ファイルの書き込みなどの対象となる処理を行う前に、
占有を宣言して承認されればその後は独占状態となる。

占有を宣言しても既に先に宣言しているものがいれば、
それが終わるまで待つことになる。

排他制御は各々が占有を宣言(=お伺いを立てる)するというルールを遵守することに
よって初めて成り立つもので、各々でそれを漏らさないことが前提条件となる。
ま、これはUNIX系の場合。

Windows系などでは、ファイルOPENとかと一体となって
自動的強制的に排他制御が行われたりしているようだ。
分類:設計
設計/多階層のステータス管理
2013年01月15日
┌───┐
│○┬○│○…正常、×…異常、?…不明
│  └○│
└───┘
二階層以上でそれぞれステータスを持つ場合、上位ステータスが異常となった場合
下位ステータスにどのように反映させるか、以下の三つのパターンがある。
            ┌───┬───┬───┐
            │  A  │  B  │  C  │
┌───┐  ┌───┬───┬───┐  ┌───┐
│○┬○│  │×┬○│×┬×│×┬?│  │○┬○│
│  └○│  │  └○│  └×│  └?│  │  └○│
├───┤  ├───┼───┼───┤  ├───┤
│○┬×│  │×┬×│×┬×│×┬?│  │○┬×│
│  └○│  │  └○│  └×│  └?│  │  └○│
├───┤→├───┼───┼───┤→├───┤
│○┬○│  │×┬○│×┬×│×┬?│  │○┬○│
│  └×│  │  └×│  └×│  └?│  │  └×│
├───┤  ├───┼───┼───┤  ├───┤
│○┬×│  │×┬×│×┬×│×┬?│  │○┬×│
│  └×│  │  └×│  └×│  └?│  │  └×│
└───┘  └───┴───┴───┘  └───┘
  A:下位に反映させない      下位ステータス(正常)の遷移としては、○→○→○
  B:下位にすべて反映させる  下位ステータス(正常)の遷移としては、○→×→○
  C:下位をすべて不明とする  下位ステータス(正常)の遷移としては、○→?→○

外部向け(画面表示等)と内部管理で、分けるというのも一つの手だ。
たいてい、内部管理ではBを採用しづらい。
更新の量が莫大になり、差分による処理(履歴追加)なども莫大になりかねないからだ。
なので、内部的にはAで、外部向けとしてBもしくはCとするのが一般的か。
その間は、外部的には下位ステータスは×か?なのだから、
「○→×」的な遷移が発生しては辻褄が合わなくなることに注意だ。
分類:設計
設計/論理組合せ
2013年01月12日
真と偽を組み合わせて、16通りの結果を求める式は以下の通り。
─────────┬─────────┬─────────┬─────────
(×&&×)&&×  →×│(×≠×)&&!× →×│×&&×        →×│×||(×&&×)  →×
(×&&○)&&×  →×│(×≠○)&&!○ →×│×&&○        →×│×||(○&&×)  →×
(○&&×)&&×  →×│(○≠×)&&!× →○│○&&×        →×│○||(×&&×)  →○
(○&&○)&&×  →×│(○≠○)&&!○ →×│○&&○        →○│○||(○&&×)  →○
─────────┼─────────┼─────────┼─────────
!(×||×)     →○│(×&&×)||!× →○│×=×        →○│×||(×=×)  →○
!(×||○)     →×│(×&&×)||!○ →×│×=○        →×│×||(×=○)  →×
!(○||×)     →×│(○&&×)||!× →○│○=×        →×│○||(○=×)  →○
!(○||○)     →×│(○&&×)||!○ →×│○=○        →○│○||(○=○)  →○
─────────┼─────────┼─────────┼─────────
!×&&(×≠×) →×│×≠×        →×│(×&&×)||×  →×│×||×        →×
!×&&(×≠○) →○│×≠○        →○│(×&&×)||○  →○│×||○        →○
!○&&(○≠×) →×│○≠×        →○│(○&&×)||×  →×│○||×        →○
!○&&(○≠○) →×│○≠○        →×│(○&&×)||○  →○│○||○        →○
─────────┼─────────┼─────────┼─────────
!×||(×&&×) →○│!(×&&×)     →○│(×=×)||×  →○│(×&&×)||○  →○
!×||(○&&×) →○│!(×&&○)     →○│(×=○)||○  →○│(×&&○)||○  →○
!○||(×&&×) →×│!(○&&×)     →○│(○=×)||×  →×│(○&&×)||○  →○
!○||(○&&×) →×│!(○&&○)     →×│(○=○)||○  →○│(○&&○)||○  →○
─────────┴─────────┴─────────┴─────────
  ○:真、×:偽、=:等号、≠:不等号、&&:論理積、||:論理和、!:否定

他にも方法がありそうだけど。。。
分類:設計
設計/小数部を含む整数の用語定義
2012年11月05日
「123」とかのことを「整数」と記載した場合、
「123.45」とかのことをなんと記載しようかと悩んだ。

「0.45」って小数部が付いてるから「小数付整数」?
いやいや「小数点付整数」?

なんかしっくりこない。

そこで本格的に調べてみた。

結論は…。


「小数」


え?
「小数」ってのは「整数部+小数点+小数部」のことらしい。
「小数」と聞いてなんとなく思い浮かぶ「0.1」とかは、「純小数」といい、
我らが「123.45」(こいつは「帯小数」というらしい)と合わせて
「小数」っていうんだって。

なんだか、すげーあいまいなまま生きてきたんだなぁ。
分類:設計
設計/曜日を計算する
2012年07月24日
年月日から曜日を計算式で求める。

そんな夢のような公式があるのを最近知った。

「ツェラーの公式」

素晴らしい。

後で解析しよう。
分類:設計
前へ 1 2 3 4 5 6 7 8 次へ