Monthly Archive for 九月, 2009

使用proxychains防止DNS缓存污染

今天看见@kevinxue在twitter上问,某socks代理,能在浏览器里使用,不能与proxychains搭配使用,我第一反应就猜到是proxyresolv这个脚本里设置的DNS服务器的问题。默认在proxychains.conf里设置了proxy_dns,proxychains会自动调用proxyresolv这个脚本来进行DNS解析。
打开这个proxyresolv就可以知道,其实只是用socks代理服务器,让dig这个命令到特定的DNS上查询而已。其实可以写一个更加简单的脚本,配合一个PHP脚本进行DNS解析。至少在我测试看来,比dig的效率更高。
Continue reading ‘使用proxychains防止DNS缓存污染’

备份Twitter Friend Timeline到Google Calendar

Twistory是一个不错的服务,但是他不支持Protected User的时间线备份,并且只能进行User Timeline的备份。我的想法是能进行我的Friend Timeline的备份,按照时间进行备份,这样可以在以后方便地管理,并且可以用google进行搜索,不用管twitter search那个烂玩意儿了。

本日志中代码以Creative Attribution-Noncommercial-Share Alike Commons(创作共用 署名-非商业性使用-相同方式共享协议)协议开放。

NND谁知道怎么让wp-syntax自动换行?折腾半天还是不行…

昨天研究了一下Google Calendar API,发现一个问题…Google只给出了用Zend Framework封装好的库函数的调用方法,具体实现没说。本来准备研究一下那几个函数的,结果发现原来里面附带的Calendar.php可以当命令行脚本使用,支持从命令行用参数添加Event。最后的结果就是这个了:

< ?php
//Licensed Under Creative Commons by-nc-sa
//Original Author: @yegle ,yegle.net
$last_id = intval(file_get_contents(".lastbackup"));
$str = file_get_contents("http://TwitterUserName:TwitterPassword@twitter.com/statuses/friends_timeline.xml?since_id=".$last_id);
if($str === FALSE ) exit();
$xml = simplexml_load_string($str);
$i = 0;
$return = 0;
foreach($xml->status as $item){
$timestamp = strtotime($item->created_at);
$id = $item->id;
$date = date("Y-m-d",$timestamp);
$time = date("H:i",$timestamp);
$text = $item->text;
$text = str_replace("\"","\\\"",$text);
$user = $item->user->screen_name;
$cmd="/usr/bin/php /home/yegle/Calendar.php createEvent YourGoogleAccountName YourGooglePassword \"FROM:$user $text\" \"$text::$id\" '' '$date' '$time' '$date' '$time' '-07' >>twitterbackup.log";
system($cmd, &$return );
if($return !==0 ) exit();
$i++;
}
if($i!==0) file_put_contents(".lastbackup",strval($xml->status[0]->id));
?>

使用说明:
其中用system函数调用PHP执行了Calendar.php,Calendar.php是从ZendFramework里找到的一个Gdata演示程序。

将以上内容保存为一个PHP文件,如backuptwitter.php
下载最新的ZendFramework,使用该地址或自行在ZendFramework下载最新版本
解压缩,将其中的libarary目录复制到合适的位置,例如/home/yegle/library/
将demos/Zend/Gdata/Calendar.php复制到其他地方待用。
修改Calendar.php,在文件第一个

< ?php

之后添加如下代码:

set_include_path("/home/yegle/library/:".get_include_path());

注意修改其中的路径

最后修改backuptwitter.php,将其中的用户名密码全部替换成你的实际用户名密码,其中的cmd变量也做相应的修改以符合你的实际情况。

最终的效果:
每条推的内容将被填入Event的Title
推的时间会被填入Event的起止时间
Description里会填入推的内容以及id,方便以后去twitter.com查看原始推。

//Fixme:

  1. 使用system函数调用脚本进行事件的添加,万一有出错,可能导致部分推没有备份
  2. 使用前,必须往.lastbackup文件里写入一个你当前Friend Timeline里最后一条推的id

awesome里实现真全屏

做个awesome小tip集锦好了,资料实在太难找,整理一下方便后人

默认的awesome配置文件,细心的话会发现,xterm最右边有一个区域是没有被xterm窗口覆盖的,即使全屏了也是这样

google之后找到FAQ里这条:
http://awesome.naquadah.org/wiki/FAQ#Gaps.21_There_are_gaps.21_How_do_I_get_rid_of_the_gaps_at_the_top.2Fbottom_of_the_screen.3F

在rc.lua里搜索:
awful.hooks.manage.register
在后面的匿名函数里添加这行:
c.size_hints_honor = false
重启awesome即可

awesome版本:3.3.3

Twip添加OAuth支持

为加强使用API proxy的安全性,避免将密码直接透露给API proxy的缺陷,新版本的twip加入了OAuth支持。

使用方法:以我的twip为例:

1、在http://yegle.net/twip/trunk/oauth.php,点击最下方的链接,在twitter.com上登录(此步骤需翻墙)
2、选择Allow允许twip访问你在twitter.com上的数据
3、页面跳转回http://yegle.net/twip/trunk/oauth.php,你可以看到页面取得了你的基本信息(以XML形式)
4、刷新页面后你可以选择删除服务器上的access token,也就是不再使用OAuth方式使用twip

客户端上设置:
使用你的正常用户名和一个错误的密码登录,其他设置与以前相同

问题与缺陷:
丢失所有tweet的来源客户端。因为是通过OAuth中转,tweet的来源将变成该App在twitter.com上所填写的软件名称。

我该怎么做?
如果你对API proxy的拥有者不信任,请用OAuth方式使用twip
如果你是API proxy的拥有者,或者信任API proxy的拥有者,请继续用以前的方式使用API proxy,原HTTP basic auth方式仍然有效。