• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
 
 

http://tinyurl.com/を見て気がついたのですが、paypalのほかにAmazon Honor Systemというのもあるようです。

手軽なマネタイズ方法としてつけることも検討してみよう

posted by Png satoko on Tue 26 Feb 2008 at 07:38

下記URLから入手できます。
http://svn.s21g.com/public/rails/plugins/tinyurl_helper/

仕様

URLを渡すとTinyURLに変換してリンクを作ります。

使い方

  • application_helper.rbでinclude
       1  module ApplicationHelper
       2    include TinyurlHelper
       3  end
    
  • View内で
       1  <%= link_to_tinyurl "http://www.yahoo.co.jp" %>
    

作り方

  1. 類似するプラグインを探してコーディングの検討をつける
  2. script/generateする
       1  script/generate plugin tinyurl_helper
    
  3. 上で生成されたlib/tinyurl_helper.rbを編集
       1  require 'net/http'
       2  
       3  module TinyurlHelper
       4    def link_to_tinyurl(url, html_options = nil)
       5      uri = 'http://tinyurl.com/api-create.php?url=' + url
       6      uri = URI.parse(uri)
       7      tiny_url = Net::HTTP.get_response(uri).body
       8      options = {:title => url, :alt => url}
       9      options = html_options.nil? ? options : options.merge(html_options)
      10      link_to tiny_url, tiny_url, options
      11    end
      12  end
    
  4. テストを書く(アプリテスト、プラグイン単体テスト両方通るように書くと吉)

       1  -
       2  require 'test/unit'
       3  require File.expand_path(File.dirname(__FILE__) + "/../lib/tinyurl_helper")
       4  
       5  class TinyurlHelperTest < Test::Unit::TestCase
       6    include TinyurlHelper
       7  
       8    #dummy link_to
       9    def link_to(name, options = {}, html_options = nil)
      10      [name, html_options[:title]]
      11    end
      12  
      13    def test_link_to_tinyurl
      14      url = 'http://www.yahoo.co.jp/'
      15      tiny_url, title = link_to_tinyurl(url)
      16      assert_equal 'http://tinyurl.com/910', tiny_url
      17      assert_equal url, title
      18    end
      19  
      20    def test_link_to_tinyurl_with_title
      21      url = 'http://www.yahoo.co.jp/'
      22      tiny_url, title = link_to_tinyurl(url, {:title => 'title'})
      23      assert_equal 'http://tinyurl.com/910', tiny_url
      24      assert_equal 'title', title
      25    end
      26  end
    

  5. README, MIT-LICENSEを書く

    • READMEは名前と、概要・使い方を書く
    • MIT-LICENSEは名前だけ変更
  6. 公開用リポジトリにコミット

  7. pluginディレクトリに登録する

Tips

  • プラグインはweb serverを再起動しないとリロードされない
  • helperを使えるようにする方法は2つ
    1. app/helper/application_helper.rbでinclude(上でやった方法)
    2. plugins/tinyurl_helper/init.rbでsendする
         1   ActionView::Base.send :include, TinyurlHelper
      
posted by Png satoko on Tue 26 Feb 2008 at 05:12

今年の目標に、railsのプラグインを作るというのがあるのですが、時間ができたらと言わずに「さっさと/ささっと作れ」という助言をもらったのでささっとやってみました。まずはどいういうものかという初歩的なところから。

Pluginディレクトリ

ここに多く集められています。
http://agilewebdevelopment.com/plugins

様々な種類のプラグイン

プラグインはRailsの機能拡張するものなのですが、下記のように分類できます。

  • Helper系
  • Model/Controller系
    • acts_as_なんとかという名前が多い
      ex. acts_as_taggable
  • Generator系
  • その他
    • 上記のmix
      ex. acts_as_authenticated => model/controller拡張, generator
    • rake taskを作るもの
      ex. annotate_models

作り方how-to

問題

  • プラグインのテスト、アプリのテスト両方のテストを通すようにtestを書くのが煩雑。
  • プラグインの更新を適用するのが面倒
    (gemのように簡単に最新にならないので、手動で削除、再インストールが必要)
posted by Png satoko on Mon 25 Feb 2008 at 13:31

今日、Skypeチャットルームで話されてたんだけど、「digg is really one-day fly spike」(Diggは一日だけの急上昇飛行)なんだそう。もしかしてはてぶそうなのかもですね。今まではなんとなくブックマークサービスとしてだけ見ていましたが、ユーザーの使い方がDiggぽいといえばDiggぽい。だのにブックマークサービスだから、議論とかがしにくい。

ユニークな見方をもらいました。

posted by Png satoko on Tue 19 Feb 2008 at 11:04

シンプルなスクリーンに番号なしの4つのボタンという携帯

modu http://h.hatena.ne.jp/satoko87/9245599875404390893
携帯のエッセンスだけを残したのがModu。

ジャケットを変えるだけで、MP3プレイヤー・普通の携帯電話・GPSナビゲーションシステム等いろんな役目を果たしてくれるなんてステキ!

http://www.modumobile.com/
http://www.technologyreview.com/Infotech/20276/

とりあえず、modulemobileのサイトにアクセスしてみてください。紹介のflashでいろいろインスパイアされます。

そうそうイスラエルのstarupなんです。イスラエルってデバイス系のstarup多い気がします。

posted by Png satoko on Fri 15 Feb 2008 at 06:53

http://www.amazon.com/b?ie=UTF8&node=342429011
詳細は原文で確認してくださいね。news.ycombinatorで紹介されていました(他の課金サービスへのリンクもあります)。

Amazon DevPayとは

http://www.amazon.com/b?ie=UTF8&node=342429011

Amazon DevPay is a simple-to-use billing and account management service that makes it easy for developers to get paid for applications they build on Amazon Web Services.

状況

  • まだlimited beta
  • Amazon S3か、EC2を使ったアプリケーションでなければいけない(順次他のサービスも追加予定とのこと)

お値段

  • No minimum fees and no setup charges
  • 3.0% of the total amount billed
  • $0.30 per bill generated
  • 顧客からお金を集められなかった分については、課金しません
  • Net Liabilityという制度もあり(S3/EC2の支払い金額を合わせてマイナスにならないように補填する制度のようです)

制限

  • USでビジネスを行えること。USの銀行口座を使うこと (ここ不明瞭なので原文を参照ください)

    Sellers of Amazon DevPay applications must be able to do business in the United States. Funds earned through the sale of Amazon DevPay applications can only be withdrawn to U.S. bank accounts.

posted by Png satoko on Fri 15 Feb 2008 at 06:12

rttool 1.0.2.0のgem installに失敗して困ったので記事にしてみます。

RTtoolとは

RTtoolはシンプルな作表ツール。
http://www.rubyist.net/~rubikitch/computer/rttool/

gem installで失敗

   1  gem install rttool
   2  ERROR:  While executing gem ... (Errno::ENOENT)
   3      No such file or directory - /usr/local/bin/rt/rdrt2

ぐぐってルビ吉さんのサイトで解決

下記で解決。tar.gzファイルを落としてインストールすればOKです。
http://www.rubyist.net/~rubikitch/computer/rttool/#3

   1  wget http://www.rubyist.net/~rubikitch/archive/rttool-1.0.2.tar.gz
   2  tar xzvf rttool-1.0.2.tar.gz
   3  cd rttool-1.0.2
   4  ruby setup.rb config
   5  ruby setup.rb setup
   6  ruby setup.rb install

posted by Png satoko on Fri 25 Jan 2008 at 17:26

あすなろとのダブルポストです。

仕事で使ってみたところ、とても簡単にそしてかっこいいグラフが表示できたので紹介します。配置ディレクトリがRoR前提になっていますが、適宜自分の環境に合うように変更してください。
enjoy! ;)

Open Flash Chartサイト

GNU General Public Licenseで公開されています。
http://teethgrinder.co.uk/open-flash-chart/index.php

目標

GoogleFinanceのようなかっちょいいグラフをFlashで表示(下記はキャプチャ画像)
chart
http://finance.google.com/finance?q=google

ダウンロード&解凍

ダウンロードして適当なところに解凍します。
http://teethgrinder.co.uk/open-flash-chart/download.php

ファイルのコピー

解凍したディレクトリ直下のopen-flash-chart.swfと、js/swfobject.jsの2つを下記にコピーします

  • public/open-flash-chart.swf
  • public/javascripts/swfobject.js

viewまたはhtmlを編集します

   1    <% stats[:posts] = [23,44,35,46,78,7] %>
   2  
   3    <%= javascript_include_tag 'swfobject' %>
   4    <div id="chart"></div>
   5    <script type="text/javascript">
   6      var so = new SWFObject("/open-flash-chart.swf", "ofc", "180", "100", "9", "#FFFFFF");
   7      so.addVariable("variables","true");
   8      so.addVariable("y_label_style", 'none');
   9      so.addVariable("x_label_style", "10,#799191,0,2"); //22メモリごとにラベル表示の意。
  10      so.addVariable("x_axis_steps","1"); //メモリ軸
  11      so.addVariable("y_ticks","5,10,2");
  12      so.addVariable("y_min","<%= stats[:posts].min %>"); //最小値
  13      so.addVariable("y_max","<%= stats[:posts].max %>"); //最大値
  14      so.addVariable("x_labels","Mon,Tue,Wed,Thurs,Fri,Sat,Sun"); //x軸ラベル
  15      so.addVariable("values", "<%= stats[:posts].join(',') %>"); //  16      so.addVariable("line_hollow", "3,#799191,This week,10,5"); //グラフの種類
  17      so.addVariable("bg_colour", "#F0F0F0");
  18      so.addVariable("x_axis_colour", "#FFFFFF");
  19      so.addVariable("x_grid_colour", "#FFFFFF");
  20      so.addVariable("y_axis_colour", "#FFFFFF");
  21      so.addVariable("y_grid_colour", "#FFFFFF");
  22      so.addVariable("tool_tip","#x_label#:#val#");
  23  
  24      so.addParam("allowScriptAccess", "sameDomain");
  25      so.write("chart");
  26    </script>

posted by Png satoko on Wed 23 Jan 2008 at 10:41

(追記) 経緯:attr_readonlyを追加しました。

はじめに、counter_cacheの使い方

例えば、Blogテーブルにarticles_countカラムを持つことで、blog.articles.sizeをキャッシュし、増減はrailsが自動でやってくれます。 こんな感じ。

   1  class Article < ActiveRecord::Base
   2    belongs_to :blog, :counter_cache => true

経緯

Rails2.0からカウンターキャッシュカラム(ex Blog#articles_count)がどうやらattr_readonlyになったようで、migration内でupdate_attributeで数が更新できなったので、困った。エラーもでなくて、データで確認すると更新できてない状態。

   1  NG for Rails2.0
   2   blog.update_attribute :articles_count, total 

本題、migrationでの注意

  • カラム名は複数形_count(ex. articles_count)がデフォルト
  • カラム名のカスタマイズは、:counter_cache => :my_custom_counter
  • カラムはdefault => 0
  • 既存のテーブルでcounterカラムを追加する場合はupdate_countersを使う

   1    def self.up
   2      add_column :blogs, :articles_count, :integer, :default => 0
   3  
   4      Blog.find(:all).each do |blog|
   5        Blog.update_counters(blog.id, :articles_count => blog.articles.count)
   6      end

reference

http://josh.the-owens.com/archives/2007/11/03/rails-edge-change-how-to-add-a-counter-cache-to-an-existing-db-table/

posted by Png satoko on Tue 15 Jan 2008 at 00:40 with 2 comments

あすなろとダブルポストです。+最後の感想ちょこっと変更しました。

まとめ

CtonrollerやActionを指定して処理を実行できます

after_contoroller_action
before_contoroller_action

ex. after_blog_save
→ BlogController#save終了後処理をする。

流れをわかるためのもがき

  • ぐぐってヒントを見つける。
    [Rails][cache] Sweeper
    http://d.hatena.ne.jp/meritdemerit/20070607/p2
    なんとなくはわかるけど、やっぱりよくわからないのでソースを見ることにする。

  • Rails Referenceで検索する。右上にファイルの場所があるので確認。
    vendor/rails/actionpack/lib/action_controller/caching.rb
    http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

  • ソースを読む:cache_sweeperキーワード

       1    def cache_sweeper(*sweepers)
       2      return unless perform_caching
       3      configuration = sweepers.extract_options!
       4      sweepers.each do |sweeper|
       5        ActiveRecord::Base.observers << sweeper if defined?(ActiveRecord) and defined?(ActiveRecord::Base)
       6        sweeper_instance = Object.const_get(Inflector.classify(sweeper)).instance
       7        if sweeper_instance.is_a?(Sweeper) 
       8         around_filter(sweeper_instance, :only => configuration[:only])
       9        else
      10          after_filter(sweeper_instance, :only => configuration[:only])
      11        end
      12      end
      13    end
    

  • ソースを読む:after処理のエントリポイント

       1   def after(controller)
       2      callback(:after)
       3      # Clean up, so that the controller can be collected after this request
       4      self.controller = nil
       5    end
    

  • ソースを読む:after_controller_action処理の呼び出し

       1    def callback(timing)
       2      controller_callback_method_name = "#{ timing}_#{controller.controller_name.underscore}"
       3      action_callback_method_name     = "#{controller_callback_method_name}_#{controller.action_name}"
       4      send!(controller_callback_method_name) if respond_to?(controller_callback_method_name, true)
       5      send!(action_callback_method_name)     if respond_to?(action_callback_method_name, true)
       6    end
    

最後の、"send!(action...:自分にメソッドが定義されていたら送る"ってところが実際の呼び出し。
愛が足りないながんばろ。

posted by Png satoko on Mon 14 Jan 2008 at 06:32
Contents
寄付の募り方
シンプルなHelperプラグインを書く:TinyURLHelper
Railsプラグインとは・その問題点
はてぶ = Diggなのかも
Modu:様々なジャケットで機能を追加・拡張できる携帯
Amazon課金サービス:Amazon DevPay
Gem install rttoolに失敗する:ルビ吉さんのところからインストールして解決
GoogleFinanceライクなOpen Flash Chartを使う
既存のモデル/テーブルでcounter_cacheを使う:update_counters
Sweeperを調べる:ControllerやActionを指定して処理する
Comments
KingofSmack: Here also good reads for this mobile applicatio... '14-5
satoko: stackoverflowでも同じエラーを挙げている人がいたので、1.3でアップロードしたよっ... '10-12
ujihisa: :%s/blog/glob/g '10-7
satoko: しゅが〜様 返事が遅くなって申し訳ありません。また、投稿百景ご購入ありがとうございます。 ... '09-10
しゅが~: こんにちは。投稿百景を発売日翌日から利用しています。本当にいいAppを作っていただきました。罫... '09-10
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ