桜川本店4個セットの組み合わせ

大阪のカヌレ専門店カヌレ堂ステマ企画 第3弾。

堂島店ではホワイトデー需要も終わり落ち着きを取り戻した感があるが、桜川本店では相変わらず春休み需要に沸いているようだ。

Instagram桜川4個セットを投稿している人がいて、桜川店での4個セット価格が570円と判明した。

堂島店に引き続き桜川本店も 4個セットの組み合わせを表示してみる。

menu = <<EOF.lines.map{|l| l.chomp.split(/\s+/)}.each_with_object({}){|(v,k), _| _[k] = v.to_i}
120 しろ
130 ほうじ茶
130 抹茶あんこ
130 黒糖くるみ
150 珈琲
140 あんず
160 ベリーベリー
170 ばなナッツ
EOF

price = 570

combinations = menu.keys.combination(4).to_a
set4p = combinations.select{|caneles| caneles.map{|c| menu[c]}.sum == price}
  .select{|caneles| seasons.any?{|season| caneles.include?(season)}}
  .reject{|caneles| seasons.all?{|season| caneles.include?(season)}}

set4p.size                      # => 10
combinations.size               # => 70

set4p
# => [["しろ", "ほうじ茶", "珈琲", "ばなナッツ"],
#     ["しろ", "抹茶あんこ", "珈琲", "ばなナッツ"],
#     ["しろ", "黒糖くるみ", "珈琲", "ばなナッツ"],
#     ["しろ", "珈琲", "あんず", "ベリーベリー"],
#     ["ほうじ茶", "抹茶あんこ", "珈琲", "ベリーベリー"],
#     ["ほうじ茶", "抹茶あんこ", "あんず", "ばなナッツ"],
#     ["ほうじ茶", "黒糖くるみ", "珈琲", "ベリーベリー"],
#     ["ほうじ茶", "黒糖くるみ", "あんず", "ばなナッツ"],
#     ["抹茶あんこ", "黒糖くるみ", "珈琲", "ベリーベリー"],
#     ["抹茶あんこ", "黒糖くるみ", "あんず", "ばなナッツ"]]

全8種を使用していたが、頻度はバラバラだった。

caneles = set4p.flatten.sort
caneles.uniq.size    # => 8

puts menu.keys.map{|c| "%4d %s" % [caneles.count(c), c]}
# >>    4 しろ
# >>    5 ほうじ茶
# >>    5 抹茶あんこ
# >>    5 黒糖くるみ
# >>    7 珈琲
# >>    4 あんず
# >>    4 ベリーベリー
# >>    6 ばなナッツ

【訂正】ホワイトデーの組み合わせ

ホワイトデーも終わり、そろそろカヌレ堂も落ち着くかと思いきや、春休みということで連日賑わっているようだ。

前回「ホワイトデー4個セットの組み合わせを洗い出す」に間違いがあることが分かった。

カヌレ堂では、毎月フレーバーの変わる 1ヶ月限定のカヌレが存在する。

4個セットには必ず限定カヌレのどちらか 1つが入っていたらしい。*1

4個セットの組み合わせは以下のように訂正する。

seasons = %w[ベリーベリー ばなナッツ]

combinations = menu.keys.combination(4).to_a
set4p = combinations.select{|caneles| caneles.map{|c| menu[c]}.sum == price}
  .select{|caneles| seasons.any?{|season| caneles.include?(season)}}
  .reject{|caneles| seasons.all?{|season| caneles.include?(season)}}

set4p.size                      # => 8
combinations.size               # => 70

set4p
# => [["しろ", "くろ", "千葉落花生", "ばなナッツ"],
#     ["しろ", "ほうじ茶キャラメル", "千葉落花生", "ばなナッツ"],
#     ["しろ", "きなこ五穀", "千葉落花生", "ベリーベリー"],
#     ["しろ", "抹茶ピスタチオ", "千葉落花生", "ベリーベリー"],
#     ["くろ", "ほうじ茶キャラメル", "きなこ五穀", "ばなナッツ"],
#     ["くろ", "ほうじ茶キャラメル", "抹茶ピスタチオ", "ばなナッツ"],
#     ["くろ", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"],
#     ["ほうじ茶キャラメル", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"]]

カヌレ 4個の合計が 600円になる組み合わせは 8通りに減った。

caneles = set4p.flatten.sort
caneles.uniq.size    # => 8

puts menu.keys.map{|c| "%4d %s" % [caneles.count(c), c]}
# >>    4 しろ
# >>    4 くろ
# >>    4 ほうじ茶キャラメル
# >>    4 きなこ五穀
# >>    4 抹茶ピスタチオ
# >>    4 千葉落花生
# >>    4 ベリーベリー
# >>    4 ばなナッツ

しかし、全8種が使われており、使用頻度も均等であった。

*1:両方入ることはないだろう。

ホワイトデー4個セットの組み合わせを洗い出す

大阪のカヌレ専門店「カヌレ堂」では、8種類のカヌレを販売しており、1個単品から購入できる。*1

ところがホワイトデー*2期間は単品では購入できず、8個, 16個, 24個の箱入りか、4種ランダムのセットしか販売していなかった。*3

4種入りは 600円で販売されており、購入してみるとセットに含まれるカヌレ 4個の合計金額はちょうど 600円であった。*4

つまり本当にランダムではなく、合計金額が 4個で 600円になる組み合わせが何種類かあるようだ。

堂島店*5での組み合わせを全て表示してみた。

menu = <<EOF.lines.map{|l| l.chomp.split(/\s+/)}.each_with_object({}){|(v,k), _| _[k] = v.to_i}
120 しろ
140 くろ
140 ほうじ茶キャラメル
150 きなこ五穀
150 抹茶ピスタチオ
170 千葉落花生
160 ベリーベリー
170 ばなナッツ
EOF

combinations = menu.keys.combination(4).to_a
set4p = combinations.select{|caneles| caneles.map{|c| menu[c]}.sum == 600}

set4p.size                      # => 12
combinations.size               # => 70

set4p
# => [["しろ", "くろ", "千葉落花生", "ばなナッツ"],
#     ["しろ", "ほうじ茶キャラメル", "千葉落花生", "ばなナッツ"],
#     ["しろ", "きなこ五穀", "千葉落花生", "ベリーベリー"],
#     ["しろ", "きなこ五穀", "ベリーベリー", "ばなナッツ"],
#     ["しろ", "抹茶ピスタチオ", "千葉落花生", "ベリーベリー"],
#     ["しろ", "抹茶ピスタチオ", "ベリーベリー", "ばなナッツ"],
#     ["くろ", "ほうじ茶キャラメル", "きなこ五穀", "千葉落花生"],
#     ["くろ", "ほうじ茶キャラメル", "きなこ五穀", "ばなナッツ"],
#     ["くろ", "ほうじ茶キャラメル", "抹茶ピスタチオ", "千葉落花生"],
#     ["くろ", "ほうじ茶キャラメル", "抹茶ピスタチオ", "ばなナッツ"],
#     ["くろ", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"],
#     ["ほうじ茶キャラメル", "きなこ五穀", "抹茶ピスタチオ", "ベリーベリー"]]

70通りの組み合わせの中で 600円になるのは 12通りであった。

全ての種類が使われているのか。自分の好きなカヌレが 4種セットでは買えないとなると悔しいではないか。*6

caneles = set4p.flatten.sort
caneles.uniq.size    # => 8

全8種類が使われているようだ。

しかし偏りはどうか。特定の種類だけ多く含まれると、それが品切れすると 4種セットが組めなくなる。

puts menu.keys.map{|c| "%4d %s" % [caneles.count(c), c]}
# >>    6 しろ
# >>    6 くろ
# >>    6 ほうじ茶キャラメル
# >>    6 きなこ五穀
# >>    6 抹茶ピスタチオ
# >>    6 千葉落花生
# >>    6 ベリーベリー
# >>    6 ばなナッツ

使用頻度は全て同じであった。これは偶然か。狙ってやっているならスゴイ。

*1:種類ごとに単価は異なる。1個 120円から 170円。

*2:調べてみると、日本にはホワイトデーという謎の風習があるらしい。

*3:バレンタインと異なり、お菓子を買い慣れていない客が多数訪れるため、選択肢を減らしているらしい。

*4:お得なセットではなく、4個を単品で購入するのと同額。

*5:カヌレ堂は桜川本店と堂島店の2店舗がある。

*6:ランダムなので確実に買うことはできないが。

「ねこふん」が終わったら「にゃらまち」

ねこふん

猫ふんじゃったなギャラリーたち」と題して、主に大阪のギャラリー、カフェ、雑貨店が猫にまつわる企画を毎年 5月に開催している。通称「ねこふん」

2016年は 25の企画が行われた。 *1

私も 21の企画に足を運んだ。 *2

にゃらまち

「にゃらまち猫祭り」と題して、主にならまちの (ry

毎年 6月に開催している。

どうやって巡るか計画を立てるべく web サイトを見てみたが、ねこふん ほど情報が見やすくない。

営業時間と定休日が一覧で見たい。

とりあえずスクレイピングしてみたが……

require 'open-uri'
require 'nokogiri'

def detail xml
  h1 = xml.xpath('//h1').first
  return if h1.nil?

  eenc = Encoding::default_external
  opts = {replace: ''}

  shop = h1.text.encode(eenc, opts)

  keywd = '営業時間'
  srv = xml.xpath(%|//p[contains(text(), "#{keywd.encode('UTF-8', opts)}")]|)
  srv = srv.nil? ? '' : "%s:%s -- %s:%s" % (srv.text.scan(/\d+/) + %w[00 00 00 00]) # !> too many arguments for format string

  keywd = '定休日'
  hol = xml.xpath(%|//p[contains(text(), "#{keywd.encode('UTF-8', opts)}")]|)
  hol = hol.nil? ? '' : hol.text.encode(eenc, opts).strip.sub(/#{keywd}[ ::]*/, '')

  [shop, srv, hol]
end

def more(uri)
  opts = {invalid: :replace, undef: :replace, replace: ''}
  puts uri.encode(Encoding::default_external, opts)

  fn = uri.split(/\//).last + ".html"
  fn.encode!(Encoding::default_external, opts)
  open(fn, 'w'){|f| f.write(open(URI.encode(uri), &:read))} unless File.exist? fn
  xml = Nokogiri::XML(open(fn))

  lm = xml.xpath('//a[contains(text(), "more")]') || []
  lM = xml.xpath('//a[contains(text(), "More")]') || []
  links = lm + lM
  links.map{|link| more(link.attributes['href'].value)} << detail(xml)
end

require 'pp'
pp more("http://www.nyaramachi.com/shop-list/")
# >> http://www.nyaramachi.com/shop-list/
# >> http://www.nyaramachi.com/shop-list/雑貨-ファッション/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/acartlifestyle/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/花羅古ろん/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/みに工房キャンバス/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/cloverand喫茶通圓/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/啓林堂書店奈良店/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/ことあかり洋品店/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/がまくち雑貨工房janji/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/doco-ao/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/ならまちわおん/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/necoco/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/猫雑貨ベゼル/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/marypoppinspochotte/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/器と郷土玩具瑜伽/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/アート-クラフトショップロビン/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/ab-cats/
# >> http://www.nyaramachi.com/
# >> http://www.nyaramachi.com/
# >> http://www.nyaramachi.com/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/猫雑貨とハンドメイドの店-cat-time/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/太古堂-ギャラリー-ショップ/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/アジアン雑貨-パーンファン/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/奈良のすごいタオル屋さん-ときどき猫/
# >> http://www.nyaramachi.com/shop-list/体験-1/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/着物あそびにっこり/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/美容室照美/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/遊悠工房zooandかぎひろ/
# >> http://www.nyaramachi.com/shop-list/カフェ-グルメ-1/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/うとうと/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/curryandcafe香炉里/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/四季折々の和菓子とらや/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/猫カフェ寧估庵/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/プティマルシェandぷちまるカフェ/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/franzkafkaフランツカフカ/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/喫茶工房まほろば/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/素人珈琲と雑貨よつばカフェ/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/若草カレー本舗/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/和彩rest紅絲/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/サブロク珈琲/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/甘いもん処-咲良/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/中華粥-穀雨/
# >> http://www.nyaramachi.com/shop-list/ギャラリー-1/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/ギャラリー一風/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/ギャルリサンク/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/スペース-プラス&#178;/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/
# >> http://www.nyaramachi.com/shop-list/カフェ-ギャラリー-1/galleryandcafeならまち村/
# >> [[[["ACART LIFESTYLE", "11:00 -- 19:00", "月曜(祝日の場合は翌火曜)"]],
# >>   [nil],
# >>   [["ミニ工房きゃんばす", "10:30 -- 19:00", "火曜"]],
# >>   [["CLOVER&珈琲館通圓", "14:00 -- 23:00", "不定休"]],
# >>   [["啓林堂書店奈良店", "9:00 -- 21:00", "1月1日、2日"]],
# >>   [["ことあかり洋品店", "11:00 -- 17:00", "月曜、火曜"]],
# >>   [["がまくち雑貨工房janji", "11:17 -- 00:00", " 不定休"]],
# >>   [["doco*ao", "13:00 -- 18:00", "月曜、火曜"]],
# >>   [["ならまちわおん", "10:00 -- 18:00", "木曜"]],
# >>   [["necoco", "11:00 -- 18:00", "月曜、木曜&#160;"]],
# >>   [["猫雑貨べセル", "10:00 -- 19:00", "月曜"]],
# >>   [["MaryPoppinsPochette", "10:30 -- 18:30", "木曜"]],
# >>   [["器と郷土玩具 瑜伽", "12:00 -- 18:00", "月曜"]],
# >>   [["アート&クラフトショップ ロビン", "11:00 -- 19:00", "木曜"]],
# >>   [["AB-CATS", "11:00 -- 18:00", "月&火曜"]],
# >>   [["にゃらまち猫祭り2016", "00:00 -- 00:00", ""]],
# >>   [["にゃらまち猫祭り2016", "00:00 -- 00:00", ""]],
# >>   [["にゃらまち猫祭り2016", "00:00 -- 00:00", ""]],
# >>   [nil],
# >>   [["太古堂", "13:00 -- 18:00", "月〜木曜 "]],
# >>   [["アジアン雑貨 パーンファン", "10:00 -- 19:00", " 木曜"]],
# >>   [["奈良のすごいタオル屋さんときどき猫", "11:00 -- 19:00", "不定休"]],
# >>   nil],
# >>  [[["着物あそび にっこり", "10:00 -- 00:00", "水曜&#160;"]],
# >>   [["美容室照実", "9:00 -- 18:00", "火曜、第3水曜日"]],
# >>   [["遊悠工房 ZOO&かぎろひ", "11:00 -- 17:00", "火曜、水曜"]],
# >>   nil],
# >>  [[["うと○うと(にゃらまち美術館)", "11:00 -- 17:00", "不定休"]],
# >>   [["Curry&Cafe 香炉里", "11:00 -- 20:00", "火曜"]],
# >>   [["四季折々の和菓子 とらや", "9:00 -- 20:30", "火曜"]],
# >>   [["猫カフェ寧估庵", "00:00 -- 00:00", ""]],
# >>   [["プティ・マルシェ&ぷちまるカフェ〜", "00:00 -- 00:00", "月曜、火曜"]],
# >>   [["Franz KAFKA フランツ・カフカ", "11:00 -- 21:00", "水曜"]],
# >>   [["喫茶工房まほろば", "11:00 -- 17:00", "木曜"]],
# >>   [["素人珈琲と雑貨 よつばカフェ", "11:00 -- 19:00", "水曜日 営業時間:11:00~19:00"]],
# >>   [["若草カレー本舗", "11:30 -- 15:00", "水曜日夜"]],
# >>   [["和彩Rest紅絲", "11:00 -- 22:30", "火曜"]],
# >>   [["サブロク珈琲", "00:00 -- 00:00", ""]],
# >>   [["甘いもん処 咲良", "10:00 -- 18:00", "不定休"]],
# >>   [["中華粥 穀雨", "00:00 -- 00:00", ""]],
# >>   nil],
# >>  [[["ギャラリー一風", "00:00 -- 00:00", "水曜"]],
# >>   [["ギャルリ・サンク", "12:00 -- 19:00", "不定休(期間中)"]],
# >>   [["スペースプラス&#178;", "00:00 -- 00:00", ""]],
# >>   nil],
# >>  [[["Gallery&Cafeならまち村", "11:00 -- 19:00", "火曜、水曜"]], nil],
# >>  ["Shop List", "00:00 -- 00:00", ""]]

力尽きた。

ページごとに構造がバラバラで Nokogiri 使うより、正規表現でゴリゴリやった方がよさそう。

*1:阪神百貨店梅田本店を含む

*2:散財した

図書館に技術書がないならジュンク堂書店に行けばいいじゃない

ありがたいことに図書館にも技術書の蔵書がたくさんあるらしい。

詳しくは「東京の図書館で技術書を借りよう」を参照。

しかし、そのほとんどが「貸出中」

「今すぐ見たいんだよ」

そんなあなたにジュンク堂書店がオススメ。

新春座談会 このコンピュータ書がすごい! 2016年版 −2015年に出たコンピュータ書ならこれを読め!−」トップテンの在庫状況を調べてみた。

  1. たった1日で即戦力になるExcelの教科書
  2. 人工知能は人間を超えるか
  3. スッキリわかるJava入門 第2版
  4. リーダブルコード
  5. 暗号技術入門 第3版
  6. 深層学習
  7. HTML5&CSS3デザインブック
  8. 伝わるデザインの基本
  9. ハッカーの学校
  10. インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

在庫状況は「○」が在庫あり、「△」が在庫わずか。書店での棚位置もわかる。
私が普段からよく使っているMARUZEN&ジュンク堂書店 梅田店では、トップテン全てが在庫状況「○」*1

ジュンク堂書店では、購入前の本を座って読めるので「書籍の内容を購入前に確認したい」という用途には問題ない。
しかも、その場で購入できる。Amazon より速い。ポイントも貯まる。

残念ながら「書籍のサンプルコードに脆弱性がないか確かめたい」だけの人も、本を買わないといけないが……

ということで、技術書に触れるための機会の一つとして、ジュンク堂書店も選択肢に加えてみてはいかがでしょうか?

*1:2016年2月22日現在

C++ で Ruby の inject みたいなやつを作ってみる

仕事で C++ を使うことになったので、リハビリを兼て Ruby の inject みたいな (lisp の apply みたいな) 関数を書いてみた。

#include <iostream>
#include <vector>
#include <functional>

using namespace std;

#define ARRSIZ(a) (sizeof(a)/sizeof((a)[0]))
#define ARREND(a) ((a)+ARRSIZ(a))

template <class T, class R, class F>
R inject(T begin, T end, R result, F func) {
    for (; begin != end; ++begin)
	result = func(result, *begin);
    return result;
}

template <class T>
struct PLUS {
    T operator()(const T& a, const T& b) const {
        return a + b;
    }
};

int main() {
    int src[] = {1, 2, 3, 4, 5};
    vector<int> v;
    vector<double> w;

    for (int* i = src; i != ARREND(src); ++i) {
	v.push_back(*i);
	w.push_back(*i * 1.1);
    }

    cout << inject(src, ARREND(src),   0,   plus<int>())    << endl;
    cout << inject(v.begin(), v.end(), 0,   plus<int>())    << endl;
    cout << inject(w.begin(), w.end(), 0.0, plus<double>()) << endl;
    cout << inject(v.begin(), v.end(), 0,   PLUS<int>())    << endl;
    cout << inject(w.begin(), w.end(), 0.0, PLUS<double>()) << endl;

    return 0;
}

inject の受け取る、型 F がなんかよく分からん。

template 使うと、関数オブジェクトを関数内でちょいちょいっと書けないのかね。

    struct _plus_ {
	int operator()(const int& a, const int& b) const {
	    return a + b;
	}
    };
    cout << inject(v.begin(), v.end(), 0, _plus_()) << endl;

上のように main() の中で struct を書くと、

warning: template argument uses local type '_plus_'

こんな感じで怒られる。めんどくさい。
今時ならラムダ式を使うといいんだろうか?

そもそも inject に相当する関数はどこかに定義されてるんじゃないのか?

Rails Girls Osaka にカヌレを差し入れしてみた

Rails Girls という、主に女性を対象としたプログラミングのワークショップがあり、去る 2014年6月6日・7日 大阪で Rails Girls Osaka が開催された。

Rails Girls には、おやつの時間があるらしいので、例によって例のごとくカヌレ堂カヌレを差し入れた。*1
Rails Girls Kyoto では阿闍梨餅が差し入れされたらしいので、大阪も負ける訳にはいかない。

今回は、カヌレ堂が百貨店に出展する際の雰囲気をどこまで再現できるか挑戦してみた。

ショーケースいっぱいにカヌレの並ぶ様は形容し難い。参加人数と自分のサイフを考えると、そこまでの数で圧倒することはできないのが残念。

カヌレ堂の催事では、デニムのワンピースに身をつつみ、ベレー帽をかぶったキレイなお姉さんがトングでカヌレを取ってくれる。
自分もデニムのシャツで臨んだが、ベレー帽は用意できなかった。

おっさんがカヌレを取り分けてくれても嬉しくないであろうから、トングを用意して、セルフで紙皿に取ってもらうことにした。

紙皿と紙ナプキンはカヌレ堂をイメージして未晒しにこだわった。
未晒しの紙皿はサイズのバリエーションが少なく、カヌレに対して少し大きめになってしまったのが悔まれる。

最近カヌレ堂が取り上げられた雑誌も展示してみた。
たまたま家にあったブックスタンドが黒猫のモチーフだったので、トングのスタンドも黒猫で統一してみた。
そこで止めれば良かったものを、黒猫マステ、黒猫付箋と黒猫で統一してしまったのはやりすぎた感が否めない。

Abeille レシピスタンド(S) ネコ ブラック ADS-955

Abeille レシピスタンド(S) ネコ ブラック ADS-955

用意したカヌレは全 8種類

  • しろ (プレーン)
  • ほうじ茶
  • 黒糖くるみ
  • あんず
  • 黒豆きなこ
  • 梅 (6月限定)
  • れもん (6月限定)
  • あんこ餅 (不定期限定)

カヌレ以外にも、おやつはたくさんあると聞いていたので、ひとり 2〜3 個を目安に用意したが、主催者側から ひとり 2個というアナウンスがなされた。
8種から 2個選ぶというのが、また楽しさをプラスしたのではないだろうか (と思いたい)

「若干余っていますので、おかわりをどうぞ」と奨めると何人もおかわりに来てくれた。
これは嬉しい!

参加者の声

カヌレ堂、聞いたことあって気になってたんです」
カヌレ大好きなので、帰りに買いに行きたいくらいです」*2
などなど*3

Rails Girls が、どんな雰囲気なのか分からず不安もあったが、なんとか喜んでもらえたと思う。

差し入れに関してスタッフのくにちゃんには何度も問い合わせをしてすみませんでした。
私のことは嫌いになってもカヌレ堂のことは嫌いにならないでください。

P.S.

カヌレを提供したら、さっさと帰るつもりでいたのだが、アフターパーティー & More に誘っていただいたので、あつかましくも参加させていただいた。

スタッフでもコーチでもないのにすみません。

案の定パーティーでは所在なく、ひとりもくもくと料理をいただいていたのだが、突然 参加者の女性に話しかけられた。

なんとその女性は、数年前に KOF で、私が講師をした Ruby初級者向けレッスンの受講者だったらしい。

こんなところでお会いするとは!*4

彼女が今 Rails を使っていることに、ほんの少しでも影響を与えていたとしたら、こんな嬉しいことはない。

そして彼女の一言が、今後の私にも大きく影響するんだと思う。
ほんとうにありがとう。

*1:9ヶ月ぶりのエントリがまたカヌレとは…

*2:お店では「ひがきに聞いた」と言ってもらえればスムーズに会話が進むと思います。

*3:「お店の方ですか」という想定内の質問もいただいた。従業員ではありません。

*4:この驚きと感動を素直に表現できないコミュ障ですみません。彼女にはまったく伝わっていなかったでしょうが喜んでいます。