院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

2007-12-16 定期的にWebアクセスを実行させる

cronを定期的に処理を実行させることはよくあります。PHPの場合、

sudo -u user_name /usr/bin/php -f /var/www/html/hage/hoge.php

で(PHPの実行ファイルが/usr/bin/phpにある場合)ユーザ名:user_nameで、/var/www/html/hage/hoge.phpのphpファイルをPHPで実行させることができます。

同一PC内ならそれでもいいのですが、Cron機能が使えないサーバーのためWebアクセスをトリガーにしてで定型処理を行う必要があったためその方法についてです。


  続きを読む

コメント(0)

2007-11-18 寂しがり屋ライセンス

複雑で重くなった JavaScript を超超ちょ~~~高速化する方法。 - IT戦記にあるような寂しがり屋ライセンスっていいですね。オープンソースのライセンスとして、「利用するのはいいですよ。でも僕のブログにコメントしてね。」ってやつです。

オープンソースってことで人のソースを自分のソースに組み込むのは簡単になりましたが、ただコピペするだけでなくなにか一つ「使わせていただきます」「ありがとうございます」と一言コメントがあるだけで作者は次への制作意欲が沸くと思う。実際私も自分で書いたソースコードを公開しているが(「見られる」ということによって正しく理解しないといけないというプレッシャーを自分にかける意味でも)、公開したソースコードに対するコメントがあれば、とてもうれしいものである。

寂しがり屋ライセンス、そのうち当サイトでも使いたいです。

コメント(0)

2007-11-04 For lazy PHP developers. 面倒くさがりなPHP開発者へ

6 PHP coding tips to write less code | Alex @ Netにてlazy developerへPHPのコードを短く書くためのTipsが掲載されていましたので簡単に紹介しておきます。

1. Use || (or) and && (and) operations instead of if.(if文の代わりにand・orを使う)

  1. $status = fwrite($h, 'some text');
  2. if (!$status) {
  3.     log('Writing failed');
  4. }

  1. fwrite($h, 'some text') or log('Writing failed');

に。DRYな感じに出来ます。これは知っている人も多いのではないでしょうか?

A and B→Aがtrue、ならばB

A or B→AがtrueでなければB(つまりAがfalseならB)

確かに以前こんなソースを見たことありますが、実際使う際は書き慣れた書き方になってしまう気もします。


2. Use ternary operator.(一時的なオペレータを使う)はよくやる手法ですね。

  1. if ($age < 16) {
  2.     $message = 'Welcome!';
  3. } else {
  4.   $message = 'You are too old!';
  5. }

  1. $message = 'You are too old!';
  2. if ($age < 16) {
  3.     $message = 'Welcome!';
  4. }

にします。

if文を使う場合に

  1. if($age < 16){
  2.         return false;
  3. } else {
  4.         return true;
  5. }

  1. if($age < 16){
  2.         return false;
  3. }
  4. return true;

とするのはバリデーションがらみの箇所でよく使いますね。


3. Use for instead of while.(while文の代わりにfor文を使う)

  1. $i = 0;
  2. while ($i < 100) {
  3.   $source[] = $target[$i];
  4.   $i += 2;
  5. }

  1. for ($i = 0; $i < 100; $source[] = $target[$i+=2]);

にしています。

ただ、for文の3番目の評価式に数値演算以外($i+=2など)を入れるのは個人的には嫌いだったりします。私の場合上の例でしたら

  1. for ($i = 0; $i < 100; $i+=2)$source[] = $target[$i];

のようにしています(サンプルより2文字多くはなります)。


4. In some cases PHP requires you to create a variable. Some examples you can find in my PHP fluent API tips article. Another example is getting array element when array is returned by the function. (意訳:PHPはjQueryなどのようにメソッドチェーンが出来ないけど汎用関数を使えば出来るよ)

  1. $ext = pathinfo('file.png')['extension'];

  1. $ext = a(pathinfo('file.png'), 'extension');
  2. // returns reference to the created object
  3. function &r($v) { return $v; }
  4. // returns array offset
  5. function &a(&$a, $i) { return $a[$i]; }

で書くことができます(関数aと関数rを定義)。使いどころによってはちょっと便利かもですね。

ってかpathifo($file_name)で連想配列に帰ってくるんですねぇ。今まで

  1. function get_ext($file_name) {
  2.         return echo substr($file_name, strrpos($file_name,'.'));
  3.         //拡張子にドットを含みたくない場合は
  4.         //strrpos($file_name,'.') + 1を使用
  5. }

などの関数を書いていました。。

コメント(0)

2007-10-29 過去に作成したプログラムを今作るとしたら

1年以上前に作った作品にRSSリーダーがある。

セキュリティの問題が克服できれば公開しようと思っているのだがなかなか修正できないでいる。

今となっては普通だが、当時はAjaxの技術がまだ目新しく、CakePHPで1ヶ月以上かけて組んだのだが、おそらく今なら1週間ちょっとで作成できるであろう。


  続きを読む

コメント(0)

2007-10-09 jQuery

JavaScriptライブラリjQueryを用いた15パズルがありました。

http://www.alexatnet.com/node/68

jQuery、いいですね。prototype.jsがやはりデファクトですが、jQueryなどのような名前空間を汚さない配慮はいいですね。OOPを意識した作りになっているのでOOPに慣れている人は直感で入りやすいかもです。


  続きを読む

コメント(0)

2007-09-14 mixiの生みの親“バタラ氏”が語るMySQLの意外な利用法

TechTargetジャパン:mixiの生みの親“バタラ氏”が語るMySQLの意外な利用法

サービス開始から2ヶ月でユーザ数1万人を達成し、この3年で1110万人にも達したmixiのサーバー構成はLAMPで、安価なPCを1000台連ねる分散構成だそうです。


  続きを読む

コメント(0)

2007-07-30 Google AJAX Feed API

今更なんですが、使ってみると便利ですね・・・

何が出来るかというと、

  • 簡単にクロスドメインのFeed(RSSやAtom)をJSON・XMLに変換してくれる
  • 試してないけどFeed Discovery機能によってURLからFeedを抜き出してくれる
  • Feed Controlといって、現在と記事の投稿時間の差を勝手に計算してくれたり、Feedをマージしてくれる(?)→http://www.google.com/uds/samples/feedapidocs/feedcontrol.html

元のサンプル(http://code.google.com/apis/ajaxfeeds/signup.html)だと、文字列だけしか表示してくれないんで、リンクになるよう簡単な変更をしてみました。


変更したサンプルにこのブログのRSSを投げてみると

となりました。。

Google先生、便利ですねぇ。


  続きを読む

コメント(0)

2007-06-30 PHPの三項演算子

  1. <?php
  2. $a = true ? 0 : true ? 1 : 2;
  3. echo $a;
  4. ?>

この出力値は?


  続きを読む

コメント(0)

2007-06-30 Fizz-Buzz問題(Code Golfの場合 - その後追記)

Fizz-Buzz問題というものがあるそうです(http://ja.wikipedia.org/wiki/Fizz-Buzz%E5%95%8F%E9%A1%8C)。

1~100までの数値をプリントして、3の倍数はFizz、5の倍数はBuzz、3と5の倍数はFizzBuzzと出力させる問題だそうです。

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htmを見たのですが、「自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある」とあります。実際私はphpで上記の問題を解いてみたのですが2分弱で書けました。

2分弱というのはプログラムソースを書く時間なのですが、「ちょっと考えながら解を記述する時間」に等しいと思います。

上記の程度の問題でしたら私の中での「一般的なプログラマ」なら問題を見た瞬間に解は頭の中に存在すると思います。解を記述する際にfor文は1からだからphpなら$i=1から・・・などと考える若干のタイムラグが存在するかもしれませんがSystax Errorが出たとしても自称上級プログラマが10分以上かかるとは到底思えません。。


  続きを読む

コメント(4)

2007-06-30 strip_tagsのXSS脆弱性とその対処法の1例

みなさんご存知だと思うんですが、phpの「strip_tags」関数で数種類のタグのみ許可する場合はXSS脆弱性が存在します。

どういうことかと簡単に説明しておきますと、

  1. function sanitize($str){
  2.   $str = strip_tags($str,'<strong>');
  3.   return $str;
  4. }

というsanitize関数を使えばstrongタグ以外は除去でき安全だと思いきや

  1. echo sanitize('<strong onmouseover="alert()">XSS</strong>');

で簡単にXSSが行われてしまいます。

じゃぁhtmlspecialcharsを用いてタグ全部をサニタイズすればいい!かと思いきやシステムによっては特定のタグのみ許可して危険なタグは除去。。といった場合も多いかと思います。


  続きを読む

コメント(2)