Singletonのデザインパターン

<singletonとは>

アプリケーションの処理を通じて、あるクラスのインスタンスは絶対に1つしかないことを保証する仕組みだにょん

<目的>

なぜ1つと制限するにょ??

A 1. newをしてインスタンスを生成することは、コストがかかるから使い回した方が効率が良いことがるので。
2. 「システム全体で読み込んだデータをキャッシュしておくクラス」等、インスタンスを1回しか作りたくない場合があるので。

そもそも、アプリケーションで統一した方法が良い仕組みってあるよにょネ☆\(^o^)/

<実装コード>

class Singleton {
    /** @type  Singleton */
    private static $uniqueInstance;
 
    // コンストラクタを`private`にすることで、他のクラスが勝手にインスタンスを作ることを不可能にする。
    private function __construct() {
        echo '初回のインスタンス化<br>';
    }
 
    // クラスメソッドでインスタンス化して、オブジェクトを返す
    public static function getInstance() {
        if ( ! isset( static::$uniqueInstance ) ) {
            static::$uniqueInstance = new Singleton();
        }
 
        return static::$uniqueInstance;
    }
 
    public function describe() {
        echo 'object_id: ' . spl_object_hash( $this ) . '<br>';
    }
}
 
$obj1 = Singleton::getInstance(); 
$obj2 = Singleton::getInstance();
$obj3 = Singleton::getInstance();
 
$obj1->describe(); // object_id: 0000000027a6907d000000012e0071f9
$obj2->describe(); // object_id: 0000000027a6907d000000012e0071f9
$obj3->describe(); // object_id: 0000000027a6907d000000012e0071f9

同一オブジェクトが毎回返されてる━━━(゚∀゚).━━━!!!

<参考>

liginc.co.jp d.hatena.ne.jp

static変数について

<staicとは?>

static修飾子を指定したフィールド(メンバ変数)やメソッドは、クラス固有でオブジェクト間で共有されるものであり、クラス変数、クラス・メソッドと呼びます。また、静的変数、静的メソッドとも呼ばれます。これらはインスタンス化しなくても利用できます。またインスタンス化しても、実体として用意されるメモリ領域は、そのクラスをインスタンス化して生成したすべてのオブジェクト間で共有されるのです。

staticは唯一、メモリ上に最初から固有で確保されている孤独な変数・メソッド!! staitcをインスタンス化しても、すべてのオブジェクト間で共有される。つまりいくらインスタンス化しても、staticな変数・メソッドは常に1つしか存在しない

<目的(メリット)>

1. 全てのクラスで使用できる定数or処理を用意できる。
2. staticは一つしか存在できないという特性を活かした処理を作ることができる。

<静的メンバが力を発揮するとき>

シングルトンと呼ばれる実装方法のとき!!!

シングルトン→アプリケーションの処理全体を通して、あるクラスのインスタンスじゃ絶対に1つしか存在しないことを保証する仕組み。

<?php  

class SingletonSample
{
    private static $instance;
    
    private static getInstance()
    {
        if (self::$instance == null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    $ins1 = SingletonSample::getInstance();
    $ins2 = SingletonSample::getInstance();
    
    if ($ins1 == $ins2) {
        echo '同じインスタンス';
    } else {
        echo '違うインスタンス';
    }

?>

2回目以降、getInstanceメソッドを再度呼び出しても、newは通らず、既に生成されて$instanceに格納されているインスタンスを返すだけの仕組み!

<参考>

promamo.com

【Java】 staticって何? | 一番かんたんなJava入門

www.objective-php.net

SSHの仕組み!公開鍵認証を使う。

公開鍵認証方式

<目的>

sshをより安全につかうため。

これを使うと、鍵を持った人(パソコン)のみがsshログインできるようにするからセキュリテイ向上っとなっていいよって話だにょ。

<仕組み>

f:id:k_ootake:20170217015918p:plain
こにゃ感じだにょん。

<参考>
「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2) - さくらのナレッジ

nigohiroki.hatenablog.com

vagrant upがAuthentication failure. Retrying...だにょん

<問題>

環境は、Vagrant 1.9.1で、、、

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...

なんでだにょーーん(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`)。。。

<原因>

Vagrant 1.7〜 での SSH 鍵の扱いは、

Vagrant 1.7 以降では、vagrant up 時に旧来の insecure_key (ホストOSに配置される公開鍵)を検知した場合、その仮想マシン用の別の鍵ペアを生成して insecure_key を置き換える。 生成した秘密鍵は .vagrant/machines/default/virtualbox/private_key に置かれ、それ以降そのマシンへのアクセスは新しい鍵が使われるようになり、insecure_key での SSH はできなくなる。

<解決方法>(ポイント♡公開鍵認証)

① VagrantfileにゲストOSの公開鍵を置き換えないように以下の設定を追加だにょん。
+ config.ssh.insert_key = false

② デフォルトのinsecure_private_keyとペアになる公開鍵をゲストOS以下の手順で配置するだにょ。 この場合は、vagrant作者であるmitchellh氏のgithubから入手、配置するとしようネ☆(insecure_private_keyからssh-keygenで公開鍵作るもあるらしい)
$ mkdir -p /home/vagrant/.ssh $ wget --no-check-certificate https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/auth
③ .sshパーミッションを変更しゅるにょだ。
$ chmod 700 /home/vagrant/.ssh $ chmod 600 /home/vagrant/.ssh/authorized_keys $ chown -R vagrant /home/vagrant/.ssh

<参考>

qiita.com

qiita.com

kiraba.jp

にゃんてとこだにょん。

PHPはインストールされているのに、PHPにアクセスできないのだにょん泣

ある日、webサーバーを構築してたにょん。(LAMP環境)

1. phpインストール 2. apacheインストール 3. 動作確認

$ cd /var/www/html/
$ vim phpinfo.php  

<?php  
   phpinfo();
?>  

4. http://???????????/phpinfo.phpにアクセスするにょ!!!!!!!!!

<?php  
   phpinfo();
?>  

ソースコードがそのまま出てきたにょんo(T△T=T△T)o

試しに $ php -v
versionでる。
phpはインストールされているのにいいいいいいい!!
http://???????????/apacheの画面出てくるにょにょ!!

なんで????????

phpのインストール状態が下の3つは最低でもないといけないらしい。。。。

# yum list installed | grep php  

・ php  
・ php-cli
・ php-common  

だにょんはまさかのphpがない。。。
え??こんなことありゅの??

一見落着♡

SQL文で特定のカラム内の文字列を置換する

知らなかっただにょん!

じゃん!!

UPDATE `テーブル名` SET フィールド名=REPLACE (フィールド名,"置換前の文字列","置換後の文字列");  

これでできるにょん!

UPDATE `food` SET fruits=REPLACE (fruits,"りんご","ぶどう"); 

Vargrantを使ったら仮想環境が簡単に作れちゃった♡の巻

ある日ある日、仮想環境を作ろうとしたんだにょん。 virtualBox上に、centOSをインストールして〜OSの種類選んで〜メモリサイズ決めて、ネットワーク設定して〜

(((((((ι゚д゚;)アワワワ

めんどくさい!!!!!!!

そんなとき天の声が聞こえたんだにょん!

{ Vargrantがあなたを助けるのよーーー!

ヽ(=´▽`=)ノ
ってことでVargrantを触ってみたのだにょん!

1. Vagrantとは

開発環境の構築と共有を簡単にするためのソフトウェアだにょんにょん!!
どこでも同じ環境が使えるようにバックエンド環境を管理する機能と、Atlasを通じて環境を共有することで誰でも同じ環境が使えるようにする仕組みが提供されているの!

2. VagrantとAtlasの関係

f:id:k_ootake:20160712111326p:plain
Vagrantは、システム開発のバックエンド環境をパッケージ化し共有するものだったね。このパッケージ化された環境を、boxと呼び、Vagrantはboxをいくつも作れるんだにょ。このboxに、Vagrantのフロントエンドの役割を果たしているvirtualboxなどを介してアクセスできるの!またこのboxを共有するための機能、Atlasを通じてみんなに同じ環境が提供されるの! あ!ちなみに Vagrantに対応している仮想化ツールはvirtualboxだけじゃないの。他にも
* VMware Fusion
* Amazon EC2 + VPC
* Rackspace Cloud
などがあるよん。これらはね!Vagrantのフロントエンドの役割を果たしているのだにょん。ちなみにプロバイダーと呼ばれているの!よろしくね!

3. Vagrantを使ってみる!

① ここからOSにあったものをダウンロード、インストール
http://www.vagrantup.com/downloads.html

$ vagrant --version ←version確認

ディレクトリ作る (仮想環境を作りたい場所)

$ mkdir Ubuntu
$ cd Ubuntu

③ Vargrant初期化、起動

$ vagrant init hashicorp/precise64 ←作りたい環境を初期化
$ vagrant up ←起動

仮想環境(box)誕生

$ vagrant box list← box確認

④ box追加
$ vagrant box add centos/7 ← box追加
$ mkdir myCentOS7
$ cd myCentOS7
$ vargrant init centos/7
$ vagrant up

Vagrantコマンド
$vagrant status ←状態確認 $vagrant suspend ← sleep $vagrant resume ← sleepを立ち上げる
$vagrant halt ←終了 $vagrant reoad ← 再起動

仮想マシンに接続
$vagrant ssh

⑦ webページを表示させてみよう

cd /var/www/html
vi index.html

なんか編集してみるのだ!

vi Vagrantfile private networkのところコメントアウト

⑧ myboxを作ってみよう!

vagrant package ←作りたい環境の下で
vagrant box add my_box package.box ← 作る
ls ~/.vagrant.d/boxes/ ← この下にboxあるか確認