Latest Publications

phpのcurlでsslサイトにつなぐ

phpからcurlを使ってサイトにアクセスした際に
どうしてもレスポンスが取得できないことが発生。

何もレスポンスがないので原因判明に苦労したが
terminalのコマンドで

curl -I https://example.com -k

と入力すると

curl: (35) Unknown SSL protocol error in connection to example:443

ということでSSLのプロトコルエラーであることが判明。

色々とコマンドを試し、

curl -I https://example.com -k  --tlsv1

で接続できた。

これをphpのcurlでどうやるかも苦労したけど
下記のオプションで、SSLのバージョンを手動指定することで解決。

curl_setopt_array($m,
  array(
    CURLOPT_URL =>'https://example.com',
    CURLOPT_SSLVERSION => 1,
  )   
);

SSLのバージョンは通常、自動判別するけど
サイトによってはそれが上手く動かず
指定をする必要があるみたい。

gitで新規作成ファイルがstatusに上がってこない問題を解決

ファイルを変更したものはgit statusに上がってくるが
新規作成したものは出てこない。なのでaddもできない。
.gitignoreでもそんなことしていないし、原因を探すのに苦労した。

原因は上位ディレクトリの.gitignore。

Macのホームディレクトリにあるドットファイルを
gitで管理しはじめたが
その下位ディレクトリに開発ソースを置いていたので影響を受けてしまった。

プロジェクトの.gitignoreに下記を追加

!*
!.*

無視しない、ということなのでイコール許可するということ。
一旦全部許可した上で、改めて無視ファイルを指定する。

git サブモジュールメモ

gitのサブモジュールを追加

自分の管理しているgitプロジェクトの内部に
プラグインなどとして別のgitプロジェクトを追加したい場合は
サブモジュールとして入れる。

プロジェクトルートで下記。

git submodule add git://example.com/repo.git DIR

サブモジュールの中身は変更しない。
したらgit add できずに modified contentとかって残る。

gitのサブモジュールを展開

git cloneしただけではサブモジュールはディレクトリしかできない。
下記が必要

git submodule init
git submodule update

gitのサブモジュールを削除

サブモジュールのディレクトリを消して
.gitmodulesも.git/configも修正したのに
再度追加しようとすると
already exists in the index
ってエラーが出たら

git rm -r DIR

git submoduleを最新にする

git submodule update

をやって最新にしてたつもりだったのに
実際にはなっていなかった。

submoduleを最新にするには
下記が必要みたい。

git submodule status
git submodule foreach git pull
git submodule status

後はコミットしとく。

git add -A
git commit -m "hoge"
git push

参考記事
git submoduleで各サブモジュールを最新にする – メモの日々(2011-04-13)

vimが文字化けしたので入れなおして修正

サーバーのvimがいつの間にか日本語文字化けするようになっていた。

調べればすぐ解決するだろうと思っていたら
サーバーの文字コード設定や
.vimrcの設定をしても解決せず。

結局、vimを入れなおすことで修正できた。

現在動いているvimのパスを調べて削除してから
下記を実行

cd ~/tmp
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
wget ftp://ftp.jp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gz
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz
tar jxvf vim-7.3.tar.bz2
tar zxvf vim-7.2-extra.tar.gz
tar zxvf vim-7.2-lang.tar.gz
mv vim72 vim73/
cd vim73/src
./configure --enable-multibyte --with-features=huge --disable-selinux --prefix='/usr/local/vim-7.3'
make
sudo make install
cd /usr/local/bin
sudo ln -s /usr/local/vim-7.3/bin/vim

こちらのページを参考にさせていただきました。
CentOSにVim最新版をインストールする

サーバーの設定を自動でやるfabric

導入

sudo easy_install fabric

インストールすると、

/usr/local/bin/fab

ができる。

なぜかパスが通ってなかったので
.zshenvにパスを追加。

どこでもいいのでfabfile.pyを作成。

import os.path
from fabric.api import run, sudo, settings, abort, put, cd, env 
from fabric.contrib.console import confirm
from fabric.decorators import runs_once

# サーバー情報
env.hosts = ['xxx.xxx.xxx.xxx']
env.user = 'username'
env.port = '99999'
#env.key_filename = [os.path.expanduser('~/.ssh/secret_key')]

def hello():
 run("touch test1.txt")
 run("mv test1.txt test2.txt")

実行したら、設定ファイルの中身がサーバーで実行される。

fab hello

後は自分の設定したい内容を作りこんでいくだけ。

fabricがいるのか?

Capistrano使いの方から、
「Capistranoだけでいいじゃないか」と
disられる。

デプロイツールではあるけど
どうせCapistranoを使っているなら
サーバー設定用のプロジェクトを作っておいてそっちでやればと。

反論できず。

追記

sudo("mv test1.txt test2.txt")

というような感じでsudoを入力できるようになってて
パスワードはどうするんだろうかと思っていたら
fabの実行時にパスワードを聞かれた。なるほど。

サーバーのホスト名は安易に変更してはいけない

最近複数のサーバーにsshすることが多くなり、
今どこのサーバーにいるのかをわかりやすくするため
シェルの表示にホスト名を表示するようにしていた。

しかし、さくらVPSのホスト名はどれも似たようなものでわかりにくいため
自分がわかりやすい名前に変更してみた。

変更自体はすぐできたが、
その後にメールソフトからの送信ができなくなった。

ホスト名を変更した影響が
メール送信用に設定しているsendmailに出てしまった様子。
認証のところで止まってしまう。

色々と調べて試したがどうやっても上手く動かず
結局ホスト名を元に戻した。

シェルの表示はシェルの設定を変えてわかりやすくした。
本来はこっちだよね。

最初からホスト名を変えてから設定すれば
良かったのかもしれないが、設定が終わった後で
安易にホスト名の方はしないものだと学習。

CakePHPのmigrationのtype

cakephpのmigration pluginで
typeの指定をするところがある。

どんなtypeがあるのかがよくわからなくて調べたけど
はっきりとした情報が出ず。
関係ありそうなものはあったのでメモ。

string  => varchar
text
integer  => int
float
datetime
timestamp
time
date
binary  => blob
boolean  => tinyint

CakePHP2.3のAuthコンポーネント

色々と変わったらしいけど、とりあえず変更後に出た不具合と解決法をメモ

	public function beforeFilter() {
		parent::beforeFilter();
		//$this->Auth->allow('*');//コントローラーに対して全部のアクションを許可、というのが動かなかった
		$this->Auth->allow();
	}

vimでスニペットが使えるように設定

よく使うテキストパターンを一発で出せるようにしたいと考えて
IMEの辞書登録などを調べたけど改行に対応しておらず、
改行も含めて高度な設定ができるように思い切って作業。

準備

vimのpluginを管理するツールを入れる

% git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

スニペットを使えるようにするプラグインを入れる

% git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

ついでに、各言語のスニペット集を入れる

% git clone https://github.com/honza/snipmate-snippets.git ~/.vim/bundle/snipmate-snippets

.vimrcに下記を追記
最後の行にあるのがスニペットを設定しているファイルを見に行く部分。
~/.vim/mysnippets
が自分用のファイルを置く所にした。


"--------------------------------------------------------------------------
" neobundle
set nocompatible               " Be iMproved
filetype off                   " Required!

if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim/
  endif

  call neobundle#rc(expand('~/.vim/bundle/'))

  filetype plugin indent on     " Required!

  " Installation check.
  if neobundle#exists_not_installed_bundles()
	  echomsg 'Not installed bundles : ' .
	          \ string(neobundle#get_not_installed_bundle_names())
	  echomsg 'Please execute ":NeoBundleInstall" command.'
	    "finish
endif
NeoBundle 'Shougo/neocomplcache.git'
NeoBundle 'Shougo/neosnippet.git'

" Plugin key-mappings.
imap      (neosnippet_expand_or_jump)
smap      (neosnippet_expand_or_jump)

" SuperTab like snippets behavior.
imap  neosnippet#expandable_or_jumpable() ? "\(neosnippet_expand_or_jump)" : pumvisible() ? "\" : "\"
smap  neosnippet#expandable_or_jumpable() ?"\(neosnippet_expand_or_jump)" : "\"

" For snippet_complete marker.
if has('conceal')
  set conceallevel=2 concealcursor=i
endif
" Tell Neosnippet about the other snippets
let g:neosnippet#snippets_directory='~/.vim/bundle/snipmate-snippets/snippets, ~/.vim/mysnippets'

vimを起動させて、下記のコマンドを打つことでインストールされる

:BundleInstall

自分用の設定ファイル

.vimrcで設定したディレクトリ、
ここでは
~/.vim/mysnippets
の中に設定ファイルを作る。

ここで、

拡張子名.snippets

というファイルを設定すると、その拡張子のファイルをvimで開いた時に
設定したスニペットが適用される仕組み。

例えば、

php.snippets

というファイルを作るとphpファイルに適用される。

しかし、今回実施したかったのはtxtファイルで

txt.snippets

というファイルを作ってもどうしても動作しなかった。
(誰かやり方わかる方いれば教えてください)

しかたがないので

_.snip

というファイルを作成。これは拡張子に関わらず、
全てのファイルに適用される。

スニペットの設定

あとは自分の便利なように設定する。

snippet ahaha
 1gyoume
 2gyoume
 3gyoume

と設定しておけば、vimでahahaと入力した後でCtrl+kと打つと
1gyoume
2gyoume
3gyoume
と出力される。

他にも、かなり高度なことも可能。

snippet hogef
  function hogef {
        ${1:code}
  }

などとすると、入力された上に指定場所にカーソルが合った状態で
インサートモードになっているため
すぐに中身を入力することができる。

応用

.vimrcの中身を変更することでスニペットの適用方法も変えれるみたい。
色々と使ってみながら、自分の使いやすいように設定を変更していく。