MW211 EXIT

devlog
C言語/fread()の端数
2013年05月31日
┌──────────────────────────────────────┐
│読込件数 = fread(読込先,                                                    │
│                 一件あたりのサイズ,                                        │
│                 要求件数,                                                  │
│                 fp);                                                       │
└──────────────────────────────────────┘
「fread()」は「一件あたりのサイズ(列)」×「要求件数(行)」のように指定して
面としてデータを取得する関数だ。

じゃ、こんな感じで端数が出た時はどうなるのか?
┌──────────────────────────────────────┐
│■■■■                                                                    │
│■■■■                                                                    │
│■■■                                                                      │
└──────────────────────────────────────┘

ちゃんと端数分も含めて最後まで取得してくれる。
┌──────────────────────────────────────┐
│■■■■                                                                    │
│■■■■  ←読込件数2件                                                     │
│■■■←ここまで取得される                                                  │
└──────────────────────────────────────┘
読込件数は完全に読み込まれた行数分となるので、要求件数と比較すると足りなくなる。

よって、「読込件数<要求件数」でEOF到達が認識できる(厳密には「feof()」と併用)。

他のポイントとしては、端数以降の部分はひっぱってこないということ。
┌──────────────────────────────────────┐
│■■■■                                                                    │
│■■■■                                                                    │
│■■■□←この部分は読込先に上書されない                                    │
└──────────────────────────────────────┘
「列×行」分ひっぱってくれて、余白は0で埋めてくれたりはしないってこと。
ま、足りない行分もひっぱってこないから当然といえば当然。
とにかく事前の初期化は大事なようだ。
分類:C/C++
JavaScript/乱数による確率操作
2013年05月30日
ま、以下のような関数をつくってみた。
┌──────────────────────────────────────┐
│function randHit(inHit, inAll) {                                            │
│    return (Math.floor(Math.random() * inAll) < inHit) ? true : false;      │
│}                                                                           │
└──────────────────────────────────────┘
以下のように使う。
┌──────────────────────────────────────┐
│if (randHit(30, 100)) {                                                     │
│    alert('あたり');                                                        │
│} else {                                                                    │
│    alert('はずれ');                                                        │
│}                                                                           │
└──────────────────────────────────────┘
30%の確率で「あたり」になる。

ま、いろいろ使える。
分類:JavaScript
PostgreSQL/lpad()・rpad()
2013年05月29日
所定の文字数まで穴埋めするには「lpad()」・「rpad()」が使える。
┌──────────────────────────────────────┐
│SELECT lpad(1::text  , 2, '_');                                     →「_1」│
│SELECT lpad(12::text , 2, '_');                                     →「12」│
│SELECT lpad(123::text, 2, '_');                                     →「12」│
├──────────────────────────────────────┤
│SELECT rpad(1::text  , 2, '_');                                     →「1_」│
│SELECT rpad(12::text , 2, '_');                                     →「12」│
│SELECT rpad(123::text, 2, '_');                                     →「12」│
└──────────────────────────────────────┘
先頭の「l」は「left」(左)、「r」は「right」(右)を意味する。
所定の文字数をはみ出した分は切り捨てられてしまうようだ
(「rpad()」の場合も左から採用され、右が切り捨てられるから注意)

  ちなみに、「repeat()」の代用もできる。
┌──────────────────────────────────────┐
│SELECT repeat('*', 3);                                             →「***」│
│SELECT lpad('', 3, '*');                                           →「***」│
│SELECT rpad('', 3, '*');                                           →「***」│
└──────────────────────────────────────┘
分類:PostgreSQL
C言語/ダンプのとり方
2013年05月27日
以下のような感じか。(もっといい方法がありそうだが)
┌──────────────────────────────────────┐
│char  test[4];                                                              │
│memset(test, 0, sizeof(test));                                              │
│printf("test:  %02x %02x %02x %02x", test[0], test[1], test[2], test[3]);   │
└──────────────────────────────────────┘

以下は、実体が3文字のファイルを「fread()」で「2×2」で読み込んで
4文字目の領域はどうなるかを調査した場合の例。
┌──────────────────────────────────────┐
│char  test[4];                                                              │
│memset(test, 0, sizeof(test));                                              │
│FILE*  fp = fopen("test.txt", "r");                                         │
│printf("%d = fread()", fread(test, 2, 2, fp));                              │
│fclose(fp);                                                                 │
│printf("test:  %02x %02x %02x %02x", test[0], test[1], test[2], test[3]);   │
└──────────────────────────────────────┘
分類:C/C++
C言語/fopenの重複
2013年05月26日
ファイルは「fopen()→fclose()」の流れで扱うものだが、
同一ファイルについて「fopen()→fopen()」してしまった場合はどうなるのか?

処理系によって違うらしいので一概にはいえないが、
ある処理系の場合は、異なるファイルポインタ(fp)のアドレスが取得できたので
「fopen()」毎に、FILE構造体が生成されるようだ。
但し、同時にオープンできるファイルの数に上限があるようなので
無尽蔵に「fopen()→fopen()→…」を繰り返すといつかはエラーになるみたい。
分類:C/C++
PostgreSQL/repeat()を使ったグラフ
2013年05月25日
Excelなんかでも用いられる文字列を並べて棒グラフっぽく表示する例。
┌──────────────────────────────────────┐
│SELECT キー, repeat('*', 列) AS "graph" FROM 表;                            │
└──────────────────────────────────────┘
分類:PostgreSQL
C言語/static修飾子
2013年05月24日
static修飾子には以下の二つの用途がある。

  (a)静的記憶領域を使用する

  (b)スコープをそのファイルに限定する

ローカル変数のstatic修飾子は(a)、
グローバル変数のstatic修飾子、関数のstatic修飾子は(b)になる。

どちらかといえば代表的なのは(a)の方なので、
(a)の意味で(b)の用例を解釈しようとするとわけがわからなくなる

ちなみに、グローバル変数は静的記憶領域にあるのが前提なので
(a)としての役割は必要ない。よって、(b)としての役割となる。

また、関数は静的記憶領域とか動的記憶領域とかと別の概念(プログラム領域)なので
(a)としての役割は必要ない。よって、(b)としての役割となる。

ってことなのだろうか。

(b)は別の名前にしてくれれば紛らわしくないんだけど、と思ってしまう。
分類:C/C++、注意
設計/日時表記
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系                            │
└──────────┴──────────┴────────────────┘
分類:設計
Windows/TITLE
2013年05月21日
「TITLE」コマンドで、「コマンドプロンプト」ウインドウのタイトルを
変更することができる。

一旦変更したタイトルを元の状態に初期化したい場合には
「EXIT」コマンドを実行すればよい(みたい)。
分類:Windows
PHP/自らのURLを取得する方法
2013年05月19日
┌──────────────────────────────────────┐
│if ((isset($_SERVER['HTTPS']))                                              │
│ && ($_SERVER['HTTPS'] == 'on'))                                            │
│{                                                                           │
│    $protocol = 'https://';                                                 │
│} else {                                                                    │
│    $protocol = 'http://';                                                  │
│}                                                                           │
│$url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];         │
└──────────────────────────────────────┘
もしくは
┌──────────────────────────────────────┐
│$protocol = (@$_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';          │
│$url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];         │
└──────────────────────────────────────┘
分類:PHP
前へ 1 2 3 次へ