ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

SECCON2016 Finalsに行ってきた(感想)

概要

2017年1月28~29日に行われたSECCON2016 Finalsにうさぎさん, レンジさん, じょにーさんとチーム「バイナリおいしい(Binary Oishi)」として参加してきました.大会自体はKing of the hill形式で初めてだったので,すごく楽しみにしていました.チームとしては340ptぐらい(正確な値を覚えていない)で,私は,Jeopardyのpwn(100pt)を通した.特に賞などはもらえなかったが,海外の強豪チームなどと同じフィールドで戦えたのはとても貴重だったし嬉しかった.この機会をくれた3人に感謝の気持ちを伝えたい.濃密な2日間だった. f:id:encry1024:20170130143446j:plain

1日目

会場について受付を済ませ,会場が開くのを待つ間,ダラダラといろんな人としゃべっていた.久しぶりに会えた人も居て楽しかった.SECCONのTシャツや首からかける名札,シールなどをもらった.
f:id:encry1024:20170130134835j:plain

会場が開いて,座席に座った.右には,日本のriroshi,もう一つ右には日本のinsecure,左には日本のelf,もう一つ左にはアメリカのPPP, 前にはポーランドのDragon Sector,斜め前には台湾のHITCONが居たりして感慨深かった. 11:00から開始予定だったのだが,ネットワークトラブル等で,開始時間が12:00からになったので,コンビニでお菓子や飯を買ってだらだら食っていた.
12:00になり競技が始まる.King of the hill形式とJeopardy形式の二つの種類があり,みんなと話し合ってせっかくならKing of the hillを楽しみたいよねという考えが一致し,1日目はJeopardyの問題をDLするだけで,一秒も見ること無くKing of the hill形式の問題を楽しんでいた.King of the hillの問題は全部で5問あり,3つ目の問題に取り組んだ,バイナリ自体が小さくすぐ読めたが,まったく方針が立たず時間だけが経過していく.適宜みんなの知見を共有しながら取り組んでいたが,結局1日目は0ptで終わった.
夜ご飯をみんなでくいながら,King of the hillの問題について話し合う,この時点からようやくJeopardyの方の話題が出始めるが,とりわけ本気でやっている感じではなかった.私自身も引き続き同じ問題を考えていた.家に帰っても同じ問題をやっていて,Jeopardyとはなんだったのかという感じだった.

2日目(~3日目)

朝起きる.0ptという現実に辛みを感じてJeopardyをやることを決意する.ここからJeopardyの戦いがはじまる.取り組んだのはPwn100のenquete(アンケート)という問題.ギリギリまで家でやり,進捗を出す. f:id:encry1024:20170130140603p:plain 競技が始まると,いろんなチームが持ち帰った宿題をやってきていて,妨害コンテンツである得点を入れた時になる声が鳴り止まなかった.しばらく経って,うさぎさんがKing of the hillのシェルコード問を通す.すごかった.King of the hillを楽しんでいてとても羨ましかった.その後しばらくたって私もpwn100をゴリ押し後から読むと意味不明exploitを作り上げ100ptを通す.その後またうさぎさんが100pt入れてくれて,最終的にはdefense keywordの書き込みによって40ptぐらい加算した340ptという終わりだった. f:id:encry1024:20170130143527j:plain
競技後は,表彰式,懇親会を楽しんだ.表彰式の制度というかその他もろもろに「?」となる点がいささかあったが言及はしないでおく.競技の結果自体は,1位が大韓民国のCyKor,2位も大韓民国のPwnPineappleApplePwn,3位は中華人民共和国のeeeだった.
懇親会では,いろんな人と話したり寿司,ローストビーフ,エビチリ,角煮,ビールと美味しいものを食べれて満足.インターン先でお世話になった人にも会うことができて,とっても嬉しかった.
その後,二次会に行く.ジントニックがおいしくて3杯も飲んだら流石に酔ってきた.よくわからず三次会の錦糸町でやるカラオケに参加.もう終電なんか乗れるはずがなかった.運営の2人を除いたら私しか日本人がいないというすごい状況で,まったく知らない洋楽を歌ったり,聞きまくったりして4:00ぐらいまで居た.強豪チームの人とBeatlesを一緒に歌ったりなんともすごい経験をした. 始発を待つしか帰る手段がなく,運営のお二人が一緒にお供してくれた.3人ともぐったりしていた.

反省点

やはり,Jeopardyを最初に取り組んでおくべきだった.うさぎさんが間に合わなかった問題や他の問題もちゃんと見れば普通にやるだけ問題だったし,この一点に尽きると思う.私自身はKing of the hillはできていないので,なおさらJeopardyを重視してやっておけばよかったという後悔が残った.

感謝

運営の方やスポンサーの方のおかげで,とても楽しい2日間を過ごせた.本当にありがとうございました.また,改めてチームメイトに感謝の気持ちを伝えたい. f:id:encry1024:20170130143312j:plain

Anacondaをfishで使うときにactivateができないときの対処法

$ fish -v
fish, version 2.4.0
$ conda -V
conda 4.3.8

source activate testをやってみると以下のようなエラーが出てしまった.

$ source activate test
source: Error encountered while sourcing file 'activate':

このエラーはどうやら,fish(friendly interactive shell)を使っていると起こるみたい.Anaconda側がこれの対処法を載せてるっぽいが,日本語記事では古い?のしかなかったので備忘録がてら残しておく.

$ cd (conda info --root)/bin
$ sudo curl -O https://raw.githubusercontent.com/conda/conda/master/shell/conda.fish
$ emacs ~/.config/fish/config.fish
source (conda info --root)/bin/conda.fishを追記

これで更新すると$ conda activate testという感じで使えるようになり,$ deactivateで抜けることができるようになる.

VagrantのGuest editionのアップデートが失敗した時の対処法

過去に2回ほどvagrantのエラーの対処法について書いてきたが,また突如それは起こった.もう本当に朝からしんどかった.

環境

今回起きたのは/vagrantやVagrantfileで記述した共有ディレクトリが共有できないという問題だった.詳しく原因を探っていくとGuest Edition絡みだとわかった.端的に言うなればguestとhostのバージョンが違うことが原因で起こっていた.そこで,vagrant plugin install vagrant-vbguestによってguest editionのアップデートなどを行ってくれるプラグインを導入する.その後vagrant upしてこれで解決と思いきや,以下のようなエラーが出てしまった.

[default] GuestAdditions versions on your host (5.0.28) and guest (5.0.20) do not match.
Reading package lists...
Building dependency tree...
Reading state information...
dkms is already the newest version (2.2.0.3-2ubuntu11.3).
linux-headers-4.8.0-32-generic is already the newest version (4.8.0-32.34~16.04.1).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Copy iso file /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso
mount: /dev/loop0 is write-protected, mounting read-only
Installing Virtualbox Guest Additions 5.0.28 - guest version is 5.0.20
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.0.28 Guest Additions for Linux............
VirtualBox Guest Additions installer
Removing installed version 5.0.28 of VirtualBox Guest Additions...
Removing existing VirtualBox DKMS kernel modules ...done.
Removing existing VirtualBox non-DKMS kernel modules ...done.
update-initramfs: Generating /boot/initrd.img-4.4.0-59-generic
update-initramfs: Generating /boot/initrd.img-4.8.0-32-generic
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox DKMS kernel modules ...done.
Removing existing VirtualBox non-DKMS kernel modules ...done.
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.

Building the main Guest Additions module ...fail!
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions ...done.

どうやらGuest Additions moduleのbuildに失敗しているらしい・・・.このような事例でググるとかなり多くの情報が出てきた.(CentOSの内容が多かったけど)

これらに記載されているようなlinux-kernel-headersの更新などをいろいろやってみたが,まったくうまく行かなかった.
そこで思い切ってVirtualBox自体をアップデート(5.0.32に)した. その状態でもう一回,vagrant upすると,無事guest editionのバージョンがマッチして起動,共有することができた.上記のエラー対処の記事などではVirtualBox自体のアップデートをしたほうが良いという記述はおそらくどこにもなく,むしろVirtualBoxのアップデートは地雷みたいな雰囲気があったので,同じようなことで解決出来ない人がいたら思い切ってVirtualBoxをアップデートするということを試してみるのも良いかもしれない.

プリンタを買い替えた

少しまとまったお金が手に入ったので,買い換えようと思っていたプリンタを買いました.(12月30日の話)

今までは,EPSONのPX-046Aを使っていました.かれこれ3年ぐらい使っていたと思います.

www.epson.jp

今回買い換えようと思った理由は,自分の部屋にあるプリンタが邪魔だから,リビングにプリンタを移そうと思った時,無線で使えるプリンタに変える必要がでてきたからです.今は,無線LANルータに繋げてプリンタを無線で使えるプリンタを実現しています.無線ルータまでは,リビングに移したくなかったので,プリンタだけで無線が受信できるものでなくてはいけなくなりました.

そこで,プリンタ自体で無線が使えるやつを探しに地元の某電気屋さん(歩いて5分)に探しに行きました.

今までずっとEPSONを使っていたので,今回もEPSONのを買おうと思っていました.今持っているプリンタとくらべて欲しい要件をリストアップするとこんな感じでした.

  • 印刷,コピー,スキャンが使える
  • プリンタ本体で無線を使える(今回のいちばん重要な評価項目)
  • 四色の独立インク

これらの要件に見合うようなプリンタを探してうろちょろしていると,EPSONの社員さんに捕まってしまい,この要件を話していると違う会社だけれど良いプリンタがあると言われて,紹介されたのがbrotherのプリンタでした.正直,プリンター業界はEPSONCanonの2強なイメージだったので,brotherのプリンタは新鮮でした.

www.brother.co.jp

改めて先程の要件とくらべてみるとこのプリンタはその条件を満たしていることがわかりました.さらにインクの値段もEPSONより安く,前面給紙や両面コピー,印刷,拡大縮小コピー,タッチパネルによる操作など豊富な機能が付いており(前のプリンタにはどれもない機能),とても良い商品で購入を決めました.またEPSONの商品と比べるとインクの入れ替えが前からできるのでとても楽でそこも良いと思いました.
店員さんいわく,brotherの製品は企業などでは多いらしく,ユーザ側のプリンタ販売歴が浅いので,周知させるために豊富な機能を安い値段でつけている,いわば顧客を増やす段階にいるらしいです.だから,こんなに安く豊富な機能がついているんですね.

ここからがこの記事の本題です.

このプリンタの店頭での価格は8,880円(税別)に3%のポイントでした.一応購入前にネットで口コミを見ておこうと思い,某電気屋さんのオンラインサイトで見てみました. そうすると,なんとオンラインサイトでは8,063円(税別)に1%ポイント,送料無料という価格設定でした.あれ・・・なぜ同じ店舗なのにオンラインサイトの方が値段が安いんだ? 両者を,届くまでの日数がかかってしまうという点を除くと後者の方が圧倒的にお得ですね. そこで,店員さんに,「オンラインサイトでこの商品を見て購入しに来たんですが,値段がかなり違っているんですが・・・」と知らないフリをして質問してみました.少しお待ち下さいと言われ,プリンタ前で待機していると,「オンラインサイトと同じ価格でご提供させていだきます」というご返事をいただけました.どうやら,オンラインサイトと店舗では値段が違っていることが多いみたいです.Googleで検索してみるとすごく多くそういう事例が見受けられます.

店舗 オンライン 値段が違う - Google 検索

さらに,brotherはキャッシュバックキャンペーンをやっていて,本商品は1000円戻ってくるとのことでしたので,実際7000円ぐらいでこのプリンターを購入することができました.

電気屋さんの店頭で購入する際は,絶対のその会社のオンラインサイトの値段を確認したほうが良いです.オンラインサイトの方が安ければ,店舗でも同じ値段まで下げてくれるはずです.もし下げてくれなさそうな場合は,「では,ネットで購入します」と言うと,店員さんなどは自分の売上にしたいのか,値段交渉に応じてくれるようになると思います.

Pwnもくもく会#1

東京駅 八重洲北口近くのHUBにて、19時過ぎから、23時過ぎぐらいまで@hhc0null、@hama7230 の三人でPwnもくもく会を行った。

 

この会の目的は、酒を飲みながらPwnをするいう趣旨であったが、「酒飲んで頭が回らない」、HUBにいる女の子から声をかけられてオタクがんばるといったアクシンデントが生じた。(それに便乗してローストビーフは女の子に持っていかれた)。

全体的に、適宜、お酒をお代わりしたり食べ物を注文したり、食事やつまみ、酒などは良いペースだったと思う。

 

肝心なPwnもくもくだが、私は1問常設の問題を解くことができた。他は(ry。

しかし、Pwnやバイナリ解析といった共通話題で楽しく話せたり、知見が深まったのは良い。

 

この会を通じて学んだことは、酒を飲むとやはり人の脳みそは動かなくなるということが1番かもしれない。

 

次回は、お酒の有無、場所等考える必要があるかもしれないが個人的にはHUBで良いのではないかと思う。ぶっちゃけ、"本当にがっつりもくもくする会ではない"(と思っている)ので注意してほしい。

 

ちなみに次いつやるかは未定。

せっかくなら参加者他にもいて良いかな(あまり多すぎるとキツイが)

fishにおけるRUBYLIBの設定に違和感

rubyにおいてrequireを使って自作ライブラリを読み込むために,環境変数のRUBYLIBを使ってパスを追加する時があります.   bashzshではexportコマンドなどで*rcファイルに書けば済むのですが,fishの場合少し謎な挙動をしていたので,備忘録を書いておこうと思います.

通常bashなどでは,

export RUBYLIB=$RUBYLIB:/the/path/you/wanna/add

といったように記述すると思いますが,fishの場合はsetコマンドの-x(exportオプション)を使って設定します.
そこで,以下のように

set -x RUBYLIB /path/path/you/wanna/add $RUBYLIB

設定します.この状態だとfishでは,echo $RUBYLIB[1]で1つ目のパスだけを表示することが出来ます.

しかし,irbでrequireできるかテストをしてみると,requireに失敗します. そこで,まさかと思い,":"でつなげる感じに変えてみました.最初のbashなどと同じような設定になるように繋げてみるということです.

set -x RUBYLIB /the/path/you/wanna/add:$RUBYLIB

これだとecho $RUBYLIB[1]した時に,すべての環境変数入ってしまい$RUBYLIB[2]にアクセスはできないのですが,requireには成功します.

この挙動の違いは何なんでしょうか・・・$PATHなどは,前者のほうで正しく機能しているのですが,RUBYLIBに関しては後者だと動きません.fishというよりもそもそもの環境変数への理解が足りていない気もしますね・・・.

ファジィ学問塾2016に行ってきた

11月26日,27日とファジィ学問塾という合宿形式の勉強会に参加してきました. 研究室の先輩から情報をもらってこの勉強会を知り,楽しそうだなと思って申し込みました.

2016年度(第12回)ファジィ学問塾 | 日本知能情報ファジィ学会

上記のリンク先にあるように,3つの講義とTensorflowを使ったWorkshopの構成でした.講義はどれもとてもわかりやすかったですし,WorkshopもまだTensorflowと使った講義などは受けたことがなかったので楽しかったです. しかし,実際にはこれらだけではなく,3つの中から2つ選ぶという演習課題が設けられていました. 着手できる時間が少なく,睡眠を削って(朝5時に寝た),課題やその発表のためのプレゼン資料などをこなしていました.

演習自体は,ある程度CNNのアーキテクチャとかについて理解してないと辛い感じで,班の人に頼り教えてもらったりしていました. 正直,この演習兼プレゼンがしんどくて,つらかった.けれど,CNNについてより知ることが出来たので,良しとします.

今の気持ちでは,来年もまた参加したいなという感じです.

めっちゃ眠い