2010/10/30


  • 人が増える
  • サーバが落ちる
  • サーバが落ちる
  • イルカ昇天画像
  • グリーンピースから(以下略
  • Facebook婚
  • Facebook離婚
  • 改変リンク
  • ネタパクリ疑惑
  • 闇プログラマ(以下略
  • 2000人くらいフォローしないと観測範囲が(以下略
  • 勝手にリンク禁止
  • 勝手にフォロー禁止
  • 勝手に「いいね!」禁止
  • はま○やという人が「こんにちわ、こんにちわ」(以下略
  • はせ○わようすけという人が「Facebookの壊し方」をノートに(以下略
  • ○ぬがわまさとという人がXSS(以下略
  • Facebookで動くボット登場
  • ボットと知らずに恋する人現る
  • Facebook版ふぁぼったー登場
  • ダッシュボードに大量の「なるほど5時じゃねーか」
  • 勝手に「いいね!」(以下略
  • FacebookをFBって略すな
  • 認証APIの大胆な変更
  • サポートがユーザに「君らはクライアントの半分を殺した」と言われる
Posted at by



2010/10/28


Vimの英単語の意味を考えると、「Vimでソープ」とかかなりイヤラシイですが、ぜんぜんちがうよ!
VimでSOAP通信を実現しました。
Gistの様なサービスでIdeoneというのがあるんですが、これまでPure VimscriptでGist、Codepadと制覇してきたので、よしIdeoneも...と思ってAPIドキュメントに目を通してみたら、なんとSOAP通信ではないですか!

でもくじけません!負けません!
頑張ってSOAP通信しました。
mattn's ideone-vim at master - GitHub

vimscript for ideone

http://github.com/mattn/ideone-vim/
:Ideone -r
でideone上で実行し :Ideone -p
でprivate投稿となります。Gistと同じ様に使えます。ソースコードのメイン部はこんな感じ。
前に作っていた「webapi-vim」というスクリプト群に含まれる「xml.vim」に少し手をいれましたが、かなり良い仕事をしてくれています。

ideone-vimについてはSOAPのXMLを自前で作ってますが、本来WSDLからインタフェースを作れるのがSOAPの魅力ですね。
なのでさらに戦ってみました!

soap.vimというのをwebapi-vimに追加しました。
これを使うと関数を定義しなくとも、以下の様にwsdlを読み込ませるだけでgetLanguagesという関数が呼び出せます。
let api = soap#proxy("http://ideone.com/api/1/service.wsdl")
let langs = api.getLanguages("username", "password")
for key in sort(keys(langs))
  echo key."=".langs[key]
endfor
ideoneのアカウントを取って実行すると(ideoneのパスワードはAPI専用のパスワードになります)
1=C++ (gcc-4.3.4)
10=Java (sun-jdk-1.6.0.17)
101=Visual Basic .NET (mono-2.4.2.3)
102=D (dmd) (dmd-2.042)
104=AWK (gawk) (gawk-3.1.6)
105=AWK (mawk) (mawk-1.3.3)
106=COBOL 85 (tinycobol-0.65.9)
107=Forth (gforth-0.7.0)
108=Prolog (gnu) (gprolog-1.3.1)
11=C (gcc-4.3.4)
110=bc (bc-1.06.95)
111=Clojure (clojure 1.1.0)
112=JavaScript (spidermonkey) (spidermonkey-1.7)
114=Go (gc-2010-07-14)
115=Unlambda (unlambda-2.0.0)
116=Python 3 (python-3.1.2)
117=R (R-2.11.1)
118=COBOL (open-cobol-1.0)
119=Oz (mozart-1.4.0)
12=Brainf**k (bff-1.0.3.1)
121=Groovy (groovy-1.7)
122=Nimrod (nimrod-0.8.8)
123=Factor (factor-0.93)
124=F# (fsharp-2.0.0)
125=Falcon (falcon-0.9.6.6)
13=Assembler (nasm-2.07)
14=CLIPS (clips 6.24)
15=Prolog (swi) (swipl 5.6.64)
16=Icon (iconc 9.4.3)
17=Ruby (ruby-1.9.2)
19=Pike (pike 7.6.86)
2=Pascal (gpc) (gpc 20070904)
21=Haskell (ghc-6.8.2)
22=Pascal (fpc) (fpc 2.2.0)
23=Smalltalk (gst 3.1)
25=Nice (nicec 0.9.6)
26=Lua (luac 5.1.4)
27=C# (mono-2.8)
28=Bash (bash 4.0.35)
29=PHP (php 5.2.11)
3=Perl (perl 5.12.1)
30=Nemerle (ncc 0.9.3)
32=Common Lisp (clisp) (clisp 2.47)
33=Scheme (guile) (guile 1.8.5)
34=C99 strict (gcc-4.3.4)
35=JavaScript (rhino) (rhino-1.6.5)
36=Erlang (erl-5.7.3)
38=Tcl (tclsh 8.5.7)
39=Scala (scala-2.8.0.final)
4=Python (python 2.6.4)
45=Assembler (gcc-4.3.4)
5=Fortran (gfortran-4.3.4)
54=Perl 6 (rakudo-2010.08)
6=Whitespace (wspace 0.3)
62=Text (text 6.10)
7=Ada (gnat-4.3.2)
8=Ocaml (ocamlopt 3.10.2)
9=Intercal (c-intercal 28.0-r1)
error=OK
languages=
おぉぉぉぉぉぉぉぉぉぉぉぉぉ...
いろいろ出来る気がしてきましたね!ただ今は戻り値は全てstringで扱ってたりするので実用的ではありません。この辺は今後、ideone意外のサービスで確認しながら改良していきます。

俺は一体何と戦っているんだ!
Posted at by



2010/10/10


PerlのGrowlライブラリって色々ある訳ですが、誰かが書いたGrowlするアプリのコードを実行しようとした際にWindowsやLinuxで動かないと少し悲しくなります。
そこでGrowl::Anyってのがあればいいんじゃね?って事で書いてみました。
Mac::Growl、notify-send、Desktop::Notify、Net::GrowlClient、Growl::GNTPのどれかがインストールされていれば使えます。
mattn's p5-Growl-Any at master - GitHub

perl module that provide any growl application

http://github.com/mattn/p5-Growl-Any
今日はこれを使って、twitterのhome_timelineをGrowlするスクリプトを書いてみました。
#!perl

use strict;
use warnings;
use Config::Pit;
use Encode;
use Growl::Any;
use Net::Twitter::Lite;

my $config = pit_get("twitter-growler");
unless ( $config->{access_token_secret} ) {
    $config = pit_get(
        "twitter-growler",
        require => {
            consumer_key    => "YOUR_CONSUMER-KEY",
            consumer_secret => "YOUR-CONSUMER-SECRET",
        }
    );
    my $nt = Net::Twitter::Lite->new( %{$config} );
    $| = 1;
    print "Authorize this app at:\n ", $nt->get_authorization_url,
      "\nAnd enter the PIN: ";
    my $pin = <STDIN>;
    chomp $pin;
    my ( $access_token, $access_token_secret, $user_id, $screen_name ) =
      $nt->request_access_token( verifier => $pin );
    $config->{access_token}        = $access_token;
    $config->{access_token_secret} = $access_token_secret;
    pit_set( "twitter-growler", data => $config );
    exit;
}

my $nt = Net::Twitter::Lite->new( %{$config} );
$nt->access_token( $config->{access_token} );
$nt->access_token_secret( $config->{access_token_secret} );

my $growl = Growl::Any->new();
$growl->register( "Growl/Twitter", ["tweet"] );

my $last_id = undef;
while (1) {
    my @sl;
    if ($last_id) {
        @sl = $nt->friends_timeline( { count => 200, since_id => $last_id } );
    }
    else {
        @sl = $nt->friends_timeline( { count => 5 } );
    }
    for my $s ( @{ $sl[0] } ) {
        $last_id = $s->{id} unless $last_id;
        $growl->notify(
            "tweet",
            encode_utf8( $s->{user}{screen_name} ),
            encode_utf8( $s->{text} ),
            $s->{user}{profile_image_url},
        );
        sleep(4);
    }
}
上に書いたモジュールのどれかが入っていれば(notify-sendはコマンド)、MacでもLinuxでもWindowsでも動くはずです。

twitter-growler1
なお、実は現在Growl::Anyのパラメータをutf8フラグ付きにしようかどうか迷っているので、もしかするとその修正を入れた後にこのスクリプトを動かすと文字化けしてしまうかもしれませんので注意です。

今後ネットに転がっていたスクリプトを何も修正せずにGrowlする事が出来る様になれば、素敵な事だなと思います。

ちなみに上記のスクリプトですが、初回に実行するとconsumer_key/consumer_secretを聞かれます。ブラウザでPINを貰って入力するとConfig::Pitで設定を保存して終了するので、再度起動すると動き出します。
streamなAPIでもやってみたのですが、更新が多くGrowlの表示数が激しすぎたので一定間隔で取得する様にしてあります。お好みで修正してみて下さい。
Posted at by