K.Sasada's Home Page

Diary - 2017 June

研究日記

水無月

_11(Sun)

無限の可能性を秘めた言語開発で、会社も世界も変えていく|クックパッド株式会社

記事が公開されました。Heroku/SFDC よりは、何か会社の仕事をやってる気がします。


記事公開記念(?)に、私のクックパッドでの勤務状況をご紹介します。

12月に娘が産まれました。妻もフルタイムで働いているので、保育園に入れています。東京都区内に住んでいるのですが、ご多分に漏れず、待機児童になりそうになり、慌てて探したところ、住まいから電車を使って30分ある保育園を見つけることができました。基本的に、9時から18時まで受け入れ可能な保育園です。今年4月から通わせているのですが、送り迎え担当をしています。

  • 保育園に寄らない: 45 分
  • 保育園に寄る: 90 分

通勤時間が倍になりました。

幸い、クックパッドのエンジニアはフレックスタイム制をとっているので、出退勤の時間はかなり柔軟です。そのため、下記のような時間で通勤しています。

  • 出勤
    • 8:30 家を出る
    • 9:10 保育園に預ける
    • 10:00 オフィスへ出社
  • 退勤
    • 17:00 オフィスから退勤
    • 17:50 保育園から引き取る
    • 18:30 帰宅

出勤は30分くらい後ろにずれることもあります(電車のラッシュを考えると、それくらいのほうがやはり楽ですね)。

10:00-17:00 ですと、ランチタイム1時間を除いて 6 時間しか仕事をしていないので、なんだそりゃ、という感じですが、残りの時間は家で開発を進めています。

私の仕事は ruby の開発なので、そもそも他の社員とあわせて仕事をすることがほとんど無いので、出勤の時間にはだいぶ融通が利きます(退勤が17時なので、飲み会等に行けないのが残念ですが)。また、OSS 開発が主務なので、秘匿情報がないため、電車で座れれば、仕事ができます。家に持って帰るのも気楽です(VPN 接続があるので、弊社エンジニアはたいていのことは家で仕事できますが)。

というわけで、勤務状況の紹介でした。乳児がいても、二人共働きでなんとか生活ができているのは、弊社の柔軟な働き方を許す制度のお陰です。


保育園、近所に入れてたら、この通勤時間往復3時間が消滅していたのか...(フルで家で仕事すればいい)。うう。

_5.5(2017-06-13 23:54:16 +0900)

 近くに転園できるといいですね。キツいとは思いますが,なんとか乗り切ってください。送り迎えも大切な思い出になるので,時間の無駄にはならないと思います。どうか頑張ってください。

_2(Fri)

Python の yield from が何かよくわからないので、Ruby の Fiber で出来るか書いてみた。

https://docs.python.jp/3/whatsnew/3.3.html にある

>>> def accumulate():
...     tally = 0
...     while 1:
...         next = yield
...         if next is None:
...             return tally
...         tally += next
...
>>> def gather_tallies(tallies):
...     while 1:
...         tally = yield from accumulate()
...         tallies.append(tally)
...
>>> tallies = []
>>> acc = gather_tallies(tallies)
>>> next(acc)  # Ensure the accumulator is ready to accept values
>>> for i in range(4):
...     acc.send(i)
...
>>> acc.send(None)  # Finish the first tally
>>> for i in range(5):
...     acc.send(i)
...
>>> acc.send(None)  # Finish the second tally
>>> tallies
[6, 10]

の例。最初、見てもよくわからなかったんだけど、なるほど別々に書いた generator を混ぜて一つの generator にしたいのか。

というわけで、Ruby で書いてみた。

class Generator
  def initialize &b
    @block = b
    @f = Fiber.new{|*args|
      @block.call(*args)
    }
  end

  def resume *args
    @f.resume(*args)
  end

  def call
    @block.call
  end
end

accumulate = Generator.new do
  tally = 0
  while true
    n = Fiber.yield
    if n
      tally += n
    else
      break
    end
  end
  tally
end

gather_tallies = Generator.new do |tallies|
  while true
    tally = accumulate.call
    tallies << tally
  end
end

tallies = []
gather_tallies.resume(tallies)

4.times{|i|
  gather_tallies.resume(i)
}
gather_tallies.resume(nil)

5.times{|i|
  gather_tallies.resume(i)
}
gather_tallies.resume(nil)
p tallies

多分、これでいいと思うんだけど、どうだろ。

イテレータで使う yield from は、これじゃ無い感じがするが。


いや、できるか。

Fiber#to_proc があれば、こんなの書かなくてもいけそうな気がするな。 Fiber.merge(f) で f.to_proc.call すればいいだけな気がする。

Sasada Koichi / ko1 at atdot dot net
$Date: 2003/04/28 10:27:51 $