雑記

2009年10月13日火曜日

svn mergeする時にRevision指定しなくてもいいシェルスクリプト

最近業務でsvnをバキバキ使いまくってます。
それであれやこれやとbranchからmergeすると、毎回Revisionを確認しなくちゃいけなくてその作業が非常にめんどう。
自分の場合、「最初にbranchしたRevisionからHeadまで」というパターンが主なので専用のスクリプトを組んでみた。

svn_merge.sh
#!/bin/sh


SVN=/usr/local/bin/svn
REVISIONS="^r[0-9]\s\|\s.+\s\|\s[0-9]\{4\}-[0-9]\{1,2\}-[0-9]\{1,2\}\s.+\|\s[0-9]+\sli
ne$"
REVISION_NO="s/r\([0-9]*\)/\1/"


if [ $# = 0 ];
  then
    exit -1
fi


FIRST_REV=`${SVN} log $1 --incremental | grep -e ${REVISIONS} | awk '{printf "%s\n", $
1}' | sed ${REVISION_NO} | tail -1`


echo "***** Dry Run *****"


SVNLOG=`${SVN} merge --dry-run -r ${FIRST_REV}:HEAD $1 $2`
echo ${SVNLOG}
echo "Merge OK? [y/n]:"


read ans


if [ ans = 'y' ];
  then
    SVNLOG=`${SVN} merge -r ${FIRST_REV}:HEAD $1 $2`
    echo ${SVNLOG}
fi


一回DryRunして、確認してからマージしてます。
最初のRev取ってるところは、svn logがきっとバージョンによって違うんだろうなぁ思ってみる・・・。

PATH通して、
svn_mrge.sh "マージしたいファイル" "対象ファイル"
でOKのはず。

やっぱりsvnは使いにくいから、いっそ対話型のもの作ろうかと思った。

2009年10月11日日曜日

ZendFramework: Zend_Service_Twitterで超簡単なbotを作ってみる

このあいだ、ZendFrameworkのZend_ServiceにTwitterが追加されている事を知って、簡単なbotを作ってみました。

botといっても本当に簡単で、reply返しをするだけのもの。


require_once "Zend/Service/Twitter.php";
define(DATEFILE, "date.dat");


$datefile = file_get_contents(DATEFILE);


$twitter = new Zend_Service_Twitter("ユーザー名", "パスワード");


$response = $twitter->status->replies();


foreach ($response as $reply) {
    if ($datefile <= date("Y-m-d H:i:s",strtotime($reply->created_at)))
        $twitter->status->update("@".$reply->user->name." "."こんにちは、".$reply->user->name."さん。");
}


file_put_contents(DATEFILE, date("Y-m-d H:i:s"));


エラーチェックは特にしてない。
一応、簡単にだけど前回の実行時間を取って置いて、重複して送らないようにしてみる。
Twitterbotはお手軽だけど、色々やろうとするとなかなか面白い。
もう少し凝ったbotも作ってみたけど、正直用途ってむずかしいよね・・・ネタbotはすぐに飽きるし。

Zend_Service_Twitterについてはマニュアルを読んでおくと良いかも。Twitter APIで出来る事は大体できるようだけど。

2009年10月7日水曜日

Greasemonkeyでニコニコ動画のマイリスト追加時にTwitterにつぶやいてみる

ニコ動のマイリスト追加時に、自動でtwitterにつぶやいてくれるグリモンを探していたんだけど、見つからなかったので書いてみた。
ちなみに、履歴をtwitterにつぶやくグリモンがあったのでそちらを参考にさせてもらいました。

UchのX40記: [JavaScript] ニコニコ動画で見ている動画のURLをTwitterにポストするGreasemonkeyスクリプト

で実際自分で使ってるコード


// ==UserScript==
// @name        mylismylis
// @description Post niconicodouga mylist to Twitter
// @author      sakky
// @namespace   http://unslash.blogspot.com/
// @include     http://www.nicovideo.jp/watch*
// ==/UserScript==

(function () {
    var mform   = document.forms.namedItem("mylist_form");

    var twit = function(){
        var mselect = mform.elements.namedItem("group_id");
        var mname  = mselect.options[mselect.selectedIndex].text;
        var url = 'http://twitter.com/statuses/update.json';

        GM_xmlhttpRequest({
            method : 'POST',
            url    : url,
            headers: {'Content-type': 'application/x-www-form-urlencoded',},
            data   : 'status=' + encodeURIComponent('マイリス-(´・ω・`)っ [ ' + mname + ':' + document.title + location.href) + ' ]',
            onload : function(res){ message('Updated!');},
            onerror: function(res){ message('Failed to update' + res.status + ':' + res.statusText);},
        });
    }

    mform.elements.namedItem("mylist_add").addEventListener("click", twit, true);

})();




とまぁこんな感じです、Javascript苦手なので書き方はご愛嬌。
Javascript苦手とかじゃなくて、ちゃんと書けませんorz
ちゃんと動いてなかったので、一部書き直してみた。