MW211 EXIT

devlog
PostgreSQL/結果に連番をふる応用編
2012年11月20日
より実用的な複合版は以下のような感じ。
┌──────────────────────────────────────┐
│SELECT ROW_NUMBER() OVER(PARTITION BY 列,列 ORDER BY 列 ASC,列 ASC) FROM 表;│
└──────────────────────────────────────┘
「PARTITION BY」でグルーピングして、その中で「ORDER BY」で並び替える。
グルーピングは複合条件も可能で、並び替えも複合条件が可能。
上記は二件までの例だが、もちろ三件以上も可能だ。
分類:PostgreSQL
jQuery/イベント登録
2012年11月17日
┌──────────────────────────────────────┐
│$('#button').click(function() {                                             │
│    alert('押したね?');                                                    │
│});                                                                         │
└──────────────────────────────────────┘
上記と下記は等価。
┌──────────────────────────────────────┐
│$('#button').bind('click', function() {                                     │
│    alert('押したね?');                                                    │
│});                                                                         │
└──────────────────────────────────────┘

下記の方式だと複数イベントを束ねることができる。、
┌──────────────────────────────────────┐
│$('#text').bind('keyup keydown', function() {                               │
│    alert('押したね?');                                                    │
│});                                                                         │
└──────────────────────────────────────┘
分類:jQuery
jQuery/イベントの後付け
2012年11月16日
クリックイベントとかを定義しても、最初のその時点でその要素がないと
その(まだ出現していない)要素にはイベントが反映されない。

つまりは、appendとかでボタンを追加しても、
そいつにはイベントが登録されていないわけだ。

だいたい、ボタンを出現させるってことは、そいつを押させて何かのイベントを
起こさせたりしたわけだから、ボタンの出現とともにイベントも登録したいわけだ。
#最初に全部出現させといて、必要なもの以外隠すという手もあるが、
  全部がいくつかわからない時にはちょっと難ありだ。

で、とにかくappend後、再度イベントを登録しちゃえばいいじゃん、ということで、
append処理を行った直後にイベント処理を追記した。
┌──────────────────────────────────────┐
│$('#body')                                                                  │
│    .append($('<input>').prop('type' , 'button')                            │
│                        .val('押して')                                      │
│    );                                                                      │
├──────────────────────────────────────┤
│$(':button').click(function() {                                             │
│    alert("押したね?");                                                    │
│});                                                                         │
└──────────────────────────────────────┘
おぉ、これならいける…と思ったのだが、なんとボタンが出現する度に
イベントが多重登録されていくのであった。

で、調べたら、bindっての使えばいいらしい。
┌──────────────────────────────────────┐
│$('#body')                                                                  │
│    .append($('<input>').prop('type' , 'button')                            │
│                        .val('押して')                                      │
│                        .bind("click", function() {                         │
│                            alert("押したね?");                            │
│                        })                                                  │
│    );                                                                      │
└──────────────────────────────────────┘
分類:jQuery
C/敵の敵も敵
2012年11月15日
「char」型と「signed char」型は違う…らしい。

「char」型 vs 「signed char」型 vs 「signed char」型

で、

「char」型=「signed char」型

かと、思ったんだけどね。


「int」型はいいっぽい。

「int」型=「signed int」型≠「unsigned int」型
分類:C/C++
C/Cにおけるbool型
2012年11月14日
C言語にはbool型ってものが元々なくて、途中から追加された。

だけど、bool型ってのはそれまでに独自でそれぞれ使われていたので
「_Bool」型という控えめな名前で定義した。

これを「bool」型として使用できるように、インクルードファイル「stdbool.h」で
小細工をしている。

で、本体の「_Bool」型とは何かというと?符号無し整数型で
「0」と「1」を格納できればいいってだけで、後は機種依存らしい。

処理速度が速い「int」型を採用している場合もあれば、
サイズが小さい「char」型だったりする場合もある
(さすがにビットは扱いづらすぎてないようだが)。

だから「sizeof(bool)」は「1」だったり「4」だったりする。

それと後から追加されたものだから厳密ではないらしく
他の型と演算できてしまったりするらしい。

ただし、利点としては「0」か「1」しか値をとらないように
最低限保証はしてくれる模様。

ま、ソースコードが読みやすいってもの大きいかも。
分類:C/C++
言語/続続・アライメントサイズの確認
2012年11月13日
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    int   a1;                                                               │
│    char  a2;                                                               │
│} A;                                                                        │
│sizeof(A)  →  8(4 + 1 + 3)                                                 │
└──────────────────────────────────────┘
構造体はアライメントサイズまで末尾を埋めてくれる、上記のように。

と思っていたのだが、char型だけだとそうはいかなかった。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    char  a1[3];                                                            │
│} A;                                                                        │
│sizeof(A)  →  3                                                            │
└──────────────────────────────────────┘
ちなみに、複数配列にしてみても状況は変わらない。
┌──────────────────────────────────────┐
│A z[2];                                                                     │
│sizeof(z)  →  6                                                            │
└──────────────────────────────────────┘

じゃ、メンバを分けてみたら…同じだ。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    char  a1;                                                               │
│    char  a2[2];                                                            │
│} A;                                                                        │
│sizeof(A)  →  3                                                            │
└──────────────────────────────────────┘

じゃ、じゃ、int型以外にしてみたら…同じだ。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    bool  a1;                                                               │
│    char  a2[2];                                                            │
│} A;                                                                        │
│sizeof(A)  →  3                                                            │
└──────────────────────────────────────┘

shortとかにしてみたら?
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    short a1;                                                               │
│    char  a2[3];                                                            │
│} A;                                                                        │
│sizeof(A)  →  6                                                            │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    short a1;                                                               │
│    char  a2;                                                               │
│} A;                                                                        │
│sizeof(A)  →  4                                                            │
└──────────────────────────────────────┘

あ、わかった一番大きなものに追従するの?
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    longlong  a1;                                                           │
│    char      a2;                                                           │
│} A;                                                                        │
│sizeof(A)  →  8                                                            │
└──────────────────────────────────────┘
あ、でも最大でも4バイト(アライメントサイズ)までなのね。
分類:C/C++
PHP/セキュリティ対策
2012年11月12日
ぶっちゃけ、セキュリティ対策って以下のことですよね?

【クロスサイトスクリプティング(XSS)対策】
  以下の五つの文字を、画面表示時に以下に置換して表示する
  ・「'」→「&#039;」
  ・「"」→「&quot;」
  ・「&」→「&amp;」
  ・「<」→「&lt;」
  ・「>」→「&gt;」

【SQLインジェクション対策】
  以下の三つの文字を、SQL実行時に以下に置換して実行する
  ・「'」→「\'」
  ・「"」→「\"」
  ・「\」→「\\」
  もしくは、以下の一つの文字を、SQL実行時に以下に置換して実行する
  ・「'」→「''」
  #この場合は、残りの二つは機能的にSQLインジェクションを防止できていること
分類:PHP
PHP/mb_strcut()の端数は切り上げられます
2012年11月11日
mb_strcut()のパラメータにマイナス値を指定してあげると、
右から抜き出すことが可能だが、端数が出た場合には端数も切り上げて抽出してしまう。
よって、指定したサイズよりも+1取得される場合がありうる。

mb_strcut(,-4)の場合
  あいうえお   →  いうえお
  あいうえおA  →  いうえおA

┌──────────────────────────────────────┐
│$抽出 = mb_strcut($文字, -4);                                               │
│if (mb_strwidth($抽出) > 4) {                                               │
│    $出力先 = '...' . mb_strcut($抽出, -3);                                 │
│} else {                                                                    │
│    $出力先 = '..' . $抽出;                                                 │
│}                                                                           │
└──────────────────────────────────────┘

ちなみに、左から普通に切り出した時も同じです。
mb_strcut(,0,4)の場合
  あいうえお   →  あいうえ
  Aあいうえお  →  Aあいうえ
分類:PHP
C/フォーマット指定子(数字付)・番外編
2012年11月10日
さて、これまでのまとめを踏まえて以下はいったいなんなのか?
┌──────────────────────────────────────┐
│%0d                                                                         │
└──────────────────────────────────────┘
「整数部の最小桁数が0」と認識されるのか?
「ゼロパディングだけどその桁数は0」と認識されるのか?
はたまたどちらでもないのか?

実際に実験してみたところ「%d」と変わらなかった。

空文字になるかと思ったがそんなことはなかった。
「%2d」に「123」を入れても「123」になるのと同じだしね。

「0」の場合「0」になるのだから、ゼロパディングが効いているのか?と思ったが
「%d」でも「0」の場合は「0」だった。
だいたいゼロパディングの桁数が0なんだから、「0」とか関係ないし。。。

っていうか「%01d」でも同じじゃないか。

ということで
┌──────────────────────────────────────┐
│「%d」=「%0d」=「「%01d」                                                 │
└──────────────────────────────────────┘
と見てよろしいのでしょうか?
分類:C/C++
C/フォーマット指定子(数字付)
2012年11月09日
だいたい、以下をおさえればよい。後はこれの組み合わせ。
┌──────────────────────────────────────┐
│%2d                                                                         │
└──────────────────────────────────────┘
整数部の数字は整数部の表示領域の桁数を表す。
上記の場合だと、「12」「 1」となる。
ちなみに三桁だとこれを無視して「123」となる(切り捨てられた方が怖いか)。

┌──────────────────────────────────────┐
│%-2d                                                                        │
└──────────────────────────────────────┘
あまり使わないかもしれないが、上記における「 1」を「1 」、
つまり左詰めにしたい場合は「-」を付ける。
ちなみに負の符号(マイナス)は特に指定しなくても勝手に表示されるから
「-」という記号はこの用途に使えているようだ。

┌──────────────────────────────────────┐
│%+d                                                                         │
└──────────────────────────────────────┘
逆に正の符号(プラス)は普段は表示されないものなので、敢えて表示したい場合には
指定が必要で、そのものずばりの「+」でOK。

┌──────────────────────────────────────┐
│%02d                                                                        │
└──────────────────────────────────────┘
先頭に「0」を付けるとゼロパディングとなる。「01」とか「00」とかだ。
「12」とか「123」とかは前出同様に勝手に表示される。

┌──────────────────────────────────────┐
│%.2f                                                                        │
└──────────────────────────────────────┘
小数点以下の数字は、小数部の桁数を表す。「1.23」「4.00」みたいな感じだ。

┌──────────────────────────────────────┐
│%.0f                                                                        │
└──────────────────────────────────────┘
小数点以下はいらない、整数部だけでよいという場合は「0」を指定してしまえばよい。
ちなみに、小数部はデフォルトでゼロパディングなので
整数におけるゼロパディング指定的なものが不要ということになる。
分類:C/C++
前へ 1 … 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 … 156 次へ