2007年06月28日 09:58
对GFW连续不断的抱怨,抱怨到让我觉得自己是个怨妇。可是面对一个有一个有用的资源难以访问,我除了抱怨还能做什么呢?
那么就继续抱怨吧。
今天早上,突然发现
flickr.com 首页都不能访问了,提示连接被重置,但是通过代理可以。估计是被封了。
然后又发现连大名鼎鼎的
yahoo 首页也不能访问了,提示链接被重置,但是通过代理可以。估计是被封了。
GFW的黑手,已经开始扩散到知名网站了。这真是一件好事。
封掉越知名的网站,知道GFW存在的人就会越多。等到连街边卖茶叶蛋的老太太都明白什么是GFW的时候,作恶者们啊,你们的末日就来到了。
我现在倒特别希望这一天能早日到来。
BTW: 由于官方从来没有承认过GFW的存在,我只能通过自己看到的现象来推论。如果上面的推论错了,原来不是GFW干的,我也不会道歉。谁让你作恶者的形象如此深入我心。只要网络出现了问题,我第一个就会想到你。这是你们所做的一切造成的,要扭转你们的不利形象是你们自己的事,与我无关。
2007年06月26日 09:43
今天早上
冷月无声突然不能访问了,报time out错误。目前已经排除DNS问题,因为所有子域名均无碍。也排除服务器问题,因为可以穿墙访问。
唯一可能的解释是 http://www.we8log.com/* 域名规则进了小黑屋。但是理由不知,因为猛禽最近并没有讨论什么不和谐的话题。GFW果然是杀人于无形呀。我不禁联想到《辛德勒名单》的一个画面,上尉无聊的时候就拿起猎枪,在楼上随意的射杀犹太人,没有标准,没有规则。那些犹太人完全不知道出了什么事,就莫名其妙的被杀死了。
我劝猛禽换一个域名算了,现在这个域名不吉利呀 /tx
UPDATE:
经猛禽确认,是IP地址进了小黑屋,这样的话换域名也没有用了。:(
UPDATE2:
原来是同一主机上的另一个用户发表了不和谐话题,导致猛禽受了牵连。
2007年06月25日 20:48
公司的项目出了一点小状况,各种“意外”纷至沓来,突然有些没头苍蝇的感觉。经过一段时间的梳理,现在终于又理清了头绪,开始慢慢步入了正轨。
今天突然想到摄影的事情。以前总是心比天大,想拍一组惊天地泣鬼神的照片出来。然而公司的项目经历告诉我,有些事情,看着容易做着难。
如果要做一次专题拍摄,其实跟做一个项目没有什么两样:也要定主题、做脚本、做预算、定时间人员安排场地、准备设备,实际拍摄的时候还有很多细节问题等着处理。看看似乎也不难,但实际做的时候,各种问题会蜂拥而至,让你很快的淹没在种种细节当中。如果没有处理这些细节的经验,一定会手忙脚乱。
反思一下,在摄影方面,自己就像是一个连代码都还写不熟练,连程序惯用法都还不能得心应手应用的人,却想一下子从全盘考虑问题──而且,比项目管理更糟糕的是,所有的实际拍摄,不可能找到人帮忙,全部得自己动手完成。
我想我还是应该退而求其次,先把代码写熟练了再说吧。当细节不再成为项目实施的一个阻碍的时候,才有可能去做完整的项目管理。
因此,我想,我的第一步工作,应该是拍好单张照片,让光线、画面、色彩和后期的运用得心应手。然后,再去尝试全盘的问题。
从头再来吧。
2007年06月24日 21:23
LP开店需要批量处理一些照片,于是写了两个Python脚本,方便将照片改成圆角边框和添加水印。其中的几个基础函数拿出来共享。
其中水印的代码来自
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/362879。
代码运行需要
PIL和
aggdraw的支持,PIL不用说了,大名鼎鼎的Python图象处理库,
豆瓣就用到了它。aggdraw这个库为绘制图形提供了更多的特性,比如支持线宽、透明度的支持,图形生成质量也比PIL自带的ImageDraw模块高了不少,我在做圆角边处理的时候,对比较小的图片做大半径圆角时,用ImageDraw会产生明显的锯齿,aggdraw就不会,而且aggdraw还可以跟PIL配合使用,非常不错,值得推荐。
#coding:utf8
from PIL import Image, ImageDraw, ImageChops, ImageEnhance, ImageFont
import aggdraw
#--------------------------------
#批量处理照片的函数
#--------------------------------
#将照片变成圆角边
def RoundCorner(image, radius):
"""
Generate the rounded corner image for orgimage.
"""
image = image.convert('RGBA')
#generate the mask image
mask = Image.new('RGBA', image.size, (0,0,0,0))
draw = aggdraw.Draw(mask)
brush = aggdraw.Brush('black')
width, height = mask.size
draw.rectangle((0, 0, mask.size[0], mask.size[1]), aggdraw.Brush('white'))
#north-west corner
draw.pieslice((0,0,radius*2,radius*2), 90, 180, None, brush)
#north-east corner
draw.pieslice((width-radius*2, 0, width, radius*2), 0, 90, None, brush)
#south-west corner
draw.pieslice((0, height-radius*2, radius*2, height), 180, 270, None, brush)
#south-east corner
draw.pieslice((width-radius*2, height-radius*2, width, height), 270, 360, None, brush)
#center rectangle
draw.rectangle((radius, radius, width-radius, height-radius), brush)
#four edge rectangle
draw.rectangle((radius, 0, width-radius, radius), brush)
draw.rectangle((0, radius, radius, height-radius), brush)
draw.rectangle((radius, height-radius, width-radius, height), brush)
draw.rectangle((width-radius, radius, width, height-radius), brush)
draw.flush()
del draw
return ImageChops.add(mask, image)
#加圆角线条边框
def RoundCornerFrame(image, radius, line_width, line_color, opacity=1.0):
width, height = image.size
draw = aggdraw.Draw(image)
pen = aggdraw.Pen(line_color, line_width, int(255 * opacity))
#注意: aggdraw对角度的解释与PIL有区别!
#aggdraw画线的位置是线的中线,因此,需要减除半条线宽
halfwidth = int(line_width / 2)
#north-west corner
draw.arc((halfwidth, halfwidth, radius*2-halfwidth, radius*2-halfwidth), 90, 180, pen)
#north-east corner
draw.arc((width-radius*2+halfwidth, halfwidth, width-halfwidth, radius*2-halfwidth), 0, 90, pen)
#south-west corner
draw.arc((halfwidth, height-radius*2+halfwidth, radius*2-halfwidth, height-halfwidth), 180, 270, pen)
#south-east corner
draw.arc((width-radius*2+halfwidth, height-radius*2+halfwidth, width-halfwidth, height-halfwidth), 270, 360, pen)
#four edge line
draw.line((halfwidth, radius, halfwidth, height-radius), pen)
draw.line((radius, halfwidth, width-radius, halfwidth), pen)
draw.line((width-halfwidth, radius, width-halfwidth, height-radius), pen)
draw.line((radius, height-halfwidth, width-radius, height-halfwidth), pen)
draw.flush()
del draw
return image
def reduce_opacity(im, opacity):
"""Returns an image with reduced opacity."""
assert opacity >= 0 and opacity <= 1
if im.mode != 'RGBA':
im = im.convert('RGBA')
else:
im = im.copy()
alpha = im.split()[3]
alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
im.putalpha(alpha)
return im
#为照片加水印
def Watermark(image, markimage, position, opacity=1):
"""Adds a watermark to an image."""
im = image
mark = markimage
if opacity < 1:
mark = reduce_opacity(mark, opacity)
if im.mode != 'RGBA':
im = im.convert('RGBA')
# create a transparent layer the size of the image and draw the
# watermark in that layer.
layer = Image.new('RGBA', im.size, (0,0,0,0))
if position == 'tile':
for y in range(0, im.size[1], mark.size[1]):
for x in range(0, im.size[0], mark.size[0]):
layer.paste(mark, (x, y))
elif position == 'scale':
# scale, but preserve the aspect ratio
ratio = min(
float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
w = int(mark.size[0] * ratio)
h = int(mark.size[1] * ratio)
mark = mark.resize((w, h))
layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
else:
layer.paste(mark, position)
# composite the watermark with the layer
return Image.composite(layer, im, layer)
#为照片增加文字
def Signature(image, text, position, font=None, color=(255, 0, 0)):
"""
imprints a PIL image with the indicated text in lower-right corner
"""
if image.mode != "RGBA":
image = image.convert("RGBA")
textdraw = ImageDraw.Draw(image)
textsize = textdraw.textsize(text, font=font)
textpos = [image.size[i]-textsize[i]-position[i] for i in [0,1]]
textdraw.text(textpos, text, font=font, fill=color)
del textdraw
return image
2007年06月17日 21:08
这几天持续受到迅雷骚扰,终于决定排除万难也要配置好Apache的带宽限制功能。
Google了一番之后发现原来Ubuntu有现成的包,叫libapache2-mod-cband,兼有限制带宽和并发数的能力。
于是赶紧apt-get下来,然后打开虚拟站点的配置文件,加入一句:
CBandRemoteSpeed 50kb/s 3 3
限制了每个用户带宽50kb/s,每秒请求数3和每秒连接数3。
重启Apache之后,用FlashGet测试了一下,果然只能同时连上三个连接,其它的连接会报503错误。
不知道这样对迅雷有没有作用,得观察之后才有结论了。
2007年06月16日 18:50
忙了快两个星期了,不知道哪天是个头。今天抽空跟猛禽、Vanish一起去人民公园拍了荷花,算是对心情的一种调节。
天气不算太好,有点阴。为了呈现荷花通透的效果,加了2/3的曝光。不记得有多久没有使用手上这支长焦镜头了,今天又拿起来,有种久违了的感觉。不过毕竟有些陌生了,很多照片都有些对焦或手抖的问题。
回家之后稍微调了调曲线。我向来不反对后期,用原片直接出图,在我看来要不是为了炫耀器材,要不就是对结果的不负责任,并不是十分可取。
拍到一半的时候,Vanish突然跟我说前面有两个人长得很像黑社会。我一看,他们带着安全人员常用的监听耳机,于是就说,这两个应该是保镖,难道有大人物在我们附近?果然,Vanish很快认出,离我们不远的地方,站着的就是莎朗斯通。
于是赶紧跑到她对面开始啪啦啪啦的按快门。莎朗斯通比银幕上看起来苍老很多,不过气质依然。我们看到一共有三个保镖,职责分明,一个是贴身站的,长得有点像Matrix里的Smith,习惯是摸右手的戒指。一个离开大约几米远,长着一副东欧面孔。还有一个黑人,离开大约十多米的距离。(特别声明,只是现场顺便观察的结果,并没有特地调查的意思-_-)
莎朗斯通也在拍荷花,用的机器是Nikon D80。注意一下后面那个弯腰闭眼做出猥琐动作的——猛禽 /tx
气质犹存。注意背后保镖的手部动作。
莎朗和她的贴身保镖,再次注意他的手部动作。
2号保镖。我们在拍摄的时候他跑过来跟我们说了一句中文:“拍一张就够了”,吓了我们一跳。之后我们继续拍的时候他不停的朝我们看。不过我们已经离得很远了,应该没有太过分吧。
3号保镖,带着安全人员常用的监听耳机。我发现这几个保镖个个都是帅哥。
最后来几张花絮。
漂亮的外国小女孩
一个女孩子正在玩水。把水滴在荷叶上,水珠又纷纷落入池中。
最后曝一张Vanish
2007年06月10日 23:42
我的服务器上存放了
自己的和
LP的两个站点。今天晚上突然发现我的网站上不去了,甚至用内网地址也不行。而ssh仍然可以登录。
首先想到的就是服务器流量过大。因为LP的网站上放了一个相册,这几天LP在一些比较大的论坛里发帖时引用了里面照片,我怀疑是这些论坛巨大的访问量拖垮了服务器。于是重启apache服务,并让LP修改帖子改为使用外部的链接。谁知重启后不到2分钟立刻又不能访问了,再大的论坛也不可能有这样夸张的流量。想到这里我不由得惊出一声冷汗:不会是谁对我这台不起眼的服务器发起攻击了吧?
赶紧停掉apache服务,然后开始检查日志。日志最后的一大串类似访问引起了我的注意,它们都访问了LP网站某个临时目录下的同一个文件。赶紧问LP有没有把这个地址给过别人,答曰有的,不过只给了一个人。我尝试重新开启服务器,并使用tail -f 命令监控apache日志,果然,很短的时间里就有大量的请求涌入,而且目标都是那个文件,USER_AGENT是几乎已经成为文物的Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)。但奇怪的是虽然绝大多数IP都是同一个人的,但是也有少数IP是其它地方的,但是这个地址不是只给了一个人么?
让LP问了问对方,原来对方使用的是迅雷。迅雷不仅霸道占光了我的带宽,而且使用了不属于它的USER_AGENT来欺骗服务器,更恶劣的是,即使那个人下载已经完成,连接数仍然没有减少,服务器的资源仍然被占用着。
作为临时的解决方法,我不得不删除了目标文件,并且重启了apache服务器,才让这场灾难暂告一个段落。
不得不说,这该死的迅雷。
顺便问一下行家:有谁知道Ubuntu下,apache的带宽限制或者并发数限制module?我找到了一个mod_limitipconn,但是没有编译成功。
2007年06月08日 23:08
看完了今天的《07我型我秀》,感觉真的很棒。像是回到了4年前第一次看到我型我秀的时候。
跟随型秀一路走来,经历了第一年的青涩,第二年的平淡,第三年的混乱。我曾经认为,我心目中的那个为音乐而存在的型秀已经死了。可是今天,我终于感觉到,我心中的那个我型我秀,又回来了。
在今天的舞台上,我看到了合作,看到了实力,看到了个性张扬,看到了对音乐的虔诚。而这些,正是型秀当年吸引我的根本所在。
无论以后的型秀会变成什么样子,今天这场表演,我会一直记得。
唯一的不足:最后那个点火仪式简直就是画蛇添足,还不如把时间留给王啸坤唱歌的好。
2007年06月02日 22:18
因为订阅了一些牛人的blog,我也算是比较早关注厦门PX事件的人之一。不过我一直不想说什么,因为总觉得是厦门人在解决他们的内部事务,我作为一个局外人,除了保持关注之外,没什么可说的。
可是,自从传出六一散步的消息之后,我发现这件事的性质开始慢慢发生了变化。主要表现在政府开始封锁消息,并且有消息传出说政府已经将散步事件作为跟18年前的事件同等性质对待了──这意味着事情不再像“质询政府决策”这么简单了。
昨天,我的好友
猛禽的blog(已失效,
备份地址在此)因为报道了厦门散步的情况而被服务商解除了域名绑定(简单说就是blog被干掉了)。我突然觉得这件事就发生在我的身边,我已经不能算是局外人了。
因此我觉得有必要说两句。
就PX事件本身来说,原本可以没有这么复杂。政府决策有错误,这本是件十分正常的事情,但是当有人质疑的时候,政府应该做的事情,是积极回应,解释和沟通。我并不认为民众说什么,政府就应该做什么,这样的政府存在着有什么意义?但是沟通是很重要的,民众看到的是事情的一个方面,政府看到的是另一个方面,只有双方不断的交流沟通,才能将事情看得越来越完整越来越清晰。等到能够权衡出一个最终结果,这个结果就能够令双方满意。然而厦门市政府做了什么?对人大代表的提案是不理不睬,对民众的质疑是前封后堵,甚至将民众采取的实际行动定性成敌对行动。这些措施,对解决问题没有丝毫的作用,反而是将自己一步一步的推向了民众的对立面。这么做事情,要是这社会还能“和谐”,那才叫见了鬼呢。
关于猛禽的blog被干掉,我除了担心猛禽个人的人身安全之外,倒不觉得是件坏事。有身边人作为实际例子,我会更容易让更多的人清楚的明白某些人的所作所为,我会让更多的人看到被蒙蔽的真相。平民老百姓可没义务去遵守那套潜规则,我们也不是那么好惹的。想用特权来管住我们的嘴,没有那么容易的。
回到昨天和今天的散步活动。我跟猛禽聊过,我觉得这事情就到这个程度,可以了。毕竟活动本身只是一种手段而不是一种目的,最终的目的还是应该获得跟政府平等交流的权利,以及当前更重要的,解决PX建厂的问题。因此,整理出民众意向,跟政府公开平等的交流,这才是应该努力的方向。一味的散步,比较容易导致事态失控,从而让政府和民众更加对立,对解决事情反而没有帮助。
就说这些,是非对错大家自己判断。学会自己思考,才不会被假象迷惑误导。