2009年10月25日

どうしてプログラマに・・・プログラムが書けないのか?

カテゴリー: JavaScript — admin @ 11:18 PM

どうしてプログラマに・・・プログラムが書けないのか?という事でJavaScriptで書いてみた。

for(var i = 1; i < 101; i++){
	if(i % 3 == 0 && i % 5 == 0){
		document.write('FizzBuzz(' + i + ')<br />\n');
	}
	else if(i % 3 == 0){
		document.write('Fizz(' + i + ')<br />\n');
	}
	else if(i % 5 == 0){
		document.write('Buzz(' + i + ')<br />\n');
	}
	else{
		document.write(i + "<br />\n");
	}
}

書けてよかった。。。

2009年10月25日

例外をキャッチ

カテゴリー: JavaScript — admin @ 2:22 PM

try{
    window.addEventListener(
        'load',
        function(){
            alert('test');
        },
        false
    );
}
catch(e){
    alert(e.constructor);
    alert(e.message);
    alert(e.name);
    alert(e.fileName);//mozilla
    alert(e.lineNumber);//mozilla
    alert(e.stack);//mozilla
    alert(e.description);//ie
    alert(e.number);//ie
}

2009年10月22日

PHPでデザインパターン:Builder(ビルダー)

カテゴリー: デザインパターン — admin @ 2:27 AM

Item.class.php

<?php
class Item
{
    private $_title;
    private $_url;
    private $_date;
    public function __construct($title, $url, $date)
    {
        $this->_title = $title;
        $this->_url  = $url;
        $this->_date = $date;
    }
    public function getTitle()
    {
        return $this->_title;
    }
    public function getUrl()
    {
        return $this->_url;
    }
    public function getDate()
    {
        return $this->_date;
    }
}

NewsDirector.class.php

<?php
require_once 'class/NewsDirector.class.php';

class NewsDirector
{
    private $_builder;
    private $_url;
    public function __construct(NewsBuilder $builder, $url)
    {
        $this->_builder = $builder;
        $this->_url     = $url;
    }
    public function getNews()
    {
        $list = $this->_builder->parse($this->_url)
        return $list
    }
}

NewsBuilder.class.php

<?php
interface NewsBuilder
{
    public function parse($data);
}

FeedNewsBuilder.class.php

<?php
require_once 'Item.class.php';
require_once 'NewsBuilder.class.php';

class FeedNewsBuilder implements NewsBuilder
{
    public function parse($url)
    {
        $data = new SimpleXmlElement($url, null, true);
        if($data){
            foreach($data->item as $item){
                $dc = $item->children('http://purl.org/dc/elements/1.1/');
                $list[] = new News($item->title, $item->link, $dc->date);
            }
            return $list;
        }
    }
}

index.php

クライアントとやり取りするフロント部分だ。

<?php
require_once 'class/NewsDirector.class';
require_once 'class/FeedNewsBuilder.class.php';

$builder = new FeedNewsBuilder();
$url = 'http://blog.justoneplanet.info/feed/';
$director = new NewsDirector($builder, $url);
foreach($director->getNews() as $article){
    $data = array(
        'date'  => $article->getDate(),
        'url'   => $article->getUrl(),
        'title' => $article->getTitle()
    );
}

2009年10月21日

特定のチェックボックスをクリックすると指定のチェックボックスが全てチェックされるスクリプト

カテゴリー: JavaScript — admin @ 1:25 AM

イベントリスナを使ってます。一応、IEとFFでは動作チェックしてます。

<script type="text/javascript">
//<[CDATA[
var switcherBoxId = 'switcher';
var targetBoxName = 'targets';
var addListen = (function(){
    if(window.addEventListener){
        return function(elm, type, func){
            elm.addEventListener(type, func, false);
        }
    }
    else if(window.attachEvent){
        return function(elm, type, func){
            elm.attachEvent('on' + type, func);
        }
    }
    else{
        return new Function;
    }
})();
addListen(
    window,
    'load',
    function(){
        addListen(
            document.getElementById(switcherBoxId),
            'click',
            function(e){
                if(e.target){
                    var target = e.target;
                }
                else{
                    var target = window.event.srcElement;
                }
                if(!target.checked){
                    var checkboxes = document.forms[0].elements[targetBoxId];
                    for(var i = 0, n = checkboxes.length; i < n; i++){
                        if(checkboxes[i].checked){
                            checkboxes[i].checked = false;
                        }
                    }
                }
                else{
                    var checkboxes = document.forms[0].elements[targetBoxId];
                    for(var i = 0, n = checkboxes.length; i < n; i++){
                        if(!checkboxes[i].checked){
                            checkboxes[i].checked = true;
                        }
                    }
                }
            }
        );
    }
);
//>>
</script>

ちなみにIEではメモリリークする気がする。

2009年10月19日

Shift-JISでPHPをコーディングするとパースエラーになる

カテゴリー: PHP — admin @ 3:11 AM

以下のように記述するとパースエラーとなる。

<?php
define('CONSTANT', '機能');
?>

■原因

2バイト目に5C16を含む文字が使用されているため。

■詳細

「能」はダメ文字と呼ばれ2バイト目に5C16を含む。つまり「能」の後に続くシングルクォーテーションがエスケープされて、文字列を正しく括れない。

■対策

以下のように\を記述するとパースエラーを防ぐ事ができる。

<?php
define('CONSTANT', '機能\');
?>

個人的にはShift-JISを使わないことを勧める。

2009年10月11日

サーバ設定メモ

カテゴリー: Linux — admin @ 9:38 PM

Pleskを使用。

■ドキュメントルートの設定

=Web公開ディレクトリ。

DocumentRoot /var/www/vhosts/example.org/subdomains/dev/task/web

■PHPがアクセス可能なディレクトリ

<Directory  /var/www/vhosts/example.org/subdomains/sub/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/example.org/subdomains/sub:/tmp:/usr/local/ZendFramework/library"
</Directory>

ディレクトリ(=この場合公開ディレクトリ)にあるPHPスクリプトから、PHPがアクセス可能なディレクトリ。noneとすることでサーバ上の全てのファイルにアクセスが出来るようになるが、セキュリティリスクが下がるので、無意味にnoneとしてはならない。

2009年10月11日

WordPressのカテゴリページで現在のカテゴリID

カテゴリー: WordPress — admin @ 7:01 AM

$cat

以上