デッサン会@原宿

例によってiPad Pro + Apple Pencilで参加。
だいぶ慣れてきた。
ペンの種類を鉛筆からインクにしたらかなり描きやすくなった。

前半は参加者の中から一人ずつモデルを選んで10分間ポーズを取ってもらって描く。
後半はあらかじめ決められていたダンサーの方だった。
実はこちらのMVに出ているハラサオリさん。

今日はこのMVと全く同じ髪型で紅色のワンピースだった。
来月からドイツの方へ行かれるとのこと。
ダンスでドイツに行くって凄いね。想像できない。

彼女を描いていて、ものすごく心が静かになっていくのを感じた。
人前に出慣れているからなのかは分からないけど、大勢の人から見られているのに微塵も心の揺れを彼女から感じない。
終始落ち着いた表情で、まばたきもゆっくり瞼が閉じて開く動作をする。
誰にどう思われるのかなんて意に介さない、そんな姿勢だった。

そんな彼女を見ていて、なぜか勇気づけられた。
不思議なことに、自分はこれでいいのだ、と思えてきた。
今日はとてもいいエネルギーをもらった。

人ってじっとしているだけでもこんな風に影響を与えられるんだな。
陰ながら応援します。

zshからfishに乗り換えた

なんか自分のzshが重い。
ターミナル立ち上げてコマンドが打てるようになるまで1秒ぐらいかかる。
おおかたoh-my-zshあたりが余計なことをしているんだろう。
これは設定を見直す必要がある。
ところで、fish shellというやつが前から気になっていた。
せっかくだし、これに乗り換えてみることにした。
fishの良さは検索すれば山ほど出てくるので割愛する。

自分の環境は以下の通り:

  • OS: macOS Sierra
  • ターミナルエミュレータ: iTerm2
  • 配色: Solarlized Dark

個人的な作業記録なので「ふーん」ぐらいの感じで読んで欲しい。

続きを読む zshからfishに乗り換えた

プログラミングを英語で教える会に参加してみた

こういうことをボヤ〜っと考えていて、知り合いの外国人に聞いたりしていたんだけどなかなか見つかっていなかった。
んで、meetup.comをフラフラと閲覧していたらこんなコミュを発見。

自分のために作られたんじゃないかというぐらいにドンピシャ。
という訳で脊髄反射で参加ボタンを押してさっそく行ってみた。
参加料は無料。

会場はカフェのように綺麗なSHIFTBRAINさんのオフィス。
10人弱が集まった後、ホストの人が英語話者に何が学びたいかをヒヤリングした。
ジャックというイギリス人がiOSを学びたいというので、自分が教えることに。

彼はUXデザイナーで、画面をSketchで描けるようだ。
プログラミング知識はHTMLが少し書ける程度。
なので、まずはXcodeのStoryboardでボタンなどのコントロールをいろいろ配置する所から教えてみた。
次に、ボタンをSwiftでプログラマティックに配置する方法を教えた。
自分も最近はSwiftを全然書いていなくて忘れていたけど、適宜復習しつつ教えた。
最終的にはTable Viewでダイナミックにデータを表示できるところまで行けた。

2時間という短い時間だったけど、ジャックもiOSプログラミングの雰囲気を掴めたようだ。
自分の英語はカタコトだったけど、意外と通じるもんだなぁと思った。
自分のアプリのユーザサポートを外国人相手にやっていた経験がかなり助けになったと思う。

でもヒヤリングが絶望的な事を再認識した。
単語同士の音がつながると全く聞き取れない。
普段から耳を慣らす対策が必要だ。

あとジャックが彼のiPhoneのことを「My friend」と呼んでて面白かった。
“Where is my friend?” みたいな。
最初何のことかさっぱり分からなかった。笑

楽しいmeet upイベントなので定期的に参加したいな!

ES6でクラス名を動的に変更する方法

ES7のdecoratorsでクラスを生成するとクラス名がそのデコレータのものになってしまいます。
例えば:

import React from 'react'

function addAwesomeProperty (Spec, Component = Spec) {
  class AwesomeClass extends React.Component {
    render () {
      return React.createElement(
        Component,
        Object.assign({ awesome: 'yes!' }, this.props)
      )
    }
  }
  return AwesomeClass
}

@addAwesomeProperty
class OriginalClass extends React.Component {
  ...
}

こうすると生成後のクラスの名前は AwesomeClass になってしまいます。これは不便。
だからといってクラス名を以下のように変えようとしても出来ません:

AwesomeClass.name = 'OriginalClass'

なぜなら name プロパティは writable ではないからです:

Object.getOwnPropertyDescriptor(AwesomeClass, 'name')
    { value: 'func',
      writable: false,
      enumerable: false,
      configurable: true }

しかしES6の仕様によると以下の方法で変更できるとの記述を見つけました:

> Object.defineProperty(func, 'name', {value: 'foo', configurable: true});
> func.name
  'foo'

という事は、前述の例を以下のように修正すればクラス名に影響を与えずに済みます:

import React from 'react'

function addAwesomeProperty (Spec, Component = Spec) {
  class AwesomeClass extends React.Component {
    render () {
      return React.createElement(
        Component,
        Object.assign({ awesome: 'yes!' }, this.props)
      )
    }
  }
  // 追加
  Object.defineProperty(AwesomeClass, 'name', { value: Component.name, configurable: true })

  return AwesomeClass
}

まぁ、これが設計として正しいのかは謎です。

蛇足

動的なクラス名を定義する方法として、

const classes = { [ dynamicClassName ]: class { ... } }
classes[dynamicClassName].name  // => dynamicClassName

みたいな方法もあるみたいだけど、自分の環境では常に _class となって上手く行かなかった。
自分のbabelの設定が悪いのかもしれないけど。

Dockerで子プロセスからのstdoutをsupervisordにリダイレクトする方法

Dockerではsupervisordを使ってプロセス管理をする事が多いですね。
そのようなコンテナでは、以下のコマンドでsupervisordが吐いたログを確認できます:

docker logs -f <container_id>

さらに、子プロセスが吐いたstdout/stderrを同様に確認したくなることがあります。
例えばmysqlapache2のログなどです。
いちいちコンテナにログインしてtail -fなんてやってられませんよね。
supervisord.confを以下のように設定すれば、これら子プロセスのログをsupervisordに転送できます:

続きを読む Dockerで子プロセスからのstdoutをsupervisordにリダイレクトする方法

ヤフーのコワーキングスペース「LODGE」を利用してみた

僕は元ヤフーなんですけど、当時は移転前の東京ミッドタウンに通っていました。
現在は赤坂見附に位置する東京ガーデンテラスにあります。

ヤフー同期の友人と飯を食う約束をしていて、ついでにLODGEを使ってみました。
続きを読む ヤフーのコワーキングスペース「LODGE」を利用してみた