ZARU(ざる)のWeb系ブログですー。プログラミング&デザイン関係のTipsとか色々と。

CakePHPをPHP5.3で使うとエラーになる時の対処法

PHP5.3だとエラーが色々と…

PHP5.1からPHP5.3へアップデートをすると、CakePHP1.2においてエラーが出てしまったので、その場合の対処法。

Deprecatedエラーが出る

Deprecated: Assigning the return value of new by reference is deprecated in云々なエラー。

  • cake/libs/configure.php (295行目付近)
if (isset($config['debug'])) {
	if ($_this->debug) {
		error_reporting(E_ALL);
		//下記追加
		if (error_reporting() > 6143) {
			error_reporting(E_ALL & ~E_DEPRECATED);
		}
		//ここまで

strtotime()でタイムゾーンのエラーが出る

Warning: strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system’s timezone settings.というエラー。

  • /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
date.timezone =Asia/Tokyo

と、タイムゾーンを設定してやれば大丈夫。

CentOS4.5にPHP5.3をyumを使ってインストールする

古いCentOSに新しいPHPをインストールするには…?

CentOS4.5という微妙に古いバージョンを使っているので、yumでアプリケーションを管理していると最新のものからは程遠いバージョンを使うことが多い。けど、PHPは5.3が使いたい!でもソースからインストールすると面倒くさい。というわけで、yumリポジトリを追加してインストールしよう。

EPEL : yumリポジトリ追加

EPELというRHEL, Centos 向けの拡張パッケージリポジトリがあるので、こいつを追加する。

wget http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-9.noarch.rpm
wget http://rpms.famillecollet.com/el4.i386/remi-release-4-5.el4.remi.noarch.rpm
rpm -Uvh remi-release-4*.rpm epel-release-4*.rpm
cd /etc/yum.repos.d
wget http://rpms.famillecollet.com/remi-enterprise.repo
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

PHPのバージョンをチェック

先ほど追加したリポジトリを有効にしてリストをチェックする

yum --enablerepo=remi list php

php.i386 5.3.2-1.el4.remi

というわけで、無事に5.3が見つかる。

yum --enablerepo=remi update php

これで無事完了。ただし、PHP5.3にアップデートすることで、既存のアプリケーションがエラーになって動かないことがあるので要注意。

WindowsのApache+OpenSSLで、CSRを作成する時に

WindowsのApache+OpenSSLで、CSRを作成しようの回

ちょっとした案件で、Windows2000Serverで稼働しているApache+OpenSSLなサーバでSSLの更新作業をする必要があり、まずはCSRを作らねば、ということでOpenSSLのある場所までコマンドプロンプトで移動。

C:¥>openssl.exe req -new > server.csr

とかやると、なぜか

Unable to load config info from /usr/local/ssl/openssl.cnf

とエラーで怒られる。Windowsなのに、そのパス指示はなんだよ!と思いつつ、仕方がないのでコマンドのヘルプを見たら、openssl.cnfのファイル場所を指定できるらししい。

C:¥>openssl.exe req -new -config openssl.cnf > server.csr

余談

んじゃ、openssl.cnfはどこにあるんだろう?と思って検索してみたら…あれ?なんか出てこない…。なんでなんで?と思って調べていたら、どうやらWindowsでは拡張子「cnf」は短縮ダイヤルのアイコンで表示されるらしい。な、なんだってー?!知らなかったよ。MySQLの設定ファイル「my.cnf」も同様に表示されるっぽい。

しかし、拡張子をすべて表示するっていう設定に指定たんだけどなぁ。エクスプローラ上では「openssl」ってファイル名になっているんだよね。秀丸で開くと「openssl.cnf」ってファイル名だけど。まぁ、いいや。

Ruby プログラミング練習問題3「素数判定」

第3回目のRubyプログラミング練習問題。今回は素数かどうかを調べる。

プログラミング練習問題3「素数判定」

与えられた数が素数かどうか調べる
あるいは与えられた数までの素数を列挙する
処理にかかった時間を計測しておくと、自分の技術向上に伴って処理時間が短くなっていくのがよくわかる

素数とは

素数自体について調べる余地はないと思っていたけど、念のためWikipediaさまを参照してみると1とその数自身以外に正の約数がない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のこと。ということだそうで。

とりあえずの回答

じゃあ、指定した数字が素数かどうかを調べるのを書いてみることにする。ぱっと思いついたのはやはり、2から指定した数まで全て列挙して割り算をしていくという力業。というかこれしか思いつかない。ならば簡単…ということで。

#!/usr/bin/ruby

num = ARGV[0]
flag = 0
2.upto(num.to_i - 1) do |i|
    over = num.to_i % i
    puts num + ' / ' + i.to_s + 'の余りは' + over.to_s + "\n"
    if over == 0
        flag = 1
    end
end

if flag == 0
    puts num + 'は素数です'
else
    puts num + 'は素数ではありません'
end

実行結果
$./3_1.rb 5
5 / 2の余りは1
5 / 3の余りは2
5 / 4の余りは1
5は素数です

そもそも素数の判定方法がきちんと考えられていない…気もする。うーん。

まとめサイトに掲載されていた解答例

#!/usr/bin/ruby

require 'mathn.rb'

class PrimePredicater
  def initialize
    @prime = Prime.new
    @cache = []
  end

  def prime?(x)
    extend_cache x if @cache.empty? || x > @cache.last
    @cache.include? x
  end

private
  def extend_cache(lim)
    @prime.each do |x|
      break if x > lim
      @cache.push x
    end
  end
end

#使用例
ppred = PrimePredicater.new
[1, 10, 2, 5, 7].each do |x|
  p ppred.prime?(x)
end

う、うーん?
先生。まったく意味がわかりません。構文自体が謎…。ここら辺はちょっと構文調べてこよう。とりあえずまた次回。

現時点でWebデザインの配色に使える良い感じツール

デザインでなにが難しいって、やっぱり配色なわけで。レイアウトやディティールが良くても配色次第でオシャレになったりダサくなったり。しかし、配色と一口に言っても奥が深すぎて、軟弱な僕は配色ツールに頼るしかないわけで。

Color Scheme Designer 3

ちょっと前まで、前バージョンのColor Scheme Designer 2を使っていたけど新しいバージョンが素晴らしい。使用方法に慣れるまで少し時間がかかるかもしれないけど、これを使うと安定した配色に。ただ、カスタマイズがかなりできるので色々といじった結果、めちゃくちゃな配色になりがちなので、ほどほどに。

Adobeの配色サイトkulerとかも利用していたのだけど、あれはパラパラーっと見てインスピレーションを得るだけの方が良いのかもしれない。で、思いついた配色をColorSchemeDesigner3で試してみると。

それと、メインの色ではなくて地味な部分で使いたい大人しい色は和色を使っている。

目に優しくメインを壊さずなテイストなので使いやすい。

iMacのモニタが眩しすぎるので暗くしてみた

なんかここ最近、すごく目がつかれるなーというか、頭が痛い。原因は体調不良とか仕事したくないーとか色々あるけれど、とりあえずiMacのモニタが眩しくて見ていられないので、暗くしてみたよ。

デザインもやっているくせに、僕はかなり暗いモニタが好きでCRTの時もかなり暗くして使っていた。けど、iMacは最低の明るさに設定しても全然明るい!なんだよ、こんちくちょう。ということで、モニタ明るさ調整ソフトを導入してみた。

ユニバーサルバイナリで、10.5以降対応かな?僕のiMac24インチ 10.6でもきちんと動作した。これでめっちゃ暗くして使ってる。環境光と違いすぎると逆に目に負担をかけると思うので、そこら辺は調整していこう。

Flashの上に画像やテキスト、DIVを重ねて表示する方法

Flashの上に画像やテキストを重ねて表示できないかなーと思って試してみたら普通にできたのでまとめ。とりあえずサンプルを見るのがわかりやすい。

サンプル


HTMLテキストです。

重ねて表示する方法:HTML + CSS

大事なのはFlashを描画する<object>タグの部分。

<param name="wmode" value="transparent" />
<embed wmode="transparent" ... />

この2つをしているすればIE6〜/Fx3〜/Safari3〜/Chromeで、無事にDIVによるテキストの重ね合わせ・背景色の重ね合わせ、透過PNGの重ね合わせを表示できた。透過PNGに関してはIE6対策にJavaScriptのライブラリを導入している。

今回初めてこの透過ライブラリ使ってみたけど、結構良いかもしれない。

#test_flash{
    position:relative;
}
#test_hoge{
    position:absolute;
    top:0px;
    left:100px;
    padding:10px;
    width:300px;
    color:#00f;
}
#test_hoge span{
    background-color:#eeeeee;
}
<script src="/DD_belatedPNG.js"></script>
<script>
  DD_belatedPNG.fix('.png_bg');<!-- IE6の透過PNG対策 -->
</script>
<![endif]-->
<div id="flash">
	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="test" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="wmode" value="transparent" />
	<param name="movie" value="http://zaru.tofu-kun.org/wp-content/uploads/2010/02/test.swf" />
	<param name="quality" value="high" />
	<param name="bgcolor" value="#ffffff" />
	<embed wmode="transparent" src="http://zaru.tofu-kun.org/wp-content/uploads/2010/02/test.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="test" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_jp" />
	</object>
	<div id="hoge">
	<p>HTMLテキストです。</p>
	<img src="http://zaru.tofu-kun.org/wp-content/uploads/2010/02/img.png" />
	</div>
</div>

Ruby プログラミング練習問題2「FizzBuzz問題」

第2回目のRubyプログラミング練習問題。今回は有名な「FizzBuzz問題」。

プログラミング練習問題2「FizzBuzz」

ルールは以下の通り
1から順番に数を表示する
その数が3で割り切れるなら”Fizz”、5で割り切れるなら”Buzz”、両方で割り切れるなら”FizzBuzz”と表示する
要するに”1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz ・・・”と出力される

回答

#!/usr/bin/ruby

1.upto(100) do |i|
    if  i % 3 == 0 && i % 5 == 0
        puts 'FizzBuzz '
    elsif i % 3 == 0
        puts 'Fizz '
    elsif i % 5 == 0
        puts 'Buzz '
    else
        puts i.to_s + " "
    end
end

実行結果
$./2_1.rb
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
...

Ruby初心者な僕はこんな単純な条件分岐…。うーん。もっとスマートにできるはず。

解答例

#!/usr/bin/ruby

def fizz_buzz(n)
  ret = "#{["Fizz"][n % 3]}#{["Buzz"][n % 5]}"
  ret.empty? ? n.to_s : ret
end

puts (1..100).collect{|n| fizz_buzz n }

上記ページに載っている解答例はこんな感じ。

ret = "#{["Fizz"][n % 3]}#{["Buzz"][n % 5]}"

これなんだよ!って、調べてみたら配列の省略形?っぽいもの。つまり、これを書きなおすと

a = ["Fizz"]
b = ["Buzz"]
ret = "#{a[n % 3]}#{b[n % 5]}"

ってこと。
Rubyってこういう記述が普通というか一般的なのかな?教えてエロい人!

Ruby プログラミング練習問題1「ループ練習」

というわけで、Rubyを使ってプログラミング練習問題をこなしていきたいと思う。練習問題は、検索してたら出てきたこれを使う。不慣れなRubyなので色々と調べて試行錯誤しながらやっていこう。

プログラミング練習問題1「ループ練習」

Hello World![改行]を5回表示させてください。

print(或いはprintf,cout等)を5回コピーすれば当然可能ですが、
ループ構文(for,while等)を利用して、print等は1回の使用にとどめてみてください。

可能ならコマンドラインから入力を受け取って、n回表示するように改造してください。
何回目のHello World!かも表示してみてください。

回答1

#!/usr/bin/ruby
5.times do
    puts "Hello World!\n"
end
#!/usr/bin/ruby
for i in 1..5
    puts "Hello World!\n"
end

実行結果
$./1.rb
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

for文とかは、あまり使わないだろうけど。一応イテレータで。

回答2

#!/usr/bin/ruby
max = ARGV[0]
1.upto(max.to_i) do |i|
        puts "Hello World! " + i.to_s + "\n"
end
#!/usr/bin/ruby
max = ARGV[0]
i=1
while i<=max.to_i
    puts "Hello World! " + i.to_s + "\n"
    i = i + 1
end

実行結果
$./1.rb 10
Hello World! 1
Hello World! 2
Hello World! 3
Hello World! 4
Hello World! 5
Hello World! 6
Hello World! 7
Hello World! 8
Hello World! 9
Hello World! 10

コマンドラインからの引数は、「ARGV」に格納される。受け取ると、文字列になってしまうので「to_i」を使って数値に。

とりあえず最初はこんなものかな。

WordPressにFlash動画を表示させるプラグイン

WordPressのブログに動画を載せたい!と思って色々と調べてみると、やはりFLV/F4V形式のFlash動画で表示するのがベターと言うことらしい。しかし、デフォルトのWordPressには動画をアップロードする機能はあっても、表示する機能はない。ので、プラグインで対応してみた。

使い方

使い方は、普通にプラグインフォルダに放り込んで、有効化するだけ。

動画の表示方法は、WordPressの動画アップロード機能を使って、FLVファイルをアップ。下記フォーマットでURLをコピペすればOK。

[flashvideo file=http://example.com/xxx.flv /]

サンプル

Get the Flash Player to see this content.

問題は、動画ファイルをFLV形式に変換しなきゃいけないっていう点かなー。YouTubeとかにアップロードして、それをブログに表示するのがやっぱり一番簡単なのかも。