"/" があると動かないときがある。
setcookie("TestCookie", $value, time()+3600, "/", ".example.com", 1);
その場合は なしで確認。
$expire = time()+60*60*24*180;// 180days
setcookie( COOKIE_U, $u_ca , $expire);
setcookie(COOKIE_U_COMMON , $c1 , $expire);
Thursday, December 27, 2007
Thursday, December 20, 2007
javascript パスワード
function checkP() {
if(!document.formP.password.value){
alert("現在のパスワードを入力してください");
return false;
}else if(!document.formP.password1.value){
alert("新しいパスワードを入力してください");
return false;
}else if(!document.formP.password2.value){
alert("新しいパスワード確認を入力してください");
return false;
}else if(!document.formP.password.value.match(/^[a-zA-Z\d]+$/i)){
alert("今のパスワードには半角英数字しか使用できません。");
return false;
}else if(!document.formP.password1.value.match(/^[a-zA-Z\d]+$/i)){
alert("新しいパスワードには半角英数字しか使用できません。");
return false;
}else if(!document.formP.password2.value.match(/^[a-zA-Z\d]+$/i)){
alert("新しいパスワード確認には半角英数字しか使用できません。");
return false;
}else if(document.formP.password1.value.length < 4){
alert("新しいパスワードには4文字以上入力してください");
return false;
}else if(document.formP.password1.value.length < 4){
alert("新しいパスワードには4文字以上入力してください");
return false;
}else if(document.formP.password1.value != document.formP.password2.value){
alert("新しいパスワード確認が一致しません");
return false;
}else{
return true;
}
}
if(!document.formP.password.value){
alert("現在のパスワードを入力してください");
return false;
}else if(!document.formP.password1.value){
alert("新しいパスワードを入力してください");
return false;
}else if(!document.formP.password2.value){
alert("新しいパスワード確認を入力してください");
return false;
}else if(!document.formP.password.value.match(/^[a-zA-Z\d]+$/i)){
alert("今のパスワードには半角英数字しか使用できません。");
return false;
}else if(!document.formP.password1.value.match(/^[a-zA-Z\d]+$/i)){
alert("新しいパスワードには半角英数字しか使用できません。");
return false;
}else if(!document.formP.password2.value.match(/^[a-zA-Z\d]+$/i)){
alert("新しいパスワード確認には半角英数字しか使用できません。");
return false;
}else if(document.formP.password1.value.length < 4){
alert("新しいパスワードには4文字以上入力してください");
return false;
}else if(document.formP.password1.value.length < 4){
alert("新しいパスワードには4文字以上入力してください");
return false;
}else if(document.formP.password1.value != document.formP.password2.value){
alert("新しいパスワード確認が一致しません");
return false;
}else{
return true;
}
}
Monday, December 17, 2007
メールアドレスのチェック javascript
<SCRIPT LANGUAGE="javascript">
function check() {
var matchemail=/[!#-9A-~]+@+[a-z0-9]+.+[^.]$/i;
if(!document.step.mail.value) {
alert("メールアドレスを入力してください");
return false;
}else if( !(document.step.mail.value.match(matchemail))){
alert("メールアドレスが不正です。") ;
return false;
}else if(check_zenkaku(document.step.mail.value)){
alert("全角文字が使用されております。");
return false;
}else if( document.step.mail.value.match(/(docomo|ezweb|vodafone|softbank)\.ne.jp$/i)){
alert("申し訳ございませんが、携帯電話のメールアドレスはご使用できません。") ;
return false ;
}else{
return true;
}
}
function check_zenkaku(elm){
var txt=elm;
for(i=0;i<txt.length;i++){
if(escape(txt.charAt(i)).length>=4){
return true;
break;
}
}
return false ;
}
</SCRIPT>
function check() {
var matchemail=/[!#-9A-~]+@+[a-z0-9]+.+[^.]$/i;
if(!document.step.mail.value) {
alert("メールアドレスを入力してください");
return false;
}else if( !(document.step.mail.value.match(matchemail))){
alert("メールアドレスが不正です。") ;
return false;
}else if(check_zenkaku(document.step.mail.value)){
alert("全角文字が使用されております。");
return false;
}else if( document.step.mail.value.match(/(docomo|ezweb|vodafone|softbank)\.ne.jp$/i)){
alert("申し訳ございませんが、携帯電話のメールアドレスはご使用できません。") ;
return false ;
}else{
return true;
}
}
function check_zenkaku(elm){
var txt=elm;
for(i=0;i<txt.length;i++){
if(escape(txt.charAt(i)).length>=4){
return true;
break;
}
}
return false ;
}
</SCRIPT>
Friday, December 14, 2007
jquery.js でHTMLファイルのインクルード
PHPなどで使用しているHTMLファイルのインクルードをjquery.js
を使って行う例
これでfooterやheaderなど同じような箇所をコピペしなくてもよくなり、
メンテナンスが楽になります。
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript"><!--
$(function(){
$("#header_js").load("header.html");
});
// --></script>
</head>
<body>
<div id="header_js"></div>
を使って行う例
これでfooterやheaderなど同じような箇所をコピペしなくてもよくなり、
メンテナンスが楽になります。
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript"><!--
$(function(){
$("#header_js").load("header.html");
});
// --></script>
</head>
<body>
<div id="header_js"></div>
Wednesday, December 12, 2007
checkbox すべてをON・OFF PHPの場合
function checkAll() {
if(document.myForm.checkall.checked){
for(i=0;i if (document.myForm.elements[i].name == "ch[]"){
document.myForm.elements[i].checked = true;
}
}
}else{
for(i=0;i if (document.myForm.elements[i].name == "ch[]"){
document.myForm.elements[i].checked = false;
}
}
}
}
-----
<input type="checkbox" name="checkall" value="" onclick="checkAll(); ">
<input type="checkbox" name="ch[]" value="1">
<input type="checkbox" name="ch[]" value="2">
if(document.myForm.checkall.checked){
for(i=0;i
document.myForm.elements[i].checked = true;
}
}
}else{
for(i=0;i
document.myForm.elements[i].checked = false;
}
}
}
}
-----
<input type="checkbox" name="checkall" value="" onclick="checkAll(); ">
<input type="checkbox" name="ch[]" value="1">
<input type="checkbox" name="ch[]" value="2">
Sunday, November 25, 2007
prototype.js Ajax.RequestのonCompleteにパラメータ
はてなに出ていたソースをそのまま引用です。
http://q.hatena.ne.jp/1174489396
javascriptってすごいですね。
<html>
<head>
<title></title>
<script language="javascript" src="prototype.js" charset="utf-8"></script>
<script language="javascript">
<!--
function ajax1(id){
new Ajax.Request(
'test.txt',
{ onComplete : function(req){
Seiko(id, req);
}
});
}
function Seiko(id, req){
$(id).innerHTML = req.responseText;
}
//-->
</script>
</head>
<body>
<div id="test"></div>
<button onclick="ajax1('test');">TEST</button>
</body>
</html>
http://q.hatena.ne.jp/1174489396
javascriptってすごいですね。
<html>
<head>
<title></title>
<script language="javascript" src="prototype.js" charset="utf-8"></script>
<script language="javascript">
<!--
function ajax1(id){
new Ajax.Request(
'test.txt',
{ onComplete : function(req){
Seiko(id, req);
}
});
}
function Seiko(id, req){
$(id).innerHTML = req.responseText;
}
//-->
</script>
</head>
<body>
<div id="test"></div>
<button onclick="ajax1('test');">TEST</button>
</body>
</html>
Monday, October 29, 2007
プレビューのサンプル
<HTML>
<HEAD><TITLE>プレビュー</TITLE>
<script type="text/javascript" src="/prototype.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Preview()
{
// IE ONLY
// canvas.innerHTML =document.getElementById("body").value;
// prototype
var body = document.form.body.value.replace(/\x0D\x0A|\x0D|\x0A/g,'<br>')
$('canvas').innerHTML = body ;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<form name="form">
<textarea name="body" rows="10" onmouseup="Preview();" onkeydown="Preview();" onkeyup="Preview();" style="width:570px"></textarea>
</form>
<div id="canvas"></div>
</BODY>
</HTML>
<HEAD><TITLE>プレビュー</TITLE>
<script type="text/javascript" src="/prototype.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
function Preview()
{
// IE ONLY
// canvas.innerHTML =document.getElementById("body").value;
// prototype
var body = document.form.body.value.replace(/\x0D\x0A|\x0D|\x0A/g,'<br>')
$('canvas').innerHTML = body ;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<form name="form">
<textarea name="body" rows="10" onmouseup="Preview();" onkeydown="Preview();" onkeyup="Preview();" style="width:570px"></textarea>
</form>
<div id="canvas"></div>
</BODY>
</HTML>
Friday, October 19, 2007
mecab 0.96 インストール
tar xvzf mecab-0.96.tar.gz
cd mecab-0.96
./configure
./make
./make install
vi /etc/ld.so.conf
/usr/local/lib を追加
ldconfig を実行
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8 または ./configure --enable-utf8-only
make
make install
cd mecab-0.96
./configure
./make
./make install
vi /etc/ld.so.conf
/usr/local/lib を追加
ldconfig を実行
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8 または ./configure --enable-utf8-only
make
make install
Sunday, October 14, 2007
ペーストできない入力
<input type="text" name="mailaddress2" maxlength="256" size="100" value="" onpaste="return false;" >
Wednesday, June 20, 2007
Thursday, May 10, 2007
Smarty MySQLとの連携方法1のちょっと改造した場合
appendからassignにSmartyの呼び出し方法を変更しましたが、結果はそれほど変わらず、Smartyの場合、Smarty文法の方が優先されるようだ。
ちょっと改造した方法
require_once( 'MySmarty.class.php');
$objSmarty =& new MySmarty;
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
$i=0;
while ($item = mysql_fetch_array($rs)) {
$arg[]=array(
'id'=>$item['id'],
'name'=>$item['name'],
'cell'=>$item['tel'],
'email'=>$item['email'],
);
}
mysql_close($cn);
$objSmarty->assign('contacts', $arg);
$objSmarty->display('hoge1.tmpl');
Smarty MySQLとの連携方法1
Smarty MySQLとの連携方法2
ちょっと改造した方法
require_once( 'MySmarty.class.php');
$objSmarty =& new MySmarty;
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
$i=0;
while ($item = mysql_fetch_array($rs)) {
$arg[]=array(
'id'=>$item['id'],
'name'=>$item['name'],
'cell'=>$item['tel'],
'email'=>$item['email'],
);
}
mysql_close($cn);
$objSmarty->assign('contacts', $arg);
$objSmarty->display('hoge1.tmpl');
Smarty MySQLとの連携方法1
Smarty MySQLとの連携方法2
PHP-HTML::Templateを使った方法
http://phphtmltemplate.sourceforge.net/のPerlのHTML::Templateライクなテンプレートの方法を紹介します。
1回目のアクセスはSmartyより早いですが、2回目以降はSmartyの方が早いです。あたり前か
--php
include("template.php");
$f1 = "templates/htmlhtml.tmpl";// テンプレートファイル
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
while ($item = mysql_fetch_array($rs)) {
$arg[]=array(
'id'=>$item['id'],
'name'=>$item['name'],
'cell'=>$item['tel'],
'email'=>$item['email'],
);
}
mysql_close($cn);
$options = array("filename"=>$f1, "debug"=>0, "die_on_bad_params"=>0);
$template =& new Template($options);
$template->AddParam('loop', $arg);
$template->EchoOutput();
---html---
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
<TMPL_LOOP NAME="loop">
<p>
<TMPL_VAR NAME="name">
<TMPL_VAR NAME="id">
<TMPL_VAR NAME="cell">
<TMPL_VAR NAME="email">
</p>
</TMPL_LOOP>
</body>
</html>
1回目のアクセスはSmartyより早いですが、2回目以降はSmartyの方が早いです。あたり前か
--php
include("template.php");
$f1 = "templates/htmlhtml.tmpl";// テンプレートファイル
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
while ($item = mysql_fetch_array($rs)) {
$arg[]=array(
'id'=>$item['id'],
'name'=>$item['name'],
'cell'=>$item['tel'],
'email'=>$item['email'],
);
}
mysql_close($cn);
$options = array("filename"=>$f1, "debug"=>0, "die_on_bad_params"=>0);
$template =& new Template($options);
$template->AddParam('loop', $arg);
$template->EchoOutput();
---html---
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
<TMPL_LOOP NAME="loop">
<p>
<TMPL_VAR NAME="name">
<TMPL_VAR NAME="id">
<TMPL_VAR NAME="cell">
<TMPL_VAR NAME="email">
</p>
</TMPL_LOOP>
</body>
</html>
Smarty MySQLとの連携方法2
前回紹介した方法より若干速度が速い。ただしプログラム側にデータベースのカラムを追加する必要がある。
array配列を使用したSmaryのassignのサンプル sectionの場合
---php---
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
$id= array();
$name= array();
$tel= array();
$email= array();
while ($item = mysql_fetch_array($rs)) {
array_push($id,$item['id']);
array_push($name,$item['name']);
array_push($tel,$item['tel']);
array_push($email,$item['email']);
}
$objSmarty->assign('id',$id);
$objSmarty->assign('name',$name);
$objSmarty->assign('tel',$tel);
$objSmarty->assign('email',$email);
mysql_close($cn);
$objSmarty->display('html.tmpl');
---html----
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
{section name=customer loop=$id}
<p>
name: {$name[customer]}<br />
id: {$id[customer]}<br />
cell: {$tel[customer]}<br />
e-mail: {$mail[customer]}
</p>
{/section}
</body>
</html>
array配列を使用したSmaryのassignのサンプル sectionの場合
---php---
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
$id= array();
$name= array();
$tel= array();
$email= array();
while ($item = mysql_fetch_array($rs)) {
array_push($id,$item['id']);
array_push($name,$item['name']);
array_push($tel,$item['tel']);
array_push($email,$item['email']);
}
$objSmarty->assign('id',$id);
$objSmarty->assign('name',$name);
$objSmarty->assign('tel',$tel);
$objSmarty->assign('email',$email);
mysql_close($cn);
$objSmarty->display('html.tmpl');
---html----
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
{section name=customer loop=$id}
<p>
name: {$name[customer]}<br />
id: {$id[customer]}<br />
cell: {$tel[customer]}<br />
e-mail: {$mail[customer]}
</p>
{/section}
</body>
</html>
Smarty MySQLとの連携方法1
この方法のメリットはデータベースのカラム名はテンプレートのみに記述するのでプログラム管理が簡単になる。ただし、後から紹介する方法の方が速度は若干速い。
--PHP部分--
require_once( 'MySmarty.class.php');
$objSmarty =& new MySmarty;
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
while ($item = mysql_fetch_array($rs)) {
$objSmarty->append('contacts',$item);
}
mysql_close($cn);
$objSmarty->display('hoge1.tmpl');
---hoge1.tmpl---
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
{section name=customer loop=$contacts}
<p>
name: {$contacts[customer].name}
id: {$contacts[customer].id}
cell: {$contacts[customer].tel}
e-mail: {$contacts[customer].email}
</p>
{/section}
</body>
</html>
--PHP部分--
require_once( 'MySmarty.class.php');
$objSmarty =& new MySmarty;
if (!($cn = mysql_connect("localhost", "hoge", "hoge"))) {
die;
}
if (!(mysql_select_db("test"))) {
die;
}
$sql = "select * from address";
if (!($rs = mysql_query($sql))) {
die;
}
while ($item = mysql_fetch_array($rs)) {
$objSmarty->append('contacts',$item);
}
mysql_close($cn);
$objSmarty->display('hoge1.tmpl');
---hoge1.tmpl---
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>テンプレート</title>
</head>
<body>
<hr />
{section name=customer loop=$contacts}
<p>
name: {$contacts[customer].name}
id: {$contacts[customer].id}
cell: {$contacts[customer].tel}
e-mail: {$contacts[customer].email}
</p>
{/section}
</body>
</html>
Smarty 独自ファイルクラス化
PHP5.0/7.Smartyを使う
HTMLファイルの変更がすぐに反映されないので以下を追加
<:?php
require('Smarty/Smarty.class.php');
class MySmarty extends Smarty {
function MySmarty () {
$this->Smarty();
$this->compile_check = true; // << ここを追加
$mydir = dirname(__FILE__);
$this->template_dir = "$mydir/templates/";
$this->compile_dir = "$mydir/templates_c/";
$this->config_dir = "$mydir/configs/";
$this->cache_dir = "$mydir/cache/";
$this->caching = 0;
}
}
?>
HTMLファイルの変更がすぐに反映されないので以下を追加
<:?php
require('Smarty/Smarty.class.php');
class MySmarty extends Smarty {
function MySmarty () {
$this->Smarty();
$this->compile_check = true; // << ここを追加
$mydir = dirname(__FILE__);
$this->template_dir = "$mydir/templates/";
$this->compile_dir = "$mydir/templates_c/";
$this->config_dir = "$mydir/configs/";
$this->cache_dir = "$mydir/cache/";
$this->caching = 0;
}
}
?>
Wednesday, May 09, 2007
apache2 mod_rewriteを後から追加(インストール)
PHPをインストール済みの場合、あとからapacheを再インストールは大変です。
*DSOでインストールされているか?を確認。されていればOK。
/usr/local/apache2/bin/httpd -lを実行
Compiled-in modules:
http_core.c
mod_so.c これがあれば makeをしないで追加できる
*mod_rewriteをインストール
ソースをDLした場所(例)に
/home//source/httpd-2.2./modules/mappers/mod_rewrite.c
があるか確認
cd /home//source/httpd-2.2./modules/mappers/
$ /usr/local/apache2/bin/apxs -i -a -c ./mod_rewrite.c
apacheの再起動で有効
*DSOでインストールされているか?を確認。されていればOK。
/usr/local/apache2/bin/httpd -lを実行
Compiled-in modules:
http_core.c
mod_so.c これがあれば makeをしないで追加できる
*mod_rewriteをインストール
ソースをDLした場所(例)に
/home//source/httpd-2.2./modules/mappers/mod_rewrite.c
があるか確認
cd /home//source/httpd-2.2./modules/mappers/
$ /usr/local/apache2/bin/apxs -i -a -c ./mod_rewrite.c
apacheの再起動で有効
Tuesday, May 08, 2007
smarty install by Pear
pear upgrade PEAR
pear channel-discover pearified.com
pear install pearified/Smarty
vi /usr/local/lib/php.ini
include_path = ".:/usr/local/lib/php:/usr/local/lib/php/Pearified"
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
pear channel-discover pearified.com
pear install pearified/Smarty
vi /usr/local/lib/php.ini
include_path = ".:/usr/local/lib/php:/usr/local/lib/php/Pearified"
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
Sunday, April 22, 2007
Javascript クラス 継承の例
<script type=text/javascript>
<!--
function Team(name,members){
this.name = name;
this.members = members;
}
Team.prototype.add = function(members){
this.members += members;
};
function TeamAAA (name,members) {
this.name = name;
this.members = members;
}
TeamAAA.prototype = new Team();
TeamAAA.prototype.leave = function(members){
this.members -= members;
};
baseball = new TeamAAA("2軍",11);
baseball.leave(3);
document.write("Team name:"+ baseball.name + ", members:"+baseball.members);
//-->
</script>
JavaScript継承パターンまとめ
<!--
function Team(name,members){
this.name = name;
this.members = members;
}
Team.prototype.add = function(members){
this.members += members;
};
function TeamAAA (name,members) {
this.name = name;
this.members = members;
}
TeamAAA.prototype = new Team();
TeamAAA.prototype.leave = function(members){
this.members -= members;
};
baseball = new TeamAAA("2軍",11);
baseball.leave(3);
document.write("Team name:"+ baseball.name + ", members:"+baseball.members);
//-->
</script>
JavaScript継承パターンまとめ
Javascript クラス コンストラクトの例
<script type=text/javascript>
<!--
function Team(name,members){
this.name = name;
this.members = members;
}
Team.prototype.add = function(members){
this.members += members;
};
football = new Team("Japan",11);
football.add(3);
document.write("Team name:"+ football.name + ", members:"+football.members);
//-->
</script>
<!--
function Team(name,members){
this.name = name;
this.members = members;
}
Team.prototype.add = function(members){
this.members += members;
};
football = new Team("Japan",11);
football.add(3);
document.write("Team name:"+ football.name + ", members:"+football.members);
//-->
</script>
Friday, April 20, 2007
Javascript 多次元配列のソートの例
<script type=text/javascript>
<!--
function sort1(a,b){ return a[1] - b[1] }
function sort2(a,b){ return a[2] - b[2] }
xx = new Array(3, 7, 8, 1);
xx.sort();
document.write(xx);
document.write("<br>");
var persons =
[
[ 'Tanaka' , '32' ,'Japan'] ,
[ 'John' , '38' ,'UK'] ,
[ 'Ken' , '26' ,'France'] ,
[ 'John' , '49' ,'India'] ,
]
persons.sort();
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
document.write("<br>");
persons.sort(sort1)
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
document.write("<br>");
persons.sort(sort2)
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
//-->
</script>
意外と遅いらしい。
<!--
function sort1(a,b){ return a[1] - b[1] }
function sort2(a,b){ return a[2] - b[2] }
xx = new Array(3, 7, 8, 1);
xx.sort();
document.write(xx);
document.write("<br>");
var persons =
[
[ 'Tanaka' , '32' ,'Japan'] ,
[ 'John' , '38' ,'UK'] ,
[ 'Ken' , '26' ,'France'] ,
[ 'John' , '49' ,'India'] ,
]
persons.sort();
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
document.write("<br>");
persons.sort(sort1)
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
document.write("<br>");
persons.sort(sort2)
for (var i = 0; i < persons.length; i ++) {
document.write(persons[i] + "<br>");
}
//-->
</script>
意外と遅いらしい。
Thursday, April 19, 2007
Date Javascript
var date = new Date ();
date.setTime(1);
mdate = date.getFullYear() +"/" + (date.getMonth()+1) + "/" + date.getDate();
alert(mdate );
date.getDay // 0から始まる曜日を返す。0は日曜日、6が土曜日
date.setTime(1);
mdate = date.getFullYear() +"/" + (date.getMonth()+1) + "/" + date.getDate();
alert(mdate );
date.getDay // 0から始まる曜日を返す。0は日曜日、6が土曜日
Wednesday, April 18, 2007
無名配列 Anonymous Arrayの例 Javascript
var persons = [
{ Name: "田中", Age: 20 },
{ Name: "山田", Age: 18 },
{ Name: "青木", Age: 15 }
];
for (var i = 0; i < persons.length; i ++) {
alert(persons[i].Name + ":" +persons[i].Age);
}
{ Name: "田中", Age: 20 },
{ Name: "山田", Age: 18 },
{ Name: "青木", Age: 15 }
];
for (var i = 0; i < persons.length; i ++) {
alert(persons[i].Name + ":" +persons[i].Age);
}
連想配列のサンプル JavaScript
連想配列のサンプル
person1 = new Array();
person1["Name"] = "Mike";
document.write(person1["Name"] );
person1 = new Array();
person1["Name"] = "Mike";
document.write(person1["Name"] );
Thursday, April 12, 2007
Wednesday, April 11, 2007
Tuesday, April 10, 2007
Exporter
package Constant;
use strict;
BEGIN{
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter);
@EXPORT = qw(
HOGE
HOGE2
);
%EXPORT_TAGS = ();
@EXPORT_OK = ();
}
use constant HOGE => 'hoge';
use constant HOGE2 => 2;
1
~
-----
#!/usr/local/bin/perl
use Constant;
print HOGE2;
use strict;
BEGIN{
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter);
@EXPORT = qw(
HOGE
HOGE2
);
%EXPORT_TAGS = ();
@EXPORT_OK = ();
}
use constant HOGE => 'hoge';
use constant HOGE2 => 2;
1
~
-----
#!/usr/local/bin/perl
use Constant;
print HOGE2;
ENDサブルーチン Perl
exitやdieで終了したあとで呼ばれる。
ただし「exec」、「kill -9」または異常終了などがあると呼ばれない。
複数ある場合は文の最後から呼ばれる。
exit;
END{
print "end1\n";
}
END{
print "end2\n";
}
END{
print "end3\n";
}
----- 結果 ----
end3
end2
end1
となる
ただし「exec」、「kill -9」または異常終了などがあると呼ばれない。
複数ある場合は文の最後から呼ばれる。
exit;
END{
print "end1\n";
}
END{
print "end2\n";
}
END{
print "end3\n";
}
----- 結果 ----
end3
end2
end1
となる
日付関係
use POSIX 'strftime';
print strftime ("%Y/%m/%d %H:%M:%S", localtime);
参考URL
http://blog.livedoor.jp/dankogai/archives/50180654.html
http://www2u.biglobe.ne.jp/~MAS/perl/waza/strftime.html
print strftime ("%Y/%m/%d %H:%M:%S", localtime);
参考URL
http://blog.livedoor.jp/dankogai/archives/50180654.html
http://www2u.biglobe.ne.jp/~MAS/perl/waza/strftime.html
Friday, April 06, 2007
ダウンロードコンテンツの著作権関連のサンプル
Content-Type: application/vnd.oma.dd+xml
Content-length: 50
image/jpg
http://myserver/dl.cgi?img=picture.jpg
1234
著作権関連のOMAのサンプル
Content-length: 50
著作権関連のOMAのサンプル
ファイルサイズを求める -s
perlでのサンプル
my $body;
open(MP3, $file) || die("can't open \n $!");
read(MP3, $body, -s $file);
close(MP3);
print $body;
my $body;
open(MP3, $file) || die("can't open \n $!");
read(MP3, $body, -s $file);
close(MP3);
print $body;
正規表現の例 perl
my $n = 5;
unless ($n =~ /^[1-5]$/) {
print "n is not from one to five";
}else{
print "n is between one and five";
}
unless ($n =~ /^[1-5]$/) {
print "n is not from one to five";
}else{
print "n is between one and five";
}
Yahoo!ケイタイの動画、転送不可のHTTPヘッダのサンプル
Yahoo!ケイタイの動画、転送不可のHTTPヘッダのサンプル
Content-type: video/3gpp\nContent-length: 100\nx-jphone-copyright: no-store\n\n
サイズ Content-lengthは
-s で求めたりする。
http://developers.softbankmobile.co.jp/dp/tool_dl/web/tech.php
を参照。
Content-type: video/3gpp\nContent-length: 100\nx-jphone-copyright: no-store\n\n
サイズ Content-lengthは
-s で求めたりする。
http://developers.softbankmobile.co.jp/dp/tool_dl/web/tech.php
を参照。
Thursday, April 05, 2007
Perl テストプランツールのサンプル
テストプランツールのサンプル
#!/usr/local/bin/perl -w
use strict;
use Data::Dumper;
use Test::More qw(no_plan);
use lib './lib';
BEGIN {
use_ok('Original::Person');# パールモジュール
};
my $p = Original::Person->new('Tom');
is ($p->tel,'0123-123-1234', 'tel number');
is ($p->age,'24', 'age');
#!/usr/local/bin/perl -w
use strict;
use Data::Dumper;
use Test::More qw(no_plan);
use lib './lib';
BEGIN {
use_ok('Original::Person');# パールモジュール
};
my $p = Original::Person->new('Tom');
is ($p->tel,'0123-123-1234', 'tel number');
is ($p->age,'24', 'age');
prototype.js を使ったチャットシステムの習作
ログファイルのロックやサイズ制限などは入れていないです。
単純にprototype.js の練習用です。
<html>
<head>
<script type="text/javascript" src="./js/prototype-1.5.0.js"></script>
<script type="text/javascript">
//<![CDATA[
function updateResult(req){
$("status").innerHTML = req.responseText ;
}
function update() {
var url = './read.pl';
var params = '';
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params,
onComplete: updateResult
});
}
function execute() {
var url = './write.pl';
var params = Form.serialize($('form1'));
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params
});
}
function adListener() {
periodicalExecuter = new PeriodicalExecuter(update, 1);
}
//]]>
</script>
</head>
<body onload="adListener()">
<form id="form1" onSubmit="execute()">
message <input type="text" name="message" id="d_message" value=""><br>
<input type="submit" value="entry">
</form>
<hr>
<span id="status"></span>
</body>
</html>
-----write.pl
#!/usr/bin/perl -w
# モジュール読み込み
use strict;
use CGI;
print 'Content-Type: text/html', "\n\n";
#オブジェクト作成
my $q = CGI->new;
my $message = $q->param('message');
if ($message){
# ファイルロック処理は入れていない
open(OUTFILE, ">> /tmp/mes.txt");
print OUTFILE $message."\n";
close OUTFILE;
print $message;
}
----read.pl----
#!/usr/bin/perl -w
# モジュール読み込み
use strict;
print 'Content-Type: text/html', "\n\n";
my $file = '/tmp/mes.txt';
if ( -e $file) {
open( READ, $file );
my @lines = <READ>;
close( READ );
my $num = @lines;
my @lists = @lines[$num-5 .. $num-1];# 最後からデータを取得
foreach (@lists) {
print $_,"<br>";
}
}
単純にprototype.js の練習用です。
<html>
<head>
<script type="text/javascript" src="./js/prototype-1.5.0.js"></script>
<script type="text/javascript">
//<![CDATA[
function updateResult(req){
$("status").innerHTML = req.responseText ;
}
function update() {
var url = './read.pl';
var params = '';
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params,
onComplete: updateResult
});
}
function execute() {
var url = './write.pl';
var params = Form.serialize($('form1'));
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params
});
}
function adListener() {
periodicalExecuter = new PeriodicalExecuter(update, 1);
}
//]]>
</script>
</head>
<body onload="adListener()">
<form id="form1" onSubmit="execute()">
message <input type="text" name="message" id="d_message" value=""><br>
<input type="submit" value="entry">
</form>
<hr>
<span id="status"></span>
</body>
</html>
-----write.pl
#!/usr/bin/perl -w
# モジュール読み込み
use strict;
use CGI;
print 'Content-Type: text/html', "\n\n";
#オブジェクト作成
my $q = CGI->new;
my $message = $q->param('message');
if ($message){
# ファイルロック処理は入れていない
open(OUTFILE, ">> /tmp/mes.txt");
print OUTFILE $message."\n";
close OUTFILE;
print $message;
}
----read.pl----
#!/usr/bin/perl -w
# モジュール読み込み
use strict;
print 'Content-Type: text/html', "\n\n";
my $file = '/tmp/mes.txt';
if ( -e $file) {
open( READ, $file );
my @lines = <READ>;
close( READ );
my $num = @lines;
my @lists = @lines[$num-5 .. $num-1];# 最後からデータを取得
foreach (@lists) {
print $_,"<br>";
}
}
Wednesday, April 04, 2007
prototype.js のサンプル
----time.pl----
#!/usr/bin/perl
use strict;
print 'Content-Type: text/html', "\n\n";
my ($ss, $mn, $hh, $dd, $mm, $yy) = localtime(time);
$yy += 1900;
$mm++;
my $my_time = sprintf("%04d.%02d.%02d %02d:%02d:%02d", $yy, $mm, $dd, $hh, $mn, $ss);
print $my_time;
---end---
<html>
<head>
<script type="text/javascript" src="./js/prototype-1.5.0.js"></script>
<script type="text/javascript">
//<![CDATA[
function updateResult(req){
$("status").innerHTML = req.responseText ;
}
function update() {
var url = './time.pl';
var params = 'c=time';// つかわないが。。
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params,
onComplete: updateResult
});
}
function adListener() {
periodicalExecuter = new PeriodicalExecuter(update, 1);
}
//]]>
</script>
</head>
<body onload="adListener()">
time :
<span id="status"></span>
</body>
</html>
#!/usr/bin/perl
use strict;
print 'Content-Type: text/html', "\n\n";
my ($ss, $mn, $hh, $dd, $mm, $yy) = localtime(time);
$yy += 1900;
$mm++;
my $my_time = sprintf("%04d.%02d.%02d %02d:%02d:%02d", $yy, $mm, $dd, $hh, $mn, $ss);
print $my_time;
---end---
<html>
<head>
<script type="text/javascript" src="./js/prototype-1.5.0.js"></script>
<script type="text/javascript">
//<![CDATA[
function updateResult(req){
$("status").innerHTML = req.responseText ;
}
function update() {
var url = './time.pl';
var params = 'c=time';// つかわないが。。
var ajax = new Ajax.Request(url, { method: 'post',
parameters: params,
onComplete: updateResult
});
}
function adListener() {
periodicalExecuter = new PeriodicalExecuter(update, 1);
}
//]]>
</script>
</head>
<body onload="adListener()">
time :
<span id="status"></span>
</body>
</html>
Tuesday, April 03, 2007
Perl CGIスクリプトをコマンドラインから実行する
ブラウザでしか確認できないということをよく聞く。コマンドラインから実行した方がはるかに簡単にデバッグできる。
----test.cgi-----
#!/usr/local/bin/perl
use strict;
use CGI;
print "Content-type: text/html;charset=Shift_JIS\n\n";
my $q = new CGI;
my $name = $q->param('name');
my $id = $q->param('id');
print $name,"\n";
print $id,"\n";
以下のような場合
./test.cgi name='moji' id=2 と実行すればよい。
----test.cgi-----
#!/usr/local/bin/perl
use strict;
use CGI;
print "Content-type: text/html;charset=Shift_JIS\n\n";
my $q = new CGI;
my $name = $q->param('name');
my $id = $q->param('id');
print $name,"\n";
print $id,"\n";
以下のような場合
./test.cgi name='moji' id=2 と実行すればよい。
Friday, March 30, 2007
MVCの練習 perl
---index.cgi-----
#!/usr/local/bin/perl
use strict;
use Controller;
Controller->new->dispatch('index');# Sledge風にしてみました。
----Controller.pm -----
package Controller;
use strict;
use CGI;
use Model;
use View;
use Error qw(:try);
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}
sub dispatch {
my $self = shift;
my $page = shift||'index';
print "Content-Type: text/html;\n\n";
try {
my $q = new CGI;
my $color = $q->param('color')||'white';
my $model = new Model($color);
my $view = new View;
if ($model->get_RGB){
$view->hit_page($page,$model->get_RGB);
}else{
$view->not_found_page($page);
}
}catch Error with {
my $e = shift;
warn "system error: " . $e->text;
} finally {
;
}
}
1;
----Modal.pm-----
package Model;
use strict;
sub new {
my $class = shift;
my $self = {};
$self->{color} = shift;
bless $self, $class;
}
sub get_RGB {
my $self = shift;
if ($self->{color} eq "white"){
return "#FFFFFF";
}else{
return "";
}
}
1;
----View.pm------
package View;
use strict;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}
sub not_found_page {
my ($self, $str) = @_;
print $str,"not found\n"
}
sub hit_page{
my ($self, $page,$str) = @_;
my $out = sprintf("page :%s, str :%s\n",$page,$str);
print $out;
}
1;
---
#!/usr/local/bin/perl
use strict;
use Controller;
Controller->new->dispatch('index');# Sledge風にしてみました。
----Controller.pm -----
package Controller;
use strict;
use CGI;
use Model;
use View;
use Error qw(:try);
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}
sub dispatch {
my $self = shift;
my $page = shift||'index';
print "Content-Type: text/html;\n\n";
try {
my $q = new CGI;
my $color = $q->param('color')||'white';
my $model = new Model($color);
my $view = new View;
if ($model->get_RGB){
$view->hit_page($page,$model->get_RGB);
}else{
$view->not_found_page($page);
}
}catch Error with {
my $e = shift;
warn "system error: " . $e->text;
} finally {
;
}
}
1;
----Modal.pm-----
package Model;
use strict;
sub new {
my $class = shift;
my $self = {};
$self->{color} = shift;
bless $self, $class;
}
sub get_RGB {
my $self = shift;
if ($self->{color} eq "white"){
return "#FFFFFF";
}else{
return "";
}
}
1;
----View.pm------
package View;
use strict;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
}
sub not_found_page {
my ($self, $str) = @_;
print $str,"not found\n"
}
sub hit_page{
my ($self, $page,$str) = @_;
my $out = sprintf("page :%s, str :%s\n",$page,$str);
print $out;
}
1;
---
Thursday, March 29, 2007
apache の設定サンプル
<Files *.pl>
Options ExecCGI
allow from all
SetHandler perl-script
PerlHandler Apache::Registry
PerlModule Apache::DBI
PerlInitHandler Apache::StatINC
PerlSendHeader Off
PerlSetEnv TMPDIR /tmp
</Files>
Options ExecCGI
allow from all
SetHandler perl-script
PerlHandler Apache::Registry
PerlModule Apache::DBI
PerlInitHandler Apache::StatINC
PerlSendHeader Off
PerlSetEnv TMPDIR /tmp
</Files>
Template Toolkit CGI.pmの例
use strict;
use Template;
use CGI;
my $q = CGI->new;
print "Content-type: text/html\n\n";
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'fillin.html',
{
apr =>$q,
},
) or print $template->error;
print $output;
-----
[% USE FillInForm %]
[% FILTER fillinform fobject => apr %]
<!-- this form becomes sticky -->
<form action="foo" method="POST">
<input type="text" name="foo">
<input value="" type="hidden" name="bar">
<input value="foo" type="radio" checked name="baz">
<input value="bar" type="radio" name="baz">
</form>
[% END %]
use Template;
use CGI;
my $q = CGI->new;
print "Content-type: text/html\n\n";
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'fillin.html',
{
apr =>$q,
},
) or print $template->error;
print $output;
-----
[% USE FillInForm %]
[% FILTER fillinform fobject => apr %]
<!-- this form becomes sticky -->
<form action="foo" method="POST">
<input type="text" name="foo">
<input value="" type="hidden" name="bar">
<input value="foo" type="radio" checked name="baz">
<input value="bar" type="radio" name="baz">
</form>
[% END %]
Tuesday, March 27, 2007
パラメータの値をそのまま Template Toolkit
#!/usr/local/bin/perl
use strict;
use Template;
use CGI;
my $q = CGI->new;
print "Content-type: text/html\n\n";
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'sample2.html',
{ cgi =>$q,
},
) or print $template->error;
print $output;
$q->param("money","dollar");
-----template---
[% cgi.param('money') %]
use strict;
use Template;
use CGI;
my $q = CGI->new;
print "Content-type: text/html\n\n";
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'sample2.html',
{ cgi =>$q,
},
) or print $template->error;
print $output;
$q->param("money","dollar");
-----template---
[% cgi.param('money') %]
ハッシュからURLパラメータ perl
my %hash = ();
$hash{test} = 1;
$hash{test2} = 21;
$hash{test3} = 31;
my $parameter = join '&', map {"$_=$hash{$_}"} keys %hash;
print $parameter; # test2=21&test3=31&test=1
$hash{test} = 1;
$hash{test2} = 21;
$hash{test3} = 31;
my $parameter = join '&', map {"$_=$hash{$_}"} keys %hash;
print $parameter; # test2=21&test3=31&test=1
Perl データベースへのアクセスのサンプル
最近ではDBIx::Class や Class::DBIでデータベースをアクセスすることが多く。直接SQLを書くこともすくなくなりましたが、基本のサンプルを書いておきます。
そのままでは動きません。
my $dbh=DBI->connect(DBI,{PrintError=>0,AutoCommit=>1}) or die ;
my $sql=qq[SELECT id ,name FROM user WHERE age=? AND area=?];#プレースホルダを使用
@bind=(17,14);
$sth = $dbh->prepare($sql)|| die $dbh->errstr;
$sth->execute(@bind);
if ($sth->errstr ne ""){ # DBエラー
#エラー処理
}
while( ( $login_id, $login_name ) = $sth->fetchrow_array() ) {
}
$sth->finish;
$dbh->disconnect;
そのままでは動きません。
my $dbh=DBI->connect(DBI,{PrintError=>0,AutoCommit=>1}) or die ;
my $sql=qq[SELECT id ,name FROM user WHERE age=? AND area=?];#プレースホルダを使用
@bind=(17,14);
$sth = $dbh->prepare($sql)|| die $dbh->errstr;
$sth->execute(@bind);
if ($sth->errstr ne ""){ # DBエラー
#エラー処理
}
while( ( $login_id, $login_name ) = $sth->fetchrow_array() ) {
}
$sth->finish;
$dbh->disconnect;
abstract サンプル Perl アブストラクトメソッド
親クラスで定義したメソッドを呼ばず、子クラスでのメソッドが呼ばれます。
---Foo.pm-----
package Foo;
sub new{
my $pkg = shift;
my $hash= {};
bless $hash,$pkg;
}
sub sub1{
my $self = shift;
$self->sub2;
}
sub sub2{
my $self = shift;
print "this is abstract\n";
}
1;
---Foo2.pm (Fooの子クラス)-----
package Foo2;
use base qw(Foo);
sub sub2{
my $self = shift;
print "Foo2 sub2\n";
}
1;
--- main.pl (実行スクリプト)---
#!/usr/local/bin/perl
use Foo2;
my $f = Foo2->new;
$f->sub1;
__END__
--- 実行結果
Foo2 sub2
---Foo.pm-----
package Foo;
sub new{
my $pkg = shift;
my $hash= {};
bless $hash,$pkg;
}
sub sub1{
my $self = shift;
$self->sub2;
}
sub sub2{
my $self = shift;
print "this is abstract\n";
}
1;
---Foo2.pm (Fooの子クラス)-----
package Foo2;
use base qw(Foo);
sub sub2{
my $self = shift;
print "Foo2 sub2\n";
}
1;
--- main.pl (実行スクリプト)---
#!/usr/local/bin/perl
use Foo2;
my $f = Foo2->new;
$f->sub1;
__END__
--- 実行結果
Foo2 sub2
ハッシュに関数を入れてみる perl
携帯向けサイトなどで使えそうな感じですね。
my %controller = (
i => \&i_page,
e => \&e_page,
y => \&y_page,
);
my $ca = "i";
$controller{$ca}->("iii") if $ca eq "i";
$controller{$ca}->("eee","test2")if $ca eq "e";
$controller{$ca}->("yyy") if $ca eq "y";
sub i_page{
my $str = shift;
print $str;
}
sub e_page{
my ($str,$str2) = @_;
print $str,$str2;
}
sub y_page{
my $str = shift;
print $str;
}
my %controller = (
i => \&i_page,
e => \&e_page,
y => \&y_page,
);
my $ca = "i";
$controller{$ca}->("iii") if $ca eq "i";
$controller{$ca}->("eee","test2")if $ca eq "e";
$controller{$ca}->("yyy") if $ca eq "y";
sub i_page{
my $str = shift;
print $str;
}
sub e_page{
my ($str,$str2) = @_;
print $str,$str2;
}
sub y_page{
my $str = shift;
print $str;
}
時間の比較 Time::PieceとDate::Calc perl
use Time::Piece;
use Date::Calc qw(Delta_DHMS);
my $start = localtime;
sleep 3;
my $end = localtime;
my $diff = $end - $start;
# my $diff = $start - $end;
print $diff,"\n";
my @df =Delta_DHMS($start->year,$start->mon,$start->mday,$start->hour,$start->min,$start->sec,
$end->year,$end->mon,$end->mday,$end->hour,$end->min,$end->sec);
$" = ',';# カンマ区切りで出力
print "@df\n";
use Date::Calc qw(Delta_DHMS);
my $start = localtime;
sleep 3;
my $end = localtime;
my $diff = $end - $start;
# my $diff = $start - $end;
print $diff,"\n";
my @df =Delta_DHMS($start->year,$start->mon,$start->mday,$start->hour,$start->min,$start->sec,
$end->year,$end->mon,$end->mday,$end->hour,$end->min,$end->sec);
$" = ',';# カンマ区切りで出力
print "@df\n";
Sunday, March 25, 2007
Perl でPHPのようにリンクに自動的にセッションパラメータを付ける
HTML::StickyQueryをつかえば可能です。
ただしPHPではFormにも自動的にhiddentタグでセッションを渡すことができますが、
この部分は手動で行う必要があります。
ただしPHPではFormにも自動的にhiddentタグでセッションを渡すことができますが、
この部分は手動で行う必要があります。
タイムアウトをさせない
$|=1;#バッファリング制御
my $interval = 10;
eval {
local $SIG{ALRM} = sub { # ALRM シグナルをキャッチした
print "\n";
alarm $interval;
};
alarm $interval;
# 重たい処理をここでする
sleep 10;
};
alarm 0;
if ($@) {
die "$@";
}
$|=0;#バッファリング制御 元に戻す
my $interval = 10;
eval {
local $SIG{ALRM} = sub { # ALRM シグナルをキャッチした
print "\n";
alarm $interval;
};
alarm $interval;
# 重たい処理をここでする
sleep 10;
};
alarm 0;
if ($@) {
die "$@";
}
$|=0;#バッファリング制御 元に戻す
指定の配列のランダム
my @id =(0,1,2,3,4,5,6,7,8,9);
my @ret;
for (1..@id) {
push @ret, splice(@id, int(rand(@id)), 1);
}
print @ret;
my @ret;
for (1..@id) {
push @ret, splice(@id, int(rand(@id)), 1);
}
print @ret;
クラスとメソッドを一度に呼ぶサンプル Perl
---- Game.pm ------
package Game;
use strict;
use Carp qw(croak);
sub new{
my $class = shift;
my $name = shift || croak ('set name');
bless{
name => $name,
},$class;
}
sub name{
my $self = shift;
$self->{name};
}
1;
__END__
---- Player.pm -----
package Player;
use strict;
use Carp qw(croak);
use Game;
sub new{
my $class = shift;
my $self = {};
bless $self, $class;
}
sub run{
my $self = shift;
print $self->game->name;
}
sub game{
my $self = shift;
unless (defined $self->{game}){
$self->{game}= Game->new('race');
}
return $self->{game};
}
1;
__END__
---- index.cgi------
#!/usr/bin/perl
use Player;
use strict;
Player->new->run;
package Game;
use strict;
use Carp qw(croak);
sub new{
my $class = shift;
my $name = shift || croak ('set name');
bless{
name => $name,
},$class;
}
sub name{
my $self = shift;
$self->{name};
}
1;
__END__
---- Player.pm -----
package Player;
use strict;
use Carp qw(croak);
use Game;
sub new{
my $class = shift;
my $self = {};
bless $self, $class;
}
sub run{
my $self = shift;
print $self->game->name;
}
sub game{
my $self = shift;
unless (defined $self->{game}){
$self->{game}= Game->new('race');
}
return $self->{game};
}
1;
__END__
---- index.cgi------
#!/usr/bin/perl
use Player;
use strict;
Player->new->run;
Friday, March 23, 2007
Javascript 選択文字の取得
function getText()
{
var txt = '';
if (window.getSelection)
{
txt = window.getSelection();
}
else if (document.getSelection)
{
txt = document.getSelection();
}
else if (document.selection)
{
txt = document.selection.createRange().text;
}
else return;
document.getElementById("msg").innerHTML = txt;
}
{
var txt = '';
if (window.getSelection)
{
txt = window.getSelection();
}
else if (document.getSelection)
{
txt = document.getSelection();
}
else if (document.selection)
{
txt = document.selection.createRange().text;
}
else return;
document.getElementById("msg").innerHTML = txt;
}
Thursday, March 22, 2007
Ajaxを使わない 処理中の表示
#!/usr/bin/perl
use strict;
$=1;#バッファリング制御
print 'Content-Type: text/html', "\n\n";
my $html = <<__HTML__;
<html>
<head>
</head>
<body>
<img src="./img/indicator_remembermilk_orange.gif"> <-- 処理中をあらわす画像-->
</body>
</html>
__HTML__
print $html;
sleep 10;# 重い(長い)処理
$=0;#バッファリング制御
my $js = <<__JAVASCRIPT__;
<script language="JavaScript">
<!--location.href='test.html'// -->
</script>
__JAVASCRIPT__
print $js;
__END__
use strict;
$=1;#バッファリング制御
print 'Content-Type: text/html', "\n\n";
my $html = <<__HTML__;
<html>
<head>
</head>
<body>
<img src="./img/indicator_remembermilk_orange.gif"> <-- 処理中をあらわす画像-->
</body>
</html>
__HTML__
print $html;
sleep 10;# 重い(長い)処理
$=0;#バッファリング制御
my $js = <<__JAVASCRIPT__;
<script language="JavaScript">
<!--location.href='test.html'// -->
</script>
__JAVASCRIPT__
print $js;
__END__
無名ハッシュを配列で管理
my $ref_steps = &get_steps();
# 配列をデリファレンス @$ref_steps -->@{$ref_steps}
foreach my $sp (@$ref_steps) {
print sprintf("%s file %d 行\n", $sp->{file},$sp->{steps});
}
sub get_steps{
my @list; my $i=1;
for my $key ( qw(hoge hoge2 hoge3) ) {
push (@list, { file=>$key,steps=>$i });
$i++;
}
return \@list;
}
# 配列をデリファレンス @$ref_steps -->@{$ref_steps}
foreach my $sp (@$ref_steps) {
print sprintf("%s file %d 行\n", $sp->{file},$sp->{steps});
}
sub get_steps{
my @list; my $i=1;
for my $key ( qw(hoge hoge2 hoge3) ) {
push (@list, { file=>$key,steps=>$i });
$i++;
}
return \@list;
}
パーセントの計算
sub count_rate {
my ($numerator,$denominator) = @_;
if ( $numerator > 0 && $denominator > 0){
return sprintf("%.1f",($numerator / $denominator)*100);
}else{
return 0;
}
}
my ($numerator,$denominator) = @_;
if ( $numerator > 0 && $denominator > 0){
return sprintf("%.1f",($numerator / $denominator)*100);
}else{
return 0;
}
}
Tuesday, March 20, 2007
perl 経過時間 秒
my $start_sec= time;# 終了時間の取得
my $end_sec = time;# 終了時間の取得
my $finish_time = $end_sec - $start_sec;
my $finish_minute = int($finish_time / 60);# 分の取得
my $finish_sec = $finish_time % 60;
print sprintf("%d分%d秒",$finish_minute,$finish_sec);
my $end_sec = time;# 終了時間の取得
my $finish_time = $end_sec - $start_sec;
my $finish_minute = int($finish_time / 60);# 分の取得
my $finish_sec = $finish_time % 60;
print sprintf("%d分%d秒",$finish_minute,$finish_sec);
Sunday, March 18, 2007
ajax prototype.js を使った「処理中」のメッセージ表示
<script type="text/javascript" src="./prototype.js"></script>
<script type="text/javascript">
//<![CDATA[
function progressMessage(){
$("status").innerHTML = 'Please Wait..' ;
}
function upload(){
var filename = $F('filename');
var param = 'filename=' + filename ;
var url = "./upload.cgi";
new Ajax.Request(url, {method: 'post', parameters: param, onComplete: result, onLoading: progressMessage});
}
function result(req){
$("status").innerHTML = req.responseText ;
}
//]]>
</script>
</head>
<body>
<form >
<input type="button" value="実行" onclick="upload()"/>
</form>
<span id="status"></span>
-----
#!/usr/bin/perl
sleep 5; # 重い処理のつもり
print "Content-type: text/html;charset=Shift_JIS\n\n";
print "Thank you";
<script type="text/javascript">
//<![CDATA[
function progressMessage(){
$("status").innerHTML = 'Please Wait..' ;
}
function upload(){
var filename = $F('filename');
var param = 'filename=' + filename ;
var url = "./upload.cgi";
new Ajax.Request(url, {method: 'post', parameters: param, onComplete: result, onLoading: progressMessage});
}
function result(req){
$("status").innerHTML = req.responseText ;
}
//]]>
</script>
</head>
<body>
<form >
<input type="button" value="実行" onclick="upload()"/>
</form>
<span id="status"></span>
-----
#!/usr/bin/perl
sleep 5; # 重い処理のつもり
print "Content-type: text/html;charset=Shift_JIS\n\n";
print "Thank you";
Friday, March 16, 2007
Perl Template::Toolkit の例
for ( my $key = 1; $key <= 10; $key++ ) {
push (@list, { pattern =>"pattern".$key, hoge=>$key, hoge2=>'hoge'} );
}
$self->stash->{list}= \@list;
-------
[% FOREACH r = list %] [% r.pattern html %] [% r.hoge html %] [% r.hoge2 html %] [% END %]
push (@list, { pattern =>"pattern".$key, hoge=>$key, hoge2=>'hoge'} );
}
$self->stash->{list}= \@list;
-------
[% FOREACH r = list %] [% r.pattern html %] [% r.hoge html %] [% r.hoge2 html %] [% END %]
Thursday, March 15, 2007
Sunday, March 11, 2007
use Benchmark
4 wallclock secs ( 1.77 usr + 1.28 sys = 3.05 CPU) @ 57.05/s (n=174)
4 wallclock secs 処理全体にかかった秒数
@57.05 1秒間に処理した回数 57.05回処理した。
4 wallclock secs 処理全体にかかった秒数
@57.05 1秒間に処理した回数 57.05回処理した。
Saturday, March 10, 2007
ハッシュ 参照渡し
#!/usr/bin/perl
my %data=();
sub1(\%data);
foreach $key ( sort keys %data ) {
print "$key:$data{$key} \n";
}
sub sub1{
my ($x) = @_;
for ($i = 0; $i <= 10 ; $i++)
{
$x->{$i} = $i;
}
}
my %data=();
sub1(\%data);
foreach $key ( sort keys %data ) {
print "$key:$data{$key} \n";
}
sub sub1{
my ($x) = @_;
for ($i = 0; $i <= 10 ; $i++)
{
$x->{$i} = $i;
}
}
Perl 配列 参照渡しのサンプル
#!/usr/bin/perl
my @array = ();
sub1(\@array);
print @array;
sub sub1{
my ($x) = @_;
for ($i = 0; $i <= 10 ; $i++)
{
$x->[$i] = $i;
}
}
my @array = ();
sub1(\@array);
print @array;
sub sub1{
my ($x) = @_;
for ($i = 0; $i <= 10 ; $i++)
{
$x->[$i] = $i;
}
}
Tuesday, February 20, 2007
Thursday, February 08, 2007
携帯サイト開発に必要なツール
PsQREdit
QR コード作成ツール。URLを携帯に送るときに使用。携帯3キャリアとも使っているが読み取れないことはない。
ウェブコンテンツビューア
Yahooケイタイ向け公式のエミレータ。ユーザID(端末ID)とユーザエージェントUseragentを設定し送信することができる。
iモードHTMLシミュレータII
ユーザエージェントUseragentが自由に指定ができない。ただし、プロキシー先の設定ができるのでProxomitronというソフトを使用することでユーザエージェントすることができる。
Openwave® SDK 6.2K
AU用公式エミレータ
Firefox のuseragentswitcher
ユーザエージェントUseragentが自由に指定できる。携帯コンテンツ固有のHTMLタグでうまく表示できないことがある。
QR コード作成ツール。URLを携帯に送るときに使用。携帯3キャリアとも使っているが読み取れないことはない。
ウェブコンテンツビューア
Yahooケイタイ向け公式のエミレータ。ユーザID(端末ID)とユーザエージェントUseragentを設定し送信することができる。
iモードHTMLシミュレータII
ユーザエージェントUseragentが自由に指定ができない。ただし、プロキシー先の設定ができるのでProxomitronというソフトを使用することでユーザエージェントすることができる。
Openwave® SDK 6.2K
AU用公式エミレータ
Firefox のuseragentswitcher
ユーザエージェントUseragentが自由に指定できる。携帯コンテンツ固有のHTMLタグでうまく表示できないことがある。
Friday, January 26, 2007
Perl オブジェクト指向 Class 継承
HogeA.pm
package HogeA;
use strict;
sub new {
my $class = shift;
my $self = bless {}, $class;
return $self;
}
sub hoge {
my $self = shift;
print "Hoge::hoge\n";
}
1;
HogeB.pm
package HogeB;
use strict;
use base qw(HogeA);
sub new {
my $class = shift;
my $self = bless {}, $class;
return $self;
}
sub hogehoge{
print "hogehoge\n";
}
1;
---sample.pl
use strict;
use HogeB;
my $b = HogeB->new();
$b->hoge;
ISAも使えます。
package HogeA;
use strict;
sub new {
my $class = shift;
my $self = bless {}, $class;
return $self;
}
sub hoge {
my $self = shift;
print "Hoge::hoge\n";
}
1;
HogeB.pm
package HogeB;
use strict;
use base qw(HogeA);
sub new {
my $class = shift;
my $self = bless {}, $class;
return $self;
}
sub hogehoge{
print "hogehoge\n";
}
1;
---sample.pl
use strict;
use HogeB;
my $b = HogeB->new();
$b->hoge;
ISAも使えます。
Wednesday, January 24, 2007
Data::Pageのサンプル Template Toolkit
1..2 3 4 5 6 7 8 9 10 11 12 ..28
のようなページ支援の例
[% FOREACH num = [pager.first_page .. pager.last_page] %]
[% IF pager.current_page - pager.first_page > 5 && num == pager.first_page %]
<a href="hoge?page=[% num %]">[% num %]</a>..
[% END %]
[% IF num <= (pager.current_page + 5 ) && num >= (pager.current_page - 5 ) %]
[% IF num == pager.current_page %]<b>[% num %]</b>
[% ELSE %]<a href="hoge?page=[% num %]">[% num %]</a>[% END %]
[% END %]
[% IF (pager.last_page - pager.current_page) > 5 && num == pager.last_page %]
..<a href=hoge?page=[% num %]">[% num %]</a>
[% END %]
[% END %]
のようなページ支援の例
[% FOREACH num = [pager.first_page .. pager.last_page] %]
[% IF pager.current_page - pager.first_page > 5 && num == pager.first_page %]
<a href="hoge?page=[% num %]">[% num %]</a>..
[% END %]
[% IF num <= (pager.current_page + 5 ) && num >= (pager.current_page - 5 ) %]
[% IF num == pager.current_page %]<b>[% num %]</b>
[% ELSE %]<a href="hoge?page=[% num %]">[% num %]</a>[% END %]
[% END %]
[% IF (pager.last_page - pager.current_page) > 5 && num == pager.last_page %]
..<a href=hoge?page=[% num %]">[% num %]</a>
[% END %]
[% END %]
Thursday, January 18, 2007
Template::Plugin::FillInFormの使い方
--temp.html--
[% USE FillInForm %]
[% FILTER fillinform fdat => fdat1 %]
<form action="http://www.blogger.com/aaa" method="post">
<input type="text" name="hoge">
</form>
[% END %]
--- perl ----
#!/usr/local/bin/perl
use strict;
use Template;
my %values = (
hoge => 'hoge1',
);
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'temp.html',
{ fdat1 =>\%values,
},
) or print $template->error;
print $output;
--- 実行結果
[% USE FillInForm %]
[% FILTER fillinform fdat => fdat1 %]
<form action="http://www.blogger.com/aaa" method="post">
<input type="text" name="hoge">
</form>
[% END %]
--- perl ----
#!/usr/local/bin/perl
use strict;
use Template;
my %values = (
hoge => 'hoge1',
);
my $output;
my $template = Template->new({
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'temp.html',
{ fdat1 =>\%values,
},
) or print $template->error;
print $output;
--- 実行結果
Template-Toolkit
サンプル
任意でconfigの指定ができる。
PRE_PROCESS ヘッダファイルの指定
POST_PROCESS フッタファイルの指定
INCLUDE_PATH テンプレートファイルの置く場所の指定
OUTPUT 出力の制御(詳細は後のURLを参照)
TRIM 改行などの削除(詳細は後のURLに書かれたBLOCKとINCLUDEの説明を参照)
例
my $output;
my $template = Template->new({
PRE_PROCESS => 'header.html',
POST_PROCESS => 'footer.html',
INCLUDE_PATH => '/home/hoge/temp',
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'sample.html',
);
print $output;
http://www.template-toolkit.org/docs/plain/Manual/Config.html
任意でconfigの指定ができる。
PRE_PROCESS ヘッダファイルの指定
POST_PROCESS フッタファイルの指定
INCLUDE_PATH テンプレートファイルの置く場所の指定
OUTPUT 出力の制御(詳細は後のURLを参照)
TRIM 改行などの削除(詳細は後のURLに書かれたBLOCKとINCLUDEの説明を参照)
例
my $output;
my $template = Template->new({
PRE_PROCESS => 'header.html',
POST_PROCESS => 'footer.html',
INCLUDE_PATH => '/home/hoge/temp',
OUTPUT => \$output,
TRIM =>1,
});
$template->process(
'sample.html',
);
print $output;
http://www.template-toolkit.org/docs/plain/Manual/Config.html
Subscribe to:
Posts (Atom)