Archive for the ‘ruby’ Category

    はてなブックマーク - Rails3 で restful-authentication
    このエントリーをはてなブックマークに追加

    こんにちはヤマモトです。
    rails3の正式リリースもなされ、いよいよ実案件での運用も視野に入り始めてきました。

    今回は、Ruby on Rails3で、restful-authenticationは動くのか、というのを取り上げます。

    restful-authenticationとは、サイトのユーザー認証機構を組み込むのには便利なプラグインです。
    ユーザー登録、ログイン、ログアウト用のviewファイルや、
    ユーザー用モデル生成、メールアクティベート、ログイン保持などの機能を一気に提供してくれるので大変重宝しています。

    まずは、プロジェクトを生成します。
    なお、rubyは1.9.2(RVM)です。

    rails new sample

    (旧 rails sample)
    でプロジェクトが作成されます。

    そして、db:createもせずにとりあえず起動。

    rails s

    (旧 ruby script/server)

    ところが

    Could not find gem 'sqlite3-ruby (>= 0, runtime)' in any of the gem sources.

    のエラー。

    プロジェクト作成時はデフォルトでsqlliteが指定されるのは従来と変わりませんね。
    ということで、config/database.yml内のsqlite表記部分を、postgresへ変更。
    しかし、それでも上記のエラーが出続けます。
    従来であればここを変えればよかったのですが、設定箇所が別のファイルに移ったのでしょうか。
    とりあえず、データベースを指定して作りなおします。

    rails new sample -d postgresql

    すると次のエラーが。

    LoadError (no such file to load -- openssl)

    OpenSSLは使ってないはずですが必要のようですね。

    CentOSを使用したので、
    yum install openssl openssl-devel
    ※debian系は適宜読み替えてください。

    あとはインストールです。

    ruby ~/.rvm/src/ruby-1.9.2-p0/ext/openssl/extconf.rb
    make && make install

    さて、これでようやく
    「Welcome aboard」
    の画面が表示されました。

    では、restful-authenticationを導入してみます。
    導入方法の詳細は様々なページでご紹介されているので詳しくは割愛します。

    まず、restful-authenticationがrails3に対応しているかですが、以下から提供されているようです。
    github.com/Satish/restful-authentication

    状態管理をサポートするacts_as_state_machineや、パスワード再発行に便利なforget_passwordは従来のままで使えそうです。

    aasm

    gem sources -a http://gems.github.com
    gem install rubyist-aasm

    forget_password

    ruby script/plugin install git://github.com/greenisus/forgot_password.git

    そして、ジェネレート。

    rails g authenticated user sessions --include-activation --aasm

    modelやview、controllerが生成されます。

    では、ユーザー登録を行ってみます。

    hostname/signup

    でユーザー登録ページへアクセス。

    すると、

    uninitialized constant UsersController::AuthenticatedSystem

    AuthenticatedSystemが読み込まれてないとのエラーが。
    ここでrails3の洗礼です。
    rails3はlib以下のファイルを自動でロードしてくれません。
    今まではlib以下に作られるauthenticated_system.rbを自動でincludeしてくれていました。
    rails3では、明示的に記述しないといけません。

    記述場所はconfig/initilizer以下にcustom_requires.rbというファイルを作成して

    require 'authenticated_system.rb'

    と記述。

    これでようやくユーザー登録ページが開き、実行することができました。

      はてなブックマーク - OpenOfficeとpopplerを使用した画像変換処理
      このエントリーをはてなブックマークに追加

      またまた山本です。
      以前ご紹介した自社サービスのZENPREの反響が思いのほか大きく、とりあえずほっとしております。
      いいスタートダッシュは切れたので、引き続き新たな機能の実装を続けてまいります。

      今回はZENPREで使用している機能の1つを紹介させていただきます。

      ZENPREではアップロードされたMicrosoftOfficeのPowerPointのデータやPDFを画像変換することで、Flashを通しての配信を可能にしておりますが、
      この時のフローとしては、3つの段階を経ています。

      OpenOffice + JODConverterでppt,pptxファイルをpdfファイルへ変換(省略可)

      poppler(Xpdf)を使用して、pdfファイルをppmファイルへ変換

      ImageMagickを使用して、ppmファイルをjpgへ変換

      つい最近まで、OpenOfficeのバージョンは3.2.0でした。
      このバージョンでは、Office2007の形式である「pptx」も変換可能なのですが、
      1枚目に表示される「クリックしてサブタイトルを入力」というガイドまでも変換されてしまうというバグがありました。
      しかし、最近バージョンが3.2.1にあがりその問題が解消されましたので、晴れて「pptx」にも対応いたしました。

      開発段階においては、2番目のフローである「pdf→ppm」変換をせず、
      「pdf→jpg」変換を行っておりました。
      しかし、この変換方法だと生成される画像の解像度が低いという問題がありました。
      600×480ほどのサイズであれば問題なく、表示もそれに合わせればよいのですが、ZENPREの機能の一つにフルスクリーンモードというのがあり、
      それを使用すると利用者によってはとてつもなく大きいモニターで表示することになり、
      その場合、画像が引き伸ばされぼやけてしまうことになります。

      そこで着目したのがpopplerでした。
      popplerの前身はXpdfであり、pdfをppmという高解像度の画像へ変換することが可能です。

      以下は、ppmに変換せずに生成したjpgとppmに変換した上で生成したjpgの2ファイルです。
      ppm処理しないjpg
      ppm処理したjpg

      前者は粗さが目立ちますが、後者は文字の縁が滑らかなまま表示されています。
      もちろんファイルサイズが大きくなってしまいますが、大した負荷ではないので採用することにしました。

      インストールは、Redhat系をご使用であればyumインストールで使用可能なのですが、
      yumだと肝心のpdfをppmに変換する機能である、「pdftoppm」が含まれてません。

      情報が少なくて、pdftoppmを導入する方法がなかなかわからなかったのですが、
      popplerをyumインストールするのではなく、ソースからインストールすることで解決しました。
      Poppler

      課題としては、全体的に変換に時間がかかるということです。
      pdf変換においても結構時間がかかるのですが、その上にppm変換を挟んでいるのでどうしても短縮が困難です。
      pptの変換サービスとしては有名なところでSlideshareがあると思いますが、
      この変換速度はかなりなものだと思います。

      これに近づけたらと思います。

        はてなブックマーク - プレゼンテーション配信ツール「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