だ。ログ。

開発とかスノボとかやきうとか。

WAFを経由したらIPが複数に。

セキュリティの観点と導入が簡易に出来ると言う事からWAFを導入する機会が増えてきている。
特に管理画面等をIPアドレスで絞った場合に起こりうる事だが、サーバー変数をREMOTE_ADDRから取っていると

111.222.333.444, 123.456.789.120

と言った形で前がアクセス元のアドレス、後ろがWAFのアドレスとして付与されている事が見受けられる。
それもWAFがゾーンでの指定の場合、固定ではなく変動するので一意にし難い。
$_SERVER変数を見てアクセスするIPアドレス「のみ」が入っている変数がどれかと言う事をアプリケーション側で確認し変える必要がある。
今回自分がハマった時には

$_SERVER['HTTP_INCAP_CLIENT_IP']

と言う変数がそれに該当し、変更を行った。
シングル構成や単純な構成であれば、あまりここは気にしなくても良いが大きなシステムになると
「クライアントの接続元はREMOTE_ADDRだから」と言う固定概念に囚われてハマる事もある。

灯台下暗しって事とWAFは今後も導入が増えるのでメモ。

いちいちPHPからCSVにデータをエクスポートする際の文字コード変換を使うのが面倒くさい

タイトル通り。
本当に面倒くさい。古いシステムだと全てのカラムにmb_comvert_encodingが書いてあり人的なミスでエンコードを忘れやすい。
ふと調べていたが、ファイルに保存する際にこれにした方が楽。

fp = fopen('hogehoge.csv', 'w');
stream_filter_prepend($fp,'convert.iconv.utf-8/cp932');
fopen($fp, "w");
foreach($data as $v){
    $line = "hoge,fuga,moge";
    fwrite($fp, $line . "\n");
}

いちいち文字コードをアレコレしなくても stream_filter_prependを掛けておけばそれでよし。

EC-CUBE3のClassErrorを解消する。

自分で新たに作ったClassファイルが有り、コントローラに記述をする。

	$Sender = new \Eccube\Sender\Sendar();
	$Sender->setRequest(array("order_id"=>$orderId));
	$Sender->sendData();

自分が作ったのは商品購入 ShoppingController.phpの商品購入コンバージョン用の新クラス。
この新たに追加したクラスを読み込むと以下のようなエラーが出る

ClassNotFoundException in ShoppingController.php line xxx:
Attempted to load class "Sendar" from namespace "Eccube\Sender".
Did you forget a "use" statement for another namespace?

namespaceが解決出来てない、まずこのクラスってあるか?
ってな事をエラーとして吐いてくる。ローカルや開発では動いているが、ステージングに新たに入れた時のみこんなエラーが出る。

この原因はキャッシュ。
/app/cache/
内のデータを削除すると正しく動作した。

うーんなんだかなあ。。

ウェアラブルカメラ EX-FR100

f:id:rider_dice:20171106153136j:plain
友人とボードに行き、閉山前の山際のコースを滑っていると見事な夕焼けの景色が。
スマホを取り出し写真撮ってよー。と撮り思い出の一枚となっていたが、そのスキー場の写真コンテストが有ったので応募してみた。
とは言えスマホで撮った適当な写真だし、楽しい思い出でした。と言う事くらいで何も期待していなかったが、ある日メールが着信し入賞の文字が。
その時の景品でいただいたCASIOのEX-FR100

その後、雪山に持っていったが国産ウェアラブルカメラとしてのツボを抑えている機種である。

いいところ

【操作性】
日本人の癖、感性ををよく捉えておりいわゆる海外の製品と違うのは説明書の充実ぶり。読めば痒い所に手が届く。
そして、設定モードのニュアンスが伝わらない物が無い。
前に紹介したSJ4000は翻訳に突っ込んだだけの物なので、日本語が拙い部分がある。
GoProは元々は海外製品の為、あまりマニュアル類が充実していない。この辺の弱点をクリア出来るのは国産メーカーだからの強みだと思う。

【操作性2】
製品はカメラと液晶モニタで分離する事が出来る。合体させればコンデジ代わりとして使う事も出来る。
コンデジが欲しいけど動画も撮りたいと言うどっち付かずで欲しいな。と言うニーズにざっくりと合わせている。
ただし、特化している訳ではないのでコンデジにはコンデジの良さがあり、その機能を全て包括出来ているかと言うとそこまでは厳しい。
あくまでもコンデジのように使える事は出来るものの、本当にコンデジが欲しいのであればコンデジにした方が無難。

液晶側の操作性は固まる事もなく、タッチ感もかなり優れている。サクサク動くし液晶部分とカメラが分離しているので
液晶をポケットに入れておいてカメラを固定したまま設定を変える事が出来る。雪山の場合装備を外すのが億劫な事があるので
カメラは固定したまま、液晶側で全てを完結出来るのは大きなメリットである。

【タッチ液晶】
3インチ液晶で大きい、しかもかなりくっきりと明るく休憩時の再生時でもかなり鮮明に記録を確認する事が出来る。
携帯性も高いので俺はコケない!と言う人の場合、ポケットチャックのストラップに引っ掛けておいても良い。

ダメな所

【タッチ液晶】
実は液晶部分がガラスである。尻もちをついて極度の圧が掛かると無事死亡する事は間違いない。
また、結構重い。なのでハードな動きをしていると落とす可能性が有る。携帯性と言う部分では少し疑問符がつく。

【動画サイズ】
1920×1080 30fps、640×480 30fps、512x384 240fps
極端過ぎる。フルHDは30fpsでも良いが1280サイズでの60fpsは欲しかった。動画を編集時にスピードのある動画の粗さが少し目立つ。
写真サイズは4000x3000、2560x1920とスマホより高性能なカメラとして使う事が出来る。

【アタッチメント】
CASIO独自の規格の為、合う合わないがかなり出てくる。それも特殊な形をしているので純正品で対応出来ない場合にどうするか。
と言う事をDIYできれば問題無いが、GoProのようなとりあえずAmazonで売ってるなら大丈夫っしょ。ってのが出来ない。
量販店に居るCASIOの方に質問した方が無難。

【バッテリー】
カメラ、液晶と2台の充電が必要になる。
最終的には液晶は不要であればカメラ側で操作する事が出来るので問題にはならない。
要領が大きめなバッテリーを携帯しておいて休憩時に2口を使って充電すれば午前、午後と使う事は可能。

結局どうよ?

「国産」入門機として使うにはとても良い。ただし中国製のGoProもどきに比べて値段が格段に高くなる。
その分、サポートも充実しているし何よりも日本語で対応してくれるので安心して使う事が出来る。
・箱から取り出したら使える
・サクサク動く
・タフ設計
この辺が保証されているからこそ、すぐに連れ出す事が出来るしコンデジ代わりとして使うことも出来る。
国内だとCASIOとSONYPanasonicウェアラブルカメラが代表的だが、あまり売れないから。と言うだけで終わらせてほしくない。
日本製だからこそ出来る強みを武器にGoPro一択の世界を塗り替えるプロダクトが出る事を切に願う。

個人的にはコンデジ代わりに使う事が多く、スマホをなるべくウェアのポケットから出したくないので重宝している。

ウェアラブルカメラ SJCAM SJ4000

雪山に復帰して数年、復帰したキッカケはウェアラブルカメラ(SONY HDS-AS200V)をバイクに付けたい!とバイクに付けたは良いが他に使い方はないか。
と言う使い方をyoutubeで模索していた時にふと見かけたスノボ動画。
もともと学生時代から映像を記録する事が好きで、当時じゃま~るとかその辺で見かけた中古のSONYのパスポートサイズのCMが印象的だったDCR-PC7を買って雪山に持っていた事を思い出して雪山行くか!
と本格復帰したのがキッカケ。

今回ちょっと大きめの収入が有ったので、HDR-AS200Vのバッテリーの減りがやや気になり始めたのでGoPro HERO6を買ったので持ってるウェアラブルカメラを自分なりにまとめようかと思う。
んで第一弾、雪山復帰してから雪山たーのしー!とやっていると古い友人が面白そうだから俺も混ぜてってな事で、友人が買ったモノと同じモノが欲しくなり手を出した。

いいところ

【値段】
1万円でお釣りが来る。それも元々GoProを模倣して作ったモノなので世にあふれる旧GoPro用のキットが大体使える。
専用のアタッチメントや自撮り棒と言った装備品が充実している。まず使ってみたいと言う入門機としては文句がない。

【1080】
動画の解像度の選択が1920×1080 30fps、1280×720 60fps、848×480 60fps、640×480 60fpsと選べる。
流石にフルHDだと30fpsになってしまうが、サイズを落とせば60fps対応は出来る。
ただ、この値段のスペックでフルHD60fpsを考えるならもう少し値段が高いモノにした方が間違いはない。
あくまでも入門機なので安定して使う事を標準と考えておいた方が良い。

ダメな所

【正規品?】
元々GoProの模倣品であるにもかかわらず、このSJCAMのパチモノもあるらしく正規品チェックをWebで行う必要がある。
本当にパチモノがあるかどうかは定かではないが、格好いいホログラムのスカシを照合させ正規品です。と言う認証を得る事が出来る。

【堅い】
とにかくハウジングキットの防水と言う概念がガチガチに固めて水を入れないように出来る限り努力する。と言う機構等でのフォローはない。
なので水が入る時は入る。そしてロックするとガッチガチに固める為ロックが開かない。
雪山でメディア交換したい時等に難儀する。10円玉を用意しておくべき。

【コーデック】
ソフトウェア部分はあまり期待できない。動画はMOV形式H264で保存される。
windows標準のムービーメーカーで編集すると画素が見事に潰れる。

結局どうよ

映像に関して言うとやや暖色が強い。
特に雪山で日差しと影のあるゲレンデだと日差しの黃色が強く影となる部分がかなり暗くなってしまう。感度は個体差があるようにも感じられるが
雪山のナイターでも照明の近くと少し遠ざかった時の色の発色の仕方にムラがある。

2016年の年末に購入した時の値段がAmazonで10000円弱、防水ハウジングキット同梱で出してそのまま使えると言う手軽さ。
とりあえずウェアラブルカメラを使ってみたい!でもGoPro高い!って言う人にオススメ出来る。
モノの作りが一つ一つがやや雑ではあるものの、ヘッドマウント用やスキーブーツに固定するハーネスまで入っている。
この手の安いウェアラブルカメラが雨後の筍のように乱立しているが故にGoProはハウジングキットを含めボディに包括してしまったように思える。
本家が方向転換を行わざるを得ないくらい、この手のGoPro模倣品が多い。
ただ「パクリ」では終わらないコスパの高さ、そして機能面でも使いづらいと思わせないだけのクオリティになっている。

最初から高い投資して使わなくなるかもしれないし。。と言う不安が有るならば、SJ4000と言う選択肢はアリだと個人的に思う。

ただ個人的にこの手の模倣品の呼称である「アクションカメラ」と言う言い方は、若い頃にコンビニに置いてあった雑誌を思い出すのでなんだかなーとは思う。f:id:rider_dice:20171102184140j:plain

SJ4000

EC-CUBE3にエディタをインストールする

どうしてもECサイトの運営はhtmlタグは怖いって言う人が多い。
エディタとか入れれない?と言うオーダーは結構来る。
一番簡単なのはckEditor、EC-CUBEにかぎらず自分はコレを入れる事が多い。
Wysiwygプラグインwww.ec-cube.net
が無料であるので、改造するのが怖い人はプラグインで対処すると良い。
ちょっと手を加えられる人は好きな所にエディタを入れられるので使い勝手は良い。

1. ckEditorをダウンロードする

https://ckeditor.com/ckeditor-4/download/ 好きな奴をダウンロードして解答する

2. 解凍してアップロードする

/html/user_data/js/ckeditor/ にアップロード

3. 管理画面 > 商品管理にckeditorを認識させる

/src/Eccube/Resource/template/admin/Product/product.twig

# {% block javascript %} 内に記述する
<script type="text/javascript" src="/user_data/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
	CKEDITOR.replaceAll('useEditor');
</script>

これでckeditor自体の認識は完了する。今度は入力要素にuserEditorを設定する。

/src/Eccube/Form/Type/Admin/ProductType.php

#設定したい要素に以下を追加
                'attr' => array(
                    'class' => 'useEditor'
                ),

classを直接指定すると、EC-CUBE準拠のClassが無いと怒られるのでattrでclassを指定する。
複数指定する事を想定するとclassにしておけば名前がかぶる事がない。

あとは管理画面 > 商品管理 > 商品登録 から設定した要素を確認すれば、ckEditorに変更されている事が確認出来る。

EC-CUBE3で既存入力項目の入力不可を実装する

個人情報変更でよく使う手段として、メアドとパスワードは一旦登録したら変更出来ないようにしたい。
という事もあるので、html要素にdisabledを入れて入力制御する。
パスワード変更を不可にしてみる。

/src/Eccube/Form/Type/Front/EntryType.php

#変更前
	->add('email', 'repeated_email')
#変更後
	->add('email', 'repeated_email', array('disabled' => true,))

attrで指定するのかそのまま要素かはsymfony2のリファレンスを観なければならないが、disabledはそのまま指定できた。