node.js - mp3 再生時間取得
fluent-ffmpeg。というライブラリを使った。
これを使えば音楽ファイルのメタ情報を取得出来る。
mp3以外もいけそう(未テスト)
npmが入っていれば以下でインストール
npm install fluent-ffmpeg
gitのexample通り書くとこんな感じ。
var ffmpegmeta = require('../lib/fluent-ffmpeg').Metadata; // make sure you set the correct path to your video file ffmpegmeta.get('/path/to/hoge.mp3', function(metadata) { console.log(require('util').inspect(metadata, false, null)); });
node.js フレームワーク/周辺ライブラリまとめ
・HTMLテンプレートエンジン
・ejs
…erbみたいな感じっすね。
・jade
…railsのhamlに影響を与えたテンプレートエンジンだそうです。(hamlの方が先だと思ってた。。。)
・haml/hamljs
…railsのhamlライクな文法です。
・動的CSS
・less
…ほぼsassと同じ感じです。ただjavascriptのシンタックスを使えるようです。
・stylus
…lessよりももっと短く書けます。ただここまでくるとあまり変わりないかも。
文法はlessがnestでstylusがindentなのかな?
・フレームワーク
・express
…sinatoraライク。簡単なルーティングとViewは分けられるようになる感じ。
・express-on-railway
…railsライク。MVC全て入ってます。ルーティングやヘルパーなども入ってます。(expressベースで作られてるっぽい)
・javascript
・coffee-script
…お馴染みcoffee-script。javascript書くのに疲れたら使いたい。
・node.js入門終えての感想
・デザイナーの人もlessやstylus覚えた方が生産性上がるかも。
必須ではないけどメリットは
・短く書くことができる <- 関数や変数、データ構造を使えるようになるため
・敷居も高くない <- cssの文法がちょろっと変わっただけ + javascriptの関数も使えるようなので(stylusに関しては分かりません)
・イベント駆動について
・インクリメンタルに開発してたらすぐスパゲッティになりそう
いやーにしてもnode.js成長早いなー。
Haskell - Yesod - wai-handler-devel でスクリプト言語のようにデバッグする
wai-handler-develというモジュールを使うと、変更を加えると自動的にコンパイル・リロードされ(?)迅速にデバッグ・開発が出来る。
yesodとも相性は抜群だ。
wai-handler-devel - hackage
-- HelloWorld.hs {-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses,TemplateHaskell, OverloadedStrings #-} module HelloWorld where import Yesod -- routing data HelloWorld = HelloWorld mkYesod "HelloWorld" [parseRoutes| / HomeR GET |] instance Yesod HelloWorld where approot _ = "" getHomeR :: Handler RepHtml getHomeR = defaultLayout [whamlet|Hello World!|] withHelloWorld f = toWaiApp HelloWorld >>= f
というファイルをwai-handler-develで動かす。
wai-handler-devel
なので
wai-handler-devel 3000 HelloWorld withHelloWorld
とすると動く
Haskell - Yesod - レイアウトを外部ファイルにする
YesodにはShakespeareanTemplatesという物がある。
web
HTML/CSS/JavaScript
yesod
Hamlet/Cassius|Lucius/Julius
にそれぞれ対応する。
ー(*)…なんだろうか?coffee-scriptよりは素直な文法だ。
随分洒落た仲間達だが、この中のHamletで作られたレイアウトを外部ファイルにするのにハマった。
-- HelloWolrd.hs {-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses,TemplateHaskell, OverloadedStrings #-} module HelloWorld where import Yesod -- configure myLayout :: GWidget s HelloWorld () -> GHandler s HelloWorld RepHtml myLayout widget = do pc <- widgetToPageContent widget -- hamletToRepHtml hamletToRepHtml $(hamletFile "hamlet/default-layout.hamlet") -- routing data HelloWorld = HelloWorld mkYesod "HelloWorld" [parseRoutes| / HomeR GET |] instance Yesod HelloWorld where approot _ = "" defaultLayout = myLayout getHomeR :: Handler RepHtml getHomeR = defaultLayout [whamlet|Hello World!|] withHelloWorld f = toWaiApp HelloWorld >>= f
-- hamlet/default-layout.hamlet !!! <html> <head> <title>#{pageTitle pc} <meta charset=utf-8> <style>body { font-family: verdana } ^{pageHead pc} <body> <article> ^{pageBody pc}
とすると
[1 of 1] Compiling HelloWorld ( HelloWorld.hs, interpreted ) HelloWorld.hs:18:23: Not in scope: `hamletFile' Failed, modules loaded: none.
と出る。どうやらhamletFileをインポートしなければいけないようだ。
ググっても資料が見つからないので色々試してみると
Text.Hamlet
というモジュールが関係あるようだ。というわけで修正し、
import Yesod import Data.Text (Text) import qualified Data.Text as T import Text.Hamlet (HtmlUrlI18n, ihamlet,hamletFile) import Text.Blaze (toHtml) import Text.Blaze.Renderer.String (renderHtml)
を追加すると動いた。