WEB/システム/IT技術ブログ

5年ほど前に以下の記事を書きました。
jQueryプラグイン「jquery.cookie.js」でお手軽にクッキーを操作する
久しぶりに公式サイトをのぞいてみるとjQueryを使わない、JavaScriptのプラグインとして開発が移っていたようです。

js-cookie/js-cookie: A simple, lightweight JavaScript API for handling browser cookies

改めて、便利な使い方を確認したいと思います。

導入方法

導入方法はとても簡単です。
上記サイトから「js.cookie.js」をダウンロードして読み込みます。

<script type="text/javascript" src="/js/js.cookie.js"></script>

cookieの操作だけが目的の場合に、jQueryを読み込まなくてもよいので容量が軽くて済みます。また、jQueryのバージョンなどベースライブラリの依存も考慮する必要もなくなりました。

PHPの関数「unserialize」でエラーが発生する場合の対処方法です。

久しぶりにドツボにはまりました。。。
「serialize」で処理されたデータについて「unserialize」で元に戻そうとしたのですが、どうしてもエラーになってしまいます。

unserialize($data);
unserialize(): Error at offset xxx of xxx bytes

私のケースでは、FuelPHPでユーザ管理のモデルを作成し、プロフィールフィールドにデータを格納したときのお話です。
拡張性を持たせたテーブルのプロフィールフィールドは、1つのカラムに配列をシリアライズしたデータを格納します。
そのデータをSQLで取り出し、「unserialize」した時にエラーになってしまうのです。
ちなみに、現象が発生した環境は以下の通りです。

  • Windows 7 64bit Professional
  • Apache 2.4
  • PHP 5.4
  • FuelPHP 1.7
  • MySQL 5.5

ネットで調べてみると、似たような現象がちらほら見受けられます。

FuelPHPのValidationクラスを使ってフォームの項目チェックを実装します

例えば、フォームで入力された「ユーザ名」の入力必須をチェックします。

ユーザ名:<input type="text" name="username" value="">

「投稿する」などsubmitボタン押下時に、コントローラ内でValidationを実行します。
上記のHTMLからポストされた「ユーザ名」の必須チェックを行う場合、以下のように記述します。

$val = Validation::forge();
$val->add('username', 'ユーザ名')
	->add_rule('required');
if($val->run()){
	// チェックOK
}else{
	// 入力エラー
}

関数「add」の第1引数に要素名、第2引数に要素のラベルを設定します。ラベルはエラーメッセージの表示の際などに利用されます。
「add_rule」に「required」を設定することで必須チェックをします。
「run」でValidationを実行し、入力内容に問題がなければtrueが返されます。この判定で、DBへのデータの入出力や、どのviewで画面を表示するかなどの処理を分岐させることができます。

Windows 8.1(Windows 10)のノートPCがスリープ状態から勝手に復帰する場合の対策方法です。

ウルトラブックという言葉も聞かなくなりましたが、Windows 8.1からタブレット意識したOSとなり、PCを使わない間は電源を切らず、スリープモードにするだけで大丈夫という設計になりました。
私もWindows 8.1のノートPCを使うようになり、特に再起動する必要がない場合を除き、日常はディスプレイを閉じてスリープ状態のままほったらかしにして使っています。

そんなある日、鞄の中に入れていたPCがいつの間にかスリープから復帰し、空気のこもった中でファンがフル回転している!
鞄の中がかなり熱くなっており、気づくのが遅れればそのまま壊れてしまっていたかもしれません。

なぜ勝手にスリープから復帰したのか?

調べてみると、いくつかスリープから自動復帰する機能があり、その中の一つが原因でした。
そこで、それぞれのスリープ自動復帰機能の解除方法です。

ヘッダ、フッタやサイドメニューなど共通部品をテンプレート化するため、FuelPHPのTemplateコントローラを導入してみます。

CMSでサイトを構築する場合に、各ページのヘッダ、フッタなどの共通部分については一元管理したいですよね。
FuelPHPでその方法を探していました。
View部分の機能で実現すると思い込み、ドキュメントを読んでいたのですが、出てきたキーワードが「ビューの入れ子」。
その名と通り、Viewの中でさらにViewを読み込むということですが、何だかスマートじゃない。。。

その他をいろいろと調べていたら「Templateコントローラ」という機能を見つけました。
FuelPHPではコントローラでレイアウトのテンプレートを定義するのですね。

さて、以下、導入方法です。
ちなみに今回確認したのは「FuelPHP 1.7.3」です

Ubuntu 14.04にphpMyAdminをインストールするメモです。

前提として以下の環境が整っているものとします。
Apache 2.4.7
PHP 5.5.9
MySQL 5.5.46

インストール手順

インストールには以下のコマンドを実行します

sudo apt-get install phpmyadmin

途中、以下のメッセージが表示されることがあります

phpmyadmin を設定しています
phpMyAdmin を動作させるために自動再設定を行うwebサーバを選んでください。
自動再設定するwebサーバ:

ある日突然、PHPの日付関数「date()」と「strtotime()」からワーニングメッセージが表示されるようになりました。
さくらレンタルサーバ上で個人で運用しているCMSを長らく放置していた私が悪いのですが。。

特にPHPの設定を変更したわけでもなく、気が付いたらそうなっていたわけで、明確な原因は不明です。
恐らくさくらレンタルサーバ側でセキュリティアップデートなどがあったのでしょう。
詳細は後ほど調べてみます。

画像サイズを変更せずにCSSのborderで画像の枠を装飾するテクニックです。

リンク画像にマウスオーバーでborderをつけることがよくありますが、
リンクエリアのサイズを変えずに、かつ、画像サイズを変えずに、となると少しテクニックが必要です。

例えば以下のような例です。
マウスオーバーで10pxの太さの赤いborderを表示させていますが、カクっとサイズが変わる感じが嫌ですね。

てんとう虫
※分かりやすくするために極端な太さを例にしています。

単純にaタグにボーダーを追加してしまうと、その分だけリンクエリアが広がってしまいます。
てんとう虫

そこで、以下のようにCSSを用意してあげれば、borderを追加してもリンクエリアのサイズは変わりません。

Ubuntu 14.04にlamp環境(Apache + PHP + MySQL)を構築してみます

ちなみに、現時点での各バージョンは以下のとおりです

Apache 2.4.7
PHP 5.5.9
MySQL 5.5.46

Apacheをインストール

まず初めにApacheをインストールします

sudo apt-get update
sudo apt-get install apache2 

完了したら「http://localhost」などでアクセスしてみて、インストールが成功していることを確認します。

Googleマップストリートビューで表示可能な目的地近くの座標を取得する方法です。

ストリートビューを使ったことのある人はご存知と思いますが、ヒト型のマーカーをストリート上のブルーのラインの上にドラッグしてストリートビューを表示させます。
ストリートビューは全ての座標で表示可能ではありません。ブルーのラインの範囲にポジションを置かないと正しく表示されないのです。
つまり、APIで範囲外の座標位置を指定してしまうと、ストリートビューを表示できずにエラーになってしまいます。

APIを開発する上で、このエラーを避けるために「StreetViewService」の関数「getPanoramaByLocation」を利用することで、目的の近くのストリートビュー表示可能座標を取得することができます。

ストリートビュー表示可能ポイントを取得する

例えば、以下のような処理で考えてみます。

Monthly Archives