可可熊的窝

Google Map

IN: Python   Tags: ,    Comments: 5

Google Map的算法分析见:http://www.codeproject.com/KB/scrapbook/googlemap.aspx

Google Map使用http://mt[0-3].google.cn/mt/v=cn1.11&hl=zh-CN&x=%d&y=%d&z=%d&s=Galile这样的URL来表示一个放大等级中最小的地图分块。
mt0—-mt3是四个Google Map的服务器
v=cn1.11 是当前地图的版本 一直在变化中
x,y,z分别代表当前分块所在位置和放大等级,Z=19为最大的放大等级,目前很多城市都可以查看到该等级下的地图
在某个放大等级z下,整个地球被分成2^z分块
x,y可以根据经纬度来计算;x的计算比较好理解(longitude->经度):
longitude=180+longitude #修正经度值到0-360 因为经度的表示是从-180—>180
longTileSize=360.0/(pow(2,zoom)) #计算每个分块所占的角度数
tilex = longitude/longTileSize #计算当前经度所在的分块位置

y的计算要牵扯到墨卡托投影这个地图算法,比较麻烦没看懂。不过并不影响使用,相应的代码上面已经给出来了,然后就可以用Python下载地图分块,使用PIL库把分块合并。

代码见Google Code

(这个是西安地图):
#GMap2Png(108.80824,34.37075,109.10316,34.15366,16)
参数为你需要确定的图片左上角的经纬度和右下角的经纬度 最后一个是放大的等级
使用的时候需要注意如果你选择的经纬度范围较大,那么放大等级就不能太大,不然要生成一个巨大图片,PIL会报MemoryError的错误。

还有些问题我在CPyUG记录了下来,不过没使用好的解决方案。

08-04
2009

初到广州

IN: Life   Tags:    Comments: 12

出差去广州了,两个小时的飞机,觉得挺累的,快到广州那会儿还晕了一会儿。广州果然是很闷热,下雨天空气都是热的,还是北方的天气比较好。

从机场到酒店的路上觉得广州很拥挤,房子也乱的很,下了机场大巴走向酒店的那段路几乎和西安中铀线改造一样,几乎没了人行道。

初到广州,印象很不好啊!

06-28
2009

PHP中使用openssl

IN: Life   Tags: ,    Comments: 2

服务器端要对客户端POST 上来的签名后的数据进行验证,本来想着用Python调用openssl命令行来实现,不过没有找到相关的命令,后来找了下PHP的openssl的封装,果然有的:http://php.chinaunix.net/manual/zh/ref.openssl.php

封装的函数也比较好用。(我还想着要是实在不行就用C语言写个CGI来调用openssl 了)

上面的代码中,首先从客户的证书中获取公钥,然后使用openssl_verify($data, $signature, $pubkeyid);对签名后的数据($signature)进行验证,$date为原始数据,$pubkeyid是从证书中读出的公钥,该函数还可以使用第四个参数,设置一个使用的hash算法,默认使用的是sha1。

被注释掉的代码是使用私钥对数据进行签名。

代码中第一行是获取原始的POST数据内容,也就是获取标准输入的数据。如果是Python写CGI的话可以使用:
data = sys.stdin.read()

代码见:http://code.google.com/p/cocobear/source/browse/trunk/openssl/openssl_php.php

在wordpress日志里加PHP代码一直出错,没办法,只能放在别的地方。

06-17
2009

绿坝

IN: 互联网   Tags: ,    Comments: 15

我Dang大概也就会做这种事了,从GFW到绿坝,巴不得让每个人装个摄象头,每天让我Dang了解我们这些“刁民”做了些什么。

绿坝是个什么东西,http://www.zzjinhui.com/ ,他们的官网有一句话:“金惠堵截黄图像及不良信息专家系统是目前国内唯一的智能识别黄色图像内容的互联网信息过滤产品,彻底解决了网络反黄的技术难题,填补了国内空白,技术独创性和领先性得到了国家四个部委的一致肯定和支持:”

真是大言不惭,“唯一”,“填补空白”竟然敢用这些词,我没去下载试用,有人已经做过很详细的分析了,请在下面的页面查看:

https://docs.google.com/View?id=afk7vnz54wt_12f8jzj9gw

从中我们可以发现绿坝的一些特点:典型流氓特征、盗用开源软件、侵犯知识产权,弱智密码保护,就这样一个软件,竟然可以那样宣传自己,也能获得“国家四个部委的一致肯定和支持”,我们也大概能知道这四部委都是些什么货色了。

我们放低点要放,就算你们弄出来这么个垃圾软件,你自己忽悠SB去,你也不能让纳税人掏出40000000钱去强制我们当SB吧?让所有计算机出厂前预置这么个垃圾,工信部的人真XX的有才。

这件事大概应该是这个样子,这个垃圾软件的厂商花钱找关系在工信部推销他们的垃圾,结果工信部的一群SB脑子一热,还以为能做点政绩给我Dang看,于是就做了这些让全国人民恶心的事。结果呢,在人民的唾沫中这群SB消失了。

有些兴趣的朋友可以看下关于绿坝的关键词过滤:https://docs.google.com/Doc?docid=dczkbptk_0ffc2hvc9绿坝–花季护航,到底是在做什么,真的是“花季护航”吗?

“有试验的小白鼠说,装了绿坝.花季护航以后在word中输入“老师教学生玩摸球游戏”,word会被强制关闭,我一看,“玩摸”果然是关键字,”

推荐阅读:
我们需要家长,但不需要大家长!【回应外交部的“你有孩子吧”】

06-11
2009

多资源、多线程、断点续传

IN: Python   Tags:    Comments: 16

我要做一个支持多资源、多线程、断点续传的小工具,基于Python。Windows下有迅雷、FlashGet、QQ旋风(相当地泛滥),Linux下也有D4X,Axel ,aria2,那为什么还要写这样一个工具呢?

(1) 上面都不是Python写的。
(2) Linux下的下载工具都不能主动获取资源,而现在迅雷和FlashGet之所以快就是因为他们有资源。
(3) Linux下几个工具多线程、断点续传做的不太好。aria2似乎不错,不过我没编译过去,支持那么多协议,觉得有点臃肿。

其实从原理上讲,迅雷不过就是一个HTTP/FTP的多线程断点下载工具,现在做大了就来抢BT、电驴的用户,把这两个协议也加了进去。

前段时间看过axel,它的实现太简单了,只是固定的产生N个线程,然后把文件分成N块交给这些线程去下载。从迅雷的配置文件和下载的日志中可以看出来迅雷对下载文件的分块和线程的使用是有自己独有的方式(它线程下载的数据块有时很大4M,有时很小32K,即使在同一个线程中也是这样),我没办法知道迅雷是怎么做这个工作。所以我只能通过猜测和自己的一些想法来做这个工作。尽可能的保证合理的分块和线程使用。

创建一个下载管理器,包括配置信息,任务列表,一个具有速度值与使用次数的URL列表。

首先得到下载文件的大小(filesize),然后根据配置以及获得的URL数(N)对文件进行分块。
设置一个最小的分块值 MinPiece = 1024*128 (最小分块大于filesize的5%)
设置一个最大的分块值 MaxPiece = 1024*1024*200

if filesize < = MinPiece:
不进行分块。选第一个地址进行下载,如果该地址下载超时则使用其它地址下载。(是否可以考虑使用N个地址同时下载?)

elif:
把文件分为N块,每块大小为Piece。
if Piece < MinPiece
把文件分为N-1块,Until Piece > MinPiece

if Piece > MaxPiece
把文件分为N+1块,Until Piece < MaxPiece

生成任务列表,一个任务包括:URL,filename,range[start,pos,end]
任务列表中对任务进行标记,DONE,RUNNING,PAUSE,STOP(需要这么多吗?)

根据获得的资源数产生N线程的线程池。

逐步向线程池中增加线程:前提是所有线程成功运行,则增加一个线程。
每个URL对应一个线程的上限数(5),总使用线程数固定(35)

线程运行时检查是否有空闲线程,如果有,则把自己的任务分割(分割的办法使用折半方式,同时要保证分块大于MinPiece),放在任务列表中,同时修改自己的任务的分段信息。
加入任务列表时从URL列表中选一个速度较快的URL,且该URL线程数未达到上限。(如何判断是否达到服务器支持连接数上限?如果针对某个URL创建新连接失败则标记该URL为不可再连接)

线程运行时检查缓冲区的大小,当大于write_buffer_size时则写文件(大于文件的10%时也写?),并且写记录文件,更新URL列表中的速度值,做这些操作时要使用锁机制。这个write_buffer_size根据不同的文件对应不同的大小(2M--->16M迅雷使用8-256)。写文件时可以直接seek到需要写入的位置,如果操作系统不支持这种方式,则先用0填充文件。

线程对失效的URL进行标记,对不支持断点续传的URL进行标记。考虑GBK,UTF-8编码。
线程完成时与停止时做写文件操作与上面操作相同。

记录文件中保存任务列表:
URL,filename,range[start,pos,end]
这样续传的时候程序就根据记录文件载入所有的任务,然后开启线程,进行下载。
记录文件使用MD5校验(最后一行存放前面信息的MD5值)。

一个线程如果速度过慢,则释放当前的任务,把它扔回任务列表中,标记该URL很慢,由空闲的线程再次开启这个任务,这时候有可能又由这个线程接管,但是使用的URL不同,因为扔回任务列表的时候会先一个较快的URL。

HTTP请求需要设置一个超时时间。

———————————————————————-
只是把我的一些想法在这里先记录下来,所以比较乱,做的时候可能还会有些变化。至少我目前觉得这种设计方式还是比较智能和高效的,欢迎大家拍砖,如果有好的建议我会记录下来。

06-02
2009

五月培养习惯总结

IN: Life   Tags: ,    Comments: 11

早起的习惯在五月完全被破坏掉了,五一放假三天没按时起,然后四天回到正常状态,紧接着是连着十多天下雨,就再没按时起床了。 6/31

再说晚睡的情况吧,还是以前遇到的问题,放假的时候就规律不了了,玩太迟了。 25/31

写字基本上是“完成任务”了,大部分没去认真的写,本来是早上起来写字的,没按时起床导致把写字放在了晚上,进而影响了写字时的状态,哎!还有就是觉得一直没什么进步,写出来还那样,所以不认真了。 29/31

这个月读了《乌合之众》,《少有人走的路》,《SSL与TLS》,《精通PKI网络安全认证技术与编程实现》。

从五月总结中可以发现,人性中的惰性是很容易被激发出来的,一点外在的因素(下雨),就导致了一个人回到原点。这个月状态很不好,又遇到间隙性的迷茫了!

该写的程序没写,该看的书没看,正在我还想写该XX的XX没XX的时候,突然脑袋里冒出来一句话“其实你也做了不少事”,工作上的事完成的挺顺利,相关的东西也学了不少,也帮同学折腾了程序,还顺道更新了PyFetion,也看了几本书,也出去好好玩了几次…………

不知道为什么我老看不到自己的优点,老是这么不自信,难道我潜意识里是个完美主义者,希望自己可以做到潜意识里所期望的一切?

心智的成长是痛苦的,缓慢的,曲折的,希望儿童节能带去迷茫 。

BTW:->我觉得心理学挺有意思的,喜欢上了。
->我觉得写篇文章真的好不容易,半天才能凑出来百十字,真佩服人家动辄上万字的写东西。得多喝点墨水啊!

05-31
2009
Page 5 of 58« First...34567102030...Last »
loading...