明滅するプログラマの思索

WEBエンジニアとして勤務している一介の男が、日々気づいたことをまとめるブログです

jQuery の animate で背景色をアニメーションする

jQuery の animate メソッドは、CSSプロパティを指定することで徐々に変化するアニメーションを実現することができます。
ただ、color や background-color などの数値ではない値を持つプロパティの場合、アニメーションさせることができません。
jQueryjquery-color というプラグインを用意しており、これをロードすることで color / background-color などもアニメーションさせることができるようになりますが、ほかにも多くのメソッドを含んでいます。
単純にアニメーションさせることがけが目的なのであれば、以下のコードを埋めてやるだけで使えるようになります。

続きを読む

次の月曜日、前の日曜日を計算する方法

備忘録です。
PHPで次の月曜日や前の日曜日を計算する方法をまとめます。

次の月曜日

  • 現在が日曜日なら翌日
  • 現在が月曜日なら当日
  • 現在が火曜日~土曜日なら翌週の月曜日
if (date('w') == 1) {
  // 今日が月曜日
  $next_monday = date('Y/m/d');
} else  {
  $next_monday = date('Y/m/d', strtotime("next Monday"));
}
続きを読む

swiper.js でスライド内に overflow を置いた場合スライド中前面に出てしまう問題

swiper.jsという Javascript ライブラリがあります。

Swiper - Most Modern Mobile Touch Slider

WEBサイト中にスライドを埋め込めるライブラリは数多くありますが、swiper.js はオプションが非常に多く、柔軟な実装が可能なため、気に入って使っています。
これを使ってハマったことを今回まとめてみます。

続きを読む

PHPでゲームのフラグを管理する1つの手法

ゲーム開発をすると、様々なフラグを管理しなくてはいけない場面が出てきます。
特定のイベントをクリアしているかどうか、イベントアイテムを持っているかどうか、特定の操作を行っているか…、さまざまな条件を用意し、スイッチを切り替えることでダイナミックな進行を表現できるようになるのです。
フラグの管理はどのようにするのが良いでしょうか。
RDBを利用して、正規化されたフラグを1つ1つ丁寧に格納するのも方法ではあるでしょう。
ただ、ゲームがアップデートを繰り返すような場合、当初に想定したフラグ数ではとても足りなくなる、そんな場合も考えられます。
その分だけDBのカラム数を増やしても良いですが、限界はあります。
今回は、1つの文字列を使ってフラグを管理する方法について、自分なりの解を以下にまとめてみました。

導入環境

ソフトウェア バージョン
PHP 5.6

※ PDO を利用しています。

続きを読む

Console CommandLine を使って汎用的なコマンドを作る

PHPPEAR にはConsole_CommandLineというライブラリが公開されています。
Console_CommandLinePHPコマンドライン型のアプリケーションを作成するためのライブラリで、引数やオプションを手軽に利用したり、出力時の強調機能、ヘルプ出力機能などを含んでいます。
今回は、Console_CommandLineを利用して、引数により処理を切り替えられる汎用的なコマンドの実装を行ってみます。

目標としては、以下のような状況を考えます。

  • コマンド用スクリプトを用意し、1つ目の引数に実際に行いたい処理を指定します。
  • 実際の処理は、引数ごとに用意された別々のスクリプトが受け持ちます。
  • 2つ目以降の引数・オプションは、対応する処理スクリプトで任意に指定できるようにします。

コマンド用スクリプト php_command.php を用意します。
引数には実際に実行する処理を指定します。
以下のような感じです。

php php_command.php insert_table "Hello" -m test

ここで、実際に実行する処理 insert_table は別スクリプト command_insert_table.php が担当することにします。

導入環境

ソフトウェア バージョン
PHP 5.6

PEAR のライブラリ Console_CommandLine を利用します。

続きを読む

IP制限をかけた VirtualHost に Let's Encrypt の SSL証明書を設定する

Let's Encrypt の SSL証明書を使用するには、サーバ側の DocumentRoot に Let's Encrypt のサーバからのリクエストを許可する必要があります。
Let's Encrypt が証明書を発行する処理の中で、DocumentRoot 直下に.well-knownというディレクトリが作られ、リモートでアクセスすることで対象ドメインが実行サーバに向いていることを確認するのです。

このときIP制限その他のアクセス制限をかけている場合、Let's Encrypt のサーバのアクセスも遮断してしまうため、証明書の発行(自動更新も)が失敗してしまいます。
今回は、この回避方法について記述します。
といっても、難しいことはありません。

続きを読む

コマンドラインでPHPを実行した際の error_log() の挙動

PHPにはerror_log()という関数があります。
error_log() は、エラー時のメッセージを明示的に出力するための関数です。

error_log("エラーが発生しました");

上記のように使用します。
error_log() コール時、WEBサーバ経由でPHPを実行していれば、WEBサーバに設定したエラーログファイルに追記されます。
では、コマンドラインからPHPを実行した場合、error_log() はどこにエラーメッセージを出力するでしょうか。

続きを読む