#b-navbar { height:0px; display:none; visibility:hidden; }

ページ

2011年11月6日日曜日

Javascript var_dump

  
document.write( var_dump ( "変数名" ) ) ;
  
  
 function var_dump(data,addwhitespace,safety,level) {
        var rtrn = '';
        var dt,it,spaces = '';
        if(!level) {level = 1;}
        for(var i=0; i<level; i++) {
           spaces += '   ';
        }//end for i<level
        if(typeof(data) != 'object') {
           dt = data;
           if(typeof(data) == 'string') {
              if(addwhitespace == 'html') {
                 dt = dt.replace(/&/g,'&amp;');
                 dt = dt.replace(/>/g,'&gt;');
                 dt = dt.replace(/</g,'&lt;');
              }//end if addwhitespace == html
              dt = dt.replace(/\"/g,'\"');
              dt = '"' + dt + '"';
           }//end if typeof == string
           if(typeof(data) == 'function' && addwhitespace) {
              dt = new String(dt).replace(/\n/g,"\n"+spaces);
              if(addwhitespace == 'html') {
                 dt = dt.replace(/&/g,'&amp;');
                 dt = dt.replace(/>/g,'&gt;');
                 dt = dt.replace(/</g,'&lt;');
              }//end if addwhitespace == html
           }//end if typeof == function
           if(typeof(data) == 'undefined') {
              dt = 'undefined';
           }//end if typeof == undefined
           if(addwhitespace == 'html') {
              if(typeof(dt) != 'string') {
                 dt = new String(dt);
              }//end typeof != string
              dt = dt.replace(/ /g,"&nbsp;").replace(/\n/g,"<br>");
           }//end if addwhitespace == html
           return dt;
        }//end if typeof != object && != array
        for (var x in data) {
           if(safety && (level > safety)) {
              dt = '*RECURSION*';
           } else {
              try {
                 dt = var_dump(data[x],addwhitespace,safety,level+1);
              } catch (e) {continue;}
           }//end if-else level > safety
           it = var_dump(x,addwhitespace,safety,level+1);
           rtrn += it + ':' + dt + ',';
           if(addwhitespace) {
              rtrn += '\n'+spaces;
           }//end if addwhitespace
        }//end for...in
        if(addwhitespace) {
           rtrn = '{\n' + spaces + rtrn.substr(0,rtrn.length-(2+(level*3))) + '\n' + spaces.substr(0,spaces.length-3) + '}';
        } else {
           rtrn = '{' + rtrn.substr(0,rtrn.length-1) + '}';
        }//end if-else addwhitespace
        if(addwhitespace == 'html') {
           rtrn = rtrn.replace(/ /g,"&nbsp;").replace(/\n/g,"<br>");
        }//end if addwhitespace == html
        return rtrn;
     }//end function var_dump



ソース:http://snippets.dzone.com/posts/show/4296

多次元配列のソートまとめ

■PHP1
<?php
$list = array(
array("no"=>3, "cat"=>5, "body"=>"リンゴ"),
array("no"=>2, "cat"=>4, "body"=>"みかん"),
array("no"=>4, "cat"=>5, "body"=>"ナシ"),
array("no"=>6, "cat"=>3, "body"=>"バナナ"),
array("no"=>1, "cat"=>4, "body"=>"オレンジ")
);
usort($list, create_function('$a, $b', 'return $a["cat"]-$b["cat"];'));

print_r("<pre>");
print_r($list);
print_r("</pre>");
?>


■PHP2
$hoge = array(
array('id'=>'3','date'=>'2010.10','name'=>'イカ娘'),
array('id'=>'1','date'=>'2010.10','name'=>'それでも町は廻ってる'),
array('id'=>'2','date'=>'2010.11','name'=>'百花繚乱サムライガール'));
これを一番目の要素で並び替えたいときは。

//いったんソートするキーを配列で取り出して、
foreach($hoge as $key=>$value){
$id[$key] = $value['id'];
}

array_multisort($id ,SORT_ASC,$hoge);

//これで並び替え完了。DESCもできます。



■Javascript1

<script language="JavaScript" type="text/javascript"><!--
var list = [
{"no":3, "cat":5, "body":"リンゴ"},
{"no":2, "cat":4, "body":"みかん"},
{"no":4, "cat":5, "body":"ナシ"},
{"no":6, "cat":3, "body":"バナナ"},
{"no":1, "cat":4, "body":"オレンジ"}
];
list.sort(function(a, b) {return a.cat-b.cat});

var text="";
for(var i=0; i<list.length; i++) {
text += "\n no:" + list[i].no + " cat:" + list[i].cat + " body:" + list[i].body;
}
alert(text);
//--></script>

 多次元配列listをcatの上り順だけでソートしていますが、noを含めた複数条件でソートする場合、list.sortの部分を以下のように書き直します。
list.sort(function(a, b) {return a.cat-b.cat || a.no-b.no});


単に「||」で追加したソート条件を区切るだけ。条件が増えれば、その分「||」で継ぎ足していけばOK。実にシンプルで美しいコードです。



参考:
http://ma-bank.com/item/752
http://d.hatena.ne.jp/raharu0425/20101020/1287539676
thanks!

2011年11月2日水曜日

PHPでの left,right関数

参考:http://ameblo.jp/totally-awesome/entry-10696108413.html 様


function right($str,$n){
  //文字コードUTF-8で、right関数。$strの右から$n文字取得
  return mb_substr($str,($n)*(-1),$n,"UTF-8");
}

function left($str,$n){
  //文字コードUTF-8で、left関数。$strの左から$n文字取得
  return mb_substr($str,0,$n,"UTF-8");
}


上記は、全角文字も1文字と数えるとき。 もしバイト数で数えるならば、

function right($str,$n){
  //文字コードUTF-8で、right関数。$strの右から$n文字取得
  return substr($str,($n)*(-1),$n);
}

function left($str,$n){
  //文字コードUTF-8で、left関数。$strの左から$n文字取得
  return substr($str,0,$n);
}

SQLiteManagerレコード削除できないとき!

SQLite で SQLiteManager を使っていると、
レコード削除できない症状が出た。

■原因:
http://sebisawa-private.blogspot.com/2010/09/sqlitemanager.html
によると、php.ini の magic_quotes_gpc が、
Onになっているとダメっぽい。

■対策:
http://pentan.info/php/magic_quotes_on.html
の情報をもとに、下記のコードを:
SQLiteManager の配下の include / common.lib.php の冒頭に、


// magic_quotes_gpc = On の場合の対策
if (get_magic_quotes_gpc()) {
function strip_magic_quotes_slashes($arr)
{
return is_array($arr) ?
array_map('strip_magic_quotes_slashes', $arr) :
stripslashes($arr);
}

$_GET = strip_magic_quotes_slashes($_GET);
$_POST = strip_magic_quotes_slashes($_POST);
$_REQUEST = strip_magic_quotes_slashes($_REQUEST);
$_COOKIE = strip_magic_quotes_slashes($_COOKIE);
}



上記ソースを追加。

■結果:
解決した。


 

2011年7月25日月曜日

さくらVPS 512MBプランのサービス断の状況を調べてみた

≫ Link : 障害・メンテナンス・機能追加 | さくらインターネット http://www.sakura.ad.jp/news/sakuranews/newsindex.php
から512MBプランのIPアドレスを抜き出して、ソートしてみた。
(2011年7月9日~7月25日の15日間)



■分かったこと

・1台の物理マシンあたり、23個ぐらいのIPアドレスを収容しているっぽい
・15日間にサービス断(故障または計画メンテ)は、全体で37回
・短いもので15~20分。長いもので2~4時間。
 大胆に、相乗平均して、60分と見なそう。

・ソートしたリストをざっと見て…
 1IPアドレスあたり平均2回ぐらいかな、ひっかかるのは。

※さくらの全IP知らないので、正確に分かりませんが、
あなたが以下のどれかのIPアドレスだと固定して(最悪の想定ですが)、
該当する回数を前後見てみてください。1回から3回ぐらい止まるでしょう。

・よって、1アカウント1ヵ月あたり、2時間ほど止まる。
 稼働率は99.7%。



■感想:
まあ月額1000円なので、そんなもんか?
思ったより止まるねー

まあ最悪の想定下での、平均信頼度なので、
「このぐらいは覚悟がいるね」ってことで。

余裕があれば、もう少し(+500円)お金出して
1Gプランにしたほうが稼働率は断然高いみたい。

さくらさんには、
平均稼働率、平均故障時間長、平均故障間隔を
公開して欲しいなー。
一方、アマゾンEC2 の SLA記載の稼働率は 99.5%。
意外と低いが…これは最悪ケースの保障値(返金レベル)
だからそんなもんか。



■データ(ソート後)
<2011年7月9日~7月25日の15日間>

182.48.46.231~182.48.46.254
182.48.46.63~182.48.46.86
182.48.47.179~182.48.47.202
182.48.47.83~182.48.47.106
182.48.54.0~182.48.54.255
182.48.55.0~182.48.55.255
182.48.56.0~182.48.56.255
182.48.56.111~182.48.56.134
182.48.56.135~182.48.56.158
182.48.56.207~182.48.56.254
182.48.56.39~182.48.56.182
182.48.56.39~182.48.56.62
182.48.56.63~182.48.56.86
182.48.57.0~182.48.57.255
182.48.57.11~182.48.57.130
182.48.57.11~182.48.57.34
182.48.57.155~182.48.57.226
182.48.57.59~182.48.57.82
182.48.57.83~182.48.57.106
182.48.58.0~182.48.58.255
182.48.58.111~182.48.58.134
182.48.58.39~182.48.58.254
182.48.59.0~182.48.59.255
182.48.59.107~182.48.59.130
182.48.59.11~182.48.59.226
182.48.59.203~182.48.59.226
182.48.60.0~182.48.60.255
182.48.60.135~182.48.60.158
182.48.60.159~182.48.60.182
182.48.60.39~182.48.60.254
182.48.60.63~182.48.60.86
182.48.61.0~182.48.61.255
182.48.61.107~182.48.61.130
182.48.61.11~182.48.61.226
182.48.61.179~182.48.61.227
182.48.61.83~182.48.61.106
49.212.0.39~49.212.0.254
49.212.1.11~49.212.1.226
49.212.2.40~49.212.2.85
49.212.2.87~49.212.2.253
49.212.3.12~49.212.3.34
49.212.3.207~49.212.3.224
49.212.3.36~49.212.3.58
49.212.3.61~49.212.3.82
49.212.3.84~49.212.3.200
49.212.4.118~49.212.4.134
49.212.4.136~49.212.4.158
49.212.4.160~49.212.4.205
49.212.4.207~49.212.4.254
49.212.4.39~49.212.4.62
49.212.4.88~49.212.4.110
49.212.5.101~49.212.5.226
49.212.5.101~49.212.5.226
49.212.5.11~49.212.5.99
49.212.5.11~49.212.5.99
49.212.6.63~49.212.6.86
49.212.6.63~49.212.6.86
49.212.86.111~49.212.86.134