MW211 EXIT

devlog
HTML/特殊半角空白のコピペ
2013年10月28日
「 」は文字コード「0xC2A0」の半角空白で、
「 」は文字コード「0xE28082」の半角空白でそれぞれ表示される。

よって、これをコピペしても、一般的な半角空白「0x20」とは違うことになる。

コピペで指定されたものをPHP的に変換するには、以下のような方法がある。
┌──────────────────────────────────────┐
│$■ = preg_replace('/\xC2\xA0/'    , ' ', $■);  //  を半角空白にする  │
│$■ = preg_replace('/\xE2\x80\x82/', ' ', $■);  //  を半角空白にする  │
└──────────────────────────────────────┘

でも、なかなかこの「0xC2A0」と「0xE28082」にはお目にかかれないような気がする。

たいていは「0x20」に変換されて表示されているようだ。

例えばSmartyで以下のように変換して表示したとしても…
┌──────────────────────────────────────┐
│{■|replace:' ':' '}                                                   │
└──────────────────────────────────────┘
「あ1- 1」だと「0xE28082」( )となるが、
「あ 1-1」だと「0x20」(半角空白)となって表示されるようだ。

また、「0xC2A0」( )に至っては、見たことがない。

本来「 」は「0xA0」なのだが、UTF-8的には「0xC2A0」となるものらしい。
ただ、「0xA0」も「0xC2A0」も表示されているのをみたことがないので
真偽がわからない。
分類:HTML
Windows/シャットダウンコマンド
2013年10月27日
「shutdown.exe」についてまとめた。
┌────────────┬─────────────────────────┐
│shutdown.exe            │ヘルプ                                            │
│shutdown.exe /?         │                                                  │
├────────────┼─────────────────────────┤
│shutdown.exe /s         │終了                                              │
│shutdown.exe /s /t 30 /f│(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /r         │再起動                                            │
│shutdown.exe /r /t 30 /f│(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /t 0       │猶予時間なし・非強制                              │
├────────────┼─────────────────────────┤
│shutdown.exe /t 0 /f    │猶予時間なし・強制                                │
├────────────┼─────────────────────────┤
│(なし)                  │猶予時間あり・非強制                              │
├────────────┼─────────────────────────┤
│shutdown.exe /t 秒      │猶予時間あり・強制                                │
│shutdown.exe /t 秒 /f   │(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /f         │強制                                              │
└────────────┴─────────────────────────┘
分類:Windows
IE/画面サイズの設定
2013年10月26日
IEで画像を採取しようとした場合、手動でサイズを調整すると
微妙に統一がとれなかったりする。

これを解消するため、IEの画面サイズを値で指定する方法を調べた。

「F12」を押して、「開発者ツール」を起動する。
メニューから「ツール」→「サイズ変更」を選択すると
以下の選択肢が出てくるので、任意のものを選ぶ。
  ・「 800× 600」
  ・「1024× 768」
  ・「1280× 768」
  ・「1280×1024」
  ・「 480× 800」
  ・「 800× 480」

「カスタム」という選択肢を選べば、自由にサイズを登録できる。
分類:ブラウザ
PHP/formの飛び先パスについての注意
2013年10月25日
formタグのactionパラメータに、飛び先のURLを指定する場合、
それがファイルではなく、ディレクトリであった場合には
しっかり末尾に「/」をつけてあげなければならない。
┌─┬────────────────────────────────────┐
│×│<form method="post" action="/abc">                                      │
├─┼────────────────────────────────────┤
│○│<form method="post" action="/abc/">                                     │
└─┴────────────────────────────────────┘

さもないと、「301転送」が発生してしまう。
┌─┬────────────────┬───────────────────┐
│×│… "POST /abc HTTP/1.1" 301 …  │301 Moved Permanently(転送)           │
├─┼────────────────┼───────────────────┤
│○│… "POST /abc/ HTTP/1.1" 200 … │200 OK(正常)                          │
└─┴────────────────┴───────────────────┘
(といっても、そうならないパスがあったりするから厄介だ)

「301転送」が起きるとどうなるのか?POSTの中身が消えてしまう(引き継がれない)

つまり、formタグの「/」がないだけで、いくらsubmitしても
受信側で$_POSTでデータを拾えないという怪奇現象が発生してしまうのだ。
(といっても、そうならないパスがあったりするから、ますます怪奇現象だ)
【後日追記あり】
分類:PHP、Apache
Apache/GET・POSTパラメータの追跡2
2013年10月24日
「multipart/form-data」の場合。

ログ上には以下のようなデータが出力されている。
┌──────────────────────────────────────┐
│… mod_dumpio.c(55): mod_dumpio:  dumpio_in (data-HEAP): xxx bytes          │
│… mod_dumpio.c(74): mod_dumpio:  dumpio_in (data-HEAP): -------------------│
│… mod_dumpio.c(142): mod_dumpio: dumpio_out                                │
└──────────────────────────────────────┘

「-------------------」の部分を解析する(改行コードを変換する)と
以下のような感じで、POSTデータがあらわれてくる。
┌──────────────────────────────────────┐
│-----------------------------xxxxxxxxxxxxx                                  │
│Content-Disposition: form-data; name="id"                                   │
│abc                                                                         │
│-----------------------------xxxxxxxxxxxxx                                  │
│Content-Disposition: form-data; name="name"                                 │
│xyz                                                                         │
│-----------------------------xxxxxxxxxxxxx                                  │
│--                                                                          │
└──────────────────────────────────────┘

境界線の定義とかも実はその前で出力されている。
┌──────────────────────────────────────┐
│… mod_dumpio.c(74): mod_dumpio:  dumpio_in (data-HEAP):                    │
│                       Content-Type: multipart/form-data;                   │
│                       boundary=---------------------------xxxxxxxxxxxxx\r\n│
└──────────────────────────────────────┘
分類:Apache
Apache/GET・POSTパラメータの追跡1
2013年10月23日
GETもしくはPOSTされたデータが本当にApacheでやりとりされているのか
トレースできるモジュールがApacheにはある。

「mod_dumpio」である。
既定では封印されているので(処理が重くなる?)、解き放ってあげねばならない。

「httpd.conf」を編集する。

以下のモジュールがコメントアウトされ封印されているので
先頭の「#」を除去して封印を解く。
┌──────────────────────────────────────┐
│LoadModule dumpio_module modules/mod_dumpio.so                              │
└──────────────────────────────────────┘

ついでに以下も記述(追加)する。
┌──────────────────────────────────────┐
│DumpIOInput On                                                              │
│DumpIOOutput On                                                             │
└──────────────────────────────────────┘
#これが正しい作法か疑問だが、上記「LoadModule」の次の行に追加したらOKだった。

ログレベルを「debug」にする。
┌──────────────────────────────────────┐
│#LogLevel warn                                                              │
│LogLevel debug                                                              │
└──────────────────────────────────────┘

これで設定完了。Apache再起動。

エラーログに、出力される。
#エラーログは以下のような感じで「httpd.conf」に設定されている
┌──────────────────────────────────────┐
│ErrorLog "logs/error.log"                                                   │
└──────────────────────────────────────┘

以下のような文言が出力されていれば設定成功。
┌──────────────────────────────────────┐
│… mod_dumpio.c(…): mod_dumpio: …                                         │
└──────────────────────────────────────┘
分類:Apache
Windows/タスクスケジューラでパスワードがないと
2013年10月21日
タスクスケジューラで、パスワードのないアカウントに実行させる設定をすると
エラーが発生する場合がある。
┌──────────────────────────────────────┐
│定時タスクのプロパティ                                                      │
├──────────────────────────────────────┤
│┌──┐                                                                    │
││全般│                                                                    │
││    └─────────────────────────────────┐│
││┌セキュリティオプション───────────────────────┐││
│││○ユーザがログオンしているときのみ実行する                          │││
│││●ユーザーがログオンしているかどうかにかかわらず実行する            │││
│││  □パスワードを保存しない  タスクがアクセスできるのは              │││
│││                                  ローカルコンピューターリソースのみ│││
│││■最上位の特権で実行する                                            │││
││└──────────────────────────────────┘││
│└────────────────────────────────────┘│
└──────────────────────────────────────┘
上記の設定だろ、以下のエラーダイアログが表示される。
┌──────────────────────────┐
│タスクスケジューラ                                  │
├──────────────────────────┤
│タスク○○でエラーが発生しました。エラーメッセージ:│
│1つ以上の指定された引数が有効ではありません。       │
└──────────────────────────┘
意味がわかりづらいが、パスワードがないのでセキュリティ的に無理ってことらしい。

仕方ないから、「パスワードを保存しない」と宣言するしかないみたい。
┌──────────────────────────────────────┐
│定時タスクのプロパティ                                                      │
├──────────────────────────────────────┤
│┌──┐                                                                    │
││全般│                                                                    │
││    └─────────────────────────────────┐│
││┌セキュリティオプション───────────────────────┐││
│││○ユーザがログオンしているときのみ実行する                          │││
│││●ユーザーがログオンしているかどうかにかかわらず実行する            │││
│││  ■パスワードを保存しない  タスクがアクセスできるのは              │││
│││                                  ローカルコンピューターリソースのみ│││
│││■最上位の特権で実行する                                            │││
││└──────────────────────────────────┘││
│└────────────────────────────────────┘│
└──────────────────────────────────────┘
これなら設定できる。
分類:Windows
PostgreSQL/テーブルのバックアップ
2013年10月20日
メンテナンスがしやすいプレーンテキスト(insert文)を取得する手順。

「pgAdminⅢ」のツリー上から、対象テーブルを右クリックし
「バックアップ」を選ぶ。

「ファイル名」と「フォーマット」を選ぶ
┌──────────────────────────────────────┐
│┌────────────────────────────────────┐│
││                ┌──────────────────────────┐││
││ファイル名      │C:\(ファイルの保存先)                               │││
││                ├──────────────────────────┤││
││フォーマット    │Plain                                               │││
││                └──────────────────────────┘││
│└┐                    ┌────────────────────────┘│
│  │ファイル・オプション│                                                  │
│  └──────────┘                                                  │
│                                            ┌──────┐┌──────┐│
│                                            │バックアップ││ キャンセル ││
│                                            └──────┘└──────┘│
└──────────────────────────────────────┘

「#1ダンプオプション」を選び、以下をチェックする。
┌──────────────────────────────────────┐
│┌────────────────────────────────────┐│
││┌クエリー──────────────────────────────┐││
│││□CREATE DATABASE構文を含む                                         │││
│││□DROP DATABASE構文を含む                                           │││
│││■列名インサート使用                                                │││
│││■インサートコマンド使用                                            │││
││└──────────────────────────────────┘││
│└─┐                  ┌────────────────────────┘│
│    │#1ダンプオプション│                                                  │
│    └─────────┘                                                  │
│                                            ┌──────┐┌──────┐│
│                                            │バックアップ││ キャンセル ││
│                                            └──────┘└──────┘│
└──────────────────────────────────────┘

「バックアップ」を実行する。
┌──────────────────────────────────────┐
│┌────────────────────────────────────┐│
││                                                                        ││
││プロセスは、0のリターンコードを返しました。                             ││
│└───┐          ┌──────────────────────────┘│
│        │メッセージ│                                                      │
│        └─────┘                                                      │
│                                            ┌──────┐┌──────┐│
│                                            │    完了    ││ キャンセル ││
│                                            └──────┘└──────┘│
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/(新)連番を前詰に振り直す
2013年10月19日
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 列 = (SELECT COUNT(*)                                               │
│                  FROM 表 AS 別表                                           │
│                  WHERE 別表.列 <= 表.列);                                  │
├──────────────────────────────────────┤
│SELECT setval ('AutoNumber用列名', (SELECT COUNT(*) FROM 表), true);        │
└──────────────────────────────────────┘

以下、検証例。

テスト用データを作成する。
┌──────────────────────────────────────┐
│CREATE TABLE "test"                                                         │
│(                                                                           │
│    "id" bigserial NOT NULL,                                                │
│    "no" integer   NOT NULL,                                      ┌─┬─┐│
│    PRIMARY KEY ("id")                                            │id│no││
│);                                                                ├─┼─┤│
├─────────────────────────────────│ 1│ 1│┤
│INSERT INTO "test" ("no") VALUES (1);                             │ 2│ 2││
│INSERT INTO "test" ("no") VALUES (2);                             │ 3│ 3││
│INSERT INTO "test" ("no") VALUES (3);                             │ 4│ 4││
│INSERT INTO "test" ("no") VALUES (4);                             │ 5│ 5││
│INSERT INTO "test" ("no") VALUES (5);                             │ 6│ 6││
│INSERT INTO "test" ("no") VALUES (6);                             │ 7│ 7││
│INSERT INTO "test" ("no") VALUES (7);                             │ 8│ 8││
│INSERT INTO "test" ("no") VALUES (8);                             └─┴─┘│
└──────────────────────────────────────┘

欠番をつくる。
┌─────────────────────────────────┌─┬─┐┐
│DELETE FROM "test" WHERE "id" = 1;                                │id│no││
│DELETE FROM "test" WHERE "id" = 3;                                ├─┼─┤│
│DELETE FROM "test" WHERE "id" = 5;                                │ 2│ 2││
│DELETE FROM "test" WHERE "id" = 7;                                │ 4│ 4││
└─────────────────────────────────│ 6│ 6│┘
                                                                    │ 8│ 8│
                                                                    └─┴─┘

前詰に更新し直す。
┌─────────────────────────────────┌─┬─┐┐
│UPDATE "test"                                                     │id│no││
│    SET "id" = (SELECT COUNT(*)                                   ├─┼─┤│
│                         FROM "test" AS "as_test"                 │ 1│ 2││
│                         WHERE "as_test"."id" <= "test"."id");    │ 2│ 4││
└─────────────────────────────────│ 3│ 6│┘
                                                                    │ 4│ 8│
                                                                    └─┴─┘

最終連番が「8」のままなので、「4」に戻す。
┌──────────────────────────────────────┐
│SELECT setval ('test_id_seq', (SELECT COUNT(*) FROM "test"), true);         │
└──────────────────────────────────────┘

試しに新たなデータを追加すると、適切に末尾に追加されることが確認できる。
┌─────────────────────────────────┌─┬─┐┐
│INSERT INTO "test" ("no") VALUES (99);                            │id│no││
└─────────────────────────────────├─┼─┤┘
                                                                    │ 1│ 2│
                                                                    │ 2│ 4│
                                                                    │ 3│ 6│
                                                                    │ 4│ 8│
                                                                    │ 5│99│
                                                                    └─┴─┘
分類:PostgreSQL
VC++/再頒布可能パッケージ
2013年10月18日
「Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)」ってのがある。

「Visual C++で開発されたアプリケーションを
  Visual C++ 2010がインストールされていないコンピューター上で
  実行するために必要な、Visual C++ライブラリの
  ランタイムコンポーネントをインストールします。」

ってことらしい。

「vcredist_x86.exe」ってのを、マイクロソフトのサイトからダウンロードして
インストールすればよいらしい。
分類:C/C++
前へ 1 … 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 … 156 次へ