2012年07月25日

仕事中にこっそりあれな動画を楽しむ苦肉の策

先日のOkinawa.rb Meetup! に参加した時に 「Emacsで仕事中にこっそりバレないようにWeb上のあれな動画を見られるなら乗り換えてやりますよ」 って感じのことを言われました。

「無理難題をふっかけて来やがって、こいつは仮に出来ても乗り換えはしないな」 なんて思ったりもしました。 まあこの手の問題に対して「無理」って突き返すのは簡単。

しかし、そういう無理な問題に対しても どうにか比較的近い代替案を大人のやることらしいので、 一応挑戦してみる。

まあ、まず、Emacs上で動画を再生するってのが、 少なくとも通常のEmacs環境だと無理。 でもまあ、Emacsから動画プレイヤーを起動できればいいよねってことにすると 以前に書いた、 やたー。emacs-w3mでリンク先のyoutubeの動画をmplayerを使ってストリーミング再生できたよー で既にyoutubeはそれに対応している。

で、ちょっと調べてみると、 やはりyoutube-dlは他のサイトにもいくらか対応していて その対応サイト一覧を出してみると

$ youtube-dl --list-extractors
youtube:playlist
youtube:user
youtube:search
youtube
metacafe
dailymotion
video.google
video.google:search
photobucket
video.yahoo
video.yahoo:search
DepositFiles
facebook
blip.tv
vimeo
myvideo
comedycentral
escapist
collegehumor
xvideos
soundcloud
infoq
mixcloud
stanfordoc
mtv
generic

こんな感じ。目的のサイトも入っている。

しかし実際にそのサイトの物をDLしようとすると

ERROR: unable to extract video thumbnail

とか怒られるのでぱっちを当てる必要がある。

なんだけど https://github.com/rg3/youtube-dl/issues/370 に丁度いいぱっちがある! まあこれからどう当てるかわからんので手で当てましたけども。 (というかこれに気付かずに自分で同じの書いたけど) Homebrewで入れたやつだとPythonスクリプトがそのまままとめられてるだけなので 簡単にパッチ当てられます。

youtube-dl -Uしたものの場合はzipで固めらてるようなので諦めて Githubからcloneしてきてぱっち当ててmakeしましょう。

で、ぱっちを当てたところで、以前に書いたw3m-play-movieって関数の string-matchのところに目的のサイトのURLに適当にマッチするのを書けばいいはずだけど それはあれ。 どうせなら他にもまとめて対応したいじゃん? (目的のサイトがバレバレだと恥ずかしいしね! 上のぱっちでバレバレだけど)

というわけで、以下のようにその関数を定義する

(defun w3m-play-movie ()
  (interactive)
  (let ((url (w3m-anchor))
        file-name)
    (cond ((string-match (concat "^http.*" (regexp-opt '(".mpg" ".wmv" ".avi" ".flv" ".mp4")) "$") url)
           (call-process "mplayer" nil nil nil "-fs" url))
          ((string-match "^http:\\/" url)
           (message (concat "loading from website... " url))
           (call-process "play-youtube" nil nil nil url))
          (t
           (message "not movie.")))))

うん、対応なんてかっこいいこと言ってたけど、 実際はhttpで始まるURLを渡されたらplay-youtubeってコマンドに投げてるだけだ。

そしてそのplay-youtubeの中身は

#!/bin/bash

mplayer -fs $(youtube-dl -g $1)

こんな感じ。 youtube-dlが動画のURLの取得に失敗したらmplayerも再生に失敗するだけなんで 細かいことは気にしない方針で。

で、ここからが次の大きな問題。 「仕事中にこっそり」って動画でどうやるんでしょうか。

まず、絵じゃなくて文字列を眺めてるんだったら怒られないんじゃね? って発想で Mac(Lionちゃん)で文字だけで素敵に動画を再生しちゃおう☆ で用意した環境を使ってみる。

ということで例のplay-youtubeをこう変える。

#!/bin/bash

CACA_FONT=6x10 CACA_GEOMETRY=100x32 mplayer -vo caca $(youtube-dl -g $1)

CACA_GEOMETRYを半分にしてちょっと小さめに表示してこっそり感をアピール!

とかやってみたけど、予想通りやっぱり、見るに耐えないw というわけで却下。

でも画面を小さく表示するって発想は悪くないよね。 なので普通に再生して縦横のpixelを小さくしたらどうだろう。

#!/bin/bash

mplayer -xy 200 $(youtube-dl -g $1)

よし、これぐらいなら普通に見れるぞ! だけど普通に見れるから何もこっそりじゃないよね! それはよくない! ちなみに100だと今度は小さすぎて見られたもんじゃない! やっぱり映像を流しておいてこっそりってのは無理なんじゃないだろうか。

じゃあもういっそ映像は諦めよう! 音声だけ聞こう!

#!/bin/bash

mplayer -vo null $(youtube-dl -g $1)

って感じ。

まあ、仕事中にそんなもの見るとか不埒なことを考えんなよ、さすがに俺でもしないぞ。

タグ:Emacs MPlayer video
posted by 麦汁 at 14:58 | Comment(0) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする

2012年07月18日

リモートのgitなリポジトリのRails3なアプリのER図を出力するの一応作ったよー

なんとなく俺特になりそうだったので リモートのgitのリポジトリ(githubとかいいよね)に置いている Rails3なアプリのER図を出力するshell script書いてみたよー。 ちなみにMacで動作させる前提。

まず事前に

$ brew install graphviz

という形でgraphvizを放り込みます。 これが多分画像生成関連の何か(ちゃんと調べてない)。

そして

$ gem install railroady

してrailroadyというgemを放り込んでおきます。

これだけで目的の8割ぐらい終わってます。

次にこんなコードを適当にerd.shとかいう名前で保存しておきます。

#!/bin/sh

tmpdir=`uuidgen`
rep=$1

cd /tmp
mkdir $tmpdir
cd $tmpdir
echo "Cloning project..."
git clone $rep > /dev/null 2>&1

dir=`echo $rep | sed -e 's/.*\/\([^\/]*\)\.git$/\\1/'`
cd $dir

echo 'gem "activerecord-nulldb-adapter", :git => "git://github.com/nulldb/nulldb.git"' >> Gemfile
echo "Installing gems..."
bundle install > /dev/null 2>&1

echo "development:\n  adapter: nulldb" > config/database.yml

echo "Generating ER diagram..."
railroady -M | neato -Tpng > models.png
open models.png
sleep 2
cd /tmp
rm -rf /tmp/$tmpdir

そしておもむろに

$ sh erd.sh git://github.com/jpwynn/plupload-rails3-sample-app-heroku.git

とかやると指定したリポジトリのRails3アプリケーションのER図がPreview.appで開かれます。 開いた後にファイルとかはごそっと消してます。

"rake db:migrate" とかそういうのがだるかったので activerecord-nulldb-adapter ってのを利用してます。

ってのを作ったんだけど、 まあ、様々な条件でコケる(rspecとかmongoid使ってるとコケるっぽい)のでクソいけど飽きた。

タグ:ER図 ruby Rails SH git
posted by 麦汁 at 23:48 | Comment(0) | TrackBack(0) | git | このブログの読者になる | 更新情報をチェックする

2012年07月14日

Rails3とsimple_formとjquery_datepickerのお話

ある日、麦汁さんはふと 「そうだ、リハビリのためにblogみたいな何かを作ろう」 なんてことを考えました。

そんなわけでいつものように

$ rails new awesome-blog

と入力してrailsアプリな雛形を作り、その中に移動

$ cd awesome-blog

しました。

そういえば最近はsimple_formなるgemがあって こいつを使うとフォームを書くのが楽らしいぞということで おもむろにGemfileを開いて

gem "simple_form"

などと書き込んで後に 一心不乱に

$ bundle install

などと入力しました。

そして果敢にも

$ rails g simple_form:install

などと入力し、simple_formを利用できるようにしたのです。

それから

$ rails g scaffold Entry date:date title content:text

という風に大胆にもEntryモデルの雛形を作ってしまいました。

そして厳かに "app/views/entries/_form.html.haml" を開いてみると

<%= f.input :date %>

などと書かれているのを確認。 「ああ、これは、year,month,dayの3つのselectが出て来るあのダサくて有名な彼か」 というわけで生意気にも「こいつには頼りたくない」なんて考えました。

「どうせならあの最近流行りのjQueryさんのDatePickerさんを使いたい」 なんて不埒なことを考え始めました。

というわけでgemを調べてみると "jquery_datepicker"なんていうまさしくそいつだという素敵なgemがあるではありませんか。

彼はのんびりしてはいられないと、早速Gemfileに

gem "jquery_datepicker"

と追記しました。

また、このgemがjQueryUIのテーマを必要とするらしいので 面倒臭がりながらも先程と同様に

gem "jquery-ui-themes"

などと追記し、 ゴーバスターズのエンターさんの物真似で「メタウイルス、インストール」などと言いつつ

$ bundle install

というコマンドを実行しました。

そしてjQueryUIが使えるように "app/assets/javascripts/application.js"に

//= require jquery-ui

を追加し、さらにjQueryUIのテーマの一つである"blitzer"が使えるように "app/assets/stylesheets/application.css"に

*= require jquery-ui/blitzer

なんて適当に書き加えてみました。

しかしここからdatepickerのそれをどうやってsimple_formに放り込めばいいのかわかりません。

仕方がないから気軽にsimple_formを拡張することにしました。

まずはこそこそと

$ mkdir app/inputs

なんて叩いてディレクトリを掘ってしまいます。

そして出来上がったディレクトリの中に粛々と "datepicker_input.rb"というファイルを作ってしまいます。

その恐しい中身はというと

class DatepickerInput < SimpleForm::Inputs::Base
  def input
    @builder.send(:datepicker, attribute_name, input_options)
  end

  def input_options
    { :dateFormat => "yy/mm/dd"}
  end
end

なんとこのようになっているのです。

それから再度"app/views/entries/_form.html.erb"をこじ開け

<%= f.input :date %>

という、実にシンプルで慎ましやかな姿から

<%= f.input :date, as: :datepicker %>

などという派手な姿に変えてしまうのです。

ここでようやく思い出したかのように

$ rake db:migrate
$ rails s

と続けざまに二つもコマンドを入力し、 あまつさえWebブラウザから http://localhost:3000/entries/new にアクセスしたのです。

するとすると、どういうことでしょうか。 あの見るに耐えない3つのselectからなるdate_selectのUIがあるはずが、 それは見る影もなく その代わりに美しいjQueryUIのdatepicker様のお姿があるではありませんか。

飽きた。

calendar_date_selectがオワコンらしいから調べてたんでこんなん書いたけど、 これ書くまで jquery-ui-themes ってgemの存在を知らなかったのでラッキーでござる。

posted by 麦汁 at 02:34 | Comment(0) | TrackBack(0) | rails | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。