@komagataがドライバー、@kjirouがナビゲーターのペアプロキャスト後編をアップしました。

es6とreactでゲームを作る - ペアプロキャストep1後編@kjirou - YouTube

es6とreactでゲームを作る - ペアプロキャストep1後編@kjirou - ニコニコ動画:GINZA

ビデオポッドキャストにもしたいんですが、どこでホストするかなどちょっと悩みますね。

また、わたくし@komagataとペアプロしてくれる方を探しております。オープンソースでなくても後で画面は編集できるので会社のプロダクトでもやばいところはモザイクかけて行けるんじゃないかなーと思っております。

ペアプロキャスト - YouTube再生リスト

ペアプロキャスト - ニコニコ動画マイリスト

ペアプログラミングの様子をスクリーンキャストするペアプロキャストというビデオポッドキャスト的なものを始めました。

Youtube:

es6とreactでゲームを作る - ペアプロキャストep1前編@kjirou - YouTube

ニコニコ動画:

【ニコニコ動画】es6とreactでゲームを作る - ペアプロキャストep1前編@kjirou

30分でドライバーとナビゲーターを交代しています。この動画はそれの@kjirouがドライバーの前編になります。

@kjirouさんがes6 + react.jsで作っているhtml5のブラウザゲームをペアプロしています。

感想やヤジなど、ニコ動のコメント欄などにでもいただけるととても嬉しいです。

ペアプロキャストYoutube再生リスト

ペアプロキャストニコニコ動画マイリスト

HerokuのNew Pricingが発表されて実質無料で使い続けることは難しくなりました。このブログも例外ではありません。

「どうせその時がきたら誰かがいい感じの移行先を見つけるだろう。」

「Herokuの大体サービスみたいのが出てくるだろう。」

と思ってましたがそういう気配があまり無い。

社内ツールは基本全部Heroku上に作ってるし(意図せずMicroserviceになってる)、数も沢山あるので頼れる移行先が見つかるまではHerokuにお金を払い、見つかったら移行。ずっと見つからない雰囲気であればDigitalOceanに全部を移行という感じかなと思っています。

できれば無料がいいし、Herokuみたいにgit pushしたらデプロイがいいなと思います(capistranoは糞ダルイ)。

DigitalOceanにHerokuっぽいツールを入れる?

皆さんはどうしようと思っている雰囲気ですか?マジで。

一時期は乱立したgemのgeneratorをbundle gemがほぼ統一。travisのファイルが入ってたり、Code of Conductが入ったり、rspecかminitestか選べたりといろいろ新しくなってました。

% bundle gem google-search_rank
Creating gem 'google-search_rank'...
Do you want to include a code of conduct in gems you generate?
Codes of conduct can increase contributions to your project by contributors who prefer collaborative, safe spaces. You can read more about the code of conduct at contributor-covenat.org. Having a code of conduct means agreeing to the responsibility of enforcing it, so be sure that you are prepared to do that. For suggestions about how to enforce codes of conuct, see bit.ly/coc-enforcement. y/(n): y
Do you want to license your code permissively under the MIT license?
This means that any other developer or company will be legally allowed to use your code for free as long as they admit you created it. You can read more about the MIT license at choosealicense.com/licenses/mit. y/(n): y
Do you want to generate tests with your gem?
Type 'rspec' or 'minitest' to generate those test files now and in the future. rspec/minitest/(none): minitest
      create  google-search_rank/Gemfile
      create  google-search_rank/.gitignore
      create  google-search_rank/lib/google/search_rank.rb
      create  google-search_rank/lib/google/search_rank/version.rb
      create  google-search_rank/google-search_rank.gemspec
      create  google-search_rank/Rakefile
      create  google-search_rank/README.md
      create  google-search_rank/bin/console
      create  google-search_rank/bin/setup
      create  google-search_rank/CODE_OF_CONDUCT.md
      create  google-search_rank/LICENSE.txt
      create  google-search_rank/.travis.yml
      create  google-search_rank/test/minitest_helper.rb
      create  google-search_rank/test/test_google/search_rank.rb
Initializing git repo in /Users/komagata/code/google-search_rank

一回選択したら設定ファイルに書かれるみたいです。

% cat ~/.bundle/config 
---
BUNDLE_GEM__COC: true
BUNDLE_GEM__MIT: true
BUNDLE_GEM__TEST: minitest

もちろん僕はminitestちゃん!

Ruby OpenSSL ホスト名検証の脆弱性が修正されているそうです。

$ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.2.2
$ sysctl -n hw.ncpu
4

makeとかbundle時にcpuコア数分並列させたいとき便利。

$ bundle install -j`sysctl -n hw.ncpu`

phpenv + php-buildよりphpbrewの方が良さそうです。(rbenvとぶつかる)

インストール

wgetはcomposerのインストールに必要。

$ brew install automake autoconf curl pcre re2c mhash libtool icu4c gettext jpeg libxml2 mcrypt gmp libevent wget
$ brew link icu4c --force

ふむふむ。

$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ sudo mv phpbrew /usr/bin/phpbrew
$ phpbrew init
$ echo "source ~/.phpbrew/bashrc" >> ~/.zshrc
$ phpbrew lookup-prefix homebrew
$ sudo phpbrew install -j `sysctl -n hw.ncpu` 5.6.8 +default+mysql+apxs2
$ phpbrew --version   
phpbrew - 1.18.5
cliframework core: 1.10.0
$ phpbrew switch php-5.6.8
$ php -v
PHP 5.6.8 (cli) (built: May 12 2015 17:33:22) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

composerとphpunitインストール。さりげ嬉しい。

$ phpbrew install-composer
$ phpbrew install-phpunit
ActionController::RoutingError: No route matches [POST] "/stories/2992/trackback"

みたいな存在しないURLで、人間のユーザーには影響無く、botがアクセスしてくるエラーってどうすればいいのかな。

routes.rbの一番下に404へ飛ばすの書いておけばいいけど、人間のユーザーにも影響のあるNo route matchesのエラーもある気がするし…。

でもエラー管理サービス(rollbar)の無料枠のエラー数を消費してしまうので何とかしたいところです。

レガシーがらみで気になったのでサポートに聞いてみた。

マネージドサーバーHDDプランの契約を検討しております。

PHPのバージョンが4.4, 5.2~5.4となっていますが、これはどの5系の場合はどのバージョンになるのでしょうか?

現在PHP公式では5.4未満はサポートが行われていません。 セキュリティパッチなどは御社が独自に提供していただけるのでしょうか。

以下、サポートからの返答。

この度は弊社サービスをご検討いただき、ありがとうございます。

PHPのバージョンは4.4、5.2~5.4の中から任意にお選びいただけます。特に お客様にて設定が行われなかった場合は5.4が適用されます。

セキュリティパッチについては弊社にて独自に作成し、対応を行っております。 ご安心ください。

ご不明な点やご質問等ございましたら、本メール返信にてお問い合わせ ください。

今後ともさくらインターネットをよろしくお願いいたします。

公式のサポートが切れているPHPのバージョンにもセキュリティパッチを当て続けている!?

第89回 PHP勉強会@東京に行ってMac・Windows共通のPHP開発環境 // Speaker DeckというLTをさせていただきました。

会場は株式会社リジョブさんの咲くらぼというスペース。人工芝に座って人工桜を見ながらビール飲んで勉強会とか最高かよ。

咲くらぼ TECH 勉強会サポート | 咲くらぼTECHブログ - 株式会社リジョブ

また、じゃんけん大会でLaravelエキスパート養成読本をいただきました。ありがとうございます。

LT内容を箇条書きにまとめるとこんな感じです。

  • レガシーPHP改善はまずは共通開発サーバーの撤廃からはじめるとよい。
  • WindowsでのPHP開発環境をMac上のVirtualBox内のWindowsでサクッとできるとか思うなよ。
  • shin x blogは神。
  • ansibleはlocalで使え。
  • VirtualDocumentRoot + PHPには罠がある。
  • xip.ioを活用せよ。
  • chocolateyは神ツール。

足ばやになってしまった質疑応答に対する補足。

Q. AnsibleはWindows対応してなかったっけ?

A. provision対象としてはサポートしてるけど、clientの実行マシンとしてはサポートしてません。

Installation — Ansible Documentation

Currently Ansible can be run from any machine with Python 2.6 or 2.7 installed (Windows isn’t supported for the control machine).

Q. Windows対応してないなら何でAnsible?chef-zeroは?

A. ごもっとも。chefは個人的にキモい(ネーミングとかberkshelfとか)。私がruby好きなのでrubyで何でもできるchefをPHPの会社に導入するとやり過ぎてしまうのが怖かった(vagrantはいいのかよ > 俺)。など。後は小規模ではchef-zeroよりansibleの方がシンプルで覚えるのも簡単だと思う。

私の構成管理ツールについての苦悩のエントリーはこちら

構成管理ツールについて - komagata

Q. 技術的な内容ばかりだけど、レガシーPHP改善は「このままでいいや」というみんなのマインドセットを変えることの方が重要なのでは?何か工夫していることは?

A. おっしゃるとおり。答えは例えばみんなを誘ってPHP勉強会に来る、発表する。(3人来ていただけました。ありがとうございます!先月はボッチで行った!)

レガシーPHP改善日記 シーズン2 エピソード1 - komagata

流行りの環境うんぬんは単なる手段であり、"経営陣を含めたマインドセットの更新が大事"ってのはありますが、そんな話みんな読みたくないでしょ?

エピソード1ではこんなこと言ってますがちょっとだけ・・・。

プレスコットのピクルス原理

「漬け水がキュウリに漬かるよりは、キュウリが漬け水に 漬かるほうが早い。」これは、「長いものには巻かれろ」という 世渡り術指南の、ちょうど逆を意味する。 すなわち、大きな仕組みに影響を与えようとして、 接触を続けている小さな個(自分)は、結果として、むしろ自分のほうが変えられてしまう可能性が高い、ということを警告している。

ピクルス原理によれば私が一人息巻いて乗り込んだところでレガシーPHPシステムは変わりません。むしろこっちがレガシー寄りになる。

シーズン1からお読みの方はご存知の通り、レガシーPHP改善にとってPHPコミュニティーと会社をつなげることは既定路線であり、必須のメソッドです。

今回は内容をブログに書くということも了承を得てからお仕事を受けています。(ほう、経験が生きたな

ピクルスを漬けている瓶に穴を開ける。そしてPHPコミュニティーという大きなプールにピクルスの瓶ごと突き落とす。そして割るぐらいのことをしないとマインドセットは変わらないと思います。

逆にいえば人間はピクルス原理のように周囲の環境に急激に馴染むという性質をもっています。PHPコミュニティーという良い漬け水に浸かれば急速に周囲に馴染んでいき、良いPHPエンジニアになれると思います。(良きキュウリは別の瓶に移って行ってしまうという別の法則もありますが…)

レガシーPHP改善でうかがってはじめに取り組んだのがslackの導入です。それまでIP-Messengerやメールで密書のようなやりとりをしているところにslackを導入し、何かにつけPHP界隈の情報を流しました。

先月も今回の勉強会も1時間前まで「まだ定員に空きがあるのでお時間がある方は是非」などと「こいつウゼェ・・・」と思われても仕方ないぐらい必死の勧誘をしました。

また、今回参加された方がいたことで変化に前向きな方々=心強い味方を見つけることができました。そういった方々に協力をおねがいして、参加できない方も巻き込むために社内で開催するぐらいの勢いでやる必要があります。

今回唯一の誤算はレガシー改善はまだ途中であり、会社名は改善が成ってから公開予定だったのですが、自己紹介で「今、自己紹介されたkomagataさんと一緒にやっている(略)」と会社名が思い切りバレたことです。

そりゃあそうなるわなと思いました。何が誤算だよ > 俺

関連:レガシーPHP改善日記シリーズ