読者です 読者をやめる 読者になる 読者になる

ComposerとPagoda Boxで今どきなDeployしたらモテ期到来で彼女が出来ました

Paas Pagoda Box

うそです。

JAWS FESTA Kansai 2013へ行って来たんですが、関西PHP勉強会でAWSと関係のないものを習得してきましたよwという話。 大きくは2点で、@omoonさんのSaaSの話。HerokuなどのSaaS全盛期の中、PHPのSasSであるPagoda Boxなるものがあるらしい。ってのと@slywalkerさんのComposerの話。これも今流行のパッケージ管理の話でJSなどのフロントエンドパッケージ管理ツールのBOWERなんかがありますが、PHPならComposerでしょ!?ってことで。

当日のスライド一覧

用意するもの

必須

  • Git

あると便利

今回は手元のGitをdeployするだけなので、Clientからの操作で説明します。Webからの処理が意外と不便だったってのもありますが。。。

Demo

自分と言えばヤフオク、ヤフオクといえば俺、みたいなところがあるので、ヤフオクネタで作ってみました。開くとYConnect(Yahoo! Japan oauth2.0)で認証取りに行って、出品中一覧を表示します。

YCoonect Demo

読み込みにやたらと時間がかかるのだけど、YConnectにいきなり接続しに行くからかな?この辺課題だなぁ。

作業手順

1) てきとーにプロジェクトを作る

Demoそのまま使うのであればgithubにpagodaboxbranchで置いたのでそれをクローン。

➜  ~  git clone -b pagodabox https://github.com/comeonly/YConnectDemo.git

2) Pagoda BoxのSSH設定をする(初回のみ)

ここ参照 Pagoda Box Portal | Deploy and Scale PHP Apps Setting Up Git - Mac

3) Pagoda BoxでNew Appする

➜  ~  cd YConnectDemo
➜  YConnectDemo git:(pagodabox)  pagoda create

*Webの管理画面からの場合は別途gitremoteを設定する必要あり ここ参照

➜  YConnectDemo git:(pagodabox)  git remote add pagoda git@git.pagodabox.com:yconnect-demo.git

4) Deployする

➜  YConnectDemo git:(pagodabox)  pagoda deploy

Helpの記事にはpagoda deploy -b [brandch neme]的なことを書いていますが、そんなオプションないよと言われますし、pagoda deploy -hでもこんなのしかでません。

➜  ~  pagoda deploy -h
Usage: pagoda [options]
    -a, --app VAL

deployしたいbranchにいれば、そのbranchでdeployされる仕様みたいです。

勘所

「そんなBoxfileで大丈夫か?」

Boxfileの設定がさっぱりわかんなくてかなりハマった。

web1:
  name: yconnect-demo   #app名(無くても良いっぽい)
  shared_writable_dirs: #書き込み可能なディレクトリ
    - tmp
  php_extensions:       #PHPの設定
    - curl              #composerインストールするのとOauthに必要
    - zip               #composerでパッケージを開くのに必要
    - intl              #composerに必要っぽい
  after_build:          #サーバーのビルドが終わったあと実行する(bash)
    #composerのダウンロード
    - "curl -sS https://getcomposer.org/installer | php"
    #composerのインストール
    - "php composer.phar install"
    #opauthのyconnect用pluginのファイル名修正
    - "mv vendor/opauth/yahoojp/YahoojpStrategy.php vendor/opauth/yahoojp/yahoojpStrategy.php"

enjoy it !!!!

MovableType 4.27からWordpressへ移行したメモ

mt wp plugin Movable Type Word Press プラグイン

なんでこんなこと書くかというと、ツール -> インポート にある標準のプラグインだと動かなかったから。
あと、リダイレクト これが意外と大変でした。

使ったプラグイン

こいつらです。

上記のプラグイン入れれば手順書いてあるので以下は読み飛ばし可です

1. MTのバックアップ

該当のブログから ツール -> バックアップ でバックアップ

2. WPへプラグインのインストール

こいつ。 Movable Type Backup Importer

3. 指定のフォルダへアップロード

プラグインを適用したら指定されるんでそれの通りにすればおk。

4. あとはプラグインの指示通りでおk

あー、書くのめんどくさくなってしまったよ。

サムネイルが適用されない。。。

100%では無いけど、このプラグインで何とかなりました。

Automatic Post Thumbnail at SANIsoft

記事内の画像を消すなら、SQLで一括消したらいいんじゃないかな?やってないのでわからんけど。まあ最悪スクリプト組んじゃえ。

需要あれば重い腰をあげるかも。そんときゃコメント下さい。

リダイレクト

Redirection – Manage 301 redirections without modifying Apache

このプラグイン、無茶苦茶使える!!301リダイレクトとかしてくれるから超助かる。

例えば /hoge.html/hoge へ飛ばすには

正規表現にチェック
ソースURL     /(.*).html?$
ターゲットURL /$1/

といった感じ。

あと、Movable Type Backup Importer使うと、post-3post_3 とかになることがあるので、これも設定する。

正規表現にチェック
ソースURL      /-(.*)$
ターゲットURL /_$1/

みたいな。

あとはよしなに。。。

PHPカンファレンス関西2013へ行ってきた

PHP 勉強会 vim debug

でまあそこで Debugging and Profiling PHP てタイトルで 楽天のGraham Weldon氏がセッションされてたわけです。 すごい良い話だったのでまとめたいなぁ、と思ったんですが、どうも時間が取れないし、温度が下がってきちゃうので、備忘録だけ。あと、プロファイリングについても話されたたのですが、それはパスしてデバッグの話だけ。

デバッグについて

X-debug使ってるよね?

はい。phpcsで入れろと言われたので入れました。

んじゃ、デバッグvar_dumpとか使うな。

え?マジですか?それしか無いと思ってましたよ。

MacならCodebugがGUIで出来るからオススメ

(もうひとつアプリをおっしゃったんですが失念。。。)

設定方法

で、このあと設定方法なんかを解説されてたんですが、

  1. X-debug入れる
  2. Chrome Xdebug helper入れる

これが超楽だったのでこれにしました。

一応Codebug入れてみたんすけど、どうもvimmerな自分にはしっくり来ないので、探してみると、、、

Vim + Vdebug + Xdebug でPHPのリモートデバッグ | Code Life

こんな記事を見つけたので、もうあとはこっち見てもらえばいいやってんで終わります。

なにが良いの?

上記のブログでも書かれてますが、「なんでデバッグするのにコード書くんだ?」に尽きます。消し忘れるし、コード見にくいし。

僕なんかよくあるパターンですが、var_dump($hoge)したけど原因はそこじゃなくてvar_dump($fuga)だった場合。時間の無駄だなぁと。

ほかにも利点はたくさんだと思います。

おまけ

CakePHPでもおなじみの(多分このアイコン見たことあるはず)markstory (Mark Story)氏もブログに書かれてました。 Remote debugging with vim and xdebug | Mark Story

ってことで、これだけでも行った価値がかなりあったぞPHPカンファレンス関西2013、と。

あ、あと Graham Weldon 氏はかなり温和な感じの話し方の人だったので、上記のような強い語調ではないです。すげーやさしそうな人でした。

Nuflair+LectureというopenFrameworksのワークショップへGalaxy Galleryへ行ってきた[追記有り]

C++ openFrameworks VJ ワークショップ

内容

Nuflair+Lecture
~openFrameworksを使ったAudio Reactiveな映像製作~
2013.4.14 (sun) at GalaxyGallery

http://www.galaxygallery.info/now/nuflair/

  • 1時限目(14:00-15:30) 休憩10分
    • oF(openFrameworks)とは、インストールと基本
  • 2時限目(15:40-17:10) 休憩10分
    • 基本的な描画
  • 3時限目(17:20-18:50) 休憩10分
    • 描画2
    • プログラミング基礎
    • 音との連携
  • 4時限目(19:00-20:30)
    • 音との連携2
    • 製作と発表

配布されたSamples目次

  1. emptyExample
    • コンパイル
  2. basicDrow
    • 簡単な描写
  3. basicDrow2
    • 少し複雑な描写
  4. hensu
    • 変数
    • 関数
  5. blending
    • 画像合成関数の紹介
  6. keyboard&if
  7. for & for2
    • for構文
  8. rectMode
    • 四角形の描写
    • `ofRotateZ()`Zはz軸(回転軸)を基準に回る
  9. rotate
    • `ofTransLate()`中心軸の変更
  10. scale
    • サイズの倍率
    • `ofMap()`関数 => 最小値と最大値を設定する
    • `ofPushMatrix()`と`ofPopMatrix()`で`ofScele`や`ofRotate`の影響を制御する
  11. basicAnimation
    • 動きを付ける
  12. basicEasing
    • マウス押下で動きをつける(イージング関数)
    • `testApp::mousePressed()`でマウス押下を検知
  13. simpleAudioInput
    • 音の取得`ofSoundStream`型を使用する
  14. simpleAudioInput2
    • 変化を付けてみる
  15. simpleAudioInput3
    • 閾値で制御する
  16. simpleVJ1-4,6
    • 13-15をまとめてやってみる
  17. simpleVJ5
    • アニメーションを加える
  18. simpleVJ7
    • 音量に応じて変わる
  19. simpleVJFinal
    • 全部のせ

Tips

main.cppで画面全体の設定をする

e.g) フィルターを画面全体にかけるなど

// 円をスムーズにする。
window.setGlutDisplayString("rgba double depth alpha samles>=4");
デバッグ

<<この感じがヒアドキュメントを思い出させる。

// var : 変数
// xcodeで変数の内容を表示させる
cout << var << endl;
画像の読み込み
img.loadImage()

感想

プログラミングの基礎についての事前通知が必要だったと思う

わりとマジで。明らかにプログラミングの基礎があることが前提な気がする。条件分岐とか初歩的なのも説明してたけど、はしょりすぎで理解してるのが前提の説明だったと思う。
IT勉強会なら普通だけど、Galaxy GalleryでC++のソースガリガリ書くとは思わんがなw
昨日Xcodeインストールしたばかりのバーのマスターには無理だろうて(実際にいた)。

高い

4,000円にしてはスタッフ3人(講師含む)は少ないかもなぁ。20人で全くの素人が4人いれば絶対無理だしなー。まあ素人の問題は上記と関係するけど。スポンサー募ればよかったんじゃね?みたいな。
さらにプラス500円のワンドリンクなら場所代も安くなってるだろうし、う〜ん、というかあの内容だったからどうしてもIT勉強会と比較するからダメなんだろうけども。。。

内容は大満足

プログラミングの基礎知識がある自分にとってはとても楽しかった。C++に触れる良いきっかけになった。特に音声の出力で色やデザインを変更できるところはサードアイがオープンしそうでかなりキテマス。
できたらslideshare.netにあげてくれないかな、今日のスライド。

途中まで制作したものをもうちょっと作って機会があれば映像をアップしてみたい。
個人的には大満足。

2013-04-15 1:52追記

このスライドよくまとまってる。たぶん同じのを使ってたような気がする。

Yahoo!オークション : このサーバーで操作できません。URLを確認してください。

Yahoo! オークション Scraping スクレイピング

オークションが再出品できない

このサーバーで操作できません。URLを確認してください。

こんなメッセージが出て再出品ができなくなりました。
なんでかこんなことにハマッてしまったので備忘録。

いや、言われた通りにすりゃいいだろ

そうです。その通り。
URL確認すれば良いんです。

ただ、自分と同じくツール使ってる(作ってる)人とかはハマったかもなぁ

地味にYahoo!の仕様変更?

http://page3.auctions.yahoo.co.jp/
このドメインだけ、仕様が変わっています。

  1. エンコードEUC-JPからUTF-8
  2. 再出品ページはhttp://pageinfo3.auctions.yahoo.co.jp/

いや、page3ドメインだけなので全体的に仕様変更する気なのか、サーバー移転の関係なのかわからん。
なにがしたいんだよお前ら。



障害対応の皆様、ご苦労様でした。
現場からは以上です。

CakePHPで開発するVimmerにオススメの設定

CakePHP Vim Vimrc

はじめに

私の設定はまとめてここに置いてあります。
comeonly/spf13-vim

spf13/spf13-vimというVimディストリビューションを使っているので、インストールしたあと、spf13氏のリポジトリを私(comeonly)のものに差し替えてもらえれば同じ設定になります。

前はcarlhuda/janusを使ってたんですが、カスタマイズしにくいのと、neocomplcacheとかVundleとか新しいのを使いたかったのでやめちゃいました。

上記spf13-vimから追加したもの

世界中のVimerがtpope氏の恩恵を受けてるはず。今見たら4つもプラグイン入れてるわ。。。今回の記事とは関係ないですが便利なプラグインです。

後述しますが、phpとhtmlがまざってても綺麗にインデントします。forkしてCakePHP用にタブの設定を弄りました。

CakePHPのコーディング規約をPHP_CodeSnifferでチェック、Syntasticで該当箇所を表示

綺麗なコードってどうやって書くんだろう・・・謎でした。コーディング規約ってのがあるらしいんですよ。

CakePHP 2.3 の新機能 ServerShell の話 - Shin x blog
この記事読んで、コーディング規約って大事なんだなぁと思って、なんとかSyntasticで表示してくれないかなぁってのが実はきっかけであります。

必要なもの

  1. PEAR
  2. PHP_CodeSniffer
  3. scrooloose/syntastic

ここまでの設定は以下が詳しいです。とてもわかりやすく参考になりました。この場を借りて御礼申し上げます。
Vim初心者によるVim導入記録(CodeSnifferインストール+シンタックスチェック syntastic設定編) | Code Life




さて、ではここまででsyntasticでエラーが表示できるようになっているかと思います。
ここからがCakePHP用の設定。

方法は2つ。

1) PHP_CodeSniffer側の設定を変更する
デフォルトの規約をCakePHPに設定します。ちなみにインストール時はPEARの規約が設定されているそうです。

$ phpcs --config-set default_standard CakePHP

これだけ。

2) syntastic側の設定を変更する
syntasticがphpcsを呼ぶ時の引数に --satandard=CakePHP を指定します。

let g:syntastic_php_phpcs_args = '--report=csv --standard=CakePHP'

以上


HTMLの混ざったctpファイルでも綺麗なインデントをさせる

CakePHPで開発しててctpファイルが見にくいことがあるんです。そもそもphpをガリガリ書いちゃダメなんだろうなぁ、わからんけど。
なんにせよ、インデントが残念でイライラする。どうにかしたい。。。

相変わらずstackoverflow.com最高です。

After looking really really hard into all solutions, I found out this plugin:

http://www.vim.org/scripts/script.php?script_id=604

It seems to have solved my problems!!!!!

Correct indentation of HTML and PHP using Vim - Stack Overflow

この記事にありました。
Vundleが入っていれば

Bundle 'php.vim-html-enhanced'

でOK。

ただ、この設定だとshiftwidth=3という誰得設定。。。
それからCakePHPの規約はハードタブなのでその3点だけ変更したのがこちら。

Bundle 'comeonly/php.vim-html-enhanced'

g=G で快適。


PHP全般で便利な関数

ここで見かけたやつです。

PHP: ブロックオブジェクト
vim組み込みのオブジェクトに似たもの
aP - PHPブロック(タグを含む)
iP - PHPブロック内部のテキスト

vaP - 現在のPHPブロックをタグを含んで選択する
ciP - 現在のPHPブロック内のテキストを変更する
yaP - 現在のPHPブロックをタグを含んでコピーする
自分の.vim/ftplugin/php.vimの中で提供してる

(PHP)プログラマのためのVIM (9) - PHP向けカスタマイズ - おぎろぐはてな

その提供してるってのがこれ。

" Function to locate endpoints of a PHP block {{{
function! PhpBlockSelect(mode)
    let motion = "v"
    let line = getline(".")
    let pos = col(".")-1
    let end = col("$")-1

    if a:mode == 1
        if line[pos] == '?' && pos+1 < end && line[pos+1] == '>'
            let motion .= "l"
        elseif line[pos] == '>' && pos > 1 && line[pos-1] == '?'
            " do nothing
        else
            let motion .= "/?>/e\<CR>"
        endif
        let motion .= "o"
        if end > 0
            let motion .= "l"
        endif
        let motion .= "?<\\?php\\>\<CR>"
    else
        if line[pos] == '?' && pos+1 < end && line[pos+1] == '>'
            " do nothing
        elseif line[pos] == '>' && pos > 1 && line[pos-1] == '?'
            let motion .= "h?\\S\<CR>""
        else
            let motion .= "/?>/;?\\S\<CR>"
        endif
        let motion .= "o?<\\?php\\>\<CR>4l/\\S\<CR>"
    endif

    return motion
endfunction
" }}}

" Mappings to select full/inner PHP block
nmap <silent> <expr> vaP PhpBlockSelect(1)
nmap <silent> <expr> viP PhpBlockSelect(0)
" Mappings for operator mode to work on full/inner PHP block
omap <silent> aP :silent normal vaP<CR>
omap <silent> iP :silent normal viP<CR>

vim-settings/.vim/ftplugin/php.vim at master · andreiz/vim-settings · GitHub

要らないかなーとか思ってたんですが、リファクタリングする時はかなり便利かも。

PHPでヤフーにログインする

PHP Scraping Yahoo

一連の続き。もうほとぼり冷めたし、そうすぐに仕様変えないだろうからと思って公開します。Github使ってたらかっこ良さそうなので、そっちで公開します。よろしくです。
comeonly/yahoobrowser · GitHub
公開してから知りましたが、こんなちょっとしたコードならGistが良かったんですかね。まいっか、いずれちゃんとしたプロジェクトとして公開できるようにがんばろう。

使い方

<?php
//yahoo_browserを置いたパス
require_once 'path/to/yahoo_browser.php'

//Yahoo!のアカウント名
$id   = 'foo';
$pass = 'bar';

$yahoo_browser = new YahooBrowser($id, $pass);
if (empty($yahoo_browser->cookies)) {
    die('ログインできませんでした。');
}
$yahoo_browser->getBody('http://www.yahoo.co.jp');
echo $yahoo_browser->body;
echo $yahoo_browser->cookies;
?>

で、取得できたクッキーをデータベースに保存するなりして使い回せばよいかと。

ソース

問題点

HTTP_Requestはもう古くってHTTP_Request2というものに変わっています。ただ、その影響が結構広範囲なので手が付けれていません。で、PHP 5からクラスの生成には&(アンパーサンド)なくてもポインタを指すらしい(うろ覚え)のでその影響で、HTTP_Request内で幾つか以下の様なエラーが出ます。

Deprecated: Assigning the return value of new by reference is deprecated in /Applications/MAMP/bin/php/php5.3.6/lib/php/HTTP/Request.php on line 794

その際は&(アンパーサンド)を削除してもらえればOKです。

こういうのを誰かにForkしてもらえたら良いのかな。まだGitをよく分かってませんのでいろいろつっこみ頂戴できればありがたいです。時間が取れればHTTP_Request2バージョンも取り組んでみたいですが。