第64回全日本大学野球選手権大会決勝戦

f:id:t_ohtsuka:20150616004817j:plain

決勝のカードは早稲田大学流通経済大学

先攻は早稲田大学流通経済大学の先発マウンドは「将来の夢は公務員の150キロ右腕」生田目(なばため)。先頭の重信がヒットを放ち、2番河原が送りバントを決めたところで筆者が球場に到着、バックネット裏の2階席に陣取る。四球をはさみ4番丸子のタイムリーで早稲田大学が1点先制(早1-0流)。なおも1、3塁のピンチだったがここは生田目が後続を断ち無失点で切り抜ける。早稲田大学の先発ピッチャーは甲子園を沸かせた浦和学院出身の小島。先頭二人を打ち取るも、その後3安打1死球で2点を奪われ逆転される(早1-2流)。両投手不安定な立ち上がり。2、3回は両者無得点、しかし小島の調子が良くない。2、3回ともに得点圏にランナーを背負い、3回、5番橋川に10球粘られ四球を出したところで投手交代。右のアンダーハンド吉野がマウンドに上がり後続を断つ。得点差は1点だが積極的にランナーを動かしたり生田目投手が牽制でランナーを刺したりと流れは流通経済大学に傾きつつあった。

4回に試合が動く。1アウトから流通経済大学の8番折橋選手(応援歌「よっしゃあ漢唄角田信朗)がヒットで出塁。送りバントの後、1番高橋選手のタイムリーで追加点を挙げる(早1-3流)。その後両者5、6回は無得点。特に生田目投手は4者連続三振を奪うなど圧巻のピッチング。そして得点こそ挙げられないものの流通経済大学打線は小技や機動力で積極果敢な攻撃を見せ、引き続き流れは流通経済大学にあった。流通経済大学サイドの応援席のボルテージも高まる。

流通経済大学の勝利、そして優勝が見えてきたがそうは問屋が卸さない。7回、疲れが見えてきた生田目に早稲田打線が襲い掛かる。9番、代打渡辺のヒットをきっかけに4安打1四球を浴びせかけ3点を奪い生田目をKO、変わった小原からもタイムリーを放ちその差を3点に広げ、流れが一気に早稲田大学に傾く(早6-3流)。しかしその裏、流通経済大学打線が5回途中から登板している大竹を攻め、3番大崎のヒット、4番笹田のホームランでその差を1点まで追い上げる(早6-5流)。どちらに転んでもおかしくない試合展開だったが、9回、早稲田大学が5番石井のダメ押し2ランホームランで試合に決着をつけた(早8-5流)。その裏、大竹が流通経済大学の攻撃を3人で切って取り早稲田大学の優勝が決まった。

所感

流通経済大学のスピード感のある攻撃や、生田目選手の小気味よいピッチング、終盤の早稲田の猛攻など見どころ満載で、勝利の行方も最後まで分からない好ゲームでした。初めてスコアを書きながら観戦していたのですが、見返してみるといろんなことがわかって面白かったです。(毎打席相手投手に5球以上投げさせている選手がいたり、4打席中3回バントをしていた選手がいたり…etc)早稲田大学のランナーコーチが全力ダッシュでコーチャーズボックスに向かっているのも「学生っぽい!」という感じで印象深かったです。あと、初めてバックネット裏から観戦しましたがグラウンド全体が見れてめっちゃ良かったです。

RailsでTwitterログインしてつぶやく(つぶやく編)

昨日の続きです

概要

twitter というgemを使って、つぶやく部分の実装をしていきます

Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to register your application with Twitter.

この記事を書くまで気づきませんでしたが、アプリケーションをTwitterに登録して、OAuth経由での認証しておくことが必要みたいですね。そうでないとPOSTができない(つまりつぶやけない?)っぽいです。

つぶやき機能実装のためには、consumer key/secret のペア(アプリをtwitterに登録した時に取得する値)と、OAuth access token/secretのペア(OAuth認証時に取得する値)が必要なようです。

その値を渡して以下のようにオブジェクトを生成して、updateメソッドを実行してやればそれだけでつぶやいてくれます。他にもフォロワー一覧を出力したり、タイムラインを取得できるようです。

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

client.update("I'm tweeting with @gem!")

実装

実際にRailsアプリで以下のように実装したら無事にtwitter上でつぶやくことができました。もっとスマートなやり方がある気がしてしょうがないですがとりあえずよしとします。

User#twitter_clientメソッドでオブジェクトを生成します。consumer key/secret は.envファイルのものを、access token/token_secretはuser自身が保持している値をそれぞれ割り当てています。そしてルーティングを追加して、SchedulesControllertweetアクションを実行するとparams[:text]の値をtwitter上でつぶやいてくれます。

# app/models/user.rb
def twitter_client
  @twitter_client ||= Twitter::REST::Client.new(
    consumer_key:        ENV['API_KEY'],
    consumer_secret:     ENV['API_SECRET'],
    access_token:        token,
    access_token_secret: secret
  )
end

# config/routes.rb
resources :schedules do
  post 'tweet', on: :collection
end

# app/views/schedules/_modal.html.haml
= button_to 'Tweet', { action: :tweet, params: { text: 'hoge' } }

# app/controllers/schedules_controller.rb
def tweet
  current_user.twitter_client.update(params[:text])
  redirect_to schedules_path, notice: 'Tweeted!'
end

RailsでTwitterログインしてつぶやいてみる

タイトルのことをやってみたくて調べたり作ったりしたので書きます

ログイン編

導入

omniauth-twitter というgemを使いました

omniauthとはなんぞやというと

OmniAuth is a library that standardizes multi-provider authentication for web applications.

webアプリケーションで様々なプロバイダ(twitterとかgithubとか)を使って認証するライブラリです。みたいな感じだと思います

準備のためにGemfile、configに設定を記述します。"API_KEY", "API_SECRET"https://apps.twitter.com/ から取得できる値に置き換える必要があります。 値を取得する際に、登録フォームにアプリケーション情報を入力します。項目の1つに「Callback URL」という任意の入力フォームがあるのですが、これにもなんらかの値を入力してやらないと認証チェックの時に弾かれてしまうようです。また、"API_KEY", "API_SECRET" は多分他人から見られるとよろしくないので、 dotenv など使ってgit管理下から外してやったほうが良いと思います。

# Gemfile
gem 'omniauth-twitter'

# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, "API_KEY", "API_SECRET"
end

ユーザ認証

/auth/twitterにリダイレクトさせてやると、omniauthが認証に必要な作業を行ってくれるようです。認証の処理が終わった後/auth/:provider/callback宛に認証情報を持ったhashを渡します(という認識で合っているのかな?)。routes.rbの記述により、認証のコールバックがSessionControllerのcreateアクションに割り当てられます。認証が成功したらブラウザ上に情報が表示されると思います。

# 任意のview
= link_to "Sign in with Twitter", "/auth/twitter"

# config/routes.rb
get '/auth/:provider/callback', to: 'sessions#create'

# app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
  def create
    render text: request.env['omniauth.auth']
  end
end

それでは、実際に取得した情報をUserとして登録してみます。ネットで見つけた情報をなぞっただけなので適切な方法かは分からないのですが、認証後得られたhash値を見て:provider:uidが既存のUserと一致する場合はそのユーザでログインして、一致しない時はhash値を元にユーザを作成してログインします。最低限:provider:uidだけ保存しておけばログインできると思いますが、今回は画面上にユーザ名と画像を表示したかったので[:info][:name][:info][:image]を、またアプリ上からつぶやきたかったため、それに必要となるauth[:credentials][:token]auth[:credentials][:secret]の情報も保存しました。これでユーザ登録とログイン機能が実装できました。

# app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
  def create
    user = User.find_by(provider: auth[:provider], uid: auth[:uid]) || User.create_from_auth!(auth)
    session[:user_id] = user.id
    redirect_to '/', notice: 'sign in!'
  end

  private

  def auth
    request.env['omniauth.auth']
  end
end
# app/models/user.rb
class User < ActiveRecord::Base
  def self.create_from_auth!(auth)
    create! do |user|
      user.provider = auth[:provider]
      user.uid = auth[:uid]
      user.name = auth[:info][:name]
      user.image = auth[:info][:image]
      user.token = auth[:credentials][:token]
      user.secret = auth[:credentials][:secret]
    end
  end
end

次回は「アプリ上からつぶやく編」を書くかもしれません

参考

AWS触ってみた

初めてネット対戦でマリカやったりして、俺の中でWiiUが熱い!(ちなみにスプラトゥーンは持ってません)

バーチャルコンソールファイアーエムブレム烈火の剣を買おうかどうしようか迷っています


業務でパイセンに教えて頂きつつAWSを触る機会があったので、やったことや教えて頂いたアドバイスをざっくり書いてます。どういうふうに設定するかとかいう細かいことは書いてません!

ちなみに今までの私とAWSの関係は以下の書籍やブログを軽くなぞったことがある程度で、実際に業務などでAWSで何かを運用させたことはありません。

www.amazon.co.jp

iti.hatenablog.jp

AWSインスタンスをたてる

EC2

  • マシンイメージはAmazon Linuxは避けたほうが良いかもしれないとアドバイスいただいた。理由はAWS以外で使うことがなくハマった時に情報が少なかったりするため。それ以外だったらなんでもいいんじゃね?という感じだったので今回はubuntuを選択した。
  • セキュリティグループでSSHとHTTP、HTTPSでアクセスできるように設定しておく。
  • 固定IPアドレスを設定した。再起動してもIPが変わらないようにするため。

RDS

  • DB用のインスタンスみたいな感じ。EC2上にDBをインストールする運用も可能だが、バックアップを自動でとってくれたり色々便利らしい。
  • バックアップの期間はデフォルトで7日となっていたが、長期休暇の時など「休暇前のバックアップが消えてしまっていた!」という事態になりかねないため長めに設定しておくほうが無難とのこと。30日にした。根拠はない。

railsアプリを動かしてみる

  • まずローカルのターミナルからEC2にたてたインスタンスにアクセスする。-i秘密鍵のパスを指定する。(秘密鍵はEC2インスタンスを作るときにダウンロードしたもの。)
    • $ ssh ubuntu@xx.xx.xx.xx -i ~/Downloads/oooooootsuka.pem
  • rubyやら入れてRailsが動く環境を作って、適当にアプリを作り$ rails sを走らせてアクセスできることを確認(※セキュリティグループに3000番ポートを許可する必要あり
  • インストールに時間がかかるからといってターミナルを放置プレイすると、インストール中と見せかけて実は接続が切れていた。ということがあるので注意する

その他

  • 秘密鍵のファイル名のoの数が多すぎて打ち間違えそうになるので~/.ssh/configに設定する。これで$ ssh hogeでアクセスできる。
$ less ~/.ssh/config
Host hoge
  Hostname xx.xx.xx.xx
  IdentityFile ~/Downloads/oooooootsuka.pem
  User ubuntu

Backbone翻訳

Downloads & Dependencies (Right-click, and use "Save As")

  • Development Version (1.1.2) 60kb, Full source, tons of comments
  • Production Version (1.1.2) 6.5kb, Packed and gzipped (Source Map)
  • Edge Version (master) Unreleased, use at your own risk

Backbone's only hard dependency is Underscore.js ( >= 1.5.0). For RESTful persistence, history support via Backbone.Router and DOM manipulation with Backbone.View, include jQuery, and json2.js for older Internet Explorer support. (Mimics of the Underscore and jQuery APIs, such as Lo-Dash and Zepto, will also tend to work, with varying degrees of compatibility.)

ダウンロードと依存関係

  • 開発バージョン(1.1.2)60KB、フルソース、大量のコメント
  • 本番バージョン(1.1.2)6.5KB、圧縮されている
  • エッジバージョン(master)、未リリースバージョン、リスクを覚悟の上利用下さい

Backbone.jsは唯一Underscore.js ( >= 1.5.0)に依存しています。 RESTfulの持続のためにBackbone.Routerを使った履歴支援、そしてjQueryを含むBackbone.ViewによるDOM操作、そして古いIEのためのjson2.js(Lo-DashやZeptoのようなUnderscoreやjQueryAPIの模倣もまた正しく働く傾向にある、互換性の差はあれど)

RailsGuides翻訳

1 Guide Assumptions

This guide is designed for beginners who want to get started with a Rails application from scratch.
It does not assume that you have any prior experience with Rails.
However, to get the most out of it, you need to have some prerequisites installed:

  • The Ruby language version 1.9.3 or newer.
  • The RubyGems packaging system, which is installed with Ruby versions 1.9 and later. To learn more about RubyGems, please read the RubyGems Guides.
  • A working installation of the SQLite3 Database.

Rails is a web application framework running on the Ruby programming language.
If you have no prior experience with Ruby, you will find a very steep learning curve diving straight into Rails.
There are several curated lists of online resources for learning Ruby:

  • Official Ruby Programming Language website
  • reSRC's List of Free Programming Books

Be aware that some resources, while still excellent, cover versions of Ruby as old as 1.6, and commonly 1.8, and will not include some syntax that you will see in day-to-day development with Rails.

1.前提条件

このガイドは最初からからRailsアプリケーションを始めたい人向けです
あなたがRailsの経験があると想定していません
しかし、それを最大限活用するためには、いくつかの必要条件がインストールされている必要があります:

  • Ruby:1.9.3以降
  • RubyGem:1.9以降(RubyGemについて学びたかったらRubyGems Guidesを読んで下さい)
  • SQLite3データベース

RailsRubyプログラミング言語で実行されているWebアプリケーションフレームワークです
Rubyの経験がない場合、Railsの学習は難易度が高いと分かるでしょう
Rubyを学ぶためのいくつかの精選されたオンラインリソースのいくつかのリストです

  • 公式サイト
  • 無料のreSRCのプログラミング本リスト

いくつかのリソースには注意が必要です、Rubyの1.6や一般的な1.8では日々開発されているRailsのいくつかの構文が含まれていません。

Backbone翻訳

BACKBONE.JS

Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.

The project is hosted on GitHub, and the annotated source code is available, as well as an online test suite, an example application, a list of tutorials and a long list of real-world projects that use Backbone.
Backbone is available for use under the MIT software license.

You can report bugs and discuss features on the GitHub issues page, on Freenode IRC in the #documentcloud channel, post questions to the Google Group, add pages to the wiki or send tweets to @documentcloud.

Backbone is an open-source component of DocumentCloud.

Backbone.jsはkey-value bindingのmodelとカスタムイベント、加算(?)機能のリッチなAPIをもつcollection、宣言的なイベントハンドリングを持つview、既存のRESTfulなJSONインターフェースのAPIに接続できる、が提供するwebアプリケーションの構造を与える

このプロジェクトはGithubにホストしている、そして注釈された(?)ソースコードが利用できる、オンラインのテストスイートも利用できる、アプリケーションの例、チュートリアルのリスト、Backboneを使っている世界中のプロジェクトのリスト
Backboneはマサチューセッツ工科大学のソフトウェアライセンスの元利用できる

Github issue でバグレポートや機能の議論ができる、#documentcloudチャンネルの Freenode IRC 上、GoogleGroupで質問を投げる、wikiにページを追加したり、@documentcloudtweetを送る

BackboneはDocumentCloudのオープンソースコンポーネントです