|
|
|
|
上个星期五突然接到猎头的电话,说有SUN和Nokia的两个职位,按说换工作这事一直还在犹豫,后来想想最近也比较闲,去看看也好。结果昨天SUN就通知我去面试了,可我连职位的具体内容都不知道,猎头mm光想挣钱了,忘了发给我了,算了,去吧。 上午杀到清华科技园,是SUN中国工程院,听名头挺大,好像规模也比较小,两层楼。 有两个人面试我,问了些项目的经历,偏重linux方面的,原来这个职位是作solaris和java方面,会作一些涉及到solaris本身和一些j2ee的项目,联想到我们公司有个部门号称内部的外包公司,专接其他部门的小项目。我猜测SUN中国工程院估计也是接一些小项目作。也许大部分的外企设在中国的研发中心都是这种模式,很难涉及到核心,看来俺们公司还算不错的。 面试的过程自己感觉不太好,没什么准备,而且java根本不熟,其实也没有太重视,那边太远了,今天花了2个小时才到。 等等Nokia吧,不过听说也是作一些比较边缘的项目,不过好歹离家近。
|
最近在尝试做个显示实时股票信息的google gadget,就不用每次去新浪财经看了 先找到一个查询股票信息的web接口,是新浪的: http://hq.sinajs.cn/list=sh000...然后返回 var hq_str_sh000001="上证指数, 5188.795,5180.514,5060.334,5200.926,5026.127,0,0,37373433,63741545967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2008-01-21,11:35:51"; 然后eval一下即可 原以为简单,没想到问题来了: google gadget API 本来有: _IG_FetchContent(src, callback) 可以异步读取远程内容,但使用时发现取内部实现是先发给google的server, server会每小时读取并且做cache,然后直接把cache返回给browser, 显然实时性不够,幸好这个API有第三个参数,可以设刷新cache的时间间隔,于是就: _IG_FetchContent(' http://hq.sinajs.cn/list=sh000... callback, {refreshInterval:0}); 没想到google把这个url发给server的时候,加了设cache时间的参数,但是不知何故竟然一起发给了新浪,后来变成: http://hq.sinajs.cn/list=sh000...当然新浪返回的不对了 没办法,试了jQuery $.get 总是报exception $.getScript 也是自己加了额外参数,导致新浪返回不对 后来只好自己hack了 要是直接这么用是可以的: <head> <script type="text/javascript" src=" http://hq.sinajs.cn/list=sh000..."/> </head> 但是显然如果让用户动态设定要查询的股票代码的话,就需要动态加载javascript了,google了一下,发现了段代码,其实动态在dom的head节点加个script的element就行了 然后把element的onreadstatechange(IE) or onload( firefox)设成回调的函数即可
|
javascript在firefox,IE的一点不同
l = [1,2] [e1,e2] = l
firefox: right, e1 = 1, e2 = 2 IE: wrong, e1 not define
|
这两天看了看comet,写点儿体会 http server push 原理大概是browser和server建立一个长时间的连接,等待server push事件 这个跟ajax polling不一样的地方是ajax是定时起异步的request去查询server上有没有什么事件,这样达不到实时性,并且增加了server不必要的load 当然也是有副作用的,一般传统的web server(Apache)会fork process or thread per request, 这样如果每个request都是长连接,就不可能同时支持太多client. 所以event-based web server 是最好的选择. event-based server, is single thread, with a event loop, every new connection, read or write will trigger new event. process active client one by one. However, it need everything is async, or will block other event. select, epoll, kqueue(BSD) epoll or kqueue is best, shorter time for check many socket, and kqueue will reach a const time when more clients. but it's good for such "http-server-push" case. orbit is one such solution 1. it implement a simple http server, and a message sever. 2. http server only handle request to listen http push, other request will forward to real web server. for example, orbit have following config: [global] proxy.enabled = 1 proxy.keepalive = 0 [proxy] /chat -> ORBITED / -> http://127.0.0.1:8080 all the request by chat (contiued ...)
|
remove some characters in a string: '<><><><abc>'.remove('<>')
added in python2.3
|
old code: seq = [4,5,6] for i in range(len(seq)): do_something(i, seq(i))
new code: seq = [4,5,6] for i, item in enumerate(seq): do_something(i,item)
more elegant
more: for i, j in zip(seq1, seq2): do_something(i,j) #same with itertools.izip
new_list = map(lambda x: x*x, seq) #itertools.imap
for j in reversed(seq)
summary: enumerate, zip(izip), map(imap), reversed, filter, reduce, itertools.izip ...
|
>>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9] >>> [x*y for x in vec1 for y in vec2] [8, 6, -18, 16, 12, -36, 24, 18, -54] >>> [x+y for x in vec1 for y in vec2]
原来还可以这样
|
squid 应该是一个反向代理服务器的实现,并且提供缓存和load balance?
|
mogileFS, 分布式的文件系统, 不知道有没有python的接口? perl是有的
|
python 中还有这种用法
> "%(sender) send %(msg)s" % { 'sender':'Frank', 'msg' : 'Hello'}
> "Frank send Hello"
岂不是已经具备了简单的模板特性
|
|
|