2011/02/03


最近phantomjsなんて物が出てきて結構便利そうなのでいろいろと遊んでます。
PhantomJS: 「最小限なheadlessのWebKitベースのJavaScriptツール」 - karasuyamatenguの日記

headless=スクリーンがない=コマンドと考えればいい。要はブラウザから画面と取り除いてJavaScriptによるスクリプティングを可能にしたコマンドツール。逆に言うとDOM+JavaScript+Networkingをコマンドにしたもの。...

http://d.hatena.ne.jp/karasuyamatengu/20110126/1296066287
phantomjs - Project Hosting on Google Code

PhantomJS is a minimalistic, headless, WebKit-based, JavaScript-driven tool. It has native support f...

http://code.google.com/p/phantomjs/
ただちょっと改造したいとか、それだけの為にQt入れたくないよーとか、staticビルドすんのに4時間もかかるのかよ!とかお嘆きの方もいらっしゃると思ったので...

phantomjs を webkitgtk+ でうごかしたらいいんじゃね、とおもってやってたけど、コンパイルに必要なモジュールおおすぎてあきらめたless than a minute ago via Echofon



QtWebKitでなく、webkitgtk+で実装してみました。
mattn/specterjs - GitHub

SpecterJS is a minimalistic, headless, WebKit-based, JavaScript-driven tool.

https://github.com/mattn/specterjs
ほとんどphantomjs互換です。phantomjsのphantomは幽霊って意味だったので、妖怪という意味のspecterを使いspecterjsと名付けました。
ただまだ制限があって、renderで扱えるのはpdfのみです。png出力にはまだ対応出来ていません。これはいずれやります。おそらくcairoとGtkPrintContext使えばいけるかと思います。
次にrenderで使用する際のviewportSizeが正しく機能していません。
それ以外は動くのでphantomjsについているサンプルの殆どが動きます。
ちなみに
if (specter.state.length === 0) {
    specter.state = 'mcdonalds';
    specter.open('http://www.mcdonalds.co.jp/menu/regular/index.html');
else {
    [].forEach.call(document.querySelectorAll('ul.food-set>li img'),
        function(n) { console.log(n.getAttribute('alt')); });
    specter.exit();
}
で、マクドナルドのメニュー一覧を出すことも出来ちゃいます!
よろしかったら遊んで下さい。
Posted at by



2011/02/01


このご時世にperlを選ぶ理由ねー。
プログラミング言語人気TOP10の簡易解説

用途的にPythonやRubyと被るので、今あえてPerlを取る理由というのが個人的には思い浮かばない。生粋のPerl使いならきっと流暢な解答を用意してくれると思う。

http://www.mwsoft.jp/column/program_top10.html
僕が思うに、perlは至らなすぎてるんだと思う。素の状態だとほんとに至らない感がある。言語の完成度の目標値が他の言語と違ってる。つまりperlがここを完成形と値付けている時点で他の言語と比較対象でなくなっている気がするんですよ。でもperlはこの状態から他の言語と同じレベルまで何かを引き上げて肩を並べられる所が凄い。それってつまりはCPANモジュールなんですよね。逆に言えばCPANモジュールが無いとおそろしく膨大なコードを書かないといけないし、そんなコードだれもメンテしたくないんだけどperlはそれがうまくドッキング出来る様にperl monger達がちゃんと教育されている。一見簡単そうな事を疎結合なCPANモジュールでつなぎ合わせる、そんな教育が出来ている。perl monger同士も良い刺激のやりとりがあるし、つまりは上手いこと糊を貼る為のノリシロが出来上がってるんだろね。
そんでもって皆が思ってる程馴れ合ってないと思うよ。
(まぁ僕は一度もYAPC::AsiaとかShibuya.pmに参加したこと無いんだけどね)

これが文化って奴なんかもしれんなー。
Posted at by



2011/01/22


go-gtk meets webkit!先日書いたのですが、ようやく形になってきたのでご報告。
Go言語でGTKを扱えるライブラリ、go-gtkのWidget上にwebkitブラウザをembed出来るライブラリを書きました。
mattn/go-webkit - GitHub

Go bindings for WebKit

https://github.com/mattn/go-webkit/
使い方もgo-gtkのWidgetと同じです。
簡単なサンプルだとこう書けます。
package main

import "os"
import "gtk"
import "webkit"

func main() {
    gtk.Init(nil)
    window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL)
    window.SetTitle("webkit")
    window.Connect("destroy", gtk.MainQuit, nil)

    swin := gtk.ScrolledWindow(nil, nil)
    swin.SetPolicy(gtk.GTK_POLICY_AUTOMATIC, gtk.GTK_POLICY_AUTOMATIC)
    swin.SetShadowType(gtk.GTK_SHADOW_IN)

    webview := webkit.WebView()
    webview.Connect("load-committed", func() {
        entry.SetText(webview.GetUri())
    }, nil)
    swin.Add(webview)

    window.Add(swin)
    window.SetSizeRequest(600, 600)
    window.ShowAll()

    proxy := os.Getenv("HTTP_PROXY")
    if len(proxy) > 0 {
        soup_uri := webkit.SoupUri(proxy)
        webkit.GetDefaultSession().Set("proxy-uri", soup_uri)
        soup_uri.Free()
    }
    webview.LoadUri("http://mattn.kaoriya.net/")

    gtk.Main()
}
簡単ですね!
go言語はWebサーバが簡単に書けるライブラリがたくさんあります。web.gotwisterを使えばfotofloみたいなサイトも簡単に書けます。これ、コンパイルされた実行モジュールで動いてるんですよ。かっこいいすよね。
garyburd/fotoflo - GitHub

This project is the source for fotoflo.info

https://github.com/garyburd/fotoflo
こういったWebサーバと埋め込みブラウザを使った1つのアプリケーションを提供出来る様になるって事です。面白いですね。
ぜひ楽しいアプリケーションを作ってみて下さい。
Posted at by