逐渐老去的IT菜鸟 Rotating Header Image

用awk剔除两个文件中的重复行

有a、b两个文件,需要删除b文件中的所有a文件行,例如
a文件:
111
222
abc

b文件:
111
ABc
def

最后显示:
def

使用awk如下即可:
awk ‘NR==FNR{a[tolower($0)]}NR!=FNR&&!(tolower($0) in a){print $0}’ a b

使用shuf打乱文本顺序

手头有100万的邮件地址,每行一个,按照字母顺序排序,现在需要将这些邮件地址全部打乱,使用linux自带的shuf命令:

$shuf emailfile.txt

100万的数据瞬间完成,简单快捷。

但是很奇怪的时候,在我的DEBIAN生产服务器上竟然找不到该命令,用aptitude search也找不到。

Chrome下的截图扩展

之前写了一篇在Ubuntu Linux下的截图软件shutter,shutter非常强大,但是对于添加自定义的文本比较麻烦,需要打开GIMP等图形编辑软件来处理。其实,可以使用浏览器的第三方扩展来截图,例如,“截图快手”就是一款非常优秀的浏览器扩展,可安装在Chrome、Friefox、Safari下。

截图快手可以很方便的在截取的区域中加入椭圆形、四方型的注释框,可以很方便加入注释文字,在完成批注或注释后,鼠标点击几下,就能将截图上传到截图网站,将返回的网址分享给朋友;还很方便将截图发送到twitter、facebook等社交网站。

截图快手官方网站: http://awesomescreenshot.com/

awescreenshot 截图快手

awescreenshot 截图快手

ubuntu下的截图软件shutter

shutter是一款非常强大的截图软件,支持窗口、控件、菜单以及自定义的任意区域截图,截图后,可以做3D旋转、水印、灰度、镜面、撕裂等十多种特殊效果,支持截图后默认上传到站点的FTP空间,以及打开图像编辑器等。

截图后,要将图片上传到Flickr,只需要安装Postr即可。

3D旋转效果

3D旋转效果

球面效果

球面效果

相片效果

相片效果

用python写的一个简单刷票程序

周五晚上花了一点时间用python写了一个刷互动力量投票系统的工具,原理很简单,先在代理网站上找代理IP,然后模拟http的方式,用urllib提交数据。这里有一些细节控制,修改一下user_agent,不然会在投票系统的服务器日志里显示“python/urllib”的user_agent信息。

我没有处理验证码这一块,因为我要刷的那个投票恰好没有验证码;就算有,那个验证码也是很有规律,用PIL或者自己写算法来分析也不是难事。

下面是整个刷票的程序,大约就20多行代码,非常简练。

#!/usr/bin/python  
#-*-coding:utf-8-*-  
import urllib,urllib2
import re
import sys
 
if len(sys.argv) != 3:
    sys.stderr.write("Usage: begin page num, end page num\n")
    raise SystemExit(1)
start = int(sys.argv[1])
end = int(sys.argv[2])
 
for i in range(start,end):
    f = urllib.urlopen("http://www.proxycn.com/html_proxy/http-"+str(i)+".html")
    html = f.read()
    proxies = re.findall("clip\('(.*?)'\)",html,re.S)
    for n,proxy in enumerate(proxies):
        print str(n+1)+" "+proxy
        proxy_handler = urllib2.ProxyHandler({'http': 'http://'+proxy})       
        data = urllib.urlencode({'vote_id':12345,'question_id':67890})
        request = urllib2.Request("http://vote.activepower.net/script/user/get_vote_save.asp")
        request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)')
        opener = urllib2.build_opener(proxy_handler)     
        try:
            ff = opener.open(request,data,5)
        except:
            print "time out"

Ubuntu 11.04 Natty安装全过程截图

差劲的快钱

这是我第一次使用快钱,因为有一笔款急需转帐。我注册登录后,在左侧菜单点击”我要付款”》”付款到银行帐号”,提交信息后系统说余额不足,需要充值,于是,我点击”账户管理”》”充值”,从我的信用卡里将款打到快钱(我的借记卡没有网上银行功能),再次在”付款到银行帐号”里提交,系统提示操作成功,告知我在3个工作日内可以到帐。

两天后,收到快钱风控部门的邮件,说可能涉及套现,转帐不成功。但是从开始到结束我都没有看到任何关于套现的说明,尤其在”付款到银行帐号”页面,没有任何的文字说明。最后在充值页面看到一行关于”信用卡套现收取1%手续费”的文字,而这行文字并没有直接告知用户哪些行为是不允许的。

我认为在整个过程中,我没有做错,唯一的错误就是没有将快钱网站的每个页面都点击进去阅读10回;如果快钱在”付款到银行帐号”页面有说明,或者能检测到信用卡不能支付,又或者在提交信息时有提醒,那么都不会有这样的问题;快钱由于系统设计问题,提示严重不足,造成我延误了多天时间,还损失1%的手续费,这些损失,请问快钱怎么处理?还是说,这是快钱故意设陷收取手续费?

想不到我在快钱的第一次体验如此差劲,这是我的第一次使用,也是最后一次。

付款到银行帐号没有任何提示

付款到银行帐号没有任何提示

高朋网的低级错误,130元买100元代金券

今天收到高朋网给我发的订阅邮件,标题为“高朋“十全十美”系列活动第二“弹”!仅130元!抢购N°5时尚广场价值100元代金券!”,用130元抢购价值100元代金券,有这样的团购吗?点击进去,邮件正文原来是说用3元可购买100原代金券,节省97元。

高朋可是groupon和QQ合作的最被看好的团购网站啊,怎么会出现这样的低级失误?可不是又是一次炒作吧?

高朋群发的邮件标题,130元购买100元代金券

高朋群发的邮件标题,130元购买100元代金券

邮件正文

邮件正文

网络建立后自动运行程序或者脚本

在Debian/Ubuntu的发行版里,网络建立前/后和网络断开前/后都会到/etc/network里运行相应目录下的脚本:

if-down.d — 网络关闭前
if-post-down.d –网络关闭后
if-pre-up.d –网络建立前
if-up.d –网络建立后

例如,想每次在网络建立后运行一段自己写的脚本,则将此脚本拷贝到if-up.d目录下,并赋予755的权限即可。

自动登录远程SSH

目标

你想使用Linux和OpenSSH来自动化你的任务。因此,你需要从主机A中的用户a自动登录到主机B中用户b的过程中不想输入任何密码。

HOW TO

首先以用户a登录上主机A,生成密钥。不要输入密码:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

用SSH以用户b的身份在主机B上创建~/.ssh目录:

a@A:~> ssh b@B mkdir -p .ssh
b@B's password:

最后,将public key上传到B主机下:

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password:

输入密码后,以后再登录主机B都不需要输入。

a@A:~> ssh b@B hostname