2012年3月26日月曜日

Peercastハッカソンで一発芸を披露してきました


というわけで。
普段からどっぷりつかっているpeercastでハッカソンが開催される
ということで一発芸を披露してきました。
レギュレーションは3/24(金)21:00-3/26(日)18:00までに
なんか作るというもの。
せっかくRails勉強したのでなんかやってみようかと思いましたが
2.5日で完成させられる気がしなかったので温存してたアイデアである
普段から愛してやまないマナカナでゲームを作ってみました。
[ゲーム]
http://telegnosis.sakura.ne.jp/manakana/
(怒られたら消します)
[発表用メモ]
http://telegnosis.sakura.ne.jp/manakana/ref/img0.html

・実装したもの
○コンボシステム。3コンボから段々と画像が小さくなり5コンボからはランダムで
マナボタンとカナボタンが入れ替わります。
○ハイスコア。PHPでテキストに吐き出してるだけですが世界記録がみられます。
○BGM機能。HTML5のaudioタグ使ってみました。
・実装してないもの
○ランキング機能。設置環境のDBの関係で。
・作ってて初めて知ったこと
○HTML5の<audio>タグの音再生はスマートフォンのマナーモードとかお構いなし。
これautoloadだったら迷惑だなぁ。




○発表会
スライドによる普通のLTっぽいレベルの高い発表から
ひたすらウインドウが動くアプリのデモまで
カオス極める内容で腹筋が鍛えられるほど笑いました。
カオスの片鱗は こちら から。
最近は便利なサイトが多くて助かり申す。

○まとめ
・一発芸は絵が大事
・プリキュア勢v.s.将棋勢という新たなアングルが発生したお祭り。
主催のぷろぐれさん楽しいイベントありがとうございました。

2012年3月20日火曜日

Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(5)

間が開いたものの続き。
第6章コントローラ開発から。
リクエスト処理では基本的なアップロードフォームとアップロードされたバイナリデータをDBに格納するケース。
レスポンス操作、状態管理(クッキー・セッション管理)、フィルタ、
全体共通な挙動を定義するためのApplicationコントローラについて、
ひと通りコードを叩いて動きを確認。
残りがルーティングとテストそしてjavascript(Ajax連携)なんでこれが終わったらなんか
お試し的なものを書いてみよう。
そして環境をUbuntuからCentOSにしよう(謎

2012年3月14日水曜日

Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(4)

続き。
第5章モデル開発

ここではデータベースアクセスに関するいろいろなこと。
特に5.4.2 attr_protected/attr_accessibleメソッドは
github の mass assignment 脆弱性が突かれた件
にもあるようについ最近話題になったRailsアプリケーションの脆弱性になりやすいとこだそうなので実際コードをかきながら確認。
他にトランザクション・オプティミスティック同時実行制御について
ふむふむとコードを書きながら読み込む。
とりあえずデータのCRUDに関してはできるようになったはず。
次回は6章コントローラ開発から。

2012年3月12日月曜日

Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(3)

3章Scaffolding機能によるRails開発の基礎
4章ビュー開発

基本的に機能の説明なので流してよみつつ気になるものについては実際に書いてみて確認。
メモ
・部分テンプレートの命名規則は 「_名前.html.erb」
・P91 rake db:drop:allは rake db:dropで良さそう
・データベースの初期化は rake db:reset
・特定のモデルを更新する為にはform_forのが手っ取り早い。

全く無関係ながらvim の NERD-TreeプラグインとRails.vimの連携が非常に便利でした。

2012年3月11日日曜日

Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(2)

2章Ruby on Railsの基本から

本書の記述と異なっていた点

P49 2.4.5 フィクスチャによるテストデータの純美
本文

rake db:fixtures:load FIXTURES=books.yml

books.ymlの.ymlまでは不要らしい

rake db:fixtures:load FIXTURES=books

で解決。

その他のメモ
sqlite3がdbconsoleでエラーを吐く。
hoge@ubuntu:~/work/railbook$ rails dbconsole
SQLite header and source version mismatch
2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2
2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204

エラーメッセージを検索する限り sudo ldconfigで解決するはずがまったく解決しない。ぐぬぬ。
対処どうすればいいんだろう。

2012年3月10日土曜日

Ruby on Rails3 アプリケーションプログラミング(山田祥寛)学習日記(1)

というわけでrails事始めとしてRuby on Rail3 アプリケーションプログラミング(著:山田祥寛)を上から順番に追っていく
お勉強日記。

[環境]
(作業側)
Ubuntu11.10
ruby1.9.3
rails 3.2.2
ほんとうに最初からなんでのんびり。

[1]インストール
いろいろなところで書かれているので省略
[2]アプリケーションの作成
rails new testApp
[3]動かしてみる
rails s
/home/ゆーざ/.rvm/gems/ruby-1.9.3-p125/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
うおーなんじゃこりゃ。色々調べる。
アプリケーション直下のGemfileの
# gem 'therubyracer'
のコメントアウトを外して
budle install
を実行。再びrails s。動いたっぽいので。http:/localhost:3000/にアクセス。お、ページ出た出た。
意外にハマってしまったので今日はここまで。
次回はコントローラってなんぞ?ぐらいから。

2012年3月8日木曜日

BingAPIを使用した画像検索(2)_Rubyでかく自動ZIPでくれスクリプト

ゆーすけべーさんのおっぱい収集スクリプトに触発された
自動ZIPでくれスクリプト第2回。

画像検索APIを叩いて帰ってきたJSONデータの例が↓(公式ドキュメントより)
-------------------------------------------------------------------------------------------------
{
   "SearchResponse":{
      "Version":"2.0",
      "Query":{
         "SearchTerms":"xbox site:microsoft.com"
      },
      "Image":{
         "Total":92,
         "Offset":0,
         "Results":[
            {
               "Title":"Microsoft Deutschland GmbH auf der CeBIT 2006.",
               "MediaUrl":"http:\/\/www.microsoft.com\/germany\/presseservice\/images\/pressemappen\/cebit2006\/Xbox-360_5.jpg",
               "Url":"http:\/\/www.microsoft.com\/germany\/presseservice\/service\/pressemappen\/cebit2006.mspx",
               "DisplayUrl":"http:\/\/www.microsoft.com\/germany\/presseservice\/service\/pressemappen\/cebit2006.mspx",
               "Width":3259,
               "Height":3264,
               "Thumbnail":{
                  "Url":"http:\/\/ts2.images.live.com\/images\/thumbnail.aspx?q=2847678867077&id=b3ba5b922c04d322d937275335c8cf75",
                  "ContentType":"image\/jpeg",
                  "Width":159,
                  "Height":160,
                  "FileSize":2624
               }
            },
...

getしたい画像データがどこに入っているかというと
"MediaUrl" ここ。

というわけでMediaUrlが.jpg or .jpegだったらDLしてきてローカルに保存。200件終わったらまとめてzipにする。
zipに固める為gem install rubyzipしておく
rubyでの実装は 橋本商会 いかにしておっぱい画像をダウンロードするか〜2012 をRubyで書いた様をパクリ参考にさせて頂きました。
--------------------------------------------------------------------------------------------------------------------
# -*- encoding: utf-8 -*-
require 'rubygems'
require 'open-uri'
require 'json'
require 'uri'
require 'kconv'
require 'zip/zipfilesystem'

APP_ID = '' #APPIDは別途取得
API_URI = 'http://api.bing.net/json.aspx'


dir = './img/'
Dir.mkdir dir unless File.exists? dir

page_count = 0
dl_count = 0
query = "Yukie Nakama"

loop do 
 if page_count == 4 #50 * 4 DLしたら打ち止め
  break
 end
 url = API_URI + '?' + 
  "AppId=" + APP_ID + "&" +
  "Version=2.2&Market=ja-JP&Sources=Image&Image.Count=50&Image.Offset=" + URI.encode((page_count * 50).to_s) +
  "&Adult=off&Query="+ URI.encode(query.to_s)

 search_result = JSON.parse(open(url).read.toutf8)

 search_result['SearchResponse']['Image']['Results'].each do |entry|

  if /\.jpe?g$/ =~ entry['MediaUrl'] then #jpg or jpegを拾う
   dl_count += 1
   file_name = dl_count.to_s + ".jpg" #ファイル名は 数字 + jpg
   path = "#{dir}/#{file_name}" 
   puts "No #{dl_count}:Start"

   begin #imgをDLしてローカルに保存
    img = open(URI.encode entry['MediaUrl']) 
    img.close
    puts "DL Success"
    File.rename(img.path, path)
   rescue
    puts "DL Fail"
    next
   end
  else
   next
  end
 end
 page_count += 1
end
#画像DLここまで
#zipで圧縮
Zip::ZipFile.open("./#{query}.zip", Zip::ZipFile::CREATE) do |zip|
 Dir.open(dir).each{|f|
  next if f == "." or f == ".." #ディレクトリの下のみが対象
  f = File.expand_path(f,dir)
  zip.add(File.basename(f), f)
 }
end
#DLしたファイルの削除
Dir.open(dir).each{|f|
 next if f == "." or f == ".." #ディレクトリの下のみが対象
 f = File.expand_path(f,dir)
 File.unlink(f)
}
Dir.rmdir(dir)



これでYukie Nakama.zipができて生活がはかどった。

クエリを変えれば壁紙収集ぐらいはできるのかな。

2012年3月7日水曜日

BingAPIを使用した画像検索(1)

[目標]

Bingの画像検索APIで画像を検索し、その検索元画像をダウンロード後ZIPにまとめる

「ZIPでくれ」ならぬ「ZIPでやる」

[やったこと]

○Bing 開発者登録

 https://ssl.bing.com/webmaster/developers/appids.aspx から登録しApplicationIDを取得

APIの叩き方をふむふむと読む。

○JSONライブラリのインストール

> gem install json

○APIを叩いてみる 

 

# -*- encoding: utf-8 -*-
require 'open-uri'
require 'json'
require 'uri'
require 'kconv'

APP_ID = ''#Bingで登録したアプリケーションID
API_URI = 'http://api.bing.net/json.aspx'

query = "仲間由紀恵"
url = API_URI + '?' +
"AppId=" + APP_ID + "&" +
"Version=2.2&Market=ja-JP&Sources=Image&Image.Count=50&Image.Offset=0&Query="+
URI.encode(query.to_s)

dat = JSON.parse(open(url).read.toutf8)
#とりあえず検索結果を吐き出す
File.open("./result.txt", "w") do |f|
  f.puts dat
end
無事検索結果のJSONが取得できた。

次はここから画像の元URLをたどり画像をDLすることを目標。

2012年3月6日火曜日

Ubuntu11.10をインストールしてコードを書きだす前にやったこと(2)


前回の続き
[Vim plugin]
quick-run :vim上で即座に実行
neocomplcache:補完用
インストール方法は
新卒さん向け、速攻でプログラミングをマスターできるvimプラグイン「quickrun」
そろそろしっかりvimを使う。vimでRubyのコーディングをするためにを参考にさせて頂きました。

[ruby]
Rubyのインストール
  1. ソースコードのダウンロード .http://www.ruby-lang.org/ja/downloads/ から1.9.3-p125を取得
  2. 解凍。tar zxvf ruby-1.9.3-p125.tar.gz
  3. インストール
cd ruby-1.9.3-p125/
./configure
make
         su(Ubuntuはインストール時にrootのパスワードが設定されてないのでsudo su - で設定しておく)
         make install
    4.   $ ruby -v
 ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
 irb(main):001:0> p "Hello world!"
"Hello world!"
=> "Hello world!"
とりあえず実行環境は整った。

2012年3月5日月曜日

Ubuntu11.10をインストールしてコードを書きだす前にやったこと(1)

Ruby なるものをかじってみたいと思いRuby環境を構築するまでのメモ

[環境]

VMware Player 4.0.2

OS:Ubuntu11.10

 

[エディタ]

vim派なのでvimのインストールから

  1. sudo apt-get install vim-gnome
  2. インストール完了後gnomeを叩くと3`.
  3. (gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",

    (gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",

    (gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",

    (gvim:3869): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",
  4. sudo apt-get install gtk2-engines-pixbuf で解決
  5. しかしgvim起動してもどうにも動かない...なぜ?
  6. https://forums.ubuntulinux.jp/viewtopic.php?id=12237で解決。.bashrcに gvim(){ /usr/bin/gvim -f "$@" & true; }を追加。
  7. 無事起動。.vimrcやらは省略。

次回はプラグインやらなんやらの設定から。vimのインストール1つでここまで手間取ると思わなかった。