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));
});

ちなみにgitは以下
https://github.com/schaermu/node-fluent-ffmpeg

node.js フレームワーク/周辺ライブラリまとめ

・WebSocket


socket.io
…webSocketでブラウザの互換性を吸収してくれるライブラリです。


・HTMLテンプレートエンジン


ejs
…erbみたいな感じっすね。


jade
railshamlに影響を与えたテンプレートエンジンだそうです。(hamlの方が先だと思ってた。。。)


haml/hamljs
railshamlライクな文法です。


・動的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書くのに疲れたら使いたい。

・認証

everyauth
Twitter,Facebook以外にも色んなoauthを提供してくれる。何より流れるようなインターフェースが素敵。




他にも何かあったら教えて欲しいです。

・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

rails
haml/sass/(*)

にそれぞれ対応する。
ー(*)…なんだろうか?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)

を追加すると動いた。