MW211 EXIT

devlog
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
PHP/ドキュメントルート
2013年05月18日
「$_SERVER['DOCUMENT_ROOT']」にて、Apacheの設定ファイル「httpd.conf」中に
定義しているドキュメントルートが取得できる。
┌──────────────────────────────────────┐
│DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs" │
└──────────────────────────────────────┘

ドキュメントルート直下に以下のソースコードを記述したファイルを定義して
これをアサインすれば、ドキュメントルートの代替にできる。
┌──────────────────────────────────────┐
│define('DOCUMENT_ROOT2', str_replace('\\', '/', dirname(__FILE__)));        │
└──────────────────────────────────────┘
ま、こいつのいいところは、ドキュメントルート以外でも使えるということだ。

ドキュメントルート配下のサブドキュメントルート的なところに置けば、
サブの中でドキュメントルートっぽく使えるようになる。
分類:PHP
IE/勝手に接続されるのを防止
2013年05月17日
某接続ツールをインストールしたら、
IEを開く度に勝手にインターネットに接続されるようになってしまった。

セキュリティの観点とかからそんな安易に接続して欲しくない。

調べたらIEの以下が「ネットワーク接続が存在しないときには、ダイヤルする」に
勝手に設定変更されていたのであった。
┌─────────────────────────────┐
│インターネットオプション                                  │
├─────────────────────────────┤
│┌────────┌──┐───────────────┐│
││                │接続│                              ││
│┌────────┘    └───────────────┐│
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
││プロキシサーバーを構成する必要がある場合は、          ││
││[設定]を選択してください。                            ││
││  ●ダイヤルしない                                    ││
││  ○ネットワーク接続が存在しないときには、ダイヤルする││
││  ○通常の接続でダイヤルする                          ││
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
└─────────────────────────────┘
「ダイヤルしない」にすればOK。
分類:ブラウザ
SQL/途中で並べ替えても保証はされませんよ
2013年05月16日
ソートキーが二つ以上ある場合、優先度の低い順にソートしていけば、
並び替えができる(Excelなんかで試してみればいい)。
  ┌─┐                    ┌─┐                    ┌─┐
  │B2│                    │A1│                    │A1│
  │A1│─ 二列目でソート →│B1│─ 一列目でソート →│A2│
  │B1│                    │B2│                    │B1│
  │A2│                    │A2│                    │B2│
  └─┘                    └─┘                    └─┘

ということで、以下のような並び替えを…
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    ORDER BY 列1 ASC,                                                       │
│             列2 ASC;                                                       │
└──────────────────────────────────────┘
以下のように副問い合わせで代用できるような気がする。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM (SELECT *                                                          │
│              FROM 表                                                       │
│              ORDER BY 列2 ASC                                              │
│          ) AS 別表                                                         │
│    ORDER BY 列1 ASC;                                                       │
└──────────────────────────────────────┘

でも、これは保証されない。
字面上は想定通りの処理順で記述したつもりでも、
オプティマイザっていうSQLを解析する機能が、処理順を適切に調整してしまうのだ。

ということで、ご注意を。
分類:SQL
PostgreSQL/avg()の精度
2013年05月15日
「avg()」と「sum()÷count()」に違いがあるか実験してみた。
┌──────────────────────────────────────┐
│WITH "data"("value") AS (                                                   │
│         SELECT trunc(random() * 10000)         --サンプル値の幅(0~9999)   │
│             FROM generate_series(1, 10000, 1)  --サンプル数(10000件)       │
│     )                                                                      │
│SELECT CASE                                                                 │
│         WHEN "avg" = ("sum" / "count") THEN '一致'                         │
│         ELSE                                '不一致'                       │
│       END AS "判定",                                                       │
│       "avg"           AS "平均",                                           │
│       "sum" / "count" AS "合計÷件数"                                      │
│    FROM (SELECT avg("value")   AS "avg",                                   │
│                 sum("value")   AS "sum",                                   │
│                 count("value") AS "count"                                  │
│              FROM "data"                                                   │
│         ) AS "as_data";                                                    │
└──────────────────────────────────────┘
違いはないみたい(同じロジックなのか?)。

ついでに実行計画をみてみた。
┌──────────────────────────────────────┐
│EXPLAIN                                                                     │
│SELECT avg(列) FROM 表;                                                     │
├──────────────────────────────────────┤
│Aggregate  (cost=コスト rows=行数 width=行幅)"                              │
│  ->  Seq Scan on 表  (cost=コスト rows=行数 width=行幅)"                   │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│EXPLAIN                                                                     │
│SELECT sum(列) / count(列) FROM 表;                                         │
├──────────────────────────────────────┤
│Aggregate  (cost=コスト rows=行数 width=行幅)"                              │
│  ->  Seq Scan on 表  (cost=コスト rows=行数 width=行幅)"                   │
└──────────────────────────────────────┘
ほぼ同じ。ほんのちょっとだけ後者の方がコストが高いようだ。
#やっぱりまわりくどいと最適化には悪影響なの?
分類:PostgreSQL
Windows/日本語入力と半角スペース
2013年05月14日
MS-IMEで日本語入力状態となっている時に、
スペースを入力すると全角スペースが入力されるが、
半角スペースを入力するために日本語入力状態をいちいち解除するのはめんどくさい。

そこで、簡単に半角スペースを入力する方法。

  「shift」+「スペース」

「shift」キーを同時に押すだけでOK。
分類:Windows
Windows7/クイック起動を表示させる方法
2013年05月13日
タスクバー(Windows画面下部)で右クリックして以下の通り「新規ツールバー」を選択。
┌────────┐
│フォルダーを開く│  ┌────────┐
│ツールバー      │→│アドレス        │
│重ねて表示      │  │言語バー        │
~~~~~~~~~~  │~~~~~~~~~
│プロパティ      │  │新規ツールバー  │←これを選択
└────────┘  └────────┘
以下のようなダイアログが表示されるので、URLを以下のように入力し、
「Quick Launch」フォルダを選択。
┌────────────────────────────────────┐
│新規ツールバーフォルダーの選択                                          │
├──┬─────────────────────────────────┤
│URL │%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer         │
├──┴─────────────────────────────────┤
│□Quick Launch                                                          │
│□UserData                                                              │
├─────┌─────────────────────────────┐┤
│フォルダー│Quick Launch                                              ││
│          └─────────────┌────────┐┌─────┐│ 
│                                      │フォルダーの選択││キャンセル││
└───────────────────└────────┘└─────┘┘
これでタスクバー上に「Quick Launch」が表示される。
後は必要なものを適宜移動すればOK。
なお「Quick Launch」ツールバーを右クリックして、
以下のチェックをはずす(クリックする)とアイコンのみの表示になる。
┌───────────┐  ┌───────────┐
│    表示              │  │    表示              │
│    フォルダーを開く  │  │    フォルダーを開く  │
│レ  ボタン名の表示    │→│    ボタン名の表示    │
│レ  タイトルの表示    │→│    タイトルの表示    │
│    ツールバーを閉じる│  │    ツールバーを閉じる│
~~~~~~~~~~~~~  ~~~~~~~~~~~~~
│    プロパティ        │  │    プロパティ        │
└───────────┘  └───────────┘
分類:Windows
前へ 1 … 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 … 156 次へ