CODEBLUE2018 学生スタッフ

目次

写真撮るの忘れてました。ほぼないです...

CODEBLUEとは

CODE BLUEとは、世界トップクラスの情報セキュリティ専門家による最先端の講演と、国や言語の垣根を越えた情報交換・交流の機会を提供する国際会議です。

参加費は、めちゃめちゃ高いです。 参加枠によって違うが数万から十数万円します。

学生スタッフ

学生スタッフとして参加すれば1日聴講することができます!

学生スタッフは、CODE BLUEの設営、運営を手伝うスタッフです。

2日間のシフトの内1日は、講演を聴講可能なシフトになります。*1

以下、応募から最終日までの流れを書いていきます。

応募

まずは、応募からです。

毎年、Twitterで学生スタッフの募集をかけているようです。

【Benefit(価値)】

  • 2日間のうちどちらか1日勤務、もう1日は聴講参加のチャンス(4.2万円〜13万円相当)(※募集人数到達時に限る)
  • (遠方の方には)宿泊場所提供
  • スタッフTシャツ提供
  • 世界最先端の講師陣と語り合うチャンス
  • セキュリティ企業の担当者と実際の現場や就職について相談するチャンス
  • 全国から集まるセキュリティ意識の高い学生スタッフと仲間になるチャンス

【募集人数】約60名

【応募方法】

 以下のフォームにて過去の経験や自分の売り(簡単でOK)などをお送りください。

 ※募集人数に達した場合など早く締め切る場合もあることをご了承ください。お早めのご応募をお待ちしています。


過去の経験や自分の売りポイント

【望ましい経験/スキル】↓を踏まえて記載をお願いします。ハンドル名での活動実績もウェルカムです!

  • 勉強会運営、ゼミ運営、イベント運営・支援経験
  • 接客業の経験
  • パワポ、プロジェクタ操作が得意(プレゼン切替の場合)
  • 【重要】 CODE BLUE を心から楽しめること

応募内容をみてみると、技術的な能力で選考していると言うよりは、きちんとスタッフの勤務を行えるか、CODE BLUEを2日間楽しめるかと言うことに重点をおいて選考しているように感じました。*2 ちなみに応募数は、100ちょっと(うろ覚え)だったらしいです。 2回目の人も8人くらいいました。

私は、きちんと接客のアルバイトをしたことがあって学生スタッフの業務を行えるというアピールとなぜセキュリティに興味を持ったのか、今どんなことをしているのか、これからどんなことをしたいのかを書きました。

簡単でOKと書いてありましたが、数えてみるとちょうど1000字でした。 提出フォームには特に文字制限もなかったのでそのまま提出しました。

9/25 17時ごろにメールで連絡が来ました。 Twitterとかを見てると割と人によって送られてくる時間に差があったみたいです。

採用発表後~前日

採用発表があった後、全日程参加可能である旨を伝えるとslackに招待され以後の連絡はそこで行われました。

  • シャツのサイズ
  • 英語力
  • 二次会参加の可否
  • スピーカーアテンドの募集(先着8人)*3

などいくつかのアンケートがあった後

開催1週間前くらいからslackが活発になり 事前に、スタッフとして働く場所等が共有されました。

Day0 (10/31)

10:00

CBNOCの手伝いをしたい人は、この時間に集合してーと言われていたのでせっかくなので集合、Access Pointの配置、配線を引く作業をした。

LANケーブルの八の字巻きをマスター*4

13:00

昼ご飯を食べて、学生スタッフの集合時間に

この日は、準備はそこまでなくてどちらかといえば、学生スタッフどうしの交流の時間が多かった。

1.5時間くらい学生スタッフと何人かのスポンサー企業の方も交えて、軽い立食パーティみたいなのが行われる。ここで他の学生スタッフの話を聞いたり、名刺を交換したりした。

コミュ力!!

セミの鳴き交わしの研究をしているのだが、その話は、思ったより受けが良かった。

この辺は研究室の先輩が言ってた通りだった。

16:30

ここから会場内をうろつきながらスタッフ業務の内容の話だったりをした。 私は、5Fの受付だったためそこまで説明されることは、なかった。 1Fのドアマンやスライド送りをする人は、結構長めに説明をうけていた。

どうやら同時通訳レシーバーをなくすとコストが結構かかるらしくその辺りを重点的に説明していた。

スピーカーアテンドと言う、スピーカーの付き人みたいな業務の人は、別行動で説明を受けていた。

18:30

ホテル到着 3人の相部屋だった。 とりあえず荷物をおいて夜ご飯

19:00?

何人かで適当に飲みに言った。 高専生や、修士の人などいろんな人がいておもしろかった。

Day1 (11/1)

9:00

聴講日だったので9時起床

同部屋の人と9時前に会場に到着

10:00

10時からの基調講演は一緒に聞いたがそこから別行動

後は、一日中講演を聞いていた。

  • Keynote: Cyber Arms Race
  • Crashing to root: How to escape the iOS sandbox using abort()
  • Breaking Parser Logic: Take Your Path Normalization off and Pop 0days Out!
    • Orange Tsai
  • Who's guarding the gateway? An officers' view on why law enforcement has it all wrong.
    • Nicole Beckwith
  • Remotely Cracking Smart Gun Safes: Verifying Secure Bluetooth Low Energy Implementations
    • Austin Fletcher
    • Daniel Su
  • Methodology for controlling connected cars remotely
    • Minrui Yan
    • Jiahao Li

この講演を聞いていた。 正直どれも聞いてついていくので精一杯だった

この辺を理解しながら聞けるようになれればもっと楽しいんだろうなと思った。 頑張って、より楽しめるようになりたい。

18:00

ホテルに帰還

1日目勤務の人をまって一緒に飯にいくことに...

待ってる間にDeloitte CTF

21:00

帰ってこねーーーー

結局そのままラーメンに行きました。

ラーメンガチ勢に言わせれば加水率?が高かったらしい

f:id:maru-taka:20181105193552j:plain

ごちそうさまです。

Day2 (11/2)

8:00

二日目は、勤務日でした。

5Fの受付で、対応してました。

1日目に受付業務はほとんど終わっていたっぽくて、少ない受付と後は、道案内や質問に答える程度でした。 英語での対応ももう一人の受付の人が、英語めっちゃできるマンだったので出る幕はほどんどありませんでした。

そんなこんなで勤務は終了

17:00

片付け

19:00

片付けが終わった後ネットワーキングパーティに参加しました。

知らない人ばかりで、マジでどうしようかと思いました。

でも、同じ学生スタッフばかりで集まっていてもしょうがないので、頑張って*5いろんな大人の人に話しかけて見ました。 最初は、恥ずかしかったり、なんて声かけていいかわからなかったりしたけど少しずつ慣れていろんな人と話せました。 Smart gunのケースの講演をしていたSpeakerの人にも話しかけて見ました。 下手くそな英語でしか会話できなかったけど、名刺交換はできていい勉強になりました。

こう言った人とコミュニケーションをとり輪を広げていくためにも英語は必要だと強く感じました。

21:00

二次会で新宿のダーツバーに行きました。

22:30

ホテルに帰還

まとめ

一人でこもって作業していたのでは得られない経験や刺激をもらえました。

正直対等に話せていたかと言われるとそうではないと思うのですが、それでもとても楽しかったので、もっと勉強してこういった集まりをもっと楽しめるようになりたいです。

最後に、CODEBLUEスタッフのみなさんお世話になりました。 3日間とても楽しく過ごせました。

来年も参加させていただけれるのであれば、参加したいです。 (CBNOCも面白そうだったので、参加できるよう精進します)

以上です。 ありがとうございました。

*1:十分な人数が集まればという条件付き

*2:打ち合わせ等でも「楽しんで」とかなり言って頂いた

*3:スピーカーの人の付き人のような業務内容、直接会話できるチャンスが多いためネットワークを広げるためには、非常によさそうだった

*4:教えてもらった

*5:お酒の力を借りて

逆求人 2/10 ITエンジニア【スタンダード】に参加しました!

目次

概要

こんにちは、maruです。 今回私は、人生で二回目の逆求人に参加しました。 二回目ともなると慣れてきてあまり緊張もせずに企業の方とお話することができました。 逆求人ってなに!?って人は、 maru-taka.hatenablog.com こちらの記事で私が、一回目の逆求人に参加したときの当日までにやることや、流れを説明してるので、そっちを見てほしいです! 簡単に言うなら企業に指名されて一対一で好きな話できるよーって会です。 今回は、二回目なのでこの記事では、 逆求人をどう利用したらいいと思うか チャレンジとスタンダードの違い といったようなことについて話そうと思っています。

前回と変えたとこ

前回は、割とやったことをサーバサイド、iOSアプリ、電子工作、FPGAと幅広く説明したのですが、もっと絞った方がいいという意見が多かったので、FPGAと電子工作を削りました。 特にFPGAは、人事の人とかだと聞いたこともないという感じだったので消し去りました。

チャレンジとの違いは?

やはり、見る目は、厳しかった気がします。 前回だと作ってみました程度でも割と興味を持ってもらえましたが、今回は少し反応が悪かった気がします。 やはり、ある程度成果が目に見える形である方がいいなと感じました。(賞とか?)

逆求人をどう利用すべき?

私は、正直学部で、就職する気は全くなくて偵察程度のつもりで行きました。 企業によっては、もっと自己分析をとかありきたりなことを言うところもありましたが、企業の方に話を聞いてもらえてフィードバックをもらえる機会は、貴重だと感じました。 逆求人は、選考に有利に進めようとか内定欲しいとかではなくて、企業の人と話をして自分がやっていることに対する意見をもらうくらいのつもりで参加するのがいいのかなと思いました。 逆求人に参加してよかったです。

逆求人 1/20 ITエンジニア【チャレンジ】に参加した話

概要

ジースタイラスが主催する逆求人というイベントに参加してきました。 逆求人とは、企業の人事、エンジニアと直接話せる就活イベントです。

www.studenthunting.com

その流れ、感想を書いていきたいと思います。

前日まで

開催日前日までにやることは、三つあります。

一つ目が、運営側の人との面談です。
私は、筑波大学生の就活支援をしているクロノファクトリーと言う会社のイベントに何回か参加していて、そこの方と面識があったので、その方と面談をしました。どうやらクロノファクトリーとジースタイラスは、提携してるみたいです。そこで、簡単な流れやどう言う方針で、逆求人に参加するかみたいな話をします。

二つ目が、逆求人のWebページのマイページを編集です。
これは、当日印刷して企業の方にもくばられるようなので、結構しっかり書いておくといいと思いました。これを参考に逆求人の時面談する人を決めてるようです。

三つ目が、逆求人の本番で人事の方に見せるスライドの作成です。 私の場合は、ジースタイラスの参加が決定したら送られてくるURLにある作り方を参考にスライドを作成しました。

ここまでが会場にいくまでにやっておくことです。

当日の流れ

f:id:maru-taka:20180121000705j:plain
ITエンジニア逆求人プログラム

このプログラム通りに進みます。

 最初に全体の説明等々があって、企業との顔合わせがあります。
ここで、自分に興味を持ってくださってる企業が挨拶と名刺を渡しにきます。ここで、こないと面談に来ることはまずないと思います。(ここできても指名されるとは限らない)
 この後、1時間10分昼休みがあるので、企業によっては、「一緒に昼ごはんどうですか」と顔合わせの時ついでに誘うとこもあります。
 昼休憩の間に企業側が面談したい学生をWebページを通して選択し昼休みが終わる頃には、面談の日程が決まっています。

f:id:maru-taka:20180121004355p:plain
面談調整webページ

 こんな感じのページで、ここから面談の予定の確認や相手が第1,2,3希望の場合は、こちら側からわかります。これがいい感じにスケジューリングされて、日程が決まります。
 全8タームなのですが、7タームは、企業とで、1タームだけ時間つぶしみたいな他学生との練習みたいなのがありました。この時間が個人的には、他の人のやってること聞けて楽しかったです。
 この休憩と面談を繰り返して、8タームあります。
 最後にスカウトタイムっていう時間があって特にもった学生がいた場合企業の方がお話ししにきたり、企業側からは、指名したが面談できなかった人に話ししに行ったりしてました。
 こんな感じで終わってアンケート記入して終わりです。
 一週間以内にG-Valueという企業からの感想レポートみたいなのが届きます。フィードバックがあるのは嬉しいですね。

アドバイス?

 私は、夏から授業外でやってるボートレースのやつとかの話を主にしました。
 そういった授業外で趣味でやってることがないと厳しいかなと思いました。厳しいというのは、企業の人の反応がよくないってことです。チャレンジでもそうだったので、普通のやつだともっとそうなのかなと感じました。

感想

 私は、今回逆求人に参加するのが初めてでした。
 でも、友人からどんなもんか聞いていたし、割と調べていたので、思った通りのものでした。
 私は、今回、今自分がやってることが企業の方からみてどうみえるかって言うのを聞きたくて、行ってるという明確な目的があったので、こんな、各企業に絶対聞きたいみたいなことがあると、スムーズに進むかなと感じました。
 私は、正直に言うと院進か就職か迷っていて、就活と言うかは、両方の可能性を考えた上での相談で人事の人とも話して見たいと思い参加しました。しかし、企業の方は、人事、エンジニアの両方が、企業としての目線で私がしているものづくりの感想を述べていただいて、採用のためにきてるのに迷惑といった態度のところはなくいろいろな話ができました。
 総じて参加してよかったと思います。企業の人にプレゼンしたときの受けの良し悪し、就活の時どういう風にアピールするのが効果的かなどが、わかってよかったです。
 2/10のITエンジニア逆求人にも参加する予定なので、またいろんな話をして見たいです。

Arduino Lチカ までの道のり Part2/2 (ArduinoIDE,ドライバ,スケッチ編)

maru-taka.hatenablog.com

目次

概要

Part2では、手元にArudinoがある状態から実際にLEDを点滅するサンプルスケッチを実行するまでについて説明する。

環境構築

(1)やらなければならないこと

LED点滅までにやらなければならないことは、

  • Arduino IDEの公式サイトからのインストール
  • 必要に応じてドライバのインストール
  • スケッチの検証、マイコンボードへの書き込み

の三つである。


(2)動作環境

macOS High Sierra version 10.3 MacBook Pro (Retina, 13-inch, Mid 2014)


(3)Arduino IDE インストール

Arduino IDEArduino公式HPからインストールできる。

SOFTWAREを選択

f:id:maru-taka:20171125134509p:plain
図1 . Arduino HP

自分のOSに対応するものを選択 私の場合は、Mac OS X 10.7 Lion or newer を選択

f:id:maru-taka:20171125134501p:plain
図2 . SOFTWARE

寄付してほしいな的な画面がでるので、したければCONTRIBUTE & DOWNLOADをクリック、ダウンロードしたいだけならJUST DOWNLOADをクリック

f:id:maru-taka:20171125134425p:plain
図3 . DOWNLOAD

Macの場合zipファイルがダウンロードされるので展開する。 展開して/Applicationに移動するとLaunchpadに表示される。

f:id:maru-taka:20171125134458p:plain
図4 . ZIPファイル


(4)ドライバインストール

ドライバインストールはArduino UNO R3 と Mac OSでは、必要ない。 しかし、このドライバがまあまあめんどくさくて、メジャーなArduinoを使ってればいいのだが互換版とかを使ってるとUSBシリアル変換チップが違って、違うデバイスドライバをインストールしないといけない、バイト先のArduinoが互換版で、これで割と時間かかった

USBシリアル変換チップにはFTDI Chip江苏沁恒股份有限公司のものが主に使われていて 互換版のArduinoだと安く作るため、USBシリアル変換チップとして後者の企業のCH340Gのようなものが使われていることがある。 これが使われていた場合 正規版のFTDIではなくCH340G用のドライバをインストールしなければ認識してくれない。 これに関しては以下の記事がわかりやすくまとめれられている。 qiita.com

サンプルスケッチのダウンロードと実行

流れとしては、

となる。

USB A to B ケーブルでPCとArduionoを接続

f:id:maru-taka:20171125162214j:plain
図5 . PCとArduinoの接続

回路作成

f:id:maru-taka:20171125162223j:plain
図6 . 回路作成

Arduino IDE起動 Launchpad -> Arduinoから起動

f:id:maru-taka:20171125164736p:plain
図7 . Arduino IDE起動

今回はサンプルのスケッチを実行する 開く -> 01.Basics -> Blink を選択

f:id:maru-taka:20171125164732p:plain
図8 . スケッチ記述

左上の検証をクリックし、うまくいったらマイコンボードに書き込むをクリック

f:id:maru-taka:20171125162232j:plainf:id:maru-taka:20171125162223j:plain
図9 . LED点滅

Arduinoに書き込まれてLEDが1秒間隔で点滅したら一通り終了。

まとめ

ここまでArduinoを購入するところからサンプルのスケッチであるLEDの点滅を実行するまでの手順を示した。 参考文献として

をあげるArduinoをはじめようは、特におすすめで今回私が購入したArduinoをはじめようキッド の部品を利用できる。 また本の半分から後ろは、公式リファレンスになっておりコーディングの際の参考にもなる。

何か作ったらまたブログに上げます。

以前紹介した、Boatraceのクローラは、データを見られるiOSアプリを開発中です。

maru-taka.hatenablog.com

Arduino Lチカ までの道のり Part1/2 (動機、購入、開封編)

[目次]

概要

このページでは、ノートPC(Mac)だけがある状態で、Arduinoを使って何か作ってみようと思った時にArduinoの購入、環境構築、サンプルの実行を行いとりあえず動かせることを確認するまでの話である。 写真を多めに説明していこうと思う。

Arduinoを使おうと思った理由

電子工作を用いて日常をより便利に

温度湿度計が欲しいなとおもい、どうせなら自分で作ろうと思って、電子工作には興味があったのでやろうと思った。 最終的には自転車につけたい。 電子工作を用いて日常をより便利にしていくというのがテーマ。 実は、2ヶ月前からプログラミングのアルバイトを始めていて、そこでは、大まかにいうとDAQ->Python->ArduinoでのPythonの部分のコードを書いている。ただ、Arduinoは触ってなくてただPythonでシリアル通信を行なっているだけなのだが、そういう実際に使われているのを見たのも決断した理由の一つかもしれない。 実は、高専のとき実験でちょっと使ったことある。

Arduino , Raspberry Pi , mbed

マイコンを探す上でこの三つを検討した Arduinoは、センサとかアナログ信号を扱うのに特化している。 Raspberry Piは、OSが乗ってて、メモリ容量もわりかしある普通のPCと性能を別にすると変わらない。通信とか多くする場合に強いイメージがある。 mbedは、Arduinoと似たような感じ。 この三つで、主にセンサを扱いたかったのと、入門用として結構使われていて、ドキュメントが豊富だったためArduinoにした。

このwebサイトが詳しく書いてあって参考になると思う。
ステップアップ電子工作/レベル1後編 マイコン選び - Qiita

Arduinoの購入について

購入方法

私は、Arduino Uno R3 をwebで購入した。 私が調べたところによると

このあたりがメジャーどこな感じがした。 実際に私が利用したのは、AmazonのSwitch Science公式ショップで、 Arduinoをはじめようキット を購入した。 部品を別々で買ったほうが安いという情報も見たが、今回はとりあえず使ってみるのが目的だったので、部品も含まれたものを購入した。これから制作を進めるにあたって、必要な部品が出てきたら適宜購入して行きたい。 また SwitchScience保証 が初心者には、安心だと感じたので、これにした。

開封

Arduinoをはじめようキット 開封! 意外と放送は簡単で、本とかがよく入ってる薄いプチプチがついたやつだった。 (授業以外でこういうの買ったの初めてなので実はとてもワクワクしている)

f:id:maru-taka:20171125135734j:plain
図1 . 箱

オープン! おおーすげー笑

f:id:maru-taka:20171125135722j:plain
図2 . 中身概観

なんか気の利いたメッセージが入ってたりする笑

f:id:maru-taka:20171125135700j:plain
図3 . メッセージ

中身は、リード線(硬いやつたくさん、柔らかいやつ8本くらい)、Arduino Uno、ブレッドボード、部品(抵抗、スイッチ等)、USBケーブル(A to B)、内容物一覧表が入ってる。

f:id:maru-taka:20171125135713j:plain
図4 . 内容物

次は、本体をあける

f:id:maru-taka:20171125135645j:plain
図5 . Arduino本体

かっこよすぎる笑

f:id:maru-taka:20171125140013j:plain
図6 . 本体開封

下にプラスチックのケースがついてる。 ケースも自作したい そのうち openfab 創房 にいって作りたい。

f:id:maru-taka:20171125145410j:plain
図7 . ケース

次回は、Mac上での環境構築などについて説明する。

maru-taka.hatenablog.com

ボートレース競走結果 収集クローラ作成⑤ ~webページ作成~

概要

web上からデータベースのデータにアクセスするための簡単な動的webページを作成した。
言語は、php
webserverには、apache
を使用した。
クローラの全体像については、こちらを参照 全体の概要:

Webserver構築

apacheを使用した。
このwebサイトを参考に構築した。

ソースコード説明

SQL問い合わせ入力画面
フォームの情報をポストメソッドで送った。

<html>

<head>
   <meta charset="utf8">
   <title>Boatrace_crawrer</title>
</head>

<body>
<h2>
Boatrace_crawrer<br/>
</h2>
<h4>
問い合わせ
</h4>

<form method="post" action="webpage_sample.php">
    query:<br />
    <input type="text" name="query" size=100/><br/>
    <input type="submit" value="実行"/>
</form>

</body>
</html>

f:id:maru-taka:20170913085739p:plain
実行画面


入力画面で入力しポストメソッドで送った問い合わせを実行する。

<html>

<head>
<meta charset = "utf-8"/>
<title>Boatrace_crawrer</title>
</head>

<body>

<?php

        print "<p><a href=\"getquery.php\">query画面へ</a></p>";
    //設定ファイルの読み込み
    require_once("config.php");

        ini_set("mysqli.default_socket","/tmp/mysql.sock");

    //MySQLへの接続
    $link = mysqli_connect($dbserver,$user,$password,$dbname)
        or die("MySQL unconected");

    //文字コード設定
    mysqli_set_charset($link, "utf8")
        or die("can't link code");

    //問い合わせ
    $query = $_POST["query"];

    $result = mysqli_query($link,$query)
        or die("fail implements of query!");

    $rows = mysqli_num_rows($result);
    print "<p>該当件数は" . $rows . "件でした。<br />";

    print "<p>問い合わせ結果";
    print "<ul>";
    while ($row = $result->fetch_assoc()) {
        print "<li>";
        print_r($row);
        print "</li>";
    }
    print "</ul>";

    mysqli_free_result($result);

    mysqli_close($link);
?>
</body>
</html>

f:id:maru-taka:20170910065824p:plain
実行画面

localhost127.0.0.1

MySQLでは、接続の際にサーバをlocalhostで指定するのと127.0.0.1で指定するのでは、挙動が異なる。
具体的には、localhostを指定した場合には、UNIXドメインソケットを用いて通信を行い、127.0.0.1では、TCP/IP通信を用いて通信が行われる。
今回は、ini_set関数を用いてlocalhostUNIXドメインソケットを用いて通信を行った。

ini_set("mysqli.default_socket","/tmp/mysql.sock");

うまく設定できていないと次のようなエラーメッセージが表示される。

Warning: mysqli_connect(): (HY000/2002): No such file or directory in /.../webpage_sample.php on line 19
MySQL unconected%

参考webサイト

ボートレース競走結果 収集クローラ作成④ ~データベースアクセス~

概要

 このブログでは、スクレイピングでとってきたデータをデータベースに登録する部分について説明する。
 今回は、MySQLRubymysqlライブラリを用いてアクセスした。
クローラの全体像については、こちらを参照

なぜMySQLを選んだか

 MySQLを選んだ理由は、まず金銭的に厳しいので、OSSを使用することを決めた。
 次に、ボートレースの結果のようなレース結果、選手データ、直前情報などのたくさんの種類の複雑な情報を扱うのに適していると考え、RDBMSを選択した。
 最終的にMySQLPostgreSQLで、迷ったが、過去に使用した経験があったためとっつきやすかったためMySQLを使用することに決めた。

db-study.com academy.gmocloud.com

データベース定義

race_idを主キーにした。 race_idは単純に開催場の番号*1、ラウンド、日時を結合しただけ。また第3正規形にした。
 round_infoは、そのラウンド固有の水面天候状況、払い戻しなどの情報をを格納する。race_infoは、それぞれの艇のレース結果を格納する設計になっている。

/*use test;*/
use boat;

create table round_info(
        race_id varchar(12) not null,/*place + round_no + day*/
        primary key(race_id),
        place varchar(8),
        round_no int,
        day varchar(10),
        
        /*気象条件*/
        temp float(3,1),
        sky varchar(8),
        wind int,
        water_temp float(3,1),
        wave int,

        /*払い戻し*/
        3tan_kumi varchar(10),
        3tan_money int,
        3tan_pop int,
        3puku_kumi varchar(10),
        3puku_money int,
        3puku_pop int,
        2tan_kumi varchar(10),
        2tan_money int,
        2tan_pop int,
        2puku_kumi varchar(10),
        2puku_money int,
        2puku_pop int,
        kaku1_kumi varchar(10),
        kaku1_money int,
        kaku1_pop int,
        kaku2_kumi varchar(10),
        kaku2_money int,
        kaku2_pop int,
        kaku3_kumi varchar(10),
        kaku3_money int,
        kaku3_pop int,
        tan_kumi varchar(10),
        tan_money int,
        fuku1_kumi varchar(10),
        fuku1_money int,
        fuku2_kumi varchar(10),
        fuku2_money int, 

        /*決まり手*/
        kimarite varchar(12),

        /*返還*/
        return_money varchar(1)

) engine=InnoDB;

create table race_info(
        race_id varchar(12),
        boat_no varchar(1),
        primary key(race_id,boat_no),
        race_rank varchar(1),
        racer_no varchar(4),
        race_time varchar(8),
        course varchar(1),
        st_time varchar(4),

        foreign key(race_id) references round_info(race_id)
) engine=InnoDB;

データベースアクセス

スクレイピングでとってきたデータを成型してデータベースに入れていく。
冗長なので、一例を記載している。

#データベースアクセス
connection = Mysql::connect("localhost", "username", "password", "databasename")

# 文字コードをUTF8に設定
connection.query("set character set utf8")

.
.

puts("insert into race_info(race_id, boat_no, race_rank, racer_no, race_time, course, st_time) values(\"#{query[1]+query[0]+query[2]}\", \"#{boat1[1]}\", \"#{boat1[0]}\", \"#{boat1[2]}\", \"#{boat1[5]}\", \"#{course[0]}\", \"#{st_time[0]}\" )")

.
.

# コネクションを閉じる
connection.close

手間取ったところ

データを挿入するのにとても長いSQL文を書いた。
これを書いてちゃんとデータがあってるか確認するのが大変だった。

connection.query("insert into round_info(race_id, place, round_no, day, temp, sky, wind, water_temp, wave, kimarite, return_money, 3tan_kumi, 3tan_money, 3tan_pop, 3puku_kumi, 3puku_money, 3puku_pop, 2tan_kumi, 2tan_money, 2tan_pop, 2puku_kumi, 2puku_money, 2puku_pop, kaku1_kumi, kaku1_money, kaku1_pop, kaku2_kumi, kaku2_money, kaku2_pop, kaku3_kumi, kaku3_money, kaku3_pop, tan_kumi, tan_money, fuku1_kumi, fuku1_money, fuku2_kumi, fuku2_money)  
values(\"#{query[1]+query[0]+query[2]}\", \"#{prace_name(query[1])}\", #{query[0].to_i}, \"#{query[2]}\", #{weather_s[0]}, \"#{weather_s[1]}\", #{weather_s[2]}, #{weather_s[3]}, #{weather_s[4]}, \"#{win_tec[0]}\", \"#{return_money[0]}\", \"#{p3tan[1]}\", #{p3tan[2].to_i}, #{p3tan[3].to_i}, \"#{p3puku[1]}\", #{p3puku[2].to_i}, #{p3puku[3].to_i}, \"#{p2tan[1]}\", #{p2tan[2].to_i}, #{p2tan[3].to_i}, \"#{p2puku[1]}\", #{p2puku[2].to_i}, #{p2puku[3].to_i}, \"#{pkaku[1]}\", #{pkaku[2].to_i}, #{pkaku[3].to_i}, \"#{pkaku[4]}\", #{pkaku[5].to_i}, #{pkaku[6].to_i}, \"#{pkaku[7]}\", #{pkaku[8].to_i}, #{pkaku[9].to_i}, \"#{ptan[1]}\", #{ptan[2].to_i}, \"#{ppuku[1]}\", #{ppuku[2].to_i}, \"#{ppuku[3]}\", #{ppuku[4].to_i} )")

*1:ボートレースの開催場には、電話投票用に番号が振られている。