TitaniumアプリでTwitpicにアップロードする際の注意点

Twipicに画像をアップロードする場合、1回目のアップロードは成功するが、
連続して2回目のアップロードをすると以下のエラーが発生します。

err code="1001" msg="Invalid twitter username or password"

解決方法はTitanium.Network.createHTTPClienのオプションを次のように
設定してあげるとうまくいきました。

function uploadToTwitPic(image) {
	var xhr = Titanium.Network.createHTTPClient({
		enableKeepAlive:false // ここ追加
	});
	...	
}

:Source
(旧) Cocoaの日々: Twitpicアップローダ開発(4) 2回目以降の認証失敗解決〜Keep-Aliveをオフにする


60秒以内に2回目のアップロードを行うとエラーになるようです。

Titaniumアプリを実機にインストールしようとしたらエラー

Titanium DeveloperでTitaniumアプリ(iPhone)を実機にインストールしようとしたところ、
以下のようなエラーが出てはまりました…

ERROR] Error: Traceback (most recent call last):
  File "/Library/Application Support/Titanium/mobilesdk/osx/1.6.2/iphone/builder.py", line 1238, in main
    execute_xcode("iphoneos%s" % iphone_version,args,False)
  File "/Library/Application Support/Titanium/mobilesdk/osx/1.6.2/iphone/builder.py", line 1012, in execute_xcode
    output = run.run(args,False,False,o)
  File "/Library/Application Support/Titanium/mobilesdk/osx/1.6.2/iphone/run.py", line 39, in run
    sys.exit(rc)
SystemExit: 1

原因は「._app.js」にみたいなJSファイルがResourcesディレクトリにあるのが問題のようです。
※ちなみに「.DS_Store」は大丈夫でした。

$ ls -la
total 84
drwxr-xr-x 4 takao takao 4096 2011-07-14 07:31 .
drwxr-xr-x 4 takao takao 4096 2011-07-14 07:24 ..
drwxr-xr-x 3 takao takao 4096 2011-07-14 07:20 android
-rwxr--r-- 1 takao takao 4096 2011-07-14 07:31 ._app.js
-rwxr--r-- 1 takao takao 1448 2011-07-14 07:31 app.js
-rwxr--r-- 1 takao takao 4096 2011-07-14 07:24 ._configs.js
-rwxr--r-- 1 takao takao  282 2011-07-14 06:29 configs.js
-rwxr-xr-x 1 takao takao 1646 2011-07-14 06:29 dark_camera.png
-rwxr-xr-x 1 takao takao 1466 2011-07-14 06:29 dark_list_add.png
-rwxr-xr-x 1 takao takao 1324 2011-07-14 06:29 dark_list.png
drwxr-xr-x 2 takao takao 4096 2011-05-22 02:31 iphone
-rw-r--r-- 1 takao takao 1158 2011-07-14 07:20 KS_nav_ui.png
-rw-r--r-- 1 takao takao 1074 2011-07-14 07:20 KS_nav_views.png
-rwxr--r-- 1 takao takao 4096 2011-07-14 07:29 ._overlay.js
-rwxr--r-- 1 takao takao 1104 2011-07-14 07:29 overlay.js
-rwxr--r-- 1 takao takao 4096 2011-07-14 07:30 ._photo.js
-rwxr--r-- 1 takao takao 3184 2011-07-14 07:30 photo.js
-rw-r--r-- 1 takao takao 4096 2011-07-14 07:24 ._tab_item_photo.js
-rw-r--r-- 1 takao takao  228 2011-07-14 06:29 tab_item_photo.js
-rwxr--r-- 1 takao takao 4096 2011-07-14 07:30 ._win_item_photo.js
-rwxr--r-- 1 takao takao 2377 2011-07-14 07:30 win_item_photo.js

TextMateで編集していたからかなー。不要なファイルを一括削除します。

$ rm ._* 
$ ls -la
total 60
drwxr-xr-x 4 takao takao 4096 2011-07-14 07:57 .
drwxr-xr-x 4 takao takao 4096 2011-07-14 07:24 ..
drwxr-xr-x 3 takao takao 4096 2011-07-14 07:20 android
-rwxr--r-- 1 takao takao 1448 2011-07-14 07:31 app.js
-rwxr--r-- 1 takao takao  282 2011-07-14 06:29 configs.js
-rwxr-xr-x 1 takao takao 1646 2011-07-14 06:29 dark_camera.png
-rwxr-xr-x 1 takao takao 1466 2011-07-14 06:29 dark_list_add.png
-rwxr-xr-x 1 takao takao 1324 2011-07-14 06:29 dark_list.png
drwxr-xr-x 2 takao takao 4096 2011-05-22 02:31 iphone
-rw-r--r-- 1 takao takao 1158 2011-07-14 07:20 KS_nav_ui.png
-rw-r--r-- 1 takao takao 1074 2011-07-14 07:20 KS_nav_views.png
-rwxr--r-- 1 takao takao 1104 2011-07-14 07:29 overlay.js
-rwxr--r-- 1 takao takao 3184 2011-07-14 07:30 photo.js
-rw-r--r-- 1 takao takao  228 2011-07-14 06:29 tab_item_photo.js
-rwxr--r-- 1 takao takao 2377 2011-07-14 07:30 win_item_photo.js

改めて実行してみると、無事、Titaniumアプリをインストールすることができました。



※ 再実行する際にエラーがでる場合は、build/iphoneディレクトリのファイルを削除して
Titanium Developerを再起動してあげる必要がありました。

Google Chart Toolsを使ってグラフ表示する実装

Rails3.1でグラフ表示するgemを探しましたが、あまりメンテナンスされてなさそうだったので
Google Code PlaygroundのサンプルコードをHelperクラスに実装して、必要な部分だけ設定するような形にしてみました。


Source: 参考にしたサンプル
Google Code Playground


今回は、例として家計簿データを扱うモデル(Kakeibo)をカテゴリ毎(category_id)に集計して、
棒グラフを表示してみました。


app/views/layouts/application.html.erb

<script type="text/javascript" src="http://www.google.com/jsapi"></script> # 追加


app/views/xxx/xxx.html.haml

# viewの実装はシンプルに一行だけ、コントローラで設定した検索結果(モデルの配列)と
# グラフのタイトルを引数で指定しています。
= bar_chart_by_category(@results, :title => 'カテゴリ別') # @resultsはコントローラで設定しています


app/helpers/xxx_helper.rb

  def bar_chart_by_category(results, options={:title => 'bar chart'})
  # 引数で渡されたモデルの配列をカテゴリでグルーピングして
  # 合計値を算出して、カテゴリ名を取得しています。
    labels, data = [], []
    results.group_by(&:category_id).each do |id, result|
      next if id.nil?
      data << result.sum(&:value)
      labels << "#{Category.find(id).name}"
    end

  # サンプルコードをコピペして、labels, data, titleを設定しているだけです。
    html = javascript_tag  <<"EOS"
     google.load('visualization', '1');
     function drawVisualization() {
     var wrapper = new google.visualization.ChartWrapper({
     chartType: 'ColumnChart',
     dataTable: [#{labels}, #{data}],
     options: {
     'title': '#{options[:title]}'
     },
     containerId: 'category'
     });
     wrapper.draw();
     }
     google.setOnLoadCallback(drawVisualization);
EOS
    html << content_tag(:div, '', {:id => 'category', :style => "width: 600px; height: 400px;"})
  end


表示されたグラフは、日本語も普通にOKで結構いい感じ。
同じ要領で他の種類のグラフも簡単に表示できそう...
f:id:t-taira:20110626222247p:image

Rails3.0.8で作成したアプリを3.1.0.RC4に移行しています

検索関連のgemでエラーになったので、修正方法をメモっておきます。
will_paginate, meta_searchでエラーになりました。エラー内容はそれぞれ以下の通り。


.will_paginate

/home/User/.rvm/gems/ruby-1.9.2-p180/gems/will_paginate-2.3.15/lib/will_paginate.rb:39:in `enable_activerecord': uninitialized constant ActiveRecord::Associations::AssociationCollection (NameError)

・meta_search

Completed 500 Internal Server Error in 8ms

ArgumentError (ActiveRecord::Associations is not missing constant JoinDependency!):

修正方法はとりあえずgemが対応されるまでは、こんな感じでうまくいきました。
Gemfile

gem "meta_search", '1.1.0.pre'
gem "will_paginate", :git => 'git://github.com/wantful/will_paginate.git'

3.1.0になったのを機にHamlを使っていこうってことで設定方法です。
Gemfile

gem "haml-rails"


hamlオプションを追加してあげるとviewをHamlで生成してくれます。
(オプション追加しなくても大丈夫っぽい。)

$ rails g scaffold dog name:string --haml
      invoke  active_record
      create    db/migrate/20110617222555_create_dogs.rb
      create    app/models/dog.rb
      invoke    test_unit
      create      test/unit/dog_test.rb
      create      test/fixtures/dogs.yml
       route  resources :dogs
      invoke  scaffold_controller
      create    app/controllers/dogs_controller.rb
      invoke    haml
      create      app/views/dogs
      create      app/views/dogs/index.html.haml
      create      app/views/dogs/edit.html.haml
      create      app/views/dogs/show.html.haml
      create      app/views/dogs/new.html.haml
      create      app/views/dogs/_form.html.haml
      invoke    test_unit
      create      test/functional/dogs_controller_test.rb
      invoke    helper
      create      app/helpers/dogs_helper.rb
      invoke      test_unit
      create        test/unit/helpers/dogs_helper_test.rb
      invoke  assets
      create    app/assets/javascripts/dogs.js.coffee
      invoke    css
      create      app/assets/stylesheets/dogs.css
      invoke  css
   identical    app/assets/stylesheets/scaffold.css

10分でSinatraアプリをHerokuにデプロイする

$ mkdir sandbox
$ cd sandbox

以下、3つのファイルを作成します。


app.rb

require 'rubygems'
require 'sinatra'

get '/' do
 "Hello Sinatra"
end


config.ru

# Ruby1.9.2ではロードパスにカレントディレクトリが含まれなくなったので、「'./app'」にする
- require 'app' 
+ require './app' 
run Sinatra::Application


.gems

sinatra


ローカルで動作確認

$ ruby app.rb

http://localhost:4567 にアクセスして、以下のように表示されればOK
f:id:t-taira:20110614193449p:image


herokuにデプロイ

$ git add.
$ git commit -m 'initial commit'.
$ herok create [app name]
$ git push heroku master

VMWare Fusion3上のUbuntu11.04 ServerにRails開発環境をつくる

Server | Ubuntu から、
ubuntu-11.04-server-amd64.iso (CDイメージ)をダウンロードして、ディスクイメージからOSインストール


ssh

$ sudo apt-get install openssh-server

pkg install

$ sudo apt-get install build-essential bison openssl libreadline5 libreadline-dev curlgit zlib1g zlib1g-dev libssl-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev 

samba

$ sudo apt-get install samba

$ sudo smbpasswd -a [username]
$ sudo mkdir /home/samba
$ sudo chmod 777 /home/samba

$ sudo nano /etc/samba/smb.conf 

/etc/samba/smb.conf

workgroup = WORKGROUP
hosts allow = 192.168.1. 127.
[homes]
browseable = no
writable = yes
create mask = 0744
directory mask = 0755
path = /home/samba
guest ok = yes 
share modes = no
$ sudo /etc/init.d/smbd restart

:Source
初心者的なUbuntuサーバの設定 - satake7’s memo

rvm

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile 
$ source .bash_profile 
$ type rvm | head -1
$ rvm install 1.9.2 
$ rvm use 1.9.2 --default
$ gem install rails

:Source
まっさらな Ubuntu 11.04 の環境で Rails3 の動作環境を最低限整える - SmallStyle(2011-05-01)

heroku

$ mkdir .ssh
$ cd .ssh/
$ ssh-keygen -t rsa -C <メールアドレス>
$ gem install heroku
$ heroku keys:add
$ gem install taps

GoogleにホスティングされているJSライブラリを使う

以下のページでHTMLタグを簡単にコピーできるようです。便利!
jQuery google api and other google hosted javascript libraries. - ScriptSrc.net



:Source
GoogleにホスティングされているjQuery等の便利JSタグを一瞬でコピーできる便利サイト「ScriptSrc.net」:phpspot開発日誌


:その他、参考サイト
ASCII.jp:40分で覚える!jQuery速習講座