スクールアイドルです

冷やし中華はじめました

PHPカンファレンス2014に行った

すでに先々週のことだけど、ついでに餃子を食べてきた。

今年が初参加だったけど、去年のプログラムと見比べると「PHPではこんなことができる」という紹介より、PHPのコアやPHP互換環境などの芯に近い解説の方が増えたように感じた。

PHPがゆるふわ言語だというdisりはたびたび耳にするし、PHPエンジニアも危機感を持っている。それでもPHPでコードを書かざるをえない。PHPとうまくやっていくためにも文化(TDDだったりコードレビューだったり)が必要だったし、今あるツールセットでどうするかが重要だった。

今回メインテーマの一つと言ってよいHHVM/Hackが出てから状況が変わりつつあって、PHP言語仕様の策定が進んでいるのは基調講演で話題に上ったとおりである。PHP互換環境というPHPの世界に存在する他者によって、PHPそのものをどうするかという議論へと深化したように感じた。

PHPは人口の割にカンファレンスや勉強会の盛り上がりが今ひとつなので(逆に言えばそれだけ間口が広くて敷居の低い言語であるとも言える)、もっと大勢でドッカドッカできるとめでたいと思う。

コルセット

最近常にコルセットをしてます。入浴時、ライブと屈んで作業する時間だけ外しているので、生活中の75%程度は着用している計算になります。

コルセットと言っても医療用ではなく、補正下着の方なので下記のような効果を期待することになります。

  • 痩身効果
  • 体型補正効果
  • 姿勢矯正効果

当然ながら着用しただけでは痩せません。食生活を含む習慣を見直した結果痩せるのであって、コルセットは銀の弾丸ではありません。ただし暴飲暴食を行った際歩行が困難になるレベルで多大なる苦痛が発生するので、学習効果は絶大です。

体型は締めた量に比例してそれなりに補正されます。永続的な補正となるとまだ着用期間が短いので経過観察が必要そうです。

元々猫背の上に背骨が湾曲しているので、姿勢矯正は苦痛以外の何者でもないです。常にしゃちほこばった体勢でいるのは休息時間がないのと同じで、急速に集中力が失われます。

加えて体幹部が常に固定された状態になるので、支える筋力が低下した結果腰に負担がかかります。これは座り方が下手で腰が悪いことによるものが多いですが、体幹部は適宜運動をして筋肉量維持に努めましょう。

あと、汚い話ですが上と下からやたらガスが漏れます。常時内蔵が圧迫された状態にあり、発生したガスの行き場がないのでやむなしだと思います。

上記を総合して、特段の理由がない限りコルセット着用ではなくトレーニングによって痩身を目指した方がよいです。特段の理由があるのでコルセットを着用していますが。

JSパッケージ管理Duoの使い方(DuoとD3を使ってビジュアルプロトタイピング)

Duo

duojs/duo · GitHub

Component, Browserify, Goに影響を受けたパッケージ管理。平たく言うと、Go方式でrequireしたものがComponentのようにビルドされる。

Duoのインストール

$ npm install -g duo

パッケージ取得時にGitHubAPIを利用するので、API制限を緩和してプライベートリポジトリを利用できるよう、~/.netrcに認証情報を書き込んでおく。

machine api.github.com
  login <username>
  password <token>

使い方

var uid = require('matthewmueller/uid');

ビルドを実行するとmatthewmueller/uidリポジトリからコードを取得し、結合したコードが出力される。

$ duo index.js > build.js

結合後のコードは即時関数でラップされるので、CommonJSに準拠していることが求められる。

@import 'necolas/normalize.css';

CSS@importによってリポジトリからコードを取得し、結合できる。

var js = require('./relative');
var text = require('./relative.txt');
var html = require('./relative.html');

相対パスを使用することで、ローカルに存在するファイルをrequireできる。テキストやhtmlを読み込むとStringとして展開される。

D3を使った実例

上記をふまえると、D3本体と集計対象データを含んだJSが生成できる。

var _ = require('lodash/lodash');
var d3 = require('mbostock/d3');
var dataset = require('./dataset.tsv');

var svg = d3.select('.target')
    .append('svg')
    .attr({ width: 640, height: 480});

svg.selectAll('circle')
    .data(
        _.map(dataset.split('\n'), function(v) {
            return v.split('\t');
        })
    )
    .enter()
    .append('circle')
    .attr('cx', function(d) {
        return d[0];
    })
    .attr('cy', function(d) {
        return d[1];
    })
    .attr('r', function(d) {
        return d[2];
    });

ローカルでサーバを立ち上げなくてもクロスオリジンを回避しつつビジュアライズできるので、プロトタイピングに大変便利だった。

Componentでビルドしたものをテストする

結論

ビルド後のJSではrequireがpolyfillされているから、フロントエンド側からrequireを使って適宜呼び出せばよい。

テストスタックは好きなものが使える。例ではMocha, Chai, Karmaでテストしており、変にロックインされる心配はない。

MisumiRize/component-test-skeleton · GitHub

npm install -g component karma-cli

必要に応じてグローバルインストールしたあとで、ビルドとテスト実行。

component install
component build
npm install
karma start

ハマりどころ

component.jsonnameはちゃんとつけておくこと。

ビルドを実行してrequireがpolyfillされる際、component.jsonname欄を参照して名前が付けられる。未定義のままビルドしてもエラーは発生しないが、名前がundefinedになってしまう。

補足

パスを指定すればエントリポイント以外でもrequireできる。同じように、的確に名前を指定しさえすれば、component installしたものもテストからrequireできる。

発端

ワンダフルステージ!2nd Live! でバー店員兼スタッフやった

実家に帰った

実家と言っても特にやることはないのでマチアソビのロケハンした。

一時期この辺は市街中心部空洞化の典型例みたいなもので、平日昼間に行ったらがらんとしてたのに、今日見たらそれなりにテナントが埋まっていて人が来るようになっていた。

中心市街の象徴たるデパートにもユニクロやらLOFTが入ってて、街の新陳代謝のようなものを感じる。

帰宅して親にAmazonの使い方を説明した。親のイメージではインターネットの世界は一枚岩のようで、サービスごとにアカウントを作るのが不便に感じるらしい。

9/27から9/28にかけて大阪です(+告知)

27日の主目的はfripSideの握手会です。夜は多分フリーなので遊んでください。

28日は下記にて終日ウエイトレス兼スタッフなことやってます。

お待ちしております。衣装は今作ってます。