GitでFTPアップロードする手順

git-ftpをインストール

$ brew install git-ftp

インストールできたか確認

$ git ftp

FTP情報を入力(gitで管理しているディレクトリで操作)

$ git config git-ftp.url ftp://<ホスト名>/<該当フォルダまでのパス>
$ git config git-ftp.user <ユーザー名>
$ git config git-ftp.password <パスワード>

コミット後に反映する場合、最初の一回は以下のコマンドを実行(git-ftp.logが生成されていることを確認)

$ git ftp init -v

次回以降は以下のコマンドでデプロイされる

git ftp push

【アーカイブ】Ruby文法メモ

見返すことはないとは思うが、Rubyの文法メモが出てきたので、ここに写しておく。
情報は2014年11月16日時点のものなので、あしからず。

# コメント

=begin
コメント
=end


# rubyはすべてオブジェクト

msg = "hello world!" # 変数
MSG = "hello world!" # 定数
print msg # 改行がない
puts msg # 改行がある
p msg # データの種類がわかる

# メソッド
# ! 破壊的メソッド
# ? 真偽値を返すメソッド

puts msg.upcase # HELLO ~
puts msg # hello ~
puts msg.upcase! # HELLO ~
# ポインタを操作してまう
puts msg # HELLO ~
puts msg.empty? # true

# 配列
arr = [5, 8, 4]
p arr[0] # 5
arr[0] = 3
p arr[0] # 3
p arr[0..2] # [3, 8, 4] // 0~2の要素を取ってくる
p arr[0...3] # [3, 8] // 0~2未満の要素を取ってくる
p arr[-1] # 4 # 最後の要素を取ってくる
p arr[1, 2] # [8, 4] # 1番目の要素から2個分

arr[0...2] = [1, 2] # [1, 2, 4]
arr[1, 0] = [10, 11, 12] # [1, 10, 11, 12, 2, 4]
arr[0, 5] = [] # [4]
arr.size # 要素数
arr.sort # 小さい順にソート
arr.reverse # 逆順にソート
arr.sort.reverse # 繋げられる
arr.push(100) # 配列末尾に100を追加
arr << 101 << 102 # 配列末尾に101, 102を追加

# ハッシュ
sales = {"isaka" => 200, "hirata" => 300}
p sales["isaka"] # 200
# シンボルの書き方 (文字列オブジェクトをキーを使う場合、文字列オブジェクトを使うより早い書き方)
sales = {:isaka => 200, :hirata => 300}
p sales[:isaka] # 200
# ruby1.9からできる書き方
sales = {isaka:200, hirata:300}
p sales[:isaka] # 200

sales.size # 要素数
sales.keys # キーのみ返す
sales.values # 値のみ返す
sales.has_key?(:isaka) # そのキーがあるかどうか


# キャスト
a = 10
b = "5"
p a + b.to_i # 15 to_iはint変換 to_sはString変換

# %記法
s = "hel\"lo"
s = %Q(hel"lo) # ダブルクォーテーション
s = %(hel"lo) # ダブルクォーテーション
s = %q(hel"lo) # シングルクォーテーション

a = ["a", "b", "c"] # 文字列のみの配列
a = %W(a b c)
a = ['a', 'b', 'c'] # 文字列のみの配列
a = %w(a b c)

# if

score = 80
if score > 60
 puts "ok"
elsif score > 40
 puts "soso"
else
 puts "no"
end

puts "ok" if score > 60

=begin

true それ以外(0, ""も含む)
false false nil

=end

a = 1
b = 2
a, b = 1, 2 # 多重代入

# case

signal = "red"

case signal
when "red"
 puts "stop"
when "green", "blue"
 puts "go"
else
 puts "end"
end

# ループ

# 数値オブジェクトのtimes
3.times do |i|
 puts "#{i} : hello"
end

i = 0
while i < 3 do
 puts "#{i} : hello"
 i += 1
end


3.times do |i|
 if i == 1
 break # ループを終える
 next # ループを1段階進める
 end
 puts "#{i} : hello"
end


for i in 0..2 do 
 puts i
end

for color in ["red", "pink", "blue"] do
 puts color
end

["red", "pink", "blue"].each do |color|
 puts color
end

{"red"=>200, "pink"=>200, "blue"=>200}.each do |color, price|
 puts "#{color}:#{price}"
end


# 関数的メソッド
def sayHi(name = "sapporo")
 puts "Hi!" + name
end

def sayHi_s(name = "sapporo")
 s = "Hi!" + name
 s # return sと同意
end

sayHi("tom")
puts sayHi_s()


# クラス
# クラス名は必ず大文字
class User

# クラス変数
 @@count = 0

# コンストラクタ
 def initialize(name)
 # インスタンス変数
 @name = name
 @@count += 1
 end

# ゲッタ
 # アクセサをつくらないと外部からアクセスできない
 def name
 @name
 end

# セッタ
 def setName(newName)
 @name = newName
 end

# アクセサを設定
 # attr_accessor :name
 # ゲッタのみを設定
 # attr_reader :name
 # セッタのみを設定
 # attr_writer :name

# インスタンスメソッド
 def sayHi
 puts "my name is #{@name}"
 end

# クラスメソッド
 def User.sayHello
 puts "class meshod"
 end

end

tom = User.new("tom")
tom.sayHi()
User.sayHello()

# getter
tom.name
# setter
tom.name = "tombo"
tom.setName("tombo")


# 継承
class SuperUser < User

def shout
 puts "HELLO #{@name}"
 end
end


# Timeクラスの使い方
t = Time.now # 今の時間

Dockerのよく使うコマンド

コンテナの起動(-dオプションをつけ、バックグラウンドで起動することが一般的)

$ docker-compose up -d

コンテナの停止

$ docker-compose down

コンテナの停止とそのボリュームを削除

$ docker-compose down -v

ボリュームの一覧表示

$ docker volume ls

ボリュームの削除

$ docker volume rm (VOLUME NAME)

イメージの一覧表示

$ docker images

イメージの削除

$ docker rmi (IMAGE ID)

現在起動しているコンテナの一覧表示

$ docker ps

すべてのコンテナの一覧表示

$ docker ps -a

コンテナの削除

$ docker rm (CONTAINER ID)

任意のサービスで任意のコマンドを実行

$ docker-compose exec (サービス名) (コマンド)

$ docker-compose exec wp-cli wp db export data.sql --allow-root

コミットメッセージのルール

下記が原則的なルールとなる。

  • 1行目に全体的な説明(50字以内)
  • 2行目は空白
  • 3行目以降に変更内容の詳細

1行目には次のような記述フォーマットが使われることが多い。

  • 「Fix: 〜」:バグ修正
  • 「Add: 〜」:機能・ファイルの追加
  • 「Change: 〜」仕様変更
  • 「Remove: 〜」機能・ファイルの削除

HSTS(HTTP Strict Transport Security)について

2010年に公開されたFiresheepというFirefoxのアドオンの登場により、暗号化されていない同一ネットワーク上の通信をパケットキャプチャすることによって、HTTP Cookie情報を盗みとり、簡単になりすまし(セッションハイジャック)ができることが周知の事実となった。

そのため、今日ではほとんどのWebサイトがすべてのページでSSLによるHTTPS通信を行うような流れとなり、各サイトのサーバー側でHTTPでアクセスしてきた場合、HTTPSにリダイレクトさせるコードを書いて対応していた。

しかし、その場合一時的にHTTPでアクセスするため、その瞬間のセッション情報が盗み出される危険がある。

そこでHTTPではなく、HTTPSに直接アクセスしてほしいことをブラウザに支持するための規定ができた。それがHSTSである。

具体的な対応

HTTP通信を行っているWebサーバー側からStrict-Transport-Securityヘッダを返すことで強制的にHTTPSにアクセスさせる。

具体的な.htaccessでの記述例

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Browsersyncで同じLAN内の人にローカルファイルを見せる

まずはBrowsersyncをインストール

npm install -g browser-sync

これでローカルのパスを指定すると勝手に始まる

browser-sync start --proxy "192.168.33.12"
browser-sync start --proxy http://localhost/~

※デスクトップとかのパスでもOK。ExternalのURIからほかのブラウザで閲覧できる