n_c RSSフィード

2009-11-13 [jQuery] アコーディオンするプラグイン作った このエントリーを含むブックマーク

作った後に知った。jQuery UI accordionがあることを…。

<ul id="accordion_example">
  <li>
     <span>2009年</span>
     <ul>
       <li>1月</li>
       <li>2月</li>
       <li>3月</li>
       <li>4月</li>
     </ul>
  </li>
  <li>
     <span>2008年</span>
     <ul>
       <li>1月</li>
       <li>2月</li>
       <li>3月</li>
       <li>4月</li>
     </ul>
  </li>
</ul>
<script type="text/javascript">
jQuery.fn.accordion = function(options){
  var main = $(this);
  var itemSelector = options.item || '> li'; // mainからのselector
  var childSelector = options.child || '> ul'; // itemからのselector
  var triggerSelector = options.trigger || '> span'; // itemからのselector
  var showAnimation = options.show || function(e){
    e.slideDown(500);
  }
  var hideAnimation = options.hide || function(e){
    e.slideUp(500);
  }
  main.find(itemSelector).each(function(){
    var item = $(this);
    item.find(triggerSelector).click(function(){
      var child = item.find(childSelector);
      if (child.is(':visible')){
        hideAnimation(child);
      }else{
        hideAnimation(main.find(itemSelector + ' ' + childSelector + ':visilbe'));
        showAnimation(child);
      }
    })
  });
  main.find(itemSelector + ' ' + childSelector).hide();
  return this;
}
$('#accordion_example').accordion();
</script>

2009-10-27 [PHP] apache経由で、ブラウザで開くスクリプト このエントリーを含むブックマーク

昔作ったやつ。行き場がないのでとりあえずここにコピペ。

「あふ」に登録して使ってた。

とにかく手っ取り早く動かしたかったので動くかどうかよくわからんコードです。

<?php
$httpd_conf = "C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf";

$browser = "opera";
$host = "localhost";

$file = file($httpd_conf);

foreach ($file as $line){
    if (preg_match('/^DocumentRoot\s+(.*)$/', $line, $match)){
        $root = tq($match[1]);
    }else if (preg_match('/^Alias\s+(\S*?)\s+(.*)$/', $line, $match)){
        $alias[tq($match[1])] = tq($match[2]);
    }
}
function tq($str){
    return str_replace('"', '', trim($str));
}
if (!(count($argv) > 1)){
    echo 'less argument' . "\n";
    show_message('less argument');
    exit();
}
array_shift($argv);
$file = array_shift($argv);
$file = str_replace('\\', '/', $file);

$url = null;
if (strpos($file, $root) === 0){
    $i = strlen($root);
    $path = substr($file, $i);
    $url = "http://$host$path";
}else{
    foreach ($alias as $r => $fp){
        if (strpos($file, $fp) === 0){
            $i = strlen($fp);
            $path = substr($file, $i);
            $url = "http://$host$r/$path";
        }
    }
}
if (!$url){
    show_message("not entry path: $file");
    exit();
}

$cmd =  "$browser \"$url\"";
//echo $cmd . "\n";
exec($cmd);

function show_message($str){
    $shell = new COM('WScript.Shell');
    $shell->popup($str, 0, "toUrl");
}
?>

2009-08-18 [JavaScript][jQuery] jQueryでIE8でtrのvisibleがおかしい このエントリーを含むブックマーク

サンプル

<table id="target">
  <tr> 
  <td>hoge</td>
  <td>moge</td>
  <td style="display:none">sage</td></tr>
</table>  
<script type="text/javascript">
$(function(){
  var str = '';
  $('#target tr').children().filter(':visible').each(function(){
    str += $(this).text();
  });
  alert(str);
});
</script>

"hoge moge" が正しいんだけど、IE8では "hoge moge sage" になる。

:visibleはwidthとheightが0以上であればvisibleだと判断してるんだけど、

IE8ではtrがhiddenでもwidthに0以上の値を返すかららしい。

1.3.3では直るっぽい。

http://dev.jquery.com/ticket/4512

2009-07-30 [JavaScript] ブラウザで戻るを押しても戻らないようにする このエントリーを含むブックマーク

startを押すと起動し、stopでやめる。テキストエリアはただの飾り。

サンプル

ソースコード



実は「戻る」を無効にすることは不可能なんですと。

でも googlegmail でそれをやっているということなのでなんとか再現してみた。ほんと最初は無理だと思ったわ。

ポイントは2点。

・「#(フラグメント)」付きのURL間では戻るを押してもページ遷移しない

・「戻る」を押した瞬間を察知する

#付きのURLで戻るを押してもページ遷移しないので、URLが変化する時を狙って監視する。変化した瞬間にダイアログで確認させるという寸法です。

2009-06-17 [Programming]floatの怪 このエントリーを含むブックマーク

不思議。

<?php
$a = 0.4 + 2 / 10;
$b = 0.6;

var_dump($a);
var_dump($b);
var_dump($a == $b);
var_dump($a === $b);

float(0.6)
float(0.6)
bool(false)
bool(false)


0.1 や 0.7 のようなシンプルな小数であっても、 それを内部的な二進数表現に変換する際には、どうしても多少精度が落ちてしまいます。 その結果、不思議な結果を引き起こすことがあります。たとえば、 floor((0.1+0.7)*10) の結果はたいてい 7 となるでしょう。おそらくは 8 を想定していらっしゃるでしょうが、そのようにはなりません。 これは、(この計算結果の) 内部的な値が 7.9999999999... のようになっているからです。

こうなる理由のひとつとして、「有限小数に変換できない分数がある」 という事実があります。たとえば 1/3 を小数で表そうとすると 0.3333333. . . となります。

よって、小数の最後の桁を信用してはいけませんし、 小数が等しいという比較を行ってはいけません。より高い精度が必要な場合には、 任意精度数学関数または gmp 関数を代わりに使用してください。

http://jp.php.net/manual/ja/language.types.float.php

1/3とかはダメな感じがするけど、2/10でもダメなんだな。

まてよ、他の言語ではどうだろう。

class CompareFloat{
	public static void main(String[] args){
		double a = 0.4 + 2d / 10d;
		double b = 0.6;

		System.out.println(a);
		System.out.println(b);
		System.out.println(a == b);
		
	}
}
0.6000000000000001
0.6
false

あ、javaでもだめなのか。じゃこれはプログラミング界の常識なのかな?

ってかなんか3年に1度ぐらい同じこと調べてる気がするw