Hatena::ブログ(Diary)

はてなダイアリー大好き日記

 

2014-09-16

sequelでデフォルトのDateTime入れる

いろいろあるらしいが

DB.create_table? :threads do
  primary_key :id
  String :title
  DateTime :created_at, :null => false, :default => Sequel::CURRENT_TIMESTAMP
end

でいける。create_table?と?をつけると、存在しない時だけ作成するようになる

2014-09-15

sequel動かなかったのでメモ

mysqldb作ってサンプルを実行しても

LoadError: cannot load such file -- mysql (Sequel::AdapterNotFound)
が出るので、とりあえずmysql2をgemインスコしようとしたらエラー出た

http://qiita.com/s_osa/items/34d1814b5b213ca29af7 の通り

sudo apt-get install libmysqld-dev

するとmysql2インスコできた
それでもエラーが起きるので、conenct文を変えて

Sequel.connect(:adapter => 'mysql2', :user => 'username', :password => "passw0rd", :host => "xxx.xxx.xxx.xxx" , :database => "test_database")

の形式にしたら動いた

2014-07-26

2013-07-03

ffmpegでfmsにストリーム配信する

ffmpeg -re -i /home/user/tmp/foo.mp4 -acodec libfaac -ar 22050 -vcodec libx264 -s svga -b:v 500k -b:a 96k -f flv rtmp://localhost:1935/live/livestream

サーバ起動

sudo /opt/adobe/fms/server start

2013-06-30

rubyでamazonAPIの検索URL生成

amazon検索のAPIの検索URL生成。

require 'time'
require 'openssl'
require 'base64'
require 'cgi'

host = "ecs.amazonaws.jp"
path = "/onca/xml"
seckey = {シークレットキー}

def build_params(params)
  res = ""
  params.keys.sort.each {|key|
    prefix = (res.length > 0 ? "&" : "")
    res += "#{prefix}#{key}=#{CGI.escape(params[key])}"
  }
  res
end

def create_timestamp
  Time.now.strftime("%Y-%m-%dT%H:%M:%SZ")
end

def create_signature(key, data)
  Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip()
end

params = {
  :Service        => "AWSECommerceService",
  :AWSAccessKeyId => {アクセスキーのID},
  :AssociateTag   => {なんたら-22みたいなやつ},
  :Operation      => "ItemSearch",
  :SearchIndex    => "Books",
  :Title          => "鳴子ハナハル",
  :Timestamp      => create_timestamp(),
  :Version        => "2010-09-01"
}

param_string = build_params(params)

sign_string = "GET\n#{host}\n#{path}\n#{param_string}"
signature   = create_signature(seckey, sign_string)
url = "http://#{host}#{path}?#{param_string}&Signature=#{CGI.escape(signature)}"

p url

amazonAPIアクセスするにはキー取得が必要だったりして色々めんどい。
シークレットキーとアクセスキーIDの取得方法は
http://www.ajaxtower.jp/ecs/
にかいてある
Signature作るときにキーの順序をバイトコード順にしないといけなかった

2013-04-21

Padrinoでエラー時に別ページが出るのを防ぐ

class Hoge < Padrino::Application

  register Padrino::Rendering
  register Padrino::Mailer
  register Padrino::Helpers

  enable :sessions
  # ↓2つの設定をいれると出なくなる
  disable :raise_errors
  disable :show_exceptions

end

SequelのDateTimeをto_jsonするとパースできない形になる

Sequel.datetime_class = DateTime

の処理を入れるとUTC表記が抜けて、パースできる形になる

2013-04-20

SpringRestClientでキャメルケースの変数名保ったままJSON受け取る

AndroidAnnotationsと一緒にSpringRestClient使っていて、
スネークケースで返ってくるJSONに対して、キャメルケースで受けなければならないが自動でやってくれない。
変数名をスネークケースに合わせるのはやりたくなかったのでハマっていた。

結構AndroidAnnotationsのwiki見てたけど、
よく考えると調べるべきはSpringRestClientの仕様だった。

class Hoge {

    @JsonProperty("user_id")
    private String userId;

    public String getUserId() {
        return this.userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

}

これで変換してくれるようになる。