行列屋さんの作業ログ

行列まわりで色々やってたエンジニアの作業メモ&国内外旅行記ブログ

箱根一泊二日(強羅花扇)旅行記④ 大涌谷とサロン・ド・テ ロザージュでおやつ

この記事は下の記事の続きです
liberaldays.hatenablog.com



旅行二日目(最終日),強羅花扇を11時に出発しとりあえず大涌谷に車で向かいます.
宿から大涌谷までは車で10分かからないくらい.ですが大涌谷の駐車場が大変な混雑だったので,桃源台まで移動してそこからロープウェイで大涌谷に向かうことにします.今考えれば,宿に車をおいて早雲山からロープウェイを使えばよかったですね.

桃源台の無料駐車場は満車でしたので,となりの有料市営駐車場(500円/回)に駐車してロープウェイ駅に向かいます.

年末で混雑しているとの噂でしたが,10分程度の待ち時間でロープウェイに乗車出来ました.待機列中では無料のホッカイロ(広告付き)が配布されていて助かりました.




ロープウェイの乗り場が格好良かったのでつい連写.

桃源台から2駅16分で大涌谷に到着します.少し風の強い日でしたがほとんど揺れることもなく,富士山の眺めを楽しみながら移動することができました.

大涌谷はお土産屋さんを除いて大した人混みではなく,ぼうっと噴煙地を眺められます.先日の火山活動の影響で黒玉子で有名な小屋には登れなくなっていたのが残念.

山頂では黒玉子とお土産を買い,たまごソフトクリームを頂きました.

眺めに満足したのでロープウェイで桃源台に戻ります.このとき14時.夜には自宅に戻りたかったので,おやつを食べて箱根を立つことにしました.
おやつは元箱根の「サロン・ド・テ ロザージュ」が人気店ということでここに向かいます.
www.hakone-hoteldeyama.jp

到着時には満席でしたが,5分ほどで店内に案内されました.14時-17時にはアフタヌーンティーが提供されるので,折角だからこれを頼んでみました.紅茶はティーメニューから好きなものを選べ,ポットで提供されます.私はチャイを頼みました.


f:id:liberaldays:20170105152917j:plain:w300

チャイはシナモン系の香りが程よく,美味しかったです.スコーンは柚子のジャムで頂いたのですが,このジャムが美味しくてたくさん付けてしまいました.
ちなみにレストランの2Fはショップになっていて可愛らしいティーグッズが販売されていました.

アフタヌーンティーが済んだので自宅に戻り正月準備となりました.
1泊2日の小旅行でしたが,良い気分転換ができました.


日々の生活にhappyをプラスする|ハピタス

箱根一泊二日(強羅花扇)旅行記③ 朝食,チェックアウト

この記事は下の記事の続きです
liberaldays.hatenablog.com

翌日は7時頃に目が醒めました.加湿空気清浄機のお陰で暖房をつけっぱなしでも喉は痛くありません.
朝食の時間は8:30でお願いしていたのでまだ時間があります.とりあえずエスプレッソをまた追加し,朝風呂に入ります.大浴場も開いていたと思いますが折角なのでお部屋のお風呂に.お風呂で外を眺めていたところ,箱根のケーブルカーが早雲山駅に向かって斜面を昇るところを発見しました.
(といっても線路から十分離れているためケーブルカー車内からの視線を気にする必要はないでしょう.)
発汗作用のある温泉で気持ちよく汗をかき,湯冷ましをしていたらちょうど朝食時間です.夕食とおなじくロビーに向かい,同じ個室に案内されます.
朝食は下の写真のようなメニューで美味しくいただきました.おかゆか白米かで選べたと思います.

f:id:liberaldays:20170104214006j:plain

40分ほど掛けて朝食を頂いたあとはラウンジに向かいます.仲居さんから10時まで,コーヒーかお茶(紅茶だっかかも)のサービスがあると聞いたので折角なので.本日2杯目のコーヒーをここで頂きました.ラウンジには他の宿泊客の方々がいらっしゃいました.私達と同じく特別室を利用している家族連れの方,カップルと思しき方,欧米系の方,小さな子ども連れなどをラウンジ付近で見かけました.
室数が少ない割に建物が大きく,食事処も個室なので昨日は他の宿泊客とほとんど顔を合わせなかったのですが...ちゃんと他のお客さんも居たんですね.そりゃそうか.

チェックアウトは11時なので,それまでまたお部屋で過ごします.移動が控えているのでネスプレッソはもう飲みません.
11時にロビーにいくと,仲居さん他従業員の方が迎えて下さります.精算は済んでいるので後は宿を去るのみ.玄関前に自宅の車を横付けしてくれていたのでそれに乗り込んで出発.皆さんありがとうございました.

さて,強羅花扇を振り返ってですが,「現実逃避」を目的とした今回の旅には最適でした.お部屋は十分に広く,アメニティも充実しており,お風呂でリラックスもできました.さらに電源も各所にありWiFiもあるので趣味のプログラミング・サーバー管理も存分に.時間があればもう一泊したいと思える宿でした.
強いて難点を挙げるとすれば,お料理の何となく何かが不足している感じ(料理については前日の記事を参照.料理自体は十分豪華なんですけれどね.)と,本当にごく一部,襖の鴨居の上の部分なんかにホコリが見えたところでしょうか(こんなところ気にしてると小姑と思われそうですが).まあ些細なことで,存分に羽を伸ばす事が出来ました.

ここで言うのも何ですが,実は予約時には更にランクの高い別の宿(「強羅花扇 円かの杜」だったかな)への宿泊を考えていました.
ただ年末という忙しい時期で予約が取れず,代わりに案内されたのがこの「強羅花扇」でした.いい宿に出会えたと思っていますが,次回の箱根旅行は高いお宿へもリベンジしたいですね.他に行きたい温泉地もあるので,実現がいつになるかは分かりませんが....

さて,箱根旅行ですが大涌谷に向かい,元箱根でスイーツを食し帰宅します.
その様子はまた後日.

次の記事はこちら
liberaldays.hatenablog.com


日々の生活にhappyをプラスする|ハピタス

箱根一泊二日(強羅花扇)旅行記② お風呂と夕食

この記事は下の記事の続きです
liberaldays.hatenablog.com

お部屋でゆっくりしたあとは,とりあえず大浴場に向かいます.
部屋は2Fにあったのですが,大浴場はロビー階(1Fの下).エレベーターで向かいます.廊下は結構長いのですが床暖房が完備されており足袋で歩いても寒さを感じません.この廊下,夜は照明が抑えられておりとてもムーディーでした.
(書き忘れていましたが,この宿は玄関で外履きを脱ぎます.部屋に新品の足袋が用意されているのでそれを履いて過ごしました.部屋にスリッパがありますがそれはトイレ専用です.)
タオル等は全て大浴場に備えられているので,手ぶらで向かう事が出来ます.とても気楽で良いですね.部屋にお風呂用のカバン(竹製品?)もあるので小物が多ければこれを持ってゆけば良いでしょう.脱衣所のロッカー(ちなみに木製でおしゃれ)は鍵が掛かるので安心です.


廊下

16時と早めの時間に入ったためか,大浴場はほぼ貸し切り状態でした.屋内に長方形の浴槽があり,露天風呂も2つ備えられています.洗い場も各ブース十分な幅がありました.肝心の温泉ですが湯温は気持ち低めです.でも発汗作用があるらしく使っていると暑くなってきました.湯冷まし用に外に椅子もありましたが,冬の箱根なので流石に座ってのんびりとはいきませんでした....
脱衣所には洗面台があり,ブラシやドライヤー,ひげそりなど必要なものが揃っています.自由に使えるマッサージチェアや冷水機まで備えられています.長風呂しても安心でしょうか.

さて,部屋に戻ったら今度は部屋のお風呂に入ります.部屋のお風呂は常に湯が流れていて,必要ならば湯・水を足して温度を調節できます.

部屋の露天風呂

こちらでもリラックスした後はバスローブにでも着替えてハートランドをごくり.ラボの自端末にSSHして進捗を確認したりして夕食の時間を待ちました.

夕食は懐石料理です.A5ランクの飛騨牛を頂けるとのことで楽しみ.JTBを経由して予約した時には海鮮も美味しいとのことでした.
時間になったらロビーにゆくと仲居さんが食事処まで案内して頂けます.案内されたのは45帖ほどの個室でした...広い(写真を撮り忘れたのが残念).

献立は下の通りです.

撮影した料理の写真を上げておきます(幾つか撮影し忘れたものもありますが...).
f:id:liberaldays:20170104133052j:plain:w300
前菜


刺し身

f:id:liberaldays:20170104133239j:plain:w300
飛騨牛 手元で焼いて頂きます


ご飯


そしてデザート(水物)

2時間掛けて頂き,お腹が一杯になりました(炭水化物少なめなので夜中にお腹が空いて和菓子を頂いたのは秘密).飛騨牛,伊勢海老の刺し身など,どの料理も美味しく頂けました.ただ同行の両親曰く「どの料理も美味しいのだけれど,なんというか地味,あと少し何かあれば完全なのに」とのこと.それは確かに.器でしょうか,調味料でしょうか...何かがもの足りない気はしました.美味しかったので概ね満足ですけどね.

夕食後は腹ごなしも兼ねてロビー付近を散策します.


ロビーの照明が幻想的です.ロビーには小さな売店があり,寄木細工やお菓子,おもちゃなどが売られていました.
部屋に戻る途中で廊下にお正月の飾り付けがされていることに気付きました.

f:id:liberaldays:20170104134840j:plain:w300

部屋に戻ると和室に布団が敷かれており,茶器の交換もされていました.
f:id:liberaldays:20170104134925j:plain:w300

あとは夜までエスプレッソとビールを飲みながら,ゆっくり.良い夜を過ごせました.

翌日の様子はまた次回.

次の記事はこちら
liberaldays.hatenablog.com


日々の生活にhappyをプラスする|ハピタス

箱根一泊二日(強羅花扇)旅行記① チェックインとお部屋の様子

昨年末に箱根に一泊二日の旅行に行ってきましたのでその様子をお伝えします.
基本的には宿でのんびりし,2日目にちょっぴり観光して自宅に帰るだけの小旅行でした.でも宿の設備がすばらしく十分な現実逃避が出来たので満足です.

今回は強羅花扇という宿に泊まりました.この会社は箱根(というか強羅)には3箇所の宿を運営しているようなのですがそのうちの一箇所です.
(宿HP)
箱根強羅温泉の旅館なら全室露天風呂付きの宿 強羅花扇【公式サイト】
(TripAdvisor)
強羅花扇【 2017年の口コミ・価格比較・宿泊予約 】- トリップアドバイザー


ケーブルカー,ロープウェイの早雲山駅からは専用のエレベーターでつながっており,アクセスも便利そうです.

といっても車で向かったのでこのエレベーターを使うことはなかったのですが.

車で宿に到着すると,仲居さん他数名の方が迎えて下さいました.荷物は先に部屋に運び込んで頂き,1Fのラウンジでチェックインの手続きを行います.このときにお菓子(お芋の素揚げ)と飲み物も頂きます.飲み物はジュース類はもちろん,抹茶も頂けたようですが私はビールを選択しました.
f:id:liberaldays:20170104003323j:plain:w300
ラウンジの様子と
f:id:liberaldays:20170104003331j:plain:w300
お菓子・ビール

その後お部屋に向かいます.今回は家族での宿泊なので4人宿泊できる特別室に泊まります.HPによると花扇は全20室と小規模なホテルで,うち4人以上で宿泊できるのは特別室(2室)と準特別室(1室)になります.特別室もそれぞれ間取りが違うのですが210号室に泊まりました.

入室後は仲居さんからお部屋の説明があり,鍵(2本)を渡されました.夕食の時間も18:30に決めます.その後はウェルカムフルーツと用意されていた和菓子をいただきました.
f:id:liberaldays:20170104004217j:plain:w300


お部屋はリビングと寝室,和室の3室が主で,トイレ,脱衣所,シャワールーム,露天風呂,縁側(?)もあります.

f:id:liberaldays:20170104004325j:plain:w300
リビング(奥は脱衣所,シャワールーム,そして露天風呂)
f:id:liberaldays:20170104004456j:plain:w600
(TV周りの様子.ちょうどだまされた大賞を観てました)


リビングにはソファやテレビが設置されています.プレーヤーにBOSEのサラウンドシステムも完備されており,テレビ横のDVDリストからDVDの貸出もお願いできるので映画鑑賞も出来ます.

TV台の下には茶器と茶葉.冷蔵庫にはコンプリメンタリーのビール(ハートランド),ペリエ,オレンジジュースと水が各4本用意されていました.また水差し,デロンギの湯沸かし器,ネスプレッソのカプセルマシーンがあり,流しもあって水も汲めます.この部屋にいる限り飲み物に困ることはないでしょう.ネスプレッソの使い過ぎで夜寝れなくなるかと思いました.ネスプレッソのカプセル,36杯分もありとても全ては飲めません.
f:id:liberaldays:20170104004917j:plain:w300
冷蔵庫


寝室はこんな感じ.2ベッドです.ベッドの上とクローゼットには浴衣と作務衣,バスローブが用意されていたので滞在中は部屋の中では作務衣,部屋を出るときは浴衣で過ごしていました.
f:id:liberaldays:20170104005114j:plain:w300
寝室

和室はこんな感じ.コタツがあり,夜には布団が敷かれます.
f:id:liberaldays:20170104005201j:plain:w300
和室

f:id:liberaldays:20170104005214j:plain:w300
そして縁側

和室の奥には素晴らしい眺めの縁側があります.加湿空気清浄機も用意されています.この宿では全館WiFiが繋がるので,ここで眺めを楽しみながらMacラムダ式の使い所を勉強したりchefを回したり...まあ相変わらず好きなことをやってました.

お風呂関係ですが,まずリビングの隣にアメニティ類の充実した脱衣所・洗面所があり,その隣にシャワールーム.そしてそこから外の露天風呂につながっています.足を伸ばせるほどの大きさでは残念ながらないですが,十分でしょう.お部屋露天風呂があるのもこの宿を選んだ大きな理由です.
ちなみにお風呂はリビングから丸見えなので,必要ならばカーテンを閉めましょう.露天風呂と外の仕切りを閉めることも出来るので,気になる人も大丈夫なのだろうか.

トイレはもちろんウォシュレット完備です.
f:id:liberaldays:20170104005408j:plain:w300
れいなトイレ

当然エアコンは全室にあり,床暖房も広い範囲をカバーしています.外は夜には氷点下になりますが部屋の中で寒いと感じることはありませんでした.木材に拘った家具類も使いやすく,リラックスできます.

さて,一息ついたので,これから大浴場に向かいます.その後は(趣味の)コードを書いて部屋でまたお風呂に入り,夕食を食べたらまたコードを書いてのんびりする,最高の年末を過ごしました.長くなりそうなので以降の様子はまた後日.

次の記事はこちら
liberaldays.hatenablog.com



パケットデータ(pcap)をRで読み込む話

tcpdumpで取得したパケットのキャプチャデータをRに読み込ませる話。

遊びでパケットキャプチャしてみたけど結果が見難い。じゃあいつも使ってるRで読ませてみましょうと考えた。wiresharkや、そのCUI版であるTsharkを使えばキャプチャデータをcsvに変換出来て楽だけど、Rだけでなんとかしてみる。データ読み込みのお勉強。

つかうキャプチャデータは,tcpdumpで得られたもの.tcpdumpに何のオプションを付けるかによって得られるデータが変わるけど,今回はIPアドレスの名前解決や,パケットの中身の取得は行わず,純粋にプロトコルやIP,ポート番号だけを記録したものを使う...というか,今回扱いたいデータがそうして取得されたものだった.

Rで読み込ませる前に,catでデータの中身を表示させてみた....が文字化け.文字コードを変更しつつvimで開いてもダメ.そもそもテキストで保存されてないのか.
じゃあとおもって

tcpdump -r packet_data.pcap > encoded.txt


と打つと,無事encoded.txtに人間が見て分かる形式で表示された.

あとは人間で読める形式に変換してからRを起動してデータを読みこませれば良いわけだけど,シェルでtcpdump打って変換してからRを起動して...とやるのは面倒.
全部Rで完結させるために,R内からshellコマンドを実行することにする.

今回使うのは,Rのsystemコマンド.

system('ls')
system('pwd')

みたいに使うと,シェルコマンドをRから実行してくれる.実行結果はRのコンソール上に吐かれるので,オプションのinternをTRUEにして,文字列としてR内で持たせてあげる.

まとめるとこんなかんじ

pcap.path <- <pcapデータへのフルパス>
data <- system(paste0('tcpdump -nn -r 'pcap.path),intern=T)

これでtcpdumpの出力が,オブジェクトdataに文字列として保存される.
nnオプションはIPの名前解決をしないオプション.付けないと勝手にドメインに書き換えられるから必須.
追記
(オプション-nnttqが、色々無駄なの消えて一番楽ということに後で気付いた.
またプロトコルを指定したい場合はオプションを色々弄ると楽になる.)

data
[1] "09:00:37.1691342 IP 100.100.123.123.52 > 123.123.123.123.22: UDP, length 0"
....


あとは文字列処理のお話.
strsplitで空白とカンマで分割してやる.

strsplit(data,split=' |,')
#strsplit(data,split=' |,|:|>|\\.') #コロンやピリオドでも分割するならこっち.時刻やIPが分かれすぎるけど
#追記の-nnttqオプションでやるならこっちが便利(僕の場合)


結果はリスト.unlistしたいところだけど,パケットごとに分割後の長さが異なるのでやめておく.「時刻」とか「送信元」とか,必要な情報をリストからいちいち取り出してゆく

Time <- sapply(data,'[[',1) #時刻だけ取り出し
Source <- sapply(data,'[[',3) #送信元だけ取り出し(IPとポートは後で分けよう)
Dest <- sapply(data,'[[',5) #宛先だけ取り出し(IPとポートは後で分けよう,末尾のコロンも後で消そう)
Protocol <- sapply(data,'[[',6) #TCPかUDPかそれ以外か


とりあえず,僕が必要なのはこれだけ.パケットフラグとかも必要なら,もう少し面倒な処理が必要だったかも.
あとはTime,Source,Dest,Protocolをdata.frameにまとめれば解析に必要なデータは得られたことになる.(IPとポート分ける処理とかは書いてないけど)
追記
(icmpが来るとポート番号が無いので変なことになるのに気付いた。僕の場合はtcpだけ取れれば良いから、tcpdumpの時点でフィルタリングしてしまう)

さっそくプロットとかしてみよう

dplyrでデータの集計を行う

大量(1億件くらい)のデータを集計する必要が生じた。
ということで今回は、Rであるラベル(複数)のデータがいくつ存在しているのか高速に集計するお話。
アンケートを取って、下のような結果が得られたとする。

adress <- sample(c('千葉','滋賀','佐賀'),size = 1000,replace = TRUE)
sex <- sample(c('男','女'),size = 1000,replace = TRUE)
work <- sample(c('学生','社会人'),size = 1000,replace = TRUE)

data <- data.frame(adress=adress,sex=sex,work=work)

> head(data)
  adress sex   work

1   千葉  女 社会人

2   佐賀  女   学生

3   千葉  女 社会人

4   滋賀  男   学生

5   佐賀  女 社会人

6   佐賀  女 社会人

各県の居住者が何人居るのかは、table関数を使えば判る。

> table(data$adress)
佐賀 千葉 滋賀
 337  357  306

じゃあ、居住地が◯で、性別が☓で、職業が△な人が何人居るのかカウントするにはどうすれば良いのだろう。
それも出来れば高速で。1億件近いデータを処理せねばならんのだ。

こうして悩んでいた所、先輩からdplyrパッケージというのを教わる。
このパッケージの使い方は、このサイトに非常によく纏まっていた。

plyr — データ分割-関数適用-再結合を効率的に — Watallica metallicus

前半はplyrという別のパッケージの話。こっちは処理速度遅め。
(内部でapply系関数を回してるという噂)

CRANからいつものようにインストール。
libraryで読み込んだら、group_by関数とsummarise関数を使う。

> g <- group_by(data,adress,sex,work)> summarise(g,n())
Source: local data frame [12 x 4]

Groups: adress, sex



   adress sex   work n()

1    佐賀  女   学生  84

2    佐賀  女 社会人  79

3    佐賀  男   学生  77

4    佐賀  男 社会人  92

5    千葉  女   学生  91

6    千葉  女 社会人  84

7    千葉  男   学生  86

8    千葉  男 社会人  82

9    滋賀  女   学生  89

10   滋賀  女 社会人  75

11   滋賀  男   学生  81

12   滋賀  男 社会人  80

group_byではdataにつづいて、集計対象の変数名(列名)を記述する。
そしてグルーピングの結果をsummarise関数に渡し、グループ毎にカウントをん()でやってあげる。

このパッケージの良い所は、物凄い高速に処理を行えるところ。
実際に1億件のデータを計算機上で処理させてみたけれど、数秒で終わってしまった。
このパッケージつかえば、既存のスクリプトもかなり高速化出来そうである、

Rで並列計算 パラメータを変えながら計算を回す

行列分解の一種、CUR分解をパラメータを色々変えながら実行してみようと思った。

パラメータの組み合わせが500通り位あるので、せっかくだから並列化してみる。

ということでサンプルコードを書く。

2つの入力パラメータの積を返す、myprodという関数を定義した。

myprod <- function(a,b){
 return(a*b)
 }

この関数を、並列に回すのが今回の目標。もちろん、それぞれ別のパラメータを持たせながら。

使うのはsnowパッケージ(と、パラメータの組み合わせを作るためのreshapeパッケージ)

library(snow)
library(reshape)

パラメータの組み合わせを作る。

param1 <- 1:10
param2 <- 11:20
param <- expand.grid(param1,param2)

こんなかんじの組み合わせ100つ

> param
    Var1 Var2
1      1   11
2      2   11
3      3   11
4      4   11
(以下略)

普通に計算するなら下のようにする。結果はリストでまとまってくる。

lapply(1:dim(param)[1],function(i){
        myprod(param[i,1],param[i,2])
})

並列計算するなら、下のようにする。
まずは並列計算用のクラスター作成。今回は4コア。

hosts <- rep('localhost',4)
scl <- makeCluster(hosts, "SOCK")

次に、並列計算に使用するオブジェクトをエクスポートしてやる。今回はmyprodとparamをエクスポート。

clusterExport(scl,c('myprod','param'))

以上で準備完了。
parLapply(lapply関数の並列版)を使って計算する。

result_parallel <- parLapply(cl = scl,x = 1:dim(param)[1],fun = function(i){
        myprod(param[i,1],param[i,2])
})

計算自体はこれで完了。
計算が終わったら、使用したクラスタを止めてあげる。

stopCluster(scl)

並列計算の結果は、シングルコアで処理した時のともちろん同じ。

> identical(result_single,result_parallel)
[1] TRUE

さて、気になる計算時間(proc.timeを基に計算)は、
シングルが0.005s
並列時は、クラスタ生成から停止までで0.989s…うん遅い。
parLapplyにかかった時間は0.005s。この程度じゃ差が生まれなかった。

じゃあ、1000*1000の10000通りなら?
シングルなら80.051s
並列なら、クラスタ生成から停止まで30.489s
parLapplyだけなら25.305s

無事早くなってくれた。

並列化する方法はsnowパッケージで出来るものだけでも沢山あるし、他のパッケージとしてdoMCやffもある。
今回は、既存コードをからの変更点が一番少なさそうだったからこれを使ったけれど、1から作るなら別に良い方法があるかも。