MW211 EXIT

devlog
C/排他制御と書込オープン
2013年07月01日
「w」もしくは「w+」でfopen()する場合、
排他制御を「flock()」で行うと、「fopen()」→「flock()」の順なので
「flock()」前に更新(全クリア)が発生してしまい、うまく排他制御ができない。

「open()」のレベルで考えると、全クリアは「O_TRUNC」モード指定が該当する。
つまり、以下のような感じとなる。
┌──────────────────────────────────────┐
│fd = open(ファイル名,                                                       │
│          モード | O_TRUNC,                                                 │
│          権限);                                                            │
├──────────────────────────────────────┤
│if (flock(fd, LOCK_EX) == -1) {                                             │
│    排他制御中                                                              │
│}                                                                           │
└──────────────────────────────────────┘

この場合は、全クリアを「ftruncate()」にまかせて
「open()」の時点では全クリアをしないようにするのが鉄則ということだ。
┌──────────────────────────────────────┐
│fd = open(ファイル名,                                                       │
│          モード,                                                           │
│          権限);                                                            │
├──────────────────────────────────────┤
│if (flock(fd, LOCK_EX) == -1) {                                             │
│    排他制御中                                                              │
│}                                                                           │
├──────────────────────────────────────┤
│ftruncate(fd, 0);                                                           │
└──────────────────────────────────────┘
分類:C/C++
CSS/Firefoxの文字間隔
2013年06月30日
Firefoxと他のブラウザを比較すると、Firefoxだけ若干縦に間延びしているように
感じる場合がある。特に文章のところが。

これは、行と行の間にデフォルトで若干間隔が設定されているからだ。

これを他のブラウザと合わせてなくすには以下の指定をすればよい。
┌──────────────────────────────────────┐
│* {                                                                         │
│    line-height:100%;                                                       │
│}                                                                           │
└──────────────────────────────────────┘
もちろん、局地的(divタグ単位など)に設定することも可能。

また、以下のように指定する方法もある。
┌──────────────────────────────────────┐
│* {                                                                         │
│    line-height:1em;                                                        │
│}                                                                           │
└──────────────────────────────────────┘
(こちらはフォントサイズが16pxの場合限定)
┌──────────────────────────────────────┐
│* {                                                                         │
│    line-height:16px;                                                       │
│}                                                                           │
└──────────────────────────────────────┘
分類:CSS
CSS/段組(横二列)
2013年06月29日
【可変】
  (1) テーブルタグを使うパターン(段組としては忌嫌われるが便利)
┌──────────────────────────────────────┐
│<table><tr>                                                                 │
│  <td>列一</td>                                                             │
│  <td>列二</td>                                                             │
│</tr></table>                                                               │
└──────────────────────────────────────┘
  (2) divタグを二階層にするパターン(階層が深くなる点が難だがわかりやすい)
┌──────────────────────────────────────┐
│<div style="height:16px;">                                                  │
│  <div style="float:left;">列一</div>                                       │
│  <div style="float:left;">列二</div>                                       │
│</div>                                                                      │
└──────────────────────────────────────┘
  (3) 「clear:both;」を使うパターン(階層は浅いが列幅指定に難あり(後述))
┌──────────────────────────────────────┐
│<div style="float:left;">列一</div>                                         │
│<div style="float:left;">列二</div>                                         │
│<div style="clear:both;"></div>                                             │
└──────────────────────────────────────┘
【固定】
  (4) 「position:absolute」で位置固定で前面に乗せる感じにする
┌──────────────────────────────────────┐
│<div style="position:relative;">                                            │
│  <div style="position:absolute;left:0;width:■px;">列一</div>              │
│  <div style="margin-left:■px;">列二</div>                                 │
│</div>                                                                      │
└──────────────────────────────────────┘
  (5) 「float:left」で前面に乗せる感じにする
┌──────────────────────────────────────┐
│<div style="float:left;width:■px;">列一</div>                              │
│<div style="margin-left:■px;">列二</div>                                   │
└──────────────────────────────────────┘
【画面全体を縮小した場合の挙動】
  (1)→左列、右列とも同じ幅となり、それぞれ改行される
  (2)→右列全体が改行されて次行に回り込む形となる
  (3)→右列全体が改行されて次行に回り込む形となる
  (4)→左列は列幅指定されているので固定となる、右列がその割をくらって改行に
  (5)→左列は列幅指定されているので固定となる、右列がその割をくらって改行に
  それぞれに列幅を固定で指定すれば、改行や回り込みは発生しない
  但し、(3)は全体を統括する幅が指定できないので、
  おのおの(左列、右列)の幅を指定しても回り込みとなってしまう
分類:CSS
CSS/画像の隙間
2013年06月28日
┌──────────────────────────────────────┐
│<table><tr><td style="border:1px solid #000000;">                           │
│<img src="画像.jpg" alt=""/></td></tr></table>                              │
└──────────────────────────────────────┘
画像imgタグをtdタグの中に入れると、下の方に隙間ができてしまう。
tdの縦幅(height、padding、border、margin)を調整しても隙間を解消できない。
Firebugで調査しても、不思議な余白分、縦幅が追加されている。

これを解消するには、以下のスタイルを適用させればよい。
┌──────────────────────────────────────┐
│img {                                                                       │
│    vertical-align  :bottom;                                                │
│}                                                                           │
└──────────────────────────────────────┘
「g」とか「j」のような、下に若干出ている文字向けに、若干下に隙間があり
その分、隙間があいてしまうので、下端に合わせるように指定してやれば
隙間がなくなるといった感じだ。
分類:CSS
MicrosoftExcel/プルダウンメニュー
2013年06月27日
プルダウンメニューを設置したいセルを選択して、
「データ→データの入力規則→データの入力規則」を選ぶ。
┌──────────────────────────────────────┐
│データの入力規則                                                            │
├──────────────────────────────────────┤
│┌──┐──┐──┐──┐                                                  │
││設定│    │    │    │                                                  │
││    └─────────────────────────────────┐│
││条件の設定───────────────────────────────││
││入力値の種類                                                            ││
││┌──────┬─┐  ■空白を無視する                                  ││
│││リスト      │▼│                                                    ││
││└──────┴─┘  ■ドロップダウンリストから選択する                ││
││データ                                                                  ││
││┌──────┬─┐                                                    ││
│││            │  │                                                    ││
││└──────┴─┘                                                    ││
││元の値                                                                  ││
││┌────────────────────────────────┬─┐││
│││男,女,その他                                                    │■│││
││└────────────────────────────────┴─┘││
│└──────────────────────┌─────┐┌─────┐┘│
│                                              │    OK    ││キャンセル│  │
└───────────────────────└─────┘└─────┘─┘
「入力値の種類」を「リスト」にして、「元の値」にCSV形式でデータを登録すればOK。
分類:Excel
C言語/規格の歴史
2013年06月26日
┌──┬───────────────────────────────────┐
│K&R │書籍「The C Programming Language」(K&R)が事実上の標準     (1978年出版)│
├──┼───────────────────────────────────┤
│C89 │・関数プロトタイプの導入                                              │
│C90 │・void型、enum型の追加                                                │
│    │「ANSI C89」「ISO C90」とも呼ばれ、「JIS X3010-1993」が該当           │
├──┼───────────────────────────────────┤
│C95 │・ワイド文字版ライブラリを追加                                        │
├──┼───────────────────────────────────┤
│C99 │・変数宣言位置の自由化(ブロック先頭でなくてもよい)                    │
│    │・論理型(_Bool型)の追加「stdbool.h」                                  │
│    │・複素数の追加「complex.h」                                           │
│    │・64ビット整数値(「long long int 型」)の追加                          │
│    │・「//」コメントの導入                                                │
│    │・インライン関数の導入                                                │
│    │・可変長配列の導入                                                    │
│    │「JIS X 3010:2003」が該当                                             │
├──┼───────────────────────────────────┤
│C11 │最新規格                                                              │
│    │・「gets()」関数の廃止                                                │
│    │・Unicode文字列の標準対応                                             │
│    │・type-generic式の導入                                                │
│    │・無名構造体・無名共用体の導入                                        │
│    │・排他的アクセスによるファイルオープン方法の実装                      │
│    │・_Noreturn関数指示子の導入(スタックを消費しない関数)                 │
└──┴───────────────────────────────────┘
分類:C/C++
PostgreSQL/表結合のUSING句
2013年06月24日
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表1                                                                │
│        LEFT JOIN 表2                                                       │
│          ON 表2.キー = 表1.キー                                            │
└──────────────────────────────────────┘
こんな場合…
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表1                                                                │
│        LEFT JOIN 表2                                                       │
│          USING (キー);                                                     │
└──────────────────────────────────────┘
こんな風に書ける。

列名が同じなら、USING句が使える(括弧も忘れずに)。

ちなみにこんな風に…
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表1                                                                │
│        LEFT JOIN 表2                                                       │
│          USING (キー1, キー2);                                             │
└──────────────────────────────────────┘
複数指定も可能。

これは、以下相当となる。
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表1                                                                │
│        LEFT JOIN 表2                                                       │
│          ON  表2.キー1 = 表1.キー1                                         │
│          AND 表2.キー2 = 表1.キー2;                                        │
└──────────────────────────────────────┘
条件が「AND」なのか「OR」なのか一瞬悩んでしまうが
「OR」で結合してもほとんど意味をなさないので(かなり無秩序な結果)、
おのずと「AND」相当だということがわかる(わかってくる)。
分類:PostgreSQL
Smarty/JavaScriptのベタ書きはちょっと
2013年06月23日
┌──────────────────────────────────────┐
│if (true) {                                                                 │
│    alert("メッセージ");                                                    │
│}                                                                           │
└──────────────────────────────────────┘
上記のようなif文を、一直線に書きたい衝動にかられることがある。
┌──────────────────────────────────────┐
│if (true) {alert("メッセージ");}                                            │
└──────────────────────────────────────┘
if文がいくつも並ぶ場合には行比較の観点からも便利な場合がある。

しかし、これをSmartyテンプレート上で行ってはいけない。
なぜなら「{~}」はSmartyではSmarty変数等を記述する領域だからだ。
つまり「{alert("メッセージ");}」の部分を誤認識してしまう。

解決策としては最初のように改行して一直線に「{…}」とならないようにするか、
JavaScriptのソースファイルを外部ファイルとしてしまうかだ。
分類:Smarty
PostgreSQL/SQL上でトランザクション処理
2013年06月17日
「pgAdmin」の「Query」などからトランザクション処理を再現するには、
以下のようなSQL文を順番に実行すればよい。
┌──────────────────────────────────────┐
│BEGIN;                                                                      │
├──────────────────────────────────────┤
│(SQL文;)                                                                    │
├──────────────────────────────────────┤
│COMMIT;                                                                     │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│BEGIN;                                                                      │
├──────────────────────────────────────┤
│(SQL文;)                                                                    │
├──────────────────────────────────────┤
│ROLLBACK;                                                                   │
└──────────────────────────────────────┘
「BEGIN」でトランザクションが開始して、「COMMIT」または「ROLLBACK」で終了。
もちろん、「COMMIT」はトランザクション中の処理を履行して、
「ROLLBACK」は取り消す。

終了せずに再度開始(「BEGIN」を二回続けて実行など)すると、
以下のようなワーニングメッセージが出るが、問題はないようだ。
┌──────────────────────────────────────┐
│WARNING:  there is already a transaction in progress                        │
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/pg_dumpのパスワード
2013年06月16日
pg_dumpを実行した直後に以下のようにパスワード入力を促される。
┌──────────────────────────────────────┐
│>pg_dump -U ユーザID データベース名 > バックアップファイル.sql              │
│パスワード:                                                                 │
└──────────────────────────────────────┘

これをバッチで自動化する場合には、パスワード設定ファイルってのを
書き換えればいいらしい。
┌──────────────────────────────────────┐
│>ECHO localhost:5432:*:ユーザID:パスワード>                                 │
│                                          "%APPDATA%\postgresql\pgpass.conf"│
└──────────────────────────────────────┘

ただし、書き換えた後に設定を元に戻した方がいいので、
「pgpass.conf」の中身を控えておいた方がよい。
「%APPDATA%」の部分はWindowsの環境変数として定義してるので、
「echo」コマンドで確認すればよい。
┌──────────────────────────────────────┐
│>echo "%APPDATA%"                                                           │
│C:\Users\xxxx\AppData\Roaming                                               │
└──────────────────────────────────────┘

なお、これを自動化するならば、以下のように「pgpass.bak」(名称は任意)に
退避して戻すって感じか。
┌──────────────────────────────────────┐
│>COPY /Y "%APPDATA%\postgresql\pgpass.conf"                                 │
│                                           "%APPDATA%\postgresql\pgpass.bak"│
├──────────────────────────────────────┤
│>ECHO localhost:5432:*:ユーザID:パスワード>                                 │
│                                          "%APPDATA%\postgresql\pgpass.conf"│
├──────────────────────────────────────┤
│pg_dump -U ユーザID データベース名 > バックアップファイル.sql               │
├──────────────────────────────────────┤
│>MOVE /Y "%APPDATA%\postgresql\pgpass.bak"                                  │
│                                          "%APPDATA%\postgresql\pgpass.conf"│
└──────────────────────────────────────┘
分類:PostgreSQL
前へ 1 … 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 … 156 次へ