[PHP] stdClassって何だ?

PHPのマニュアルにも細かい説明は無いんだけど。

標準で定義されているクラス
以下のクラスは、PHP ビルドに含まれる標準関数セットで定義されています。

stdClass
オブジェクトへの型変換で作られる。

PHP: 定義済のクラス – Manual
http://php.net/manual/ja/reserved.classes.php

クラス定義無しに、いきなり代入することで任意のメンバー変数が定義できるらしい。でも、C++/C#に馴染んだ自分にはかなり不思議に見える。

スコープを限った一時的な作業用に限定して使うといいかもしれない。

[PHP] Basic認証を記録する

PHPファイルがパスワード保護されたディレクトリに配置されているサイトで、ユーザがBasic認証を通過し、そのディレクトリ内の任意のPHPファイルに最初にアクセスしたときにログを取りたいというニーズあり。

考え方

Basic認証のユーザ名は$_SERVER[‘PHP_AUTH_USER’]で得られる。

「任意のPHPファイルに最初にアクセスしたとき」となると、認証入力直後にアクセスされたPHPファイルでだけログを取る必要があるけど、これはクッキーを使うことで実現できそう。Basic認証セッションはブラウザを終了することでクリアされるが、有効期限指定無しで作成したクッキーもブラウザの終了と共にクリアされるので都合がいい。

サンプルコード

クッキーを食っていなければ初回アクセス、既に食っていたら初回ではないと判断。

[開発手法] ウェブ開発の4つの開発環境

ワークフローをきちんと決めずに開発環境の複製を繰り返したおかげで、現在携わっている案件の開発環境が随分と煩雑になってしまったので、ここで改めてウェブ系案件の開発環境を整理しておきたい。

必要な開発環境は4つ

それぞれの環境でテストが終わった機能を下流へ反映させていく。

1. 開発環境(ローカル)
個々の開発者が開発に用いるローカル環境。

2. 開発環境
開発者がコミットした内容を反映して、開発者がテストを行う環境。
ローカル依存の問題を見つけ出すためにローカルと別に用意する。

3. ステージング環境
システムを公開する前に、動作や表示などについて最終的な確認を行うための環境。
運用担当や実際のユーザ(すなわち顧客)がテストを行う。
本番環境に近い、可能であれば同一の条件を持った環境を用意することが望ましい。

4. 本番環境(プロダクション環境)
実際にシステムを稼動させている環境。

参考サイト

ウェブ開発で大切な3つの環境: 開発・ステージング・プロダクション – Qiita
http://qiita.com/suin/items/004679b27d4a1f8bcb36
わかりやすくまとまっている。

ステージング環境とは – IT用語辞典 Weblio辞書
http://www.weblio.jp/content/%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%E7%92%B0%E5%A2%83

本番環境とは 【 production environment 】 – 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/E69CACE795AAE792B0E5A283.html

[Unix] yumでパッケージをアップデートする

アップデート可能なパッケージを一覧する

インストールされている全パッケージをアップデートする

特定のパッケージのみアップデートする

設定ファイル

ログファイル

関連記事

[Unix] yum – Red Hat系Linuxのパッケージ管理システム

[Vagrant] コマンド簡易リファレンス

Boxの一覧を見る
> vagrant box list

Boxを削除する
> vagrant box remove <box名>

仮想マシンのセットアップ
> vagrant init <box名>

仮想マシンのコマンド

  • up – 起動
  • status – 状態表示
  • suspend – サスペンド
  • resume – 復帰
  • halt – 終了
  • reload – 再起動
  • ssh – ssh接続
  • destroy – 削除

Help

[データコレクタ] OPTICON OPN-2001を調達する

ある案件でデータコレクタの導入を提案した。

データコレクタは携帯用バーコードリーダーのようなもの。読み込んだバーコードデータを内部ストレージに蓄積しておき、PCに接続されるとデータを一括転送する。バーコードを読み取ることしかできないが、ハンディ端末と比べたら格段に小さいし、その分値段も安い。最近ではWi-FiやBluetoothなどのワイヤレスでバーコードデータを飛ばせる製品もあるようだけど、この案件ではリアルタイム性は重視されないので、母艦へのデータ転送はオフラインで充分。

アメリカで「信頼できて気が利いたコンパクトな製品」を探すのは難しい。アメリカの産業メーカー製品は総じて大味だからだ。かと言って日本から調達すると送料分だけ割高になるし、もし故障が起きて代替品を調達する必要があった場合の不安もある。

探してみたら、米国で販売されている日本メーカーの製品があった。こちらの要件にマッチしたので、これを使うことにする。Amazonでも売られていたので、依頼元に頼んで調達してもらった。

Wireless_OPN2001_Large

Opticon USA | OPN-2001 | Opticon – USB Companion Scanner – USB
http://opticonusa.com/products/companion-scanners/opn-2001.html

OPN-2001 – Opticon Technical Support Portal
https://wiki.opticonusa.com/techsupport/en/OPN-2001

以下セットアップの覚え書き。

ドライバ

1. 以下サイトから「All-In-One PC Drivers」(zip)をダウンロードする。

OPN-2001 – Opticon Technical Support Portal
https://wiki.opticonusa.com/techsupport/en/OPN2001#Downloads

All-In-One PC Drivers
http://ftp.opticonusa.com/Downloads/USB%20Drivers%20Installer.zip
USB-to-serial drivers installer package for both 32 and 64 bit versions of Windows XP (32 bit only), Vista, 7, 8, and 8.1.

2. ダウンロードしたアーカイブを解凍すると「USB Drivers Installer.exe」が現れるので、それを実行する。

opn-2001_0000

3. OPN-2001をUSBケーブルでPCに接続すると、デバイスが認識される。

opn-2001_0004

アプリケーション

1. 以下サイトから「OPN PC Companion Application」(zip)をダウンロードする。

OPN-2001 – Opticon Technical Support Portal
https://wiki.opticonusa.com/techsupport/en/OPN2001#Downloads

OPN PC Companion Application
http://ftp.opticonusa.com/Downloads/EGF_3800_xx_source.zip

2. ダウンロードしたアーカイブを解凍すると「OPN200x Setup.exe」が現れるので、それを実行する。

opn-2001_0005

opn-2001_0006

ライセンス契約の文面が一部文字化けしているのはいただけない。

opn-2001_0007

opn-2001_0008

opn-2001_0009

付属アプリ (OPN2001 Companion Application) の使い方

1. 起動する

opn-2001_0010

2. [Get time]でデバイスに設定されている現在時刻が表示される。

3. [Set time]でPCの時刻がデバイスに設定される。

4. [Get barcodes]でデバイスに蓄積されているデータが[Barcode data]エリアに表示される。

[Apache] XAMPP環境でのBasic認証の設定方法

基本的手順は [Apache] UnxサーバーでのBasic認証の設定方法 と同様。

.htpasswd (パスワードファイル)

htpasswdコマンドはApacheのディレクトリ下のbinサブディレクトリにある。

.htaccess (設定ファイル)

パスワードファイルへのパスの記述をWindows流で。

参考サイト

ローカル環境(XAMPP)での BASIC 認証 | Web Design Leaves
http://www.webdesignleaves.com/wp/wordpress/226/

[Apache] UnixサーバーでのBasic認証の設定方法

設定手順覚え書き。

.htpasswd (パスワードファイル)

htpasswdコマンドを使ってパスワードファイルを作成する。

パスワードファイルはブラウザで閲覧できるディレクトリには置かないこと。

.htaccess (設定ファイル)

パスワード保護したいディレクトリに.htaccessファイルを配置する。

参考サイト

ミケネコの htaccess リファレンス
http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/auth.html#auth1-appendix

htpasswd – Manage user files for basic authentication – Apache HTTP Server Version 2.4
http://httpd.apache.org/docs/2.4/programs/htpasswd.html

[Smarty] 開発中はテンプレートを強制コンパイルするべき?

Smartyを採用したサイト開発での話。

フロントエンド担当から「テンプレートを変更してもフロントエンドに反映されない。templates_cディレクトリのファイルを全部削除すると反映されるんだけど」との相談あり。テンプレートを変えたのにコンパイルされていないんだなと予想。

テンプレートを強制的に再コンパイルさせるには

Smartyのマニュアルを探すと以下の変数が見つかる。

$force_compile

テンプレートが呼び出される毎に強制的にコンパイル(再コンパイル)を行います。 この設定は、 $compile_check をオーバーライドします。 デフォルトの設定では無効になっています。開発やデバッグの際に便利ですが、 決して運用環境で使用してはいけません。 $caching が有効の場合はキャッシュファイルは毎回再生成されます。

$force_compile | Smarty
http://www.smarty.net/docsv2/ja/variable.force.compile.tpl

「開発やデバッグの際に便利ですが」の言っている意味がわからないけど、この変数をtrueにセットすることで強制再コンパイルが行われるようになるらしい。とりあえずテストサイトで、そのように設定してフロントエンド担当に挙動を見てもらうことにしよう。

[Safari] html5/videoエレメントのイベントを調べる

html5/videoエレメントベースの動画プレーヤーがSafariだけうまく動かないとの相談あり。

JavaScriptで書かれたオープンソースの動画プレーヤーで、動画再生機能はvideoエレメントに委ねて、ロード中インジケータの表示やコントロールパネルの表示と制御、プレイリスト機能の追加などをJavaScriptで行っているみたい。JavaScript側ではブラウザから投げられたイベントを受けて処理を行っているので、Safariだけ挙動がおかしいということは他ブラウザとイベントの内容が違うのではないかと予想。

html/videoのイベントをトレースする

ネットを検索したら参考ページが見つかったので以下にリンク。

HTML5のvideo、発生するイベントの順序がブラウザによって違いすぎる – IT-Walker on hatena
http://d.hatena.ne.jp/Syunpei/20090714/1247571541

HMTL5 test room (勉強用:HTML 5の動作テスト)
http://www.openspc2.org/HTML5/test_room/video/

HTML5 videoエレメントのメディアイベントの仕様はW3Cで見つかる。

4.7 Embedded content — HTML5
http://www.w3.org/TR/html5/embedded-content-0.html#mediaevents

前者ページのJavaScriptコードをほぼそのまま頂いて、自分の環境でも試してみようと思う。