Posts Tagged ‘ruby’

    はてなブックマーク - rails と jquery treeview でディレクトリツリーをらくらく実装する
    このエントリーをはてなブックマークに追加

    ども、Fusic 河野です。
    だいぶ久しぶりですね。

    今度の rubykaigi2011 に参加させて頂くこととなりました!
    会場で見かけたら、ぜひお気軽にお声をかけてくださいませ。

    [rubykaigi2011]
    rubykaigi.org/2011/

    それと、もう一つ告知です。
    来る7月28日(木)、福岡で活動している Androidの会福岡支部九州GTUG
    HTML5+α福岡iDevQ、そして、AppleKnight の4つのコミュニティが
    福岡県Ruby・コンテンツ産業振興センターに集結し、同時に勉強会、懇親会を行います。

    ご興味のある方は、ぜひともご参加ください!!
    参加登録は下記のリンク先より facebook にて参加表明をお願いいたします。

    [futuresync]
    futuresync.jp/

    さて、わたくし、前回の記事でも書きましたが、主に ruby on rails を
    やっており、ZENPRE の iPhone アプリを担当させていただいてます。

    今回とあるお客様の rails 案件にて、ツリービューを作る必要がありました。
    一から作ろうかと思っていたところ、jquery ui の treeview を見つけ、
    使ってみたので、簡単なサンプルとともにご紹介をします。

    いやー、それにしてもコレ凄く便利です!!

    まずは、バージョン確認です。

    $ ruby -v
    ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]
     
    $ rails -v
    Rails 3.0.9

    rails のプロジェクトを作成します。

    $ rails new treeview_test
    $ cd treeview_test/
    $ rm public/index.html

    prototype.js を削除ります。
    サヨナラ〜、お元気で〜♪

    $ vim Gemfile
     
    gem 'jquery-rails'
     
    $ rails g jquery:install

    ツリービューを表示するためのコントローラを作成します。

    $ rails g controller Treeviews index
    $ vim routes.rb
     
      root :to => "treeviews#index"

    そして、本日の主役のご登場!
    jquery treeview を下記よりダウンロードします。
    bassistance.de/jquery-plugins/jquery-plugin-treeview/

    js や css、jpg などを rails の各ディレクトリにコピーします。
    画像は、images に “treeview” というディレクトリを
    作成し、そこにコピーしています。
    そして、jquery.treeview.css に記載されている画像のパスを
    ちょっと変更します。

     images/xxxx → ../images/treeview/

    treeview を取り込みます。

    $ vim app/views/layouts/application.html.erb
     
    <!DOCTYPE html>
    <html>
    <head>
      <title>TreeviewTest</title>
      <%= stylesheet_link_tag :all %>
      <%= javascript_include_tag :defaults %>
      <%= javascript_include_tag 'jquery.treeview' %>
      <%= javascript_include_tag 'jquery.treeview.edit' %>
      <%= javascript_include_tag 'jquery.treeview.async' %>
      <%= csrf_meta_tag %>
    </head>
    <body>
     
    <%= yield %>
     
    </body>
    </html>

    ツリービューを表示するため view を書き換えます。

    $ vim app/views/treeviews/index.html.erb
     
    <script type="text/javascript">
    $(document).ready(function(){
      $("#example").treeview({});
    });
    </script>
     
    <ul id="example" class="filetree">
    	<li><span class="folder">Folder 1</span>
    		<ul>
    			<li><span class="file">Item 1.1</span></li>
    		</ul>
    	</li>
    	<li><span class="folder">Folder 2</span>
    		<ul>
    			<li><span class="folder">Subfolder 2.1</span>
    				<ul>
    					<li><span class="file">File 2.1.1</span></li>
    					<li><span class="file">File 2.1.2</span></li>
    				</ul>
    			</li>
    			<li><span class="file">File 2.2</span></li>
    		</ul>
    	</li>
    	<li class="closed"><span class="folder">Folder 3 (closed at start)</span>
    		<ul>
    			<li><span class="file">File 3.1</span></li>
    		</ul>
    	</li>
    	<li><span class="file">File 4</span></li>
    </ul>

    完成です!!
    いやー、ほんとめちゃくちゃ簡単ですね!!
    まー、これだけだと寂しいのとせっかくの rails も意味がないので
    rails にディレクトリ一覧を返す関数を作成し、ajax 使って
    ディレクトリ階層を動的に表示できるように変更します。
    おー!rails っぽいですね!

    routes にパスを追加します。

    $ vim config/routes</code>
     
      match '/treeviews/get_dir_list' => 'treeviews#get_dir_list'

    さっきの view を書き換えます。

    $ vim app/views/treeviews/index.html.erb
     
    <script type="text/javascript">
    $(document).ready(function(){
      $("#example").treeview({});
      $("#example2").treeview({
    		url: "<%= treeviews_get_dir_list_path %>"
      });
    });
    </script>
     
    <h4>通常のツリービュー表示</h4>
     
    <ul id="example" class="filetree">
    	<li><span class="folder">Folder 1</span>
    		<ul>
    			<li><span class="file">Item 1.1</span></li>
    		</ul>
    	</li>
    	<li><span class="folder">Folder 2</span>
    		<ul>
    			<li><span class="folder">Subfolder 2.1</span>
    				<ul>
    					<li><span class="file">File 2.1.1</span></li>
    					<li><span class="file">File 2.1.2</span></li>
    				</ul>
    			</li>
    			<li><span class="file">File 2.2</span></li>
    		</ul>
    	</li>
    	<li class="closed"><span class="folder">Folder 3 (closed at start)</span>
    		<ul>
    			<li><span class="file">File 3.1</span></li>
    		</ul>
    	</li>
    	<li><span class="file">File 4</span></li>
    </ul>
     
     
    <h4>sync させたツリービュー表示</h4>
    <ul id="example2" class="filetree"></ul>

    treeview の url に先ほど routes に追加したパスを記載します。

    controller もゴニョゴニョと追加します。

    $ vim app/controllers/treeviews_controller.rb
    class TreeviewsController < ApplicationController
     
      def index
      end
     
      def get_dir_list
        root_flg = (params["root"] == "source") ? true : false
        path = "./"
        path = params["root"] unless root_flg
        arry = []
        d = dir_list(path, arry)
        render :json => arry || [], :layout => false
      end
     
    protected
      def dir_list(path, arry=[], root_flg=false)
        Dir.glob("#{path}/*").map do |d|
          classes = "file"
          classes = "folder" if FileTest.directory?(d)
          hasChildren = (FileTest.directory?(d)) ? true : false
        	h = {"id" => d, "text" => File.basename(d), "path" => File.dirname(d), "expanded" => false, "classes" => classes, "hasChildren" => hasChildren, "children" => []}
          arry << h
        end
        arry
      end
     
    end

    dir_list() の関数でディレクトリ情報の hash を作成し、view 側に json で返します。
    返された json を treeview 側が解析してツリービューを表示します。
    返す hash の id のところがミソでして、ここにパスを記載していると
    treeview にてディレクトリを選択された場合、params["root"] に選択された
    ところのパスが渡されます。
    一番上のルートの場合には、params["root"] には、”source” という文字が渡ってきます。

    今回もいつもの如くソースは github にあげてます。
    また、サンプルをここに置いてますので実際の動作を確認できます。
    今回始めて dotcloud を使ってみました。
    これまためちゃくちゃ便利ですねー!
    dotcloud で rails を動かす方法とかは、また次回にでも、デモ。

    それでは、良い rails ライフを〜。

    [ソース]
    github.com/sora0513/TreeViewTest

    [デモ]
    8befe980.dotcloud.com/

      はてなブックマーク - プレゼンテーション配信ツール「ZENPRE」のご紹介
      このエントリーをはてなブックマークに追加

      こんにちは。
      最近、これから紹介するサービスの対応に追われ続けている山本です。

      8/3(火)に、Fusicの新サービス「ZENPRE」をOPENしました。
      今回は、そのZENPREのご紹介や特徴について書かせていただきます。

      ZENPREは、スライド資料と動画が同時に配信できるプレゼンテーションツールです。
      Ustreamが身近に使われるようになった昨今、全国で行われるイベントの模様がお気軽に配信・閲覧できるようになりました。
      勉強会やセミナーの様子も配信される機会も増え、主に都心部でしか行われない貴重な勉強会でも遠方にいながらにして擬似的に参加できるようになりました。
      しかし、専用のカメラ機材を使って中継される稀なケースを除き、配信される映像の解像度は低く、スクリーンに映し出された資料の解読が困難なことがなかったでしょうか。

      当サービス「ZENPRE」では、資料と動画を別画面に分けて表示します。そのため資料部分の可読性は一気に向上します。
      また、配信する方のページ操作がそのまま受信する方のページに反映されるため、リアルタイム性が保持されます。
      さらにチャット機能も搭載しておりますので、発表の際の気になった発言もすぐ質問ができ発表者や自分以外の参加者とのコニュニケーションが可能です。

      発表の際に、受信する方が見る画面サンプルを掲載いたします。

      画面は3つの領域に分かれます。
      左側が資料を表示する領域です。この部分が、発表者のページ操作に同期し自動でページが切り替わります。自分で操作することはできません。
      右側上部が動画再生領域です。Ustreamを通した現地の様子が閲覧できます。
      右側下部がチャット領域です。

      これらサービスの利用には、発表者に資料の登録をしてもらう必要があります。
      セミナー等で発表することが決まり、資料の作成も完了したらZENPREに資料を登録してください。
      また、動画を配信するために、UstreamのチャンネルIDも同時に登録しておきます。

      実際に発表の日時になり、自分の番になったらZENPREの配信用画面を会場のスクリーンに映し出します。
      配信用の画面サンプルは以下になります。

      ほぼ受信用の画面と同じですね。
      唯一違うのは、赤色で強調した部分のページ送りボタンが付いていることです。
      「次ページ」ボタンを押すことで、自身の画面のスライドが次ページへ移動するとともに、受信者の画面にも伝わり、次ページが表示されます。
      もちろん「前ページ」ボタンで前ページへ移動し、ページ数の指定もすることができます。
      また、配信用画面には動画は不要というケースもあるため、資料部分のみフルスクリーンで表示することも可能です。

      公開が終了した後は、受信者画面でもページの操作ができるようになり、後々の資料として活用することもできます。

      ページ操作に関しては、この配信用画面から操作する以外にもスマートフォンアプリを利用して行うことができます。
      OPENに合わせて、iPhone用アプリとAndroid用アプリを用意しました。
      どちらのアプリも全く同じ機能を持っているのですが、iPhoneアプリの画面を以下に掲載いたします。

      ページの操作はフリック(画面を指でスライドさせる動作)で行います。
      直感的に、かつ、リモコン感覚でページの操作が可能になります。

      他にも、
      ・新着ニュースの閲覧
      ・過去に配信した資料の閲覧
      がアプリで可能です。

      AppStore、もしくは、AndroidMarketで「ZENPRE」と検索してください。
      無料でダウンロード可能です。

      以上の機能が、すべて無料で利用できます。
      今後、より多くの人に参加してほしい勉強会やセミナーがございましたら、ぜひともZENPREをご活用ください。

      次回は、ZENPREを支えている技術についてご紹介したいと思います。

      ZENPRE
      zenpre.net

      Fusic によるZENPRE紹介
      fusic.co.jp/product/zenpre.html

      ZENPRE on twitter
      twitter.com/ZENPRE