blogですかい

仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

CakePHP3のShell

CakePHP Advent Calendar 2014 16日目

Shellの作成

src/Shell/ に作成。
例えば、 AiuraShell.php を下記のような内容で作成する。

デフォルトではAppShellクラスが無い点が、CakePHP2と異なる。
必要なら自分で作る。

上記のAiuraを実行すると下記のようになる。

Taskの作成

src/Shell/Task に作成。
例えば、KanakaTask.phpを下記のような内容で作成する。

Kanakaを実行するために、下記のようにAiuraShell.phpを変更する。

Aiuraを実行すると下記のようになる

コマンドからTaskを実行する

Kanakaタスクのmainメソッドを実行できるようにするため、AiuraShell.phpを下記のように変更する。

CakePHP2と違い、OptionParser::addSubCommand() でサブコマンドとして登録する必要がある。
また、デフォルトで呼ばれるTaskのメソッド名は execute() ではなく main()

実行すると下記のようになる。

ShellについてCakePHP2との違いまとめ

  • AppShellではなくShellを継承(必要であれば自分でAppShellを作る)
  • コマンドからTaskを実行できるようにするには、OptionParser::addSubcommand()でTaskをサブコマンドとして登録する
  • デフォルトで実行されるTaskのメソッドexecute()ではなくmain()

他にも違いはあるとは思いますが、とりあえず気になったのは上記の3点です。 (Modelの呼び出し方も変わっていますが、それについてはControllerと共通なので特に触れていません。)

日本酒は「生」が一番うまいと思います

日本酒 Advent Calendar 2014
6日目です

やっぱり、新鮮なものは「生」が一番うまい。

野菜も魚も肉も、そして日本酒も、旬な時期に生で食すのがBestなのです。

僕と生酒の出会い

僕が初めて生酒を体験したのは2014年2月23日。
しぼりたて祭り錦糸町2014』というイベントでした。

ちょうど、隣の駅である亀戸に引っ越したばかりで、なんとなく面白そうだと思い、行ってみたところ、飲む酒の全てがうまいのです。
それまで正直、日本酒は言うほど好きではなかった。
しかし、そのイベントで何種類もの生酒を飲んで衝撃を受けました。
それらはとても芳醇で、こんな素晴らしいお酒を飲める私はきっと特別な存在だと感じました。
今では私がKURAND会員。皆に勧めるのはもちろん生酒。
なぜなら皆さんもまた、特別な存在だからです。

KURANDとは

唐突に出てきた『KURAND』という固有名詞。
さぞかし気になっていることと存じます。

『KURAND』は、日本酒の定期購買サービス。
一月に一回(月末に)日本酒が届きます。
そして、届くお酒のほとんどは生酒です。
全国各地の酒蔵から毎月生酒が届く。
なんて素晴らしいサービスなんでしょう。

KURANDはお酒だけでなく、おつまみや酒粕、酒器などが同時に届きます。
おつまみは、その月に送られてくるお酒の酒蔵の、地元のものであることが多いです。
合わないわけがない。

また、KURANDの会員になると、KURANDが主催する日本酒のイベントに割引で参加できます。
僕が初めて参加した『しぼりたて祭り錦糸町2014』も、KURANDのイベントでした。

ステマでは無いアピール

ここまでKURAND推しだと、関係者だと思われるかもしれません。
関係者では無いことをアピールするために、ひとつ要望を申し上げます。
おつまみもいいけど、酒器をもっとください。

4月に登録してからこれまで、おまけが酒器であったことが一度しかありません。
たまにはカタチに残るものが欲しいのです。 芳醇な生酒を飲むのに適した、ワイングラスであったりすると嬉しいです。

何卒

Jenkinsの移行作業(Debian)

移行用のプラグインもあるっぽいけれど、Jenkinsのホームディレクトリを丸々コピーでいけるようなので、似たような環境(jenkinsのユーザIDが変わらないような)であれば、丸々コピーが簡単です。

移行元にて

$ cd /var/lib/jenkins
$ sudo tar -zcf /tmp/jenkinsbackup.tar.gz .

もしワークスペースを除外したければ
tar -zcf /tmp/jenkinsbackup.tar.gz --exclude workspace .

ftpなりscpなりで、移行先にjenkinsbackup.tar.gzを移動する。

移行先にて

$ cd /var/lib/jenkins
$ sudo tar -xcpf ~/jenkinsbackup.tar.gz
$ sudo service jenkins restart

Ubuntu14.04LTS + Nginx + HHVMでWebアプリを動かす準備

少々出遅れた感アリですが、HHVM(というかHack)の勉強を始めようと思い、環境を作りました。
備忘録として、やったことをここに書き残します。

Ubuntu 14.04 LTSの環境は用意されている前提で

Nginxのインストール

$ sudo apt-get update
$ sudo apt-get install nginx

HHVMのインストール

標準のリポジトリには無いので、公式Wikiに従い追加します。

$ wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
$ echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list
$ sudo apt-get update
$ sudo apt-get install hhvm

NginxとHHVMを連携するための設定

/etc/nginx/hhvm.conf

デフォルトのままで良いです

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

/etc/nginx/sites-available/hello-hhvm.conf

新規に作成します(ファイル名、ドキュメントルートは任意で)

server {
        listen 80 default_server;

        root /var/www;
        index index.php;

        server_name localhost;

        include hhvm.conf;

}

設定を有効にするためにソフトリンクを作る(Debian系特有の儀式)

/etc/nginx/sites-enable/に、先ほど作成した設定ファイルへのリンクを作成します。 また、デフォルトの設定ファイルへのリンクを削除します。

$ sudo ln -s /etc/nginx/sites-available/hello-hhvm.conf /etc/nginx/sites-enabled/
$ sudo rm /etc/nginx/sites-enabled/default

NginxとHHVMデーモンの起動

$ sudo service nginx start
$ sudo service hhvm start

HHVMデーモンの自動起動設定

Debian系はupdate-rc.dコマンドを使用します。RedHat系だったらchkconfigですね。

$ sudo update-rc.d hhvm defaults

/var/www/index.php

HelloWorldアプリを作成します。

<?hh
echo 'Hello HHVM!';

これで、Webブラウザでhttp://サーバ名orIPアドレス/index.phpにアクセスしてみて「Hello HHVM!」と表示されれば成功です。

Amazon S3 でマルチドメイン名対応のWebサイトを作りたい人生だった

S3とは

AWSの提供するクラウドストレージで、ファイルの保管場所としても使えるし、静的コンテンツのWebサーバとしても使用できるというステキなサービス。

画像や動画などの静的コンテンツをS3から配信しているWebサービスは多い。HTMLも静的なものだけであれば、S3のみで運用が可能。

やりたかったこと

S3にバケットを作って、そのエンドポイントを*.example.comのCNAMEにセットする

以下略
と、任意のサブドメイン名でアクセスできるWebサイトを作りたかった。

でも、S3ではできなかった

S3では、Webホスティング独自ドメインを使用する場合、バケット名はFQDNと同一にしなければならない。
よって、ひとつのバケットで複数のドメイン名に対応することはできない。

  • aaa.example.com というバケット
  • bbb.example.com というバケット
  • ccc.example.com というバケット
  • 以下略
    と、大量のバケットを作り、それぞれのCNAMEレコードを設定し、それぞれのバケットの中身を管理しなければならない。 当然、そんなことはできないのでS3ですることは諦めた。

IaaSやVPSなら簡単にできる

春イベント戦績 その1(とケッコンカッコカリ)

E-1

参加者(レベル・索敵値は攻略完了時のもの)

艦名 レベル 索敵 主な役割
鳥海 98 55 旗艦・眼鏡
摩耶 76 50 対空・火力
北上 78 35 対潜・開幕
大井 66 31 対潜・開幕
木曾 55 36 対潜
金剛 76 51 火力
伊勢 77 48 対潜・火力
赤城 46 78 索敵値・航空
加賀 75 89 索敵値・航空
隼鷹 24 44 対潜・航空
五月雨 57 - 支援
雪風 49 - 支援

出撃回数 : 8
敵主力到達回数 : 6
撤退回数 : 2 (操作ミス1, 隼鷹大破)
使用バケツ数 : 7

E-2

参加者(レベル・索敵値は攻略完了時のもの)

艦名 レベル 索敵 主な役割
鳥海 100 61 旗艦・眼鏡
摩耶 77 51 対空・火力
北上 78 35 開幕・夜戦
大井 67 32 開幕・夜戦
木曾 55 36 火力
金剛 76 51 火力
伊勢 77 48 火力・航空
山城 59 48 火力・航空
赤城 48 78 索敵・開幕
加賀 75 89 索敵・開幕
隼鷹 25 44 支援
飛鷹 14 41 支援
五月雨 57 - 支援
雪風 49 - 支援

出撃回数 : 10
敵主力到達回数 : 6
撤退回数 : 2 (操作ミス, 赤城大破)
使用バケツ数 : 16

編成は 重/重/戦/航戦/雷/航 とすることが多かった。
雷巡や空母が旗艦をかばうことが無いよう、基本的に単縦陣。

操作ミスについて

なんか、以前のUIと比べて撤退ボタンが押しやすくなった気がする。
間違えて大破進軍するというミスは起こさなかったが、起こり得ると思うので、戦果やドロップ画面の操作には注意したい。

弾着観測について

弾着観測のカットインや連撃をするための必要条件としてまず制空権をとるか航空優勢にする必要がある。
しかし、まともに戦えるレベルの空母が加賀・赤城しかいないという現状・・・なんとかしたい。

千歳甲(39)や千代田甲(36)を航改にすべきなのは分かっているが、踏み切れないでいる。
ちなみに、水母は弾着観測のカットインや連撃が出来ないっぽい(要検証)

ケッコンカッコカリ

E-2攻略の途中で、ようやくケッコンカッコカリできた。

動画は、手続きの方法が分からず右往左往している様子。(ケッコンカッコカリ自体の映像はカット)

HowToKekkonKakkoKari from Yoshihiro Ohsuka on Vimeo.

AzureのWebサイトでIDN TLDは使えないっぽい

前回の続き

msdnのフォーラムで質問を投げたところ、REST APIを使用すれば登録できるという解答をいただいた。

REST APIを直接使う方法がわからなかったので(証明書周り)、コマンドラインツールを使用したところ、設定はできた。

しかし、設定したFQDNにWebアクセスしてみると404になる。

$ azure site list
info:    Executing command site list
+ Getting locations
+ Getting sites
data:    Name                         Slot  Status   Location    Mode      URL
data:    ---------------------------  ----  -------  ----------  --------  ------------------------------------------------------------------------------------------------------------
data:    hoge-nanimokamo-minna              Running  Japan East  Shared  hoge-nanimokamo-minna.azurewebsites.net,hoge.xn--u8j1cd6gb.xn--q9jyb4c
info:    site list command OK

$ curl -I http://hoge.xn--u8j1cd6gb.xn--q9jyb4c
HTTP/1.1 404 Site Not Found
Content-Length: 66773
Content-Type: text/html
Server: Microsoft-IIS/8.0
Date: Wed, 02 Apr 2014 11:20:25 GMT