2012/10/30


最近 yuroyoro さんが作った git issue が便利でたまらない。コンソールから redmine や github の issue が操作できるし、全て CUI で完結出来る。
しかしながら、どうしても「Vim で、しかも REST 的に redmine を扱いたい!」という欲望がおさえられず、作ってしまった。
mattn/vim-metarw-redmine - GitHub
https://github.com/mattn/vim-metarw-redmine/
kana さんの vim-metarw 経由で redmine を読み書きできます。動作には vim-metarw が必要です。
kana/vim-metarw - GitHub
https://github.com/kana/vim-metarw
let g:metarw_redmine_server = 'https://your-redmine.example.com'
let g:metarw_redmine_apikey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
vimrc 等にこの様に設定しておけば使えます。
redmine 側は「管理」→「設定」→「認証」→「RESTによるWebサービスを有効にする」をチェックし、「個人設定」からAPIキーを表示すれば見れます。

:e redmine: とするとプロジェクト一覧
project list
プロジェクト一覧でエンターすると、チケットの一覧
issue list
さらにエンターすると
issue edit
チケットが直接編集出来ます。status を閉じたりする場合、Close に相当する status の ID を覚えておく必要がありますが、「管理」→「チケットのステータス」から ID が分かるのでそこから知って下さい。
こんなの喜ぶのは僕しかいないかも知れませんが、奇特な人へ。

どうしてもこれを Windows から使いたいという、さらに奇特な人は vim-metarw を Windows でも動作する様にした私の fork をお使い下さい。
mattn/vim-metarw - GitHub
https://github.com/mattn/vim-metarw

追記
投稿の方法を書くのを忘れてました。

タイトル1行、本文数行を書いて :w redmine:/[プロジェクトID] に書き込んで下さい。

Redmineによるタスクマネジメント実践技法: チケット駆動開発+テスト工程管理のAtoZ Redmineによるタスクマネジメント実践技法: チケット駆動開発+テスト工程管理のAtoZ
小川 明彦, 阪井 誠
翔泳社 単行本 / ¥300 (2010年10月01日)
 
発送可能時間:

Posted at by



2012/10/29


Github Notification API が出ました。
Notifications API - GitHub

Recent posts in this category Notifications API technoweenie on October 26, 2012 Latest commit per d...

https://github.com/blog/1306-notifications-api
github の通知を取得する場合、これまでは miyagawa さんが github growler でやっていた様に、ダッシュボードのRSSを使って自分のイベントを抽出しなければなりませんでしたが、Notification API を使う事で Github 上と同じ通知メッセージが取れる様になりました。
今日は Perl で Github のメッセージを通知するアプリケーションを作ってみました。
#!perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use Encode;
use JSON;
use Term::ReadKey;
use Data::Deduper;
use Growl::Any;

my ($username$password);

print "Username: ";
chomp($username = <STDIN>);
print "Password: ";
ReadMode(2);
chomp($password = ReadLine(0));
ReadMode(0);
print "\n";

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(verify_hostname => 0);

my $req = HTTP::Request->new('POST''https://api.github.com/authorizations');
$req->content(to_json {
    scopes => ['notifications'],
    note => 'github-notification.pl',
    note_url => 'https://github.com/mattn/github-notification',
});
$req->authorization_basic($username$password);
my $res = from_json $ua->request($req)->decoded_content;
my $token = $res->{token};

my $dd = Data::Deduper->new(
    expr => sub {
        my ($a$b) = @_;
        $a->{id} eq $b->{id}
    },
);

my $growl = Growl::Any->new(
    appname => 'Github Notification',
    events => ['notification''error'],
);

while (1) {
    $res = $ua->get("https://api.github.com/notifications?access_token=$token");
    my $items = from_json decode_utf8 $res->decoded_content;
    for ($dd->dedup($items)) {
        $growl->notify(
            'notification',
            $_->{subject}->{title},
            $_->{description},
            $_->{repository}->{owner}->{avatar_url})
    }
    sleep($res->header('X-Poll-Interval') || 60);
}
前半部分はトークンを取る処理で、パスワードは token を得る為だけに使っています。
簡単ですね。これでどんなネタ振りも取りこぼす事無く反応出来ますね!
github notification
Posted at by



2012/10/23


手軽に使える forward http proxy : stone, Tinyproxy - 酒日記 はてな支店

直接グローバルに繋がる経路をもたないホストから http アクセスしたいので http proxy を使いたい。Squidは定番ですが、もう少し手軽なのはなにかないかと思っていたところ twitter で教えていただきました。

http://d.hatena.ne.jp/sfujiwara/20121023/1350990163
本題からそれますが、go言語で小さいプロキシを使う場合に僕がお勧めしたいのが goproxy です。
elazarl/goproxy - GitHub

An HTTP proxy library for Go

https://github.com/elazarl/goproxy
goproxy 自身は実は実行モジュールを提供していません。ですので goproxy を使った実行モジュールは自分で作ります。
package main

import (
    "github.com/elazarl/goproxy"
    "log"
    "net/http"
)

func main() {
    proxy := goproxy.NewProxyHttpServer()
    proxy.Verbose = true
    log.Fatal(http.ListenAndServe(":8080", proxy))
}
このソースを proxy.go という名前で保存して、go build proxy.go とすれば実行モジュールが出来上がります。
ポートを変えたいであったり、監視機能を付けたいという人は勝手にソースを弄ります。
goproxy はプログラマブルなプロキシです。なので例えば package main

import (
    "github.com/elazarl/goproxy"
    "log"
    . "net/http"
    "regexp"
    "time"
)

func main() {
    proxy := goproxy.NewProxyHttpServer()
    proxy.Verbose = true
    re := regexp.MustCompile(`^(www\.)?2ch\.net/?`)
    proxy.OnRequest(goproxy.UrlMatches(re)).DoFunc(
        func(r *Request, ctx *goproxy.ProxyCtx) (*Request, *Response) {
            h,_,_ := time.Now().Clock()
            if h >= 9 && h <= 18 {
                return r,goproxy.NewResponse(r,
                    goproxy.ContentTypeText, StatusForbidden,
                    "就業時間中です。通報しました。")
            }
            return r, nil
    })
    log.Fatal(ListenAndServe(":8888", proxy))
}
こう書けば就業時間中の2ch閲覧禁止を行うプロキシが出来上がります。もちろん外部の設定を参照して制御を行うのも良いと思います。
また squid の様にキャッシュする事で高速に動作させる事も出来るかと思います。オリジナルのプロキシを作ってみたいという方は試してみる価値あるかと思います。

プログラミング言語Goフレーズブック プログラミング言語Goフレーズブック
David Chisnall, デイビッド・チズナール, 柴田 芳樹
ピアソン桐原 単行本(ソフトカバー) / ¥153 (2012年10月04日)
 
発送可能時間:

Posted at by