InterfaceとAbstractを使ってみる

「インターフェース」ってよく聞きますが、あんまりわかってないです。
というか全くわかりません、「インターフェース」って言いたいだけです。

PHP conference Kansai2018で
インターフェース再入門」というセッションがあり、
そこから気になりだしたので探ってみます。
会社で、PHP conference Kansai2018共有LTしたので、
もうちょい深いところつつけたらなと思います。

ちなみに過去に私が書いたPHP conference Kansai2018の記事はこちら

PHPカンファレンス関西へ初参戦!

インターフェースとは…

何か目的を果たすための手段となるもの。
中身を知らなくても使う側は使うことができる。

例えば…

ECサイト(「ブーメラン」を売っているお店とする)で考えると

  • 使い手 = 買い手
  • 目的 = 「ブーメラン」をクレジットカードで購入したい
  • 手段 = 決済モジュールのクレジットカード決済

→ この時のインターフェースは「決済モジュール」になります!

例えば…(パート2)

  • 使い手 = わたし
  • 目的 = 青い空の下で音楽を聞きながら、お酒飲みたい!
  • 手段 = フェスに行く

→ この時のインターフェースは「フェス」になります!

↑をPHPで書いてみます!
〜InterfaceとAbstract使って〜

実際に書いてたらabstractとの違いがわかんなくなってきたので、両方使ってみます。

参考:
https://havelog.ayumusato.com/develop/php/e166-php-interface-abstract.html

\  Github – kin29/fes  /

  • GoodFesInterface.php             ←Interface。
  • AbstractFes.php                        ←Abstract。(WildBunchFesの継承クラス)
  • WildBunchFes.php                  ← AbstractFesを継承し、GoodFesInterfaceを使用
  • Watashi.php                              ←わたし(使い手)

◎ 前提

「青い空の下で音楽を聞きながら、お酒飲みたい!」という、
わたしの願いを叶えるための良いフェスの必須条件を
GoodFesInterface.php」  にこめています。

さらに、わたしが今年の夏に楽しんだフェス
「WildBunchFes(通称WBF)」 「CircleFukuoka」 「まつり宮崎」 「AoshimaBeachParkFes」。
これら4つに共通するもの、
「音楽」 「酒」 「晴れ」 「野外」 「フェスの名前」 「思い出」を
AbstractFesクラス」 に詰め込んで各Fesで継承しています。

 

GoodFesInterface.php [Interface]

<?php

namespace Fes;

interface GoodFesInterface
{
    public function isMusic();

    public function isDrink();

    public function isSunny();

    public function isOutdoor();
}

 

AbstractFes.php [Abstract class]

<?php

namespace Fes;

abstract class AbstractFes
{
    public $fes_name;
    public $music;
    public $drink;
    public $place;
    public $weather;
    public $memory;

    public function __construct()
    {
        $this->place = '野外';
        $this->weather = '快晴';
        $this->memory = 'フェス最高 ^ω^';
    }

    /**
     * @return string
     */
    public function getFesName()
    {
        return $this->fes_name;
    }

    /**
     * @return bool
     */
    public function isMusic()
    {
        return isset($this->music);
    }

    /**
     * @return bool
     */
    public function isDrink()
    {
        return isset($this->drink);
    }

    /**
     * @return bool
     */
    public function isOutdoor()
    {
        return ($this->place === '野外');
    }

    /**
     * @return bool
     */
    public function isSunny()
    {
        return ($this->weather === '快晴');
    }

    /**
     * @return string
     */
    public function getMemory()
    {
        return $this->memory;
    }
}

 

WildBunchFes.php

<?php

namespace Fes;

class WildBunchFes extends AbstractFes implements GoodFesInterface
{
    public $fes_name;
    public $music;
    public $drink;
    public $memory;

    public function __construct()
    {
        parent::__construct();
        $this->fes_name = '「ワイルドバンチ」';
        $this->music = 'ヤバT/サカナクション/スカパラ/10-FEET/フォーリミ/teto/ハルカミライ...etc';
        $this->drink = 'ビール、ビール';
        $this->memory = 'しかし、2日目は台風直撃で中止になりました。';
    }
}

 

Watashi.php

<?php

namespace Bootstrap;
require dirname(__DIR__) . '/vendor/autoload.php';

use Fes\WildBunchFes;
...


class Wahatashi
{
    public $wbf;
    ...

    public function __construct()
    {
        $this->wbf = new WildBunchFes();
        ...
    }

    public function done()
    {
        $arrRet = array();
        $arrRet[get_class($this->wbf)] = $this->doneList($this->wbf);
        ...

        var_dump($arrRet);
    }

    public function doneList($class)
    {
        $arrRet = array();
        foreach ($this->arrDoList as $item){
            $arrRet[$item] = $class->{$item}();
        }
        return $arrRet;
    }
}

$i_am = new Wahatashi();
$i_am->done();

Watashi.phpは、
WildBunchFesクラスを通して、GoodFesInterfaceを使って(手段)として、
目的を果たしています。ですよね?w

 

まだまだ私の理解が乏しく、間違っている部分もあるかと思います。
そして、「こんなソースいつ使うんだ?」って感じですが、
自分の好きなものでソースを書くってなかなか面白かったです。

みなさんもぜひしてみてください! \(^^)/

表参道のセレブ犬とカバーニャ要塞の野良犬

「表参道のセレブ犬とカバーニャ要塞の野良犬」
(著)若林 正恭

キューバに行きたくなりました。
というか、一人で海外に行くって挑戦をしたくなりました。

若林さん、やっぱり面白いです。

ここからはネタバレ注意です。
ご了承ください。

キューバに一人旅行に行って、日本から現実逃避し、
陽気なキューバ人のイメージとは真逆の人見知りのキューバ人ガイド・マルチネスとの会話だったり、
エバジマとその友達と闘鶏場にいったり、革命博物館に行ったり。
ちっさい笑い話がほっこりしました。
キューバ革命とか、わたしが興味ない世界史にも興味が持てました。

キューバの社会主義と、日本の資本主義、そして新自由主義の違いのそれぞれの良さ悪さも感じることができた。
最後まで読むとキューバに来た理由がわかります。

探してるものはそう遠くはないのかもしれない

「探してるものはそう遠くはないのかもしれない」
(著)新井見枝香

クリープハイプの尾崎世界観さんが、
めざましテレビでお勧めしていて、
直感で即買いして読んだんですが思いの外面白くて、
お盆帰省中の移動で夢中になって読んでいました。(クリープハイプ聴きながらw)
本の中にも尾崎世界観がでてきて、「おっ!」ってなりました。

言葉のチョイスとか、音感とかリズム・テンポが心地よかったです。
話の内容は、作者自身の書店員という立場の話や、
趣味といった日常系っぽい感じのエッセイでした。
良い意味で変な人の日常生活を知ることが、自分は好きなんだなって気付けました。
面白い人の頭の中って見たい!知りたい!ってなります。
そして、すごくいい刺激になりました。

ブラウザでTLSのバージョンを確認・設定する方法

いろんなサービスで、TLS1.0の廃止が相次いでいますね。
そんな中、私は「SSL」と「TLS」は違いを知りませんでした!

まずは「SSL」と「TLS」 の違いから!

→ 両者とも、「安全に通信するためのプロトコル」。
「SSL」は当時ブイブイ言わせてたブラウザ会社が独占的に作ってたもので、のちにセキュリティ専門家たちによって作られる「TLS」となる。
「SSL」は 2015年6月以降は使用禁止となり、現在は「TLS」が主に使われている。
TLS1.2でMD5とかSHA-1が大幅に減ったらしい。
SSL1.0 → SSL2.0 → SSL3.0 → TLS1.0 → TLS1.1 → TLS1.2
→ TLS1.3(2017年12月にドラフト提案)

  • SSL = Secure Socket Layer
  • TLS = Transport Layer Security

参考:
https://ssl.sakura.ad.jp/column/ssl_tls/
https://qiita.com/n-i-e/items/0cbe004ad8a2e800b90d

さて、本題!
「ブラウザでTLSのバージョンを確認・設定する方法」

▼使用環境
使用ブラウザ:FireFox
デバイス:Mac

参考:https://rms-digicert.ne.jp/howto/basis/disabling-browser-support-ssl-v3.html#firefox

◎ブラウザでTLSのバージョンを確認する

  1. FireFoxを開く
  2. ページ上で左クリック→「要素を調査」でデベロッパーツールを開く
  3. 「ネットワーク」より確認したいリクエストを選択。
  4. 要求の詳細より「暗号化」を選択。
  5. 接続>プロトコル情報にTLSのバージョンが記載れている。

TLSのバージョン確認

 

◎ブラウザでTLSのバージョンを設定する(TLS1.0/1.1/1.2)

※ページが設定したバージョンに対応してない場合は表示できません。

    1. FireFoxを開く

 

    1. URL欄に「about:config」を入力し、設定画面へ (「動作保証対象外です!」って言ってビビらすけどデフォルト値に戻せるので大丈夫!)

 

    1. 「security.tls.version.min」「security.tls.version.max」があることを確認する。
      → おそらくデフォルトはmin=1、max=4。
      TLSバージョン設定

 

    1. 設定したいTLSのバージョンに合わせて各設定名の値を下記に変更する。
      ▽TLS1.0にする場合:
      security.tls.version.min :1
      security.tls.version.max :1
      ▽TLS1.1にする場合:
      security.tls.version.min :1
      security.tls.version.max :2
      ▽TLS1.2にする場合:
      security.tls.version.min :2
      security.tls.version.max :3

 

    1. 対象ページを開く。上記のTLSバージョン確認の方法で確認する。

 

Firefox NightlyではドラフトのTLS1.3通信も行えちゃいます!

 

正規表現を覚えよう。

 

SublimeTextでよく使う正規表現。とっても便利。
「 SublimeText 」と「 正規表現 」でどんだけ早くデータ整形できることか!

だけど、正規表現まだ検索しちゃってる。。。
「あ、そうだ覚えよう。」

というか、その前に全然まだ正規表現わかってなかったので、
ドットインストール受講しました^^

とりあげること

・「+」 VS 「*」
・「\d」 VS 「[0-9]」
・「\b」
・いろんな「?」
・文字クラスと「|」(選択子)
・いろんな「改行」
・キャプチャをつかっての置換

 

「+」 VS 「*」

どっちっけ?ってなるので^^;
・「+」 …1回以上の繰り返し。 ={1,}
・「*」 …0回以上の繰り返し。 ={0,}

以下のようなデータがあって、「a0001」「bcdef」「00002」の両方を検索にヒットさせたい時。

a0001
bcdef
00002

「+」のみを使った以下のパターンだと「a0001」しかヒットしません。

[a-z]+[0-9]+

 

しかし、

 

「*」のみを使った以下のパターンだと
「a0001」「bcdef」「00002」の全てがヒットします。

[a-z]*[0-9]*

 

さらに

「a0001」「bcdef」だけヒットさせたいとき

[a-z]+[0-9]*

「a0001」「00002」だけヒットさせたいとき

([a-z]|[0-9])*[0-9]$

「bcdef」「00002」だけヒットさせたいとき

^([a-z]*|[0-9]*)$

 

「\d」 VS 「[0-9]」

ドットインストールを見るまでしらなかったんですが、「\d」っていうのがあるんでうすね。「[0-9]」派でした。

さらに否定形の書き方がそれぞれ違ったので発見でした。

「\d」の否定形→「\D」

「[0-9]」の否定形→「[^0-9]」
※ 「^」は「 [」の直後のみ否定を表す。「^[0-9]」だと行の先頭が数字のものが該当する。

 

「\b」

単語の境界…単語のみをマッチさせたい時つかう

例えば、「curry」のみをヒットさせたい時、
「curry」だと全ての単語のcurryにヒットしてしまうので、
「\bcurry\b」とすると一番上の「curry」のみにヒットさせることができます。

curry
curryrice
currypan

 

いろんな「?」

「?」って2つの役割があります。
・「?」 → 1回の繰り返し。 ={0,1}
・最も短い文字でマッチさせる

「”.+”」 → 最も長い文字にマッチしてしまう(通常)のため、「”apple”, “apples”, “pineapple”」の全てがヒットする。
「”.+?”」 → 最も短い文字でマッチする。「”apple”」「 “apples”」「”pineapple”」のそれぞれがヒットする。

"apple", "apples", "pineapple"

 

いろんな「改行」

「\r\n」→ 改行(Windows)
「\r」→ 改行(v9までのmacOS)
「\n」→ 改行(v10からのmacOS)
「\r\n|\r|\n」→ 改行(すべて)

キャプチャをつかっての置換

「()」で囲った部分「$n」に格納し、それを使って、置換ができる。

phpのpreg_matchでも使えた!
以下のようなデータがあって、「id={id},name={name}」みたいな形式に変換したいときとかに使えます。
sublimeでは shift + command + F で検索&置換の機能を使います。
Find: (.+),\s?(.+)
Replace: id=$1,name=$2

置換前

1, taro
2, jiro
3, saburo

置換後

id=1,name=taro
id=2,name=jiro
id=3,name=saburo

 

phpのpreg_replaceだと、こんな感じ。

preg_replace("/(.+),\s?(.+)/", 'id=$1,name=$2', "1, taro")

 

いろんな正規表現がありますね。

組み合わせ次第だでやり方無限大ですね。おもしろーい。

 

PHPカンファレンス関西へ初参戦!

どうも!PHPカンファレンス関西に行ってきました!

関西のPHPカンファレンスは初めて参加しました。福岡しかいったことのない身です。
しかし、3連休のOsaka暑すぎでした。
3日目の泊まった友達の家はクーラー無いし、
たまたま行った焼肉屋は屋内なのにサウナ状態、
宮崎に帰って行ったcoldrainのライブも冷房壊れてる熱いライブで、
大阪のPHPer熱を感じました。

#前夜祭

前日入りしたので、前夜祭【非公式】も行ってきました。
PHPカンファレンス関西の前夜祭の会場
飛行機の都合で、LTしか見れてないんですがw
入口が8時に閉まるということで、わざわざロックオンのおえらい方に開けてもらいました、ありがとうございました。
ロックオンさんのオフィスが少し見れて光栄でした!!!
DB周りのお話が多かった気がします。
オニオンアーキテクチャは初耳でした。
非同期PHPやったことない。。。curl_multi?コルーチン?って感じだったので自分なりに調べて見ました。

非同期PHP

jsでしかやったことない。。。
ReactPHP、流行りのswooleできるそうです!今度触ろう。(多分

こんな方法でも非同期実行できまうす!

    • curl_multi
    • コルーチン ←swooleはこれおしだそうで。

↑一旦処理を中断した後、続きから処理を再開できる。スケジューリングできる!

 

 

#本編

まず、まとめ\(^^)/

  • グランフロント大阪でっかい、参加者いっぱい!
  • 人気のセッションは立ち見もできなかったりしてた
  • ガラポン楽しかった!ホワイトボードノート欲しかった。。。
  • インターフェイス使ってみよう
  • SOLIDの原則、条件分岐禁止ギブスの想像
  • PhpStorm使いこなし隊。ハンズオンぽちりました。
  • HerokuのロンTいただいたー

AWSを背景に記念ん撮影 いただきもの いただきもの2

インターフェイス入門

インターフェイス使って実装してみよう。んでブログ書こう。
とりあえず下書き登録しました\(^^)/
インターフェイス入門のメモ1 インターフェイス入門のメモ2

SOLIDの原則、条件分岐禁止ギブスの想像

後藤さんのSOLIDの原則シリーズのトークは3シリーズすべてを生で
聞くことができました!
\条件分岐ギブスがグッズ化されることを待ち望んでいます!/
せっかくメルカリさんにノートをもらったので、使わせていただきました。
solidの原則メモ1 solidの原則メモ2

PhpStorm使いこなし隊。ハンズオンぽちりました。

OsakaからMiyazakiに帰ってきたら届いてましたー!日本語化にたよらずとも英語読めるように頑張ります・・・。
intelijハンズオン

HerokuのロンTいただいたー

Herokuは個人的なやつで使ってます。これとか
https://today-saying.herokuapp.com/
herokuも英語ばっかで探り探りですが、便利なのでどんどん使います〜

SublimeTextでよく使うショトカットキー集

 

参考:https://qiita.com/seafield1979/items/56d4833dae818dcf85ae

SublimeTextは便利です!(PhpStorm・Atomも勿論いいけど)
たまに忘れるのでメモ程度によく使うコマンドを書き溜めますう。

Macです!

● いろいろ

コマンドパレットを開く Cmd + Shift +「P」
拡大 Cmd + Shift + 「+」
縮小 Cmd + 「-」

● 編集

履歴から貼り付け Cmd + 「K」,「V」
現在行を複製(下の行に挿入される) Cmd + Shift + 「D」
行の削除 Ctrl + K
コメントアウト Cmd + /
範囲コメントアウト Cmd + Shift + /

● ファイル

フォイルを開く(ファイル名検索できる) Cmd + 「P」
新しいタブを開く Cmd + 「N」
ファイルを閉じる Cmd + 「W」
次(右)のタブに移動 Cmd + Opt + 「→」
次(右)のタブに移動 Cmd + Opt + 「←」

● ウィンドウの分割

2 行に Cmd + Opt + 2
2 列に Shift + Cmd + Opt + 2
4 グリッドに Cmd + Opt + 5

今年もPHPカンファレンス福岡2018行って来たよ^^

先週、PHPカンファレンス福岡2018に行って来ました!
去年も行ったんですが、あいかわらず楽しかったです。

公式サイト:https://phpcon.fukuoka.jp/2018/

カンファレンス後の気持ち

  • 英語の文でも逃げずに読む
  • 日本語の文あればなお、ありがたくしっかり読む
  • PSRおさらいしよう
  • ログ使おう
  • 自動化したい
  • Golangが熱いらしい
  • もっと勉強しよう

全然野菜・前夜祭

前乗りしたので、全然野菜と前夜祭にも参加してきました。
全然野菜の開催場所がさくらインターネットさん、前夜祭がLINE fukuokaさんでした。
他社のオフィスを見学できるのもいいですよね。面白いです。
LINE fukuokaさんでは、テーマパーク状態で超興奮しました。
カフェスペース的なところで3セッション同時で進行しており、
私は真ん中で全部見ようと欲張っていましたが、無理でした。。。
同世代女性エンジニアとも知り合えていい機会でした\(^^)/

本編

会場は去年と同じく、FFTホールでした。
去年も見たことある人がいっぱいいてなんか安心しました。
メルカリのトートバックもいただけたし、
愛用PHPStormのJetBrainsのヨーヨーも狙ってたので、やっとGETできて大満足でした!

 

私的に面白かったのが

です。

社内ナレッジを全部署統一してて、内容はなんでもokってカオスかなと思ったんですが、めちゃくちゃいいなって思いました。

私は生活レベルが低いので、管理とか人事の方からお金の話とかあったら見たいし、役立ちそうだなって思います。

技術の話だけではなくて、他社の業務効率化の話を聞くのって面白いなって思いました。

 

実行委員の皆様、お疲れ様でした。
今年も開催していただき、本当にありがとうございました!

 

ところで、もちろん

\PHPカンファレンス関西2018行きます!/

https://2018.kphpug.jp/

 

 

/細かいことは下記リンクにまとめました。よかったらみてください。\

https://kin29.github.io/PHPerMemo/

Googleアナリティクスでアクセス解析をしたい〜分析編〜

 

\うた紹介コーナー、第二弾/

You/雨のパレード

雨のパレードは半年前くらいにライブにいって、そこから大好きです。
色んな音がしてて、ライブ全体が1つの曲みたいで感動したのを覚えてます。
久々にCD買ったバンドです。

 

どーも! 待望のw
Googleアナリティクスでアクセス解析をしたい〜導入編〜の続編です!

 

導入編のまとめでも書いたんですが、Googleアナリティクスが見れると、

Googleアナリティクスを毎朝見るのが日課になる。成長記録みたいで楽しい。

見える化ってすばらしい^^モチベーションあがる。

って痛感します。

 

そこで、こんな見方もありますってのを書きます。

※マーケティングとか何?って感じなのでご了承ください。

 

参照元を知る

サイトの参照元(どこからきたのか)とかわかると、

結構集客のヒントがあるのかなっと思ってます。

わたしの今年の参照元はこんな感じです。

 

Googleアナリティクス > 集客 > 参照元 / メディア

Googleアナリティクス_参照元

 

わかること

・オーガニック検索が多い(Google, Yahoo, bing)

・t.co / referral → ツイッターらしい。

・fd-studio.jp さんが参照してくれている!

調べてみると、、、ここで使ってくれていました!ありがとうございます!(感動っ)

phperkaigi.jp さんの「ブログ書いたよ」投稿したので、そこからの参照と思われる。ありがとうございます。

phpcon.fukuoka.jp さんに去年書いたよリンク貼ってもらったので、そこからの参照と思われる。ありがとうございます。

 

検索ワードを知る

なんて検索したら、私のサイト表示されるんだろう?何位だろう?ってのがわかります。

Googleアナリティクス > 集客 > Search Console > 検索クエリ

Googleアナリテクス_検索クエリ

 

わかること

・「solidの原則」が多め、唯一クリックされてる。

・ほとんどが表示回数が少ないのもあり、クリック全然されてないw

・平均掲載順位高いものもあるのに、表示回数がない

→そもそもあまり検索ワードとして検索されないものにヒットしてる可能性がある・・・。

 

 

こうやってみると、サイトの汚点が見えてきますね・・・。

どうにか改善して、流入増やしたいです!

 

 

ただ、BEAR.Sundayで紹介されてからユーザー・セッション数増えてます。

嬉しいのと感謝です。\(^^)/

 

 

この本を読んでから、いろいろやってみてます。

number_format に小数点以下がある値を渡すのは危ない時がある。

 

\ヘビロテな曲紹介コーナー、はじめました。/

最近、今更ながらこの歌にはまってます。
メリールー/SIX LOUNGE
このギター弾きたくて、耳コピしようとしてるけど、全く進まんです。

 

Googleアナリティクスについてではないです、はい。
次に書きますw
今日はPHPの関数number_formatが怖いことに気づいたので書いておきます。

php.netより:number_format

 

「金額表示で千円以上の時、見やすくしてくれるんだー」って、
この関数をね、小数点発生する値でつかってたんですね、第一引数だけで・・・・
こんな感じ(下)

<?php 

$number1 = 1000.499999; 
echo(number_format($number1));   //1,000

echo("\n");

$number2 = 1000.500000;
echo(number_format($number2));   //1,001

 

( ^ω^ )え、小数点第一位で四捨五入しちゃってるやん。

(なんも指定してないのに)そんなこと求めてないよ。

 

ってなりました。

第二引数を指定しないと、デフォルトの0(=小数点以下の桁数が0)とみなされ、

小数点第一位で四捨五入しちゃいます。

 

てことで、第二引数で、小数点以下が何桁か指定すればいいんだ!

って思ったけど、そんなの予想できない時が大半だと思います・・・。

 

だから、小数点以下が発生しうる値にnumber_format使うときは一旦考えましょう。

小数点以下の桁数が、固定のときは第二引数をきちんと指定すれば、想定通りになるかと思います。