推薦文章:
2016年1月29日 星期五
2016年1月28日 星期四
透過NFS共用session
首先要架設NFS server,可參考[連結]
程式
www與sub分別是兩台不同機器,透過下列程式可獲得session相同
www.mydomain.com
<?php
ini_set("session.cookie_domain",'. mydomain.com');
session_start();
$_SESSION['test'] = 'testtttt------';
if ( !empty($_SESSION['test']) ) {
echo 'not empty - '.$_SESSION['test'];
} else {
echo 'empty';
}
?>
sub.mydomain.com
<?php
ini_set("session.cookie_domain",'. mydomain.com');
session_id($_COOKIE['PHPSESSID']);
session_start();
echo $_SESSION['test'];
?>
相關連結
程式
www與sub分別是兩台不同機器,透過下列程式可獲得session相同
www.mydomain.com
<?php
ini_set("session.cookie_domain",'. mydomain.com');
session_start();
$_SESSION['test'] = 'testtttt------';
if ( !empty($_SESSION['test']) ) {
echo 'not empty - '.$_SESSION['test'];
} else {
echo 'empty';
}
?>
sub.mydomain.com
<?php
ini_set("session.cookie_domain",'. mydomain.com');
session_id($_COOKIE['PHPSESSID']);
session_start();
echo $_SESSION['test'];
?>
相關連結
2016年1月27日 星期三
ubuntu 14.04架設NFS(Network Filesystem)
Service IP:110.1.1.1
Client IP:123.1.1.1
Client IP:123.1.1.1
Server
//更新系統及安裝相關package
$ sudo apt-get update
$ sudo apt-get install nfs-kernel-server
//建立提供的NFS資料夾
$ sudo mkdir /var/nfs
//修改資料夾擁有者
$ sudo chown nobody:nogroup /var/nfs
//修改開放可mount資料夾
$ sudo vi /etc/exports
//規則 [NFS server folder] [client ip or hostname]([權限等設定])
//開放資料夾權限等資訊可參考說明(http://linux.vbird.org/linux_server/0330nfs.php#nfsclient_mount)
/home 110.1.1.1(rw,sync,no_root_squash,no_subtree_check)
/var/nfs 110.1.1.1(rw,sync,no_subtree_check)
//重新執行相關服務
$ sudo exportfs -a
$ sudo service nfs-kernel-server start
//檢查是否成功開放
$ sudo showmount -e localhost
NFS每次重新restart時都會導致port隨機產生,為了讓port可以固定,以下為設定方式。
$ vim /etc/default/nfs-common
STATDOPTS="--port 32765 --outgoing-port 32766"
$ vim /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="-p 32767"
//網路上教學需要修改此檔案,但是本人操作後未修改仍然可以固定相關port
$ vim /etc/default/quota
RPCRQUOTADOPTS="-p 32769"
$ vim /etc/services
rpc.nfsd 2049/tcp # RPC nfsd
rpc.nfsd 2049/udp # RPC nfsd
rpc.nfs-cb 32764/tcp # RPC nfs callback
rpc.nfs-cb 32764/udp # RPC nfs callback
rpc.statd-bc 32765/tcp # RPC statd broadcast
rpc.statd-bc 32765/udp # RPC statd broadcast
rpc.statd 32766/tcp # RPC statd listen
rpc.statd 32766/udp # RPC statd listen
rpc.mountd 32767/tcp # RPC mountd
rpc.mountd 32767/udp # RPC mountd
rpc.lockd 32768/tcp # RPC lockd/nlockmgr
rpc.lockd 32768/udp # RPC lockd/nlockmgr
rpc.quotad 32769/tcp # RPC quotad
rpc.quotad 32769/udp # RPC quotad
$ vim /etc/modprobe.d/local.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768
options nfs callback_tcpport=32764
//重新執行相關服務
$ sudo service nfs-kernel-server start
//查看修改結果
$ rpcinfo -p
依照以上設定port成功後,必須將防火牆開啟(AWS、GCE需去預設相關安全性地方開啟port)
TCP、UDP都得開啟以上範例的相關port
$ vim /etc/rc.local
iptables -A INPUT -i eth1 -p tcp -s 192.168.66.0/24 -m state --state NEW -m multiport --dport 111,2049,32764:32769 -j ACCEPT
iptables -A INPUT -i eth1 -p udp -s 192.168.66.0/24 -m state --state NEW -m multiport --dport 111,2049,32764:32769 -j ACCEPT
//restart iptables
$ service rc.local start
//並沒特別開啟
$ vim /etc/hosts.deny
ALL: ALL
//並沒特別開啟
$ vim /etc/hosts.allow
portmap: ALL
Client
//更新系統及安裝相關package
$ sudo apt-get update
$ sudo apt-get install nfs-common
//建立clinet放置NFS位置資料夾
$ sudo mkdir -p /mnt/nfs/home
$ sudo mkdir -p /mnt/nfs/var/nfs
//mount NFS路徑
//mount e.g mount -t nfs [NFS IP]:[client folder] [remote folder]
$ sudo mount -t nfs 123.1.1.1:/home /mnt/nfs/home
$ sudo mount -t nfs 123.1.1.1:/var/nfs /mnt/nfs/var/nfs
//可查詢cline目前mount哪些資料夾
$ mount -t nfs
//取消remote mount
//e.g umount [client folder]
$ umount /mnt/nfs/home
$ umount /mnt/nfs/var/nfs
client重新開機後掛載會取消,如需讓client自動掛載有以下兩種方式
//方法一
$ vim /etc/fstab
//規則說明
123.1.1.1:/home /mnt/nfs/home nfs defaults 1 1
123.1.1.1:/var/nfs /mnt/nfs/var/nfs nfs defaults 1 1
//方法二
$ vim /etc/rc.d/rc.local
//規則說明
mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 \123.1.1.1:/home /mnt/nfs/home
mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 \123.1.1.1:/var/nfs /mnt/nfs/var/nfs
參考網址:
2016年1月26日 星期二
2016年1月22日 星期五
物件導向
物件導向專業術語說明
`Overload`
利用class建構式進行處理。簡單說在類別中定義與「類別相同」名稱,但是帶入「引數個數不同」
如:
public function Man() {}
public function Man($age) {}
public function Man($age, $company) {}
`Override`
「子類別」繼承「父類別」,同時必須「引數個數相同」、「method相同」、「傳回資料型態相同」等條件
`Overload`與`Override`參考說明網址
http://yensrule.blogspot.tw/2010/10/overloading-vs-overriding.html
============================================================
物件導向原則
系統抽象程度看interface,重用程度看abstract
SOLID 六項原則
單一職責原則SRP(Single Responsibility Principle)
開放封閉原則OCP(Open Closed Principle)
里氏替換原則LSP(Liskov Substitution Principle)
介面隔離原則ISP(Interface Segregation Principle)
依賴反轉原則DIP(Dependency Inversion Principle)
============================================================
Design Patterns
意圖導向設計intention-driven design
參考網址:
`Overload`
利用class建構式進行處理。簡單說在類別中定義與「類別相同」名稱,但是帶入「引數個數不同」
如:
public function Man() {}
public function Man($age) {}
public function Man($age, $company) {}
`Override`
「子類別」繼承「父類別」,同時必須「引數個數相同」、「method相同」、「傳回資料型態相同」等條件
`Overload`與`Override`參考說明網址
http://yensrule.blogspot.tw/2010/10/overloading-vs-overriding.html
============================================================
物件導向原則
系統抽象程度看interface,重用程度看abstract
SOLID 六項原則
單一職責原則SRP(Single Responsibility Principle)
- 一個類別處理一個職責的內容,
- 一個class如果要負責多個職責,其內容應該只是組合多個class,而每個被組合的class只負責單一職責,且通常這樣的組合都是透過接口(interface/abstract)。
- 好處:
class複雜性降低,因為實現什麼職責都有很清楚的定義
可讀性提高
可維護性提高
變更引起的風險降低,變更範圍降低,擴展性提高 - 參考網址:https://dotblogs.com.tw/hatelove/2010/10/16/single-responsibility-principle
開放封閉原則OCP(Open Closed Principle)
- 對擴充開放,對修改封閉
- 參考網址:https://dotblogs.com.tw/hatelove/2010/10/16/open-close-principle
里氏替換原則LSP(Liskov Substitution Principle)
- 子類別應該可以使用其基礎類別替代 。使用父類的地方,必須可以使用子類別代替,而不需要任何改變。
- 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/18/liskov-substitution-principle.aspx
介面隔離原則ISP(Interface Segregation Principle)
- Class與外部的關係,應只依賴它需要的最小介面,所以介面不能太肥,應該要細化,不然會強迫中獎。每一個interface的方法數目應該盡可能地降到最低。
- 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/17/interface-segregation-principle.aspx
依賴反轉原則DIP(Dependency Inversion Principle)
- 要依賴於抽象,而不要依賴於具體 。
1. 也就是class之間的耦合關係,要多墊一層interface/abstract來隔開。
2. 高層要用低層的方法,就都透過interface來表述抽象的行為,而不用管實體的concrete class是什麼。(滿足多型與Liskov substitution principle)。 - 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/21/dependency-inversion-principle.aspx
============================================================
Design Patterns
- 三大特性:封裝、繼承、多型
- 兩種抽象:interfact, abstract
- 目的:高內聚、低耦合(http://ppt.cc/314ot、https://dotblogs.com.tw/hatelove/2010/10/16/oo-loosely-coupling)
- SOLID 原則:單一職責原則、開放封閉原則、里氏替換原則、最小知識原則、介面隔離原則、依賴反轉原則
- 基本設計原則:DRY, KISS, YAGNI
- 基本設計方式:interface-driven, intention-driven, 生成物件與使用物件分開
意圖導向設計intention-driven design
參考網址:
- http://ppt.cc/U9j6
- http://ppt.cc/RJq8l
- http://irw.ncut.edu.tw/peterju/se.html
2016年1月19日 星期二
2016年1月18日 星期一
IntelliJ IDE 1.5破解
以下兩個影片資訊皆有下載個檔案載點
Windows
//教學影片
https://www.youtube.com/watch?v=6AtlBNV_uFM
Mac
//教學影片
https://www.youtube.com/watch?v=TpWxIzi-md8
2016年1月14日 星期四
Multiple SSH Keys settings for different github account
本文引用文章:https://gist.github.com/jexchan/2351996
產生ssh key
$ ssh-keygen -t rsa
將ssh key,複製到~/.ssh
$ ~/.ssh/id_rsa_activehacker
改變ssh key權限
$ chmod 400 id_rsa_activehacker
$ cd ~/.ssh/
$ touch config
#activehacker account
Host github.com-activehacker
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_activehacker
$ ssh-keygen -t rsa
將ssh key,複製到~/.ssh
$ ~/.ssh/id_rsa_activehacker
改變ssh key權限
$ chmod 400 id_rsa_activehacker
$ cd ~/.ssh/
$ touch config
#activehacker account
Host github.com-activehacker
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_activehacker
OpenSSH client 漏洞 - 影響的 OpenSSH 版本為 5.4 – 7.1
本文引用文章:https://blog.wu-boy.com/2016/01/openssh-security-cve-2016-0777-and-cve-2016-0778/
影響的 OpenSSH 版本為 5.4 – 7.1
暫時修補漏洞方式如下
FreeBSD
$ echo 'UseRoaming no' | sudo tee -a /etc/ssh/ssh_config
MacOS
$ echo "UseRoaming no" >> ~/.ssh/config
重新產生您的 Key Pairs
# 產生 key
$ ssh-keygen -t rsa
$ ssh-copy-id user@123.45.56.78
# 或者是
$ cat ~/.ssh/id_rsa.pub | ssh user@ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
影響的 OpenSSH 版本為 5.4 – 7.1
暫時修補漏洞方式如下
FreeBSD
$ echo 'UseRoaming no' | sudo tee -a /etc/ssh/ssh_config
MacOS
$ echo "UseRoaming no" >> ~/.ssh/config
重新產生您的 Key Pairs
# 產生 key
$ ssh-keygen -t rsa
$ ssh-copy-id user@123.45.56.78
# 或者是
$ cat ~/.ssh/id_rsa.pub | ssh user@ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
2016年1月11日 星期一
node.js常駐程式[forever]
本文內容引用此文章:http://u1413745095-blog.logdown.com/posts/241538-nodejs-program-permanently-carry-out
一般執行方式
但是當終端機關閉時此程式也會跟著終止,對於一個需要常駐的Web Service來說並不好
但透過forever這個module就能讓程式常駐囉!
$ node myapp.js
將forever module安裝在全域
$ sudo npm install forever -g
在porject目錄中安裝forever module
$ sudo npm install forever
使用forever啟動app
$ forever start myapp.js
若是使用express框架並且想將app啟動為production mode
$ export NODE_ENV=production; export PORT=9000;
$ forever start myapp.js
一般執行方式
但是當終端機關閉時此程式也會跟著終止,對於一個需要常駐的Web Service來說並不好
但透過forever這個module就能讓程式常駐囉!
$ node myapp.js
將forever module安裝在全域
$ sudo npm install forever -g
在porject目錄中安裝forever module
$ sudo npm install forever
使用forever啟動app
$ forever start myapp.js
若是使用express框架並且想將app啟動為production mode
$ export NODE_ENV=production; export PORT=9000;
$ forever start myapp.js
2016年1月8日 星期五
2016年1月7日 星期四
Configuring the AWS Command Line Interface
參考網址:http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: ENTER
$ aws ec2 create-security-group --group-name my-sg
--description "My security group"
{
"GroupId": "sg-903004f8"
}
Installing the AWS Command Line Interface
參考網址:http://docs.aws.amazon.com/cli/latest/userguide/installing.html#install-bundle-other-os
ubuntu
$ sudo apt-get update
$ sudo apt-get install python2.7
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python27 get-pip.py
$ sudo pip install awscli
Note
sudo: pip: command not found
$ which pip
/usr/local/bin/pip
$ sudo /usr/local/bin/pip install awscli
$ sudo pip install --upgrade awscli
ubuntu
$ sudo apt-get update
$ sudo apt-get install python2.7
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python27 get-pip.py
$ sudo pip install awscli
Note
sudo: pip: command not found
$ which pip
/usr/local/bin/pip
$ sudo /usr/local/bin/pip install awscli
$ sudo pip install --upgrade awscli
訂閱:
文章 (Atom)