nkimraの日記

技術的なメモのブログ。

ServersManでNginx+PHP7+MariaDBをインストール

ServersMan@VPS Entryプランを契約したので、CentOS6にNginx、PHP7、MariaDBをインストールした。
最初CentOS7でやろうとしたがServersManの7は問題があるようなので6にした。

環境
CentOS6.5
Nginx1.0.15
PHP7.0.6
MariaDB10.1.13

Apache削除

まず標準でインストールされるApacheを削除する。

# /etc/rc.d/init.d/httpd stop
# yum remove httpd -y

Nginxインストール

Nginxをリポジトリに追加する。

# yum -y install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum install --enablerepo=epel nginx -y

PHP7インストール

次にPHPをインストールする。

# yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-fpm -y

php-fpmの設定をする。(php-fpmは上記でインストール済み)
userとgroupを「apache」から「nginx」に変更し、php-fpmを起動する。

vi /etc/php-fpm.d/www.conf
--user = apache
--group = apache
++user = nginx
++group = nginx

# /etc/rc.d/init.d/php-fpm start
# chkconfig php-fpm on

php.iniの設定を変更する。
/etc/php.ini

--;date.timezone =
++date.timezone = 'Asia/Tokyo'
--;error_log = php_errors.log
error_log = /var/log/php_errors.log

Nginxの設定ファイルを変更する。
/etc/nginx/conf.d/default.conf

--location / {
--        root   /usr/share/nginx/html;
--        index  index.html index.htm;
--}
++location / {
++        root   /var/www/html;
++        index  index.html index.htm index.php;
++}
--#location ~ \.php$ {
--#    root           html;
--#    fastcgi_pass   127.0.0.1:9000;
--#    fastcgi_index  index.php;
--#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
--#    include        fastcgi_params;
--#}
++location ~ \.php$ {
++    root           /var/www/html;
++    fastcgi_pass   127.0.0.1:9000;
++    fastcgi_index  index.php;
++    fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
++    include        fastcgi_params;
++}

パーミッションを変更する。

# chown nginx:nginx /var/lib/php/session
# chown nginx:nginx /var/lib/php/wsdlcache
# chown nginx:nginx -R  /var/www/html

Nginxを起動する。

# /etc/rc.d/init.d/nginx start
# chkconfig nginx on

MariaDBをインストール

MariaDBPGP keyをインストール

# rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

リポジトリの追加
/etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1

yumでインストール

# yum -y install MariaDB-devel MariaDB-client MariaDB-server

MariaDBの起動

# /etc/init.d/mysql start
# chkconfig mysql on

MariaDBのパスワード変更

# /usr/bin/mysqladmin -u root password 'hogehoge'

文字コードUTF-8を設定する

sudo vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8

sudo vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set = utf8

sudo service mysql start

Realmの事前準備

環境
OS X El Capitan
Xcod7.2

SwiftでRealmを使うための準備。
まずRealmのデータを閲覧するため、Realm Browserをインストールする。
Xcodeプラグインをいれる。
Alcatrazをインストールしてない場合は最初にAlcatrazをインストールする。

ターミナルで下記のコマンドを実行。

curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

Xcodeを再起動し、Xcodeの上部メニュー「Window」の「Package Manager」を選択する。
f:id:nkimra:20160205223405p:plain

RealmPluginで検索し、インストールする。
f:id:nkimra:20160205223443p:plain

Macbookの外付HDDにWindowsをインストールする

環境
Macbook
El Capitan
VirtualBox5.0.14

VirtualBoxを使い、Windowsをインストールする。
Macbookなので容量を節約するため、外付HDDにインストールした。

ISOイメージの作成

WindowsインストールディスクからISOイメージを作成する。
ディスクユーティリティを起動する。
f:id:nkimra:20160123120104p:plain

El Capitanからはメニューから作成するようになったらしい。
「ファイル」-「新規作成」-「xxからイメージ作成」をクリック。
f:id:nkimra:20160123120249p:plain

フォーマットを「DVD/CDマスター」をする。
f:id:nkimra:20160123120429p:plain

ファイルの拡張子は「cdr」を「iso」に変更する。

VirtualBoxのインストール

公式サイトからダウンロードしてインストール。
https://www.virtualbox.org/wiki/Downloads

環境設定から保存先を外付HDDに設定する。
f:id:nkimra:20160123121851p:plain

Windowsのインストール

インストールは仮想マシンを作り、そこにOSをインストールする。
手順に従ってインストールしていけばOK。
今回は次の設定にする
メモリ 4GB
HDD 50GBa(VDI)

インストールが正常にできたらAddonをインストールする。
メニューの「Devices」-「Insert Guest Additions CD Image」をクリック

Alcatrazのインストール

Xcodeプラグイン管理にAlcatrazを入れたメモ。
インストールはシェルを実行するだけ。

curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

指示に従いXcodeは再起動。
再起動するとWindowメニューにPackage Managerができる。

f:id:nkimra:20160118234134p:plain

f:id:nkimra:20160118234146p:plain

入れたプラグイン
・KSImageNamed
  Imageの名前を補完する。
・VVDocumenter
  ///でコメントを自動生成する。
・Backlight
  選択業をハイライト表示する。
・ColorSenseRainbow
  Color入力時に色を表示する。
・RealmPlugin
  Realm用
・RealmBrowser

UITextFieldに日付を入力する

f:id:nkimra:20151129234045p:plain

環境

Mac OS X El Capitan
Xcode7.1
Swift2.1

DatePickerを使ってUITextFieldのキーボードを日付入力にする。
ストーリーボードを使う場合はActionでdateEditingを呼べばOK。
問題点として選択時に今日の日付が表示されるが、
今日の日付をセットするには一旦日付を変更しなければUITextFieldに反映されない。


ソースはGistを参照。
gist.github.com

iOSアプリ上でローカライズを切り替える

環境

Mac OS X El Capitan
Xcode7.1
Swift2.1

通常はアプリのローカライズiOSで設定している言語が適用されるが、
アプリ上で設定できるようにしたサンプル。

f:id:nkimra:20151112000241p:plain

今回はセグメントコントローラで設定した言語のメッセージをラベルに表示するというiOSアプリ。

まずSingle View Applicationを作成する。
f:id:nkimra:20151112001105p:plain

Main.storyboardでラベルとセグメントコントローラを追加する。
f:id:nkimra:20151112001215p:plain

infoにあるLocalisationsにJapaneseを追加する。
f:id:nkimra:20151112001443p:plain

新規作成でString Filesを選択し、Localisable.stringsというファイル名で作成する。
f:id:nkimra:20151112001636p:plain

f:id:nkimra:20151112001645p:plain

ファイルを選択し、右側の「Localization」でBase、Japaneseにチェックをつける。
f:id:nkimra:20151112001819p:plain

ここまで設定できたら実際にコーディング。
まずStringを拡張してlocalisedメソッドを作成する。
このやり方はStackoverflowを参考にした。

extension String {
    func localized(lang: String) -> String {
        let path   = NSBundle.mainBundle().pathForResource(lang, ofType: "lproj")
        let bundle = NSBundle(path: path!)
        return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
    }
}

最後にViewControllerの実装。
基本的にはセグメントコントローラのアクションで言語を切り替えて、ラベルのテキストに反映するだけ。

class ViewController: UIViewController {
    
    var lang: String = "Base";

    @IBOutlet weak var lbl: UILabel!
    
    @IBAction func switchSegment(sender: AnyObject) {
        if sender.selectedSegmentIndex == 0 {
            lang = "Base"
        } else {
            lang = "ja"
        }
        lbl.text = "LblText".localized(lang)
    }
    
    override func viewDidLoad() {        
        super.viewDidLoad()
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

今回はラベルだけ変更しているので問題ないが、ボタンの名前とかは正しく反映されないかもしれない(未検証)