2014年4月26日土曜日

[Ruby]雑談対話2 OpenStructを使ってみました

雑談対話をRubyで書いてみました。

require 'httpclient'
require 'json'
require 'ostruct'

class Dialogue
  def say(msg)
    body = JSON.generate(utt: msg, context: @context.nil? ? "": @context)
    clnt = HTTPClient.new
    uri = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=(Your API Key)'
    res = clnt.post_content(uri, body, {'Content-Type' => 'application/json'})
    %w(utt yomi mode da context).inject(OpenStruct.new) { |result, key|
      result.send(key + "=", JSON.parse(res)[key])
      @context = JSON.parse(res)[key] if key == "context"
      result
    }
  end
end

感想とかです。
・@context.nil? ? "": @context のところはこれでいいんです。?は多くないです。
 nil?()というメソッドのあとに条件演算子(Rubyではこう呼ぶそうです。C言語だと三項演算子と呼んでいたような?)が続いている感じです。
・HTTPClientだけはgem install httpclientをしたのをおぼえています。その他のものはRubyをインストールしたときに最初から入っていたのだとおもいます(たぶん)。
・OpenStruct(requireのところは、'ostruct')はすごいです。
 カルチャーショックを受けました。
 たとえば
 o = OpenStrcut.new
    o.title = "タイトル"
 puts o.title
 と書くと、titleなんてものは事前に作った覚えも無いのに、自動的に下記のようなメソッドを作ってくれる(※)ようです。
(※)私の理解です。本当はもっと複雑なことをしていただいているのかもしれません。
 def title=(title)
      @title = title
    end
 
 def title
      @title
    end
 
これによりあたかも、titleフィールド(という言い方がよいのかどうかは微妙な気がしますが)に値を書き込んだり、読み込んだりしているようなコードを書けるようです。

[android]Android File Transferの[実行] --> [転送]とは?

Android File TransferをiMacにインストールしました。
Nexus 5で撮った写真をiMacに取り込みたかったので。
インストールはAndroid File Transferのページに書いてあるようにすればできました。
最後は「drag Android File Transfer to Applications」するのですね。
ここを参考にさせていただきました。
ありがとうございました。

さて、このAndroid File Transferに[実行] --> [転送]というメニューがあるのですが、何のことかはじめわかりませんでした。
ファイルの転送かなとおもって、ファイルを選択した状態で[転送]という名のメニューを選択してもうんともすんともいいません。どこかよくわからないところに転送されてしまったのではないかとドキドキしました。
[実行] --> [戻る]というメニューもあるのですが、[転送]はどうやらこれの逆の意味のようです。iMacを英語設定にすると、[Go(実行)] -> [Back(戻る)]と[Go(実行)] -> [Foward(転送)]になっていました。英語設定の方法はここを参考にさせていただきました。ありがとうございました。

[戻る]は、現在選択中のディレクトリから元のディレクトリへ戻る意味だとおもいます。
[転送]はそれの逆で「進む」みたいな感じのようです。


2014年4月25日金曜日

[Ruby]雑談対話

require 'httpclient'
require 'json'

msg = 'こんにちは'
puts 'Me>' + msg
body = JSON.generate(utt: msg) # {:utt => msg}のこと
clnt = HTTPClient.new
uri = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=(Your API Key)'
res = clnt.post_content(uri, body, {'Content-Type' => 'application/json'})
my_hash = JSON.parse(res)
puts 'docomo>' + my_hash['utt'].to_s


雑談対話をRubyで書いてみました。
HTTPClientはgem install httpclientをしました。
JSONはインストール時に最初から入っていたのだとおもいます(たぶん)。
{'Content-Type' => 'application/json'}が必要でした。

Rubyのバージョンは下記の通りです。
$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

2014年4月18日金曜日

[Ruby]パスワード生成

Rubyはじめました。
32文字のパスワードを自動的に作ります。
こちらを参考にさせていただきました。
ありがとうございました。

def password_gen(size=8)
  [*'!'..'~'].sample(size).join
end
puts password_gen(32)

パスワードはクセのようなもののせいで、どうしても同じようなものを作ってしまいます。
これを使うとランダムに作ってくれます。
けれど覚えられない……
みなさん、どうされているのですかね……




2014年4月2日水曜日

[android]AdMob更新

Admob SDK版からGoogle Play Services版に変更をしました。

2014.8.1がキーワードです。

https://developers.google.com/mobile-ads-sdk/docs/?hl=ja
ここに書いてある通りにやればできます。
私にもできました!

私がはまったポイントは、
①Android Manifestに追加した
android:value="@integer/google_play_services_version"
のビルドエラーが消えない。
 → <android-sdk>/extras/google/google_play_services_froyo/ からもってきたものを
   Libraryに追加していることが原因でした。
   <android-sdk>/extras/google/google_play_services/ から持ってきたものにすれば、
   解決しました。でもちょっと待った。後述。(※)

②ビルドは通った。よし実行! だけど、バナーのサイズが指定されていないとか言われて、アプリが起動しない。
 → 私はXMLに設定をしていたのですが、下記を変更しないといけませんでした。
   xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
   ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
   xmlns:ads="http://schemas.android.com/apk/res-auto"

①・②ともにずっと悩んでいました。
だれかのお役にたてればうれしいです。

(※)私がリリースしているAndroidアプリは2.2(sdk=8)以上にしていました。
最初に買った機種がLYNX3Dなもので……
Google Play Services版にするとandroid:minSdkVersion="9"にしないといけないようです。
ということはそうですよ、そう、ごにょごにょごにょ。
2014.8.1以降も新規アプリやアプリの更新をしなければ、Admob SDK版でもよいようです。
これもそのうち広告が表示されなくなるようにおもうのでやっぱり、どこかでバサッと思い切らないといけないときがくるかもしれません。