2009-03-31

在3.17那会 ftprush中调用unrar.exe

决定写一个 unrar 的脚本

先是考虑glftpd,然后是那个seedbox 不过在看了资料之后都决定放弃,之后又陆陆续续忙其他事情

昨晚花了点时间,画了个流程图

早上8点半起来,开始写,写到中午基本上自动提示,手动下载torrent功能基本解决,下午上课到4点半,花了1小时时间写完全自动load torrent

修改了下的设置,具体看图,这样就不会出现提示,完全全自动了

Photobucket

最终用了脚本+批处理命令 解决所有问题

自动检测文件夹内100%解压rar分包并且删除文件的bat

脚本见此,不过稍微修正了一下。实现了一些自己需要判断写入的小功能

Tags: ,,,,,,.

之前收了她的 DIARY

以及跟混血日籍帅哥合作的 青山テルマ feet. -[そばにいるね]

在我last.fm单曲收听最高的排行第一名就是

青山テルマ feat.SoulJaそばにいるね

很不错的歌,当初不觉得这女生唱歌怎么样,专心的跑去听的歌去咯~,比如早期我推荐的rain等等这些R&B

今次alex同学又一次推荐这3月初发布,的专辑 Love Thelma_Love_Song_Collection

歌依然是很不错,很吸引人,值得推荐。完全打翻了之前我对她的印象,从忽视到再次欣赏

有条件的同学,强烈推荐来听

Tags: ,,,,.
2009-03-30

 

douban_search_num_html = "<div><b>${num}</b> douban items found matching <b>${term}</b>.</div><br/>";
douban_search_item_html = "<div style=\"clear: both;\"><b><u><a href=\"${item.link[1][\"@href\"]}\">${item.title[\"$t\"]}</a></u></b><br/>" +
"<img src=\"${item.link[2][\"@href\"]}\" style=\"float: left; height: 80px; background-color: white;\" />" +
"{for aut in item.author}<small>${aut.name[\"$t\"]}.</small>{/for}" +
"{for db in item[\"db:attribute\"]}<small>${db[\"$t\"]}.</small>{/for}" +
"</div><br/>";
douban_search_item_no_img_html = "<div style=\"clear: both;\"><b><u><a href=\"${item.link[1][\"@href\"]}\">${item.title[\"$t\"]}</a></u></b><br/>" +
"{for aut in item.author}<small>${aut.name[\"$t\"]}.</small>{/for}" +
"{for db in item[\"db:attribute\"]}<small>${db[\"$t\"]}.</small>{/for}" +
"</div><br/>";
noun_type_section = new CmdUtils.NounType( "section",
[ "generic" , "music", "movie", "book" ]
);
douban_section_url_template = {
"generic" : "http://www.douban.com/subject_search?search_text=${term}",
"music" : "http://www.douban.com/subject_search?search_text=${term}&cat=1003",
"movie" : "http://www.douban.com/subject_search?search_text=${term}&cat=1002",
"book" : "http://www.douban.com/subject_search?search_text=${term}&cat=1001",
};
CmdUtils.CreateCommand({
name: "douban-search",
takes: {term: noun_arb_text},
modifiers: { in: noun_type_section },
icon: "http://www.douban.com/pics/dou24.gif",
homepage: "http://gist.github.com/31480",
author: { name: "CHEN Daizhuo", email: "chendaizhuo@gmail.com" },
license: "GPL",
description: "douban-search: douban becomes .",
help: "Invokes the douban search engine from your command line.",
__getSection : function( rawData ) {
return rawData.in.text || "generic";
},
__getSearchTerm : function( rawData ) {
return rawData.text || "";
},
__getTargetURL : function( section, term ) {
if (term.length < 1) {
if (section == "generic") section="";
return "http://www.douban.com/" + section;
}
var template = douban_section_url_template[section];
var subs = {"term" : term };
var res = CmdUtils.renderTemplate(template, subs);
return res;
},
preview: function( pblock, expSearchTerm, modifiers ) {
var section = this.__getSection(modifiers);
var term = this.__getSearchTerm(expSearchTerm);
var msg = (term.length < 1)
? ("Go to the <b>" + section +"</b> home page of douban")
: ("Searches douban (" + section + ") for " + term);
pblock.innerHTML = msg;
if (section != "generic") {
var url = "http://api.douban.com/" + section + "/subjects";
var params = {
q: term,
"start-index": 1,
"max-results": 3,
alt: "json",
apikey: "05eaefdd447763e211c0cf97cd662ba6",
};
CmdUtils.previewGet( pblock, url, params, function(data) {
pblock.innerHTML = CmdUtils.renderTemplate(
douban_search_num_html,
{ term: term, num: data["opensearch:totalResults"]["$t"] }
);
for (var i=0;i<data.entry.length;i++) {
if (data.entry[i].link.length>2) {
pblock.innerHTML = pblock.innerHTML + CmdUtils.renderTemplate(
douban_search_item_html,
{item: data.entry[i] }
); }
else {
pblock.innerHTML = pblock.innerHTML + CmdUtils.renderTemplate(
douban_search_item_no_img_html,
{item: data.entry[i] }
); } }
}, "json");
}
},
execute: function( expSearchTerm, modifiers ) {
var section = this.__getSection(modifiers);
var term = this.__getSearchTerm(expSearchTerm);
var url = this.__getTargetURL(section, term);
Utils.openUrlInBrowser(url);
}
})
makeSearchCommand({
name: "scholar",
url: "http://www.google.com/scholar?q={QUERY}",
icon: "http://www.google.com/favicon.ico",
description: "Searches Google Scholar for a paper."
});
CmdUtils.CreateCommand({
name: "chinese",
description: "Translates from one language to Chinese.",
icon: "http://www.google.com/favicon.ico",
takes: {"text to translate": noun_arb_text},
modifiers: {to: noun_type_language, from: noun_type_language},
execute: function( directObj, languages ) {
var toLang = "Chinese";
var fromLang = languages.from.text || "";
var toLangCode = Languages[toLang.toUpperCase()];
var fromLangCode = Languages[fromLang.toUpperCase()];
//translateTo( directObj.text, {to:toLangCode} );
if (fromLang.length > 0){
translateTo( directObj.text, {from:fromLangCode, to:toLangCode} );
} else {
var dictURL = "http://dict.cn/" + directObj.text;
Utils.openUrlInBrowser(dictURL);
CmdUtils.setLastResult(dictURL);
};
},
preview: function( pblock, directObj, languages ) {
var toLang = languages.to.text || "Chinese";
var textToTranslate = directObj.text;
var toLangCode = Languages[toLang.toUpperCase()];
var lang = toLang[0].toUpperCase() + toLang.substr(1);
pblock.innerHTML = "Replaces the selected text with the " + lang + " translation:<br/>";
translateTo( textToTranslate, {to:toLangCode}, function( translation ) {
pblock.innerHTML = "Replaces the selected text with the " +lang + " translation:<br/>";
pblock.innerHTML += "<i style=’padding:10px;color: #CCC;display:block;’>" + translation + "</i>";
});
}
});
CmdUtils.CreateCommand({
name: "english",
takes: {search: noun_arb_text},
author: { name: "LI Gang", email: "superligang at gmail.com"},
description: "look up the word for the english explanation",
preview: function( pblock, directObject) {
var query = directObject.text;
var urlobject = "http://www.objectgraph.com/dictionary/dict.aspx?k={QUERY}";
if (query.length > 0) {
var urlString = urlobject.replace("{QUERY}", query);
var running = "searching for " + query;
var msg = running + "<TABLE bgcolor=WHITE><tr><td><iframe background-color=WHITE src=’" + urlString + "’ width=480 height=480/></td></tr></TABLE>";
pblock.innerHTML = msg;
}
},
execute: function(directObject) {
var urldict = "http://www.dictionary.hm/search_function.php?q={QUERY}";
var query = directObject.text;
if (query.length > 0) {
var urlString = urldict.replace("{QUERY}", query);
Utils.openUrlInBrowser(urlString);
}
}
});
CmdUtils.CreateCommand({
name: "shooter",
icon: "http://www.shooter.cn/favicon.ico",
homepage: "http://shooter.cn/",
author: { name: "toopoo@CCF&DRL", email: "toopooliu@gmail.com"},
license: "GPL",
description: "Shooter search",
help: "sh movie",
takes: {"movie": noun_arb_text},
preview: function( pblock, movie ) {
var msg = "搜索电影" + movie.text + "的字幕";
pblock.innerHTML = msg;
},
execute: function(movie) {
var url="http://www.shooter.cn/search/Sub:"
Utils.openUrlInBrowser( url + movie.text + "/?x=0&y=0&");
}
});
CmdUtils.CreateCommand({
name: "hdbits",
icon: "http://hdbits.org/favicon.ico",
homepage: "http://hdbits.org/",
description: "hdbits search",
takes: {"movie": noun_arb_text},
execute: function(movie) {
var url="http://hdbits.org/browse.php?incldead=0&from=&to=&imdbgt=0&imdblt=10&uppedby=&imdb=&search="
Utils.openUrlInBrowser( url + movie.text );
}
});
CmdUtils.CreateCommand({
name: "naver",
icon: "http://www.naver.com/favicon.ico",
homepage: "http://www.naver.com/",
author: { name: "jimey@jimey.cn", email: "jimeyren@gmail.com"},
license: "GPL",
description: "Naver dic search",
takes: {"word": noun_arb_text},
execute: function(word) {
var wordsnaver = word.text
var urlnavers ="http://cndic.naver.com/search.nhn?query_euckr=&query_utf=&dic_where=cndic&kind=&query={QUERY}&x=0&y=0";
if (wordsnaver.length > 0) {
var urlnaver = urlnavers.replace("{QUERY}", wordsnaver);
Utils.openUrlInBrowser(urlnaver);
}
}
});
CmdUtils.CreateCommand({
name: "drl",
description: "打开Dream Land 论坛的首页",
help: "打开Dream Land 论坛的首页",
preview: function( pblock ) {
var msg = "打开Dream Land 论坛的首页";
pblock.innerHTML = msg;
},
execute: function() {
var url = "https://dream4ever.org";
Utils.openUrlInBrowser( url);
}
})
CmdUtils.CreateCommand({
name: "nice",
icon: "http://www.nicetranslator.com/favicon.ico",
description: "打开翻译",
preview: function( pblock ) {
var msg = "打开翻译";
pblock.innerHTML = msg;
},
execute: function() {
var url = "http://www.nicetranslator.com/";
Utils.openUrlInBrowser( url);
}
})
CmdUtils.CreateCommand({
name: "reader",
icon: "http://www.google.com/reader/ui/favicon.ico",
description: "打开google阅读器",
preview: function( pblock ) {
var msg = "打开google阅读器";
pblock.innerHTML = msg;
},
execute: function() {
var url = "http://www.google.com/reader/";
Utils.openUrlInBrowser( url);
}
})
makeSearchCommand({
name: "Baidu",
url: "http://www.baidu.com/s?wd={QUERY}",
icon: "http://www.baidu.com/favicon.ico",
homepage: "http://blog.eshangrao.com/",
author: { name: "feiy", email: "eshangrao@gmail.com"},
contributors: ["feiy"],
license: "MPL",
description: "Searches Baidu for your words.",
preview: function(pblock, directObject) {
var searchTerm = directObject.text;
var pTemplate = "Searches Baidu for <b>${query}</b>";
var pData = {query: searchTerm};
pblock.innerHTML = CmdUtils.renderTemplate(pTemplate, pData);
var url = "http://www.baidu.com/s";
var params = { wd: searchTerm };
jQuery.ajax({
type: "get",
url: url,
data: params,
charset1: "gb2312",
dataType: "html",
error: function() {
displayMessage("Searchs Baidu Error");
},
success: function(data) {
var numToDisplay = 3;
var f_cache_p=data.indexOf("cache.baidu.com");
var f_table_p=data.substring(0,f_cache_p).lastIndexOf("<table");
var l_cache_p=data.lastIndexOf("cache.baidu.com");
var l_table_p=data.substr(l_cache_p).indexOf("</table>");
var result_html=data.substring(f_table_p,l_cache_p+l_table_p+"</table>".length);
var tables=result_html.split("</table>",numToDisplay);
var filter_html=tables.join("</table>");
//var decoder=Components.classes["@mozilla.org/intl/utf8converterservice;1"].getService(Components.interfaces.nsIUTF8ConverterService);
//pblock.innerHTML = decoder.convertStringToUTF8(filter_html,"GB2312",false);
pblock.innerHTML = filter_html
}
});
}
});
makeSearchCommand({
name: "Flex ",
url: "http://community.adobe.com/help/search.html?q={QUERY}&lbl=flex_product_adobelr&x=0&y=0",
homepage: "http://blog.eshangrao.com/",
author: { name: "feiy", email: "eshangrao@gmail.com"},
contributors: ["feiy"],
license: "MPL",
description: "Flex Community Help Searches for your words."
});
makeSearchCommand({
name: "Dict",
url: "http://dict.cn/search.php?q={QUERY}",
icon: "http://www.dict.cn/favicon.ico",
homepage: "http://blog.eshangrao.com/",
author: { name: "feiy", email: "eshangrao@gmail.com"},
contributors: ["feiy"],
license: "MPL",
description: "Dict.CN Dictionary"
});
makeSearchCommand({
name: "last",
url: "http://cn.last.fm/search?m=all&q={QUERY}",
icon: "http://cn.last.fm//favicon.ico",
license: "MPL",
description: "Last.fm"
});

Tags: ,,.

中午吃了饭出门,阴天,走到地铁站,其实应该叫电车站了,hmm 终于小雨开下

坐上我那心爱的地铁,我又开始看我那一页A4打印4页书,正反两面打印就8页,一本400多页的书,我打印50多页就可以搞定的 hmm 书 开始看

还没看2站,遇到一大叔上车,坐我旁边,跟我说,小伙 不能这样坐,对旁边的人不礼貌 因为我翘个二郎腿在看书这样不用拿着书那么累……翘腿可以把书放腿上看……

然后大叔说完这个我听了觉得有道理,ok 听他的,我就放下腿抱着书看,大叔就开始没完没了的跟我唠叨这样放腿是如何的不好,如何的对旁边的人不礼貌,如果是其他人的话,直接就一巴掌上来打人了如何如何。我都服了,这人真够烦的。 于是我就跟大叔说,大叔,我中国人,韩语不会,不知道你在说什么。大叔 立刻就问俺:朝鲜族还是汉族? 俺羞答答的说俺是汉族,大叔大惊:韩国语很不错嘛。。我ft

结果大叔就开始唠叨:中国马上就要被分#裂云云.西藏,新疆,云云,东北被韩国占领了云云,中国人都是野蛮人云云,…… 我真服了,我一低头一看,大叔手里拿了一本高丽时代故事,我ft 原来我碰上韩国愤青了,结果那书直接拿高古丽的地图做封皮了,我ft 怪不得那大叔如此仇恨中国人呢。。俺晕到死了。。 那高古丽地图呢,基本上整个东北都是,山东一半都是,最南边到浙江一部分都是属于高古丽的领土,真是够强大啊。哈哈

我只好跟大叔说,大叔 俺听不懂你说的韩语,俺的韩语很差……结果大叔说,你什么专业的?那文学,历史什么的你喜欢么? 我ft 我说我计算机的,其他的都没兴趣。 大叔说要么我们说英文吧? 结果就开始什么罗马大帝,莎士比亚就出来了,一听就是英文课文背诵啊……

我说大叔 对不起,我听不懂你的英语,结果大叔说 我的英语可是英国正宗……我ft 结果大叔又开始教我 son of bit*h之类的话了还直接给我翻译成韩语……说这个词 韩语 啥意思  结果  hmm  什么韩国的脏话粗口也都出来了,  搞得我巨尴尬,但是周围人貌似有点无动于衷……太强鸟

大叔又问我多大了,我说我82年的,大叔说他57岁了,又用英语强调了一遍……我晕死了。。然后大叔又问我为啥不在中国读大学跑来韩国,我说我在读博士 lol 大叔好像有点不好意思,说他是硕士……我ft

然后大叔说,说英语你不懂的话,那你会不会法语?飙了1句,然后又问我会不会德语,又飙了1句。。我问大叔,你会中文嘛。大叔说,除了谢谢 其他都不会。20年后东亚联盟国到时候都讲韩语。

我真够吐血的……

我跟大叔说 就这样吧,我还要看书呢。 大叔说好 刚刚好车到站,大叔问我什么站了,我说西面  大叔说 ai yi gu..坐过站了  冲出地铁车厢鸟。 

俺终于耳根清净了。不过巨后悔没问大叔,不学中文你丫咋学韩国历史呀

出了地铁站,天反倒是放晴了,hmm 不过依然还是很冷。

Tags: ,,,.
2009-03-27

phill84的文章

还得多谢raptium同学的Twitter 和饭否同步

#!/usr/bin/

from xml.dom.minidom import parseString
import urllib
import urllib2
import sys

def post_to_fanfou(msg):
    url = 'http://api.fanfou.com/statuses/update.xml'
    data = urllib.urlencode({'status':msg})
    req = urllib2.Request(url,data)
    username = 'jimey'
    password = 'password'

    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, username, password)

    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    response = urllib2.urlopen(req)

def main():
    f = open('last.txt','r')
    maxid = int(f.read())
    f.close()
    if maxid < 1166717326:
        print 'error'
        sys.exit(-1)

    params = urllib.urlencode({'since_id':maxid})
    f = urllib.urlopen("http://.com/statuses/user_timeline/jimey.xml?%s" % params)
    xmltext = f.read()
    dom = parseString(xmltext)
    statuses = dom.childNodes[0]
    messages = []
    s = 0
    for node in statuses.childNodes:
        if node.nodeName == 'status':
            status = node
            for snode in status.childNodes:
                if snode.nodeName == 'id':
                    n = int(snode.childNodes[0].nodeValue)
                    if n > maxid:
                        maxid = n
                elif snode.nodeName == 'text' and snode.childNodes[0].nodeValue[0:2] != 'RT' and snode.childNodes[0].nodeValue[0] != '@':
                    messages.append(snode.childNodes[0].nodeValue.encode('utf-8'))
    while len(messages) > 0:
        post_to_fanfou(messages.pop())
        s = s + 1
    f = open('last.txt','w')
    f.write(str(maxid))
    f.close()
    print 'Post %d status to Fanfou.' % s

if __name__ == "__main__":
    main()

在phill84的基础上增加了过滤RT的功能

ps:在crontab上运行的时候注意修改.py内的last.txt文件的路径,用绝对路径或者在.py文件头声明路径

*/2 * * * * /home/jimey/fanfou/fanfou_sync.py

Tags: ,,.

IT咨询公司Gartner今天发布了一份报告,该报告重点介绍了用于商业目的的不同方法。最初只是用于个人沟通,但现在一些公司也开始积极使用。使用方法不尽相同,有的公司只说不听,有的公司只听不说,还有的公司则双管齐下。

任何员工在上留言时要遵循一定规则。Gartner调研副总裁Jeffrey Mann说:“是一个公共论坛,员工要把握好尺度,知道什么能说什么不能说。如果公司还没有公共网络参与制度,他们应该尽快制定。”

根据Garnter的研究结果,公司使用的方法可以归为四类:直接、间接、内部使用,以及收集信号。

直接

一些公司把作为营销或公共关系渠道,非常像公司博客的延伸。他们会在上发布公司最新成果,以及和公司相关的链接。

这种方法看似简单,但是公司需要注意这可能会影响公司的形象。自私自利、自我推销式的留言会破坏公司的声誉。强调的是个人交流。

Gartner还警告称公司通过这种方法回复评论有一定风险,但如果操作得当会给公司带来好处。在这方面做得好的有福特、星巴克,以及戴尔等。

以下是一些参考案例:

间接

第二种方法是让员工在上发布留言。员工在提高个人声誉的同时,公司的形象也可以得到提升。不妨举个反面例子:雅虎裁员时有员工在上抱怨,此举会对雅虎产生什么影响呢?

同样,如果员工在上就工作、行业发展、新产品等发表积极看法时,也会人们对员工所在公司的好感。

让员工发布消息的另一个理由是:公司看拥有意见领袖。

公司内部

在公司内部通过就某个项目进行交流。如果涉及机密信息,员工应该保护留言甚至不适用。Gartner不建议通过这种方法使用或类似服务。

但如果你的公司想使用微博客平台,不妨试试Yammerpresent.ly

收集信号

有些公司并非上的参与者,而是倾听者。通过搜索或者TweetDeck等桌面客户端跟踪人们对公司、产品,乃至整个行业的看法。聪明的公司会利用这些信号做到未雨绸缪,收集产品问题和产品建议。

最近微软对外发布了叫做Twendz趋势跟踪产品。除了可以搜索留言之外还可以跟踪人们的情绪。

结论

如果你的公司也打算把用于商业目的,最好别盲目行事。Gartner提供的四种方法是个好的开端,但制定相关战略绝非易事。Chris Brogan的《Twitter商用50例》或许有助于你理解这些方法。

(译者:pestwave)

[via]

Tags: ,.