だ。ログ。

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

Laravelのログ出力

ログレベルの設計は必要にはなるが、何をどうしたか。と言う事は必須。
Laravelの場合既存でエラー出力用のメソッドが用意されている。
ログファイルは
/laravel公開ディレクトリ/storage/logs/を想定。

Log::debug()
Log::info()
Log::notice()
Log::warning()
Log::error()
Log::critical()
Log::alert()

この辺のロギングレベルから何を出すか。と言う事の明示化をしなければならない。
基本的には引数にエラー内容を入れる。

テストコード

Log::debug("test");

#出力結果
[20XX-05-XX 10:XX:XX] local.DEBUG: test

上記のようにdebugコードが実行された事が確認できる。
ただ、どこで実行したかってのを毎回探すのが面倒になるのでコピペ用

Log::info('ソースコード', ['file' => __FILE__, 'line' => __LINE__]);

#出力結果
[20XX-05-XX 10:XX:XX] local.INFO: ソースコード {"file":"/var/www/hogehoge/fugafuga/hogehoge.php","line":XX} 

これでどのファイルの何行目の出力か。と言う事を特定出来る。

今年一発目のハマスタBOX 横浜銀行ボックスシート

4月14日ドラゴンズ戦で運良くベイサイド側の横浜銀行ボックスシート4のチケットが入手出来たので家族を招待。
いままで姪っ子がまだよちよち歩きだったが、シーキューブリビングボックスだったのですが、歩き回るようになったのと色々な事に興味が出てきたので。と言う事で入手。

ベイ餃子近し

今年から横浜スタジアムの新メニューとして加わったベイ餃子、普段はライトなのでなかなか買いに行く機会に恵まれない内野1ゲート横だが
ボックスシートは内野1ゲートから入るのでベイ餃子がすぐに買える。

f:id:rider_dice:20180523165138j:plain
餃子。

タレ無しで食べる餃子は味がしっかりついていた事と、座席開放前と言う事もあり並びはなく焼き立てでおいしゅうございました。

ボックスシート内部

ベンチシートに3人、可動式の椅子が1人と言う形で座る。去年行った5人シートの場合はもう一つ可動式の椅子がついていた。
なんだかんだ大人4人だとキツい。今回は姪っ子が小さかったので結構余裕を持って座れる。
ハマスタは持ち込みが可能な為、足元に物を置いてしまうと意外と場所を取る。テーブルが可動式ではないので空間をどう活用するか。
リビングボックス時代から使っているアイテムとして、S字フックを持っていきゴミ袋やドリンク類を引っ掛けておくと足元を伸ばして座る事が出来る。

f:id:rider_dice:20180523165217j:plain
座席

試合中

今年から防球ネットが内野席には設置されている為、前程ファールボールが弾丸ライナーで飛んでくる可能性はなくなった。
ただ、今回は宮﨑選手の流し打ち打球が近くに着弾したw

また、ボールがもらえるスーパーバズーカはこの防球ネットの事もあり角度がかなり高めに設定されて飛距離がでなくなっている。
良い時は結構飛んでくるがこの日はFA席くらいまでしかボールが飛んでこなかった。
外野から観戦しているとかなりの数がグラウンド側にこぼれる事もある。この辺は防球ネットとの兼ね合いもあるが、前程は期待できない。

f:id:rider_dice:20180523165049j:plain
見え方

試合開始前から曇り空、ときより抜ける風はやや肌寒さも残っていたがとうとう6回を終える頃から雨が降り出した。
一目散にコンコースに逃げる人、カッパを着る人、色々居るがまず横浜スタジアムはゴミ袋は晴れていても必需品。
持ってきたカバン等を試合前にゴミ袋にいれておく事が最初の作業となる。雨が降り始めて様子を見てしまうと足元は一気にぬれてしまう。
これは内野・外野を問わず作業としてやっておくべき。外野の場合はビールが上から伝い落ちて来ることも結構あったりする。

見え方

防球ネットよりも上の目線で見下ろしながらグラウンド全体を見渡す事が出来る。
ただ、この日の先発のバリオス投手のボールのインコースアウトコースは当然の事ながら分からない。雰囲気ストライクかな?遠いかな?と言うのは辛うじて確認出来る。
また、外野への飛球の距離感が最初は掴めない。
特に自分が外野専と言う事もあるが、筒香選手のホームランはいったああああ!と言う角度だったが、他はボールが上がって一瞬ボールの距離で戸惑ってから歓声を上げる形であった。

f:id:rider_dice:20180523165245j:plain
ビール

コスパ

1枚5200円、それよりも前のFA席よりも値段は少し張る。
ボックスシートの利点は個別席よりも足元はゆったり、物を置いて野球を楽しむ事が出来る。
今回の場合、ベイサイドを取る事が出来たのでやはりチャンテが流れはじめると周りは熱を帯び声が出る。
まだ姪っ子が外野だと怖いだろうけど、応援したい!と言う願いも受け入れてくれる。

また、開場後のベイスマイルショットでは高確率で写真に抜かれる。
ベイメンチを食べながら談笑していたので、かなり焦った。アホ顔にならないように注意すべき。

総合

他の球場のボックスシートに行った事がないが、ベイスターズファンであれば間違いなく周りのボックス席のファンと交流し喜びを分かち合える。
グラウンドのプレーは近く、外野の熱も近く、ベイ餃子からも近い。
強いて問題点を挙げるとすれば、ベイサイド側は夕方の西日問題だろう。
市庁舎側に落ちていく太陽がちょうど向かい側になる、夏は尋常ではない暑さと脱水症状等のリスクがあるのと日が落ちるまでは逆光でボールが見えづらい。
最低限キャップ、できればサングラスを持参した方が良い。特にナイターは18時過ぎるまで太陽が隠れないのでかなりの時間逆光になってしまう。

なかなか人気のある席なので、とれない時は本当にすぐに売り切れてしまうが是非チャンスが有ればその迫力を体験して欲しいとオススメ出来る席である。
f:id:rider_dice:20180523165311j:plain
f:id:rider_dice:20180523165349j:plain

Apache2.4環境下でyumを利用しmod_sslをインストールする

開発で必要になったので、mod_sslをインストールをyumで入れる為に

$ yum install mod_ssl

とコマンドを打つもConflictと出てしまいインストール出来ない。
そもそもApacheが2.2ではなく2.4なので以下のコマンドで対処

$ yum install mod24_ssl

今後コンポーネントが更新されていけば無意識にインストールは出来るようになるのであろうが現状では明示的にバージョンを指定しないとNG

PHPのfunctionの返り値を複数もたせる

パーツとして切り出したは良いけど、変数が複数存在しその複数個を返り値としたい。ってのがこの頃多い。
こう作ってしまった事に自分の問題もあるがとりあえず。

funciton側

function mofumofu(){
$hoge = array("1","2");
$fuga = array("3","4");

return array($hoge, $fuga);
}

呼び出し側

list($hoge, $fuga) = mofumofu();

呼び出し側でlistにして受け口を作れば返り値自体は複数もたせる事が可能。

SSHトンネルを利用したFileZillaでのSCP接続

セキュリティの関係で、直接FTPでファイルをアップすると言う事がご時世として許されざる時代になってきている。
Gitから直接デプロイとかやり方は色々あるが、一つの選択肢としてサーバーへのアクセスはSSH等を利用する。
踏み台サーバーが必ずあり、その踏み台サーバーを利用して各サーバー群につなぐ。と言う方法がある。

WinSCPだとその辺は簡単にクリア出来るが、大量のファイル転送にはWinSCPはかなり時間が掛かる。
FilleZillaはファイルを最大10ファイルづつダウンロード出来るので効率は大幅に向上する。ただしSCPが出来るか?
と言う事で半ばあきらめていたが出来た。

1. SSHにて踏み台サーバー → 接続したいサーバーに接続する。

Teratermを利用した場合、まず踏み台サーバーにログインをする。
その後 設定 > SSH転送のポート転送から転送先を追加する。
転送ポート、転送先を入力したら ファイル > 新しい接続を選択。

ホスト: localhost
TCPポート: SSH転送で指定したポート番号を入力し、転送先のサーバーへのログインを確認する。

2. FileZillaの設定をする。

新規ホストを作成する。
ホスト:localhost
プロトコル:SFTP

ログオンの種類はサーバー設定任意、ユーザー、パスワードなのか鍵ファイルを設定して接続すると、FileZillaでも接続が確認できた。

PHPからSESを利用してメールを飛ばしてみる

いつかはやろうやろうと思っていたのだが、結局機会がなかったSESでのメール送信。
AWS-SDKまでインストールした状態である事が前提だが、忘備録。

1. サーバーにSES用のアクセスキーを設定する

$ aws configure
AWS Access Key ID [None]: accesskey
AWS Secret Access Key [None]: secretkey
# ここは契約したリージョンに合わせる
Default region name [None]: us-west-2
Default output format [None]: json

この設定を入れていないと、メール送信する際にIAMの権限が無いから拒否する。みたいなメッセージが出てくる。

2. AWSのリファレンスのソースをコピる。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html

ここに有るソースコードをコピる。

<?php

// Replace path_to_sdk_inclusion with the path to the SDK as described in 
// http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
define('REQUIRED_FILE','path_to_sdk_inclusion'); 
                                                  
// Replace sender@example.com with your "From" address. 
// This address must be verified with Amazon SES.
define('SENDER', 'sender@example.com');           

// Replace recipient@example.com with a "To" address. If your account 
// is still in the sandbox, this address must be verified.
define('RECIPIENT', 'recipient@example.com');    

// Specify a configuration set. If you do not want to use a configuration
// set, comment the following variable, and the 
// 'ConfigurationSetName' => CONFIGSET argument below.
define('CONFIGSET','ConfigSet');

// Replace us-west-2 with the AWS Region you're using for Amazon SES.
define('REGION','us-west-2'); 

define('SUBJECT','Amazon SES test (AWS SDK for PHP)');

define('HTMLBODY','<h1>AWS Amazon Simple Email Service Test Email</h1>'.
                  '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
                  'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
                  'AWS SDK for PHP</a>.</p>');
define('TEXTBODY','This email was send with Amazon SES using the AWS SDK for PHP.');

define('CHARSET','UTF-8');

require REQUIRED_FILE;

use Aws\Ses\SesClient;
use Aws\Ses\Exception\SesException;

$client = SesClient::factory(array(
    'version'=> 'latest',     
    'region' => REGION
));

try {
     $result = $client->sendEmail([
    'Destination' => [
        'ToAddresses' => [
            RECIPIENT,
        ],
    ],
    'Message' => [
        'Body' => [
            'Html' => [
                'Charset' => CHARSET,
                'Data' => HTMLBODY,
            ],
			'Text' => [
                'Charset' => CHARSET,
                'Data' => TEXTBODY,
            ],
        ],
        'Subject' => [
            'Charset' => CHARSET,
            'Data' => SUBJECT,
        ],
    ],
    'Source' => SENDER,
    // If you are not using a configuration set, comment or delete the
    // following line
    //'ConfigurationSetName' => CONFIGSET,
]);
     $messageId = $result->get('MessageId');
     echo("Email sent! Message ID: $messageId"."\n");

} catch (SesException $error) {
     echo("The email was not sent. Error message: ".$error->getAwsErrorMessage()."\n");
}

?>

まんまAWSソースコードをパクった。
ただ1行だけ違うのは 'ConfigurationSetName' => CONFIGSET, この文字列をコメントアウトした。
このコードの上の行に、使わないならコメントか消してね。と書いてある。
利用していないままコードを貼り付けると

The email was not sent. Error message: Configuration set does not exist.

と言うエラーでメッセージが送信出来ない。これをコメントアウトしたらメールの送信が出来た。

追記

ユーザー毎にキーを生成する必要がある。
1. サーバーにSES用のアクセスキーを設定する
は、実行するユーザーで作っておかないと、他のユーザーで実行した際に設定が無いのでエラーとしてメールが送信できない。

PHPを利用した入力チェックのアンチョコ カタカナ

この頃はjQueryでの入力チェックばかり書いていて、POSTした後にエラーが表示されるタイプのPHP側でのチェックがめっきり減った。
たまに書くとんーどうだっけ。。となるのでコピペ出来るようにメモ。

if(preg_match("/^[ァ-ヶヲ-゚ー  \t\r\n]+$/u",$postdata)){

}

この場合、カタカナとハイフン、それにタブと改行と半角全角スペースの場合は許可。
それ以外の文字列の場合はデータelse挙動として振り分ける。