test

Posted in 号外 on 六月 20th, 2006

just a test

mydonews bug

Posted in 号外 on 五月 30th, 2006

不知道怎么回事,今天css editor不能用了

是选择模版问题?但是已经试过很多模版了,郁闷-____-=

还有一个原来的bug就是要使对tag改名

下面的子tag就会自动消失(但是文章的归类还是好的)

这些bug也不知道如何报告

mydonews 真的是个边缘的地方啊

blog 搬家

Posted in 号外 on 五月 28th, 2006

今天化了整天的时间就想加几个侧边拦

结果喜欢的模版不支持,支持的不喜欢

最汗的是很多支持侧边拦的模版不是规范的div页面
想让它变成自己理想的样子实在是不可能....

遂转到早已申请号了的bloggoing
在import页面的时候就感觉到其功力不错
不但内容完整的保存了,tag也完好无缺

支持超多模版
侧边拦在各种模版下都不是问题

读取页面和mydonews速度不相上下
在写页面的时候感觉有点慢
但我们有writely嘛

我想应该没什么遗憾了
my.donews
我会想你的:)

http://lazy.bloggoing.com/

几个有意思的Python函数

Posted in Python on 五月 25th, 2006

不是很熟悉函数化的编程风格
但是在有些时候,运用这样的编程方法可以让原本很复杂的程序变得十分简单

python里面就提供了与此相关的几个函数

map()

map(func, list, …)
相当于[func(l) for l in list]
对列表中每一个元素调用func,并且接受多个列表作为参数:map(func, list_1, list_2, …)
相当于func(list_1[i], list_2[i])
对不足的元素用None代替


apply()

apply(func, args, [keyword])
在2.3以后已经可以用这样的代码代替func(*args, **keyword)
作用也就很明显了
如果有一个参数列表
如果直接使用func(arg_list)只穿给func一个object
而如果使用func(*arg_list)的形式,则可以将列表中所有的参数一一传递给func

zip()

zip([iterable, …])
用法比较独特,用一个例子说明一下吧
a = (11,12,13)
b = (21,22,23)
x, y, z = zip(a, b)
# x = (11, 21)
# y = (12, 22)
# z = (13, 23)
你可以将(a, b)看作一个二维数组
则zip(a, b)就是将这个数组反置
得到(x, y, z)
如果没有zip()….
x, y, z = [(i, j) for i in a for j in b]
效率当然没法和zip()相比了
而且,要是我要加入c, d, e, f…….

在使用zip()时也有一个技巧如果
ab = (a, b)
则 zip(*ab) 等同于 zip(a, b)

reduce()

reduce(func, list, initial)
让func根据list的元素顺序对其中元素进行求值,
并将结果用于与下一元素的求值:
list1 = func(list[0], list[1])
list2 = func(list1, list[2])

如果定义了initial,则第一次将首先运算
func(initial, list[0])

filter()

filter(func, list)
func对list一一求值
filter()返回func求值结果为True的元素list

Natural Neighbor Interpolation

Posted in Graphics on 五月 24th, 2006

natgrid 使用了 Natural Neighbor 插值将离散空间连续化

参照其定义 :

natural neighbor
Intuitively, two points in the plane are natural neighbors if they share an interface that is equally close to each point and all other points are no closer. A precise definition can be given in terms of the empty circumcircle criterion. Any two points in a finite subset of the plane are said to be natural neighbors if they lie on the same circumcircle. Such natural neighbors are also referred to as first order natural neighbors [cf. second order natural neighbor].
natural neighbor interpolation method
An interpolation method that uses a weighted average of function values at the natural neighbors of an arbitrary point to determine an interpolated value at that point.

平面上两点如果位于同一个外接圆,则认为这两点位于自然邻域(natural neighbor)上

natgrid就是使用这个原理对已知离散空间领域内任意点进行加权平均,得到具有连续偏导的平面.

终于找到了离散点画等值线的方法

Posted in Graphics on 五月 22nd, 2006

其实还是用到了matplot
主要是自己对绘图的算法不是很熟,而matplot的绘图效果一向比较欣赏

这个方法
需要自己build scipy把delaunay模块包含进去
按照windows下的安装指南
手动build scipy还需要先安装ATLAS (3.6.0)/LAPACK库,而我用cygwin build的ATLAS没有任何作用-____-
还好在不考虑性能损失的情况下还可以使用LAPACK/BLAS的源码直接build

然后再次发现原来我下的0.4.8的scipy不包含delaunay….
残念…安装TortoiseSVN,go bed
明天用svn的scipy继续吧““忙乱的一天呀

更新:
numpy编译不成功
于是用了wiki 上另外一个方法 griddata
下载后先编译其中的c源码
setup.py build –compiler=mingw32 bdist_wininst
需要mingw或者cygwin,并且要把gcc的路径加入到环境变量中(或者直接在cygwin中编译)
然后运行
setup.py install
就安装成功了

之后使用griddata提供的test.py测试一下好了

现在就可以用griddata将离散的值进行natural neighbor interpolation
并用matplotlib显示出来了~
效果不错:)

接下来就是一些美化工作了
全都要靠自己了

让一天有36个小时的方法

Posted in 读书笔记 on 五月 21st, 2006

让一天有36个小时的方法

说得还是有点道理的“`
不过要是没有老板这么要求,还是不要对自己这么苛刻吧-__-

研究一下matplot画等值线的部分

Posted in Graphics on 五月 21st, 2006

一向很喜欢matplot画出的等值线

看到其maillist上在讨论
知道主要的画等值线的算法是由c/c++实现的
在源码中找到了一个程序:cntr.c

注释很完整(已经可以算是文档了吧~不但对算法有介绍,对数学原型也解释得很清楚了),
要好好看看这么完美的等值线是怎么绘制出来的:)

[Matplotlib]绘制底图

Posted in Graphics, Python on 五月 14th, 2006

有时我们需要在一定的底图上绘制contour,一般来说有matplotlib提供的basemap可以完成~

但是basemap能做的实在有限~
要想使用更漂亮的底图可以借助PIL以及pylab.imshow()函数


from pylab import *
try:
import Image
except ImportError, exc:
raise SystemExit("PIL must be loaded to run this example"

demo = Image.open('demo.png')

im = imshow(demo)
# some plotting code
show()

js 的事件处理

Posted in Javascript on 五月 10th, 2006

以前我在html中调用js时总离不开这样的写法:

<input id=”test” value=”test” type=”text” onclick=”run_test” />

但当页面需要更多的动态特性时,这样的方法就像一个紧箍咒,就算是利用mochikit的DOM对象,也很难处理.
其实这样的事件处理完全可以用js完成:

document.getElementById(”test”).onclick = runtest

如果想在不改变一个事件的基础上加入新的特性,还可以这样:

var old_handler = document.getElementById(”test”).onclick
document.getElementById(”test”).onclick = function() {old_handler(); new_handler;}

现在ie6还不能支持的2级DOM标准还提供更强的事件处理,
比如使用addEventListener()实现上面的功能:

document.getElementById(”test”).addEventListener(”click”, new_handler, true);

如果只是想临时加入一些事件处理机制还可以用这样的技巧(在使用中还有些问题没弄明白):

document.getElementById(”test”).addEventListener(”click”, new_handler, true);
// do something
document.getElementById(”test”).removeEventListener(”click”, new_handler, true);