可可熊D窝

Keep it simple, stupid


  • 首页

  • 关于

  • 标签182

  • 分类8

  • 归档359

  • 搜索

Google Map

发表 2009-08-04 | 分类 Life | 评论数:
| 字数: 1k | 阅读 ≈ 1 分钟

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记录了下来,不过没使用好的解决方案。

Comments

草儿: 墨卡托投影。。。。 我发现你现在就是一全才。。。

可可熊: 晕 没看到我说看不懂了 要站在巨人的肩膀上。

da壮熊: 恩,要不断学习。要不断向cocobear学习!

da壮熊: 呃。。。为什么IE发不了评论。而firefox却可以。。。

haoziyanwo: 向cocobear学习,hoho

初到广州

发表 2009-06-28 | 分类 Life | 评论数:
| 字数: 748 | 阅读 ≈ 1 分钟

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

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

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

Comments

家长: 靠,坐飞机还晕,服了你

wind: 那家伙还没来南方就已经在那儿嫌东嫌西了,不用鸟他的。。。 话说我当年都没嫌西北干燥的说。。。。。 只能说这只适应能力太烂了。。。 看看人家刘洋在南方活的多滋润阿。 PS:LS不要这几天不要太甜蜜,我怕会刺激到某些人的。。。

Amankwah: 那段在修BRT,据说十一月完工……不便你是得忍受了;由此带来的便利,下次来享受吧。

可可熊: 什么是BRT啊? 刺激“某些人”是指谁啊?说清楚啊!

kermit.mei: Cocobear要是有时间可来深圳一日游,我代表陕西人民在深圳欢迎你! 呵呵,我来深圳的第一感觉是这里空气真TMD好,到处都是花园,不过确实很闷热……

rhlei: 熊仔开始了旅行生活~~

luguo: 两小时的飞机你都累。。。。。我无语了。。。。

可可熊: 有可能要去深圳的。 出差生活啊,可不是旅行,每天还要改程序改到晚上11点。。。

Gh0u1: 建议关闭wp的评论功能. 请看http://secer.org/0dayexp/wordpress-ping-lun-xian-shi-xss-lou-dong.html

Keengle: 广州的印象这么差吗?我在广州,公路老在修,确实有点烦

小虾: 广州好的地方也蛮多的! 我在大学城,这里简直像个工业园。

可可熊: 基本上没怎么逛 刚好中山路那块在修什么快速公交 感觉乱的很 :-)

PHP中使用openssl

发表 2009-06-17 | 分类 Life | 评论数:
| 字数: 649 | 阅读 ≈ 1 分钟

服务器端要对客户端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代码一直出错,没办法,只能放在别的地方。

Comments

卢松松: 牛啊 程序高手!~以后多多交流啊!

冬瓜蛋汤: 那个google code的链接没有权限访问哦。。 能不能开下权限,谢谢!

绿坝

发表 2009-06-11 | 分类 互联网 | 评论数:
| 字数: 1.6k | 阅读 ≈ 1 分钟

我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会被强制关闭,我一看,“玩摸”果然是关键字,”

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

Comments

crazyfranc: To silence: 是政治监控,政治防火墙是GFW. 这个软件我看过小榕的分析,感觉真是应验了”流氓有文化,是人都害怕”这句话.而且据说这个项目花了¥4780w!

可可熊: 老大,你竟然来我这里刷屏!

dream: 我都已经无力去骂了….

家长: 你个无知烂民,竟敢污蔑我伟大的party,想我天朝天天有饭吃,家家有房住,人人有衣穿,比万恶的资本帝国主义要好不知道多少万倍,简直是一个在天上,一个在地下还要挖口井,井里再要挖个坑。想我天朝美好生活,再看帝国主义践踏下处于水深火热困苦中的全世界无产阶级同胞们。现在我天朝伟大的“攻心部”出来保护一下下一代可爱的花朵们,你这个贱民就在这儿唧唧歪歪,看来你真是想去玩躲猫猫了。

luguo: 恩,gong匪嘛~~

YOUI: 共建和谐社会,大家共发财,发大财!呵呵

wind: 怎么都在说这个?昨天公司里也在讨论这个。。。

Amankwah: 竟然越过了软件部署的小范围试用阶段??这么强大?这些人NB啊,一次到位!崇拜一下……

Amankwah: 唉……真强大啊~

Silence: 不如说是政治防火墙

Kermit: 我觉得这和那个IPv9有得一拼! 估计一波人想搞河蟹工程混点政绩,另一波人想弄点钱花花,于是乎同一个产品,加载上不同的梦想,以一切为了孩子的名义大张旗鼓地开卖了!

Brhum: ≈⊙≈螃蟹,天天向上

Gavin: 难道比我党我金盾工程还历害?

NONENONE: 这个软件我也听说了, 给我的感觉就是不是很好, 我没用过, 所以其中有没恶意的东西我自己没结论. 不过这个软件有一个好处大家有没发现? 让所有使用的人都成为高龄处男女, 结果会产生比计划生育还要理想的效果,(:D 这个只是想象了)

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

发表 2009-06-02 | 分类 Life | 评论数:
| 字数: 2.9k | 阅读 ≈ 3 分钟

我要做一个支持多资源、多线程、断点续传的小工具,基于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 = 1024128 (最小分块大于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请求需要设置一个超时时间。


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

Comments

bones7456: 支持!最近我也迷上了python…

est: 博主把flashget, 旋风的资源请求格式一锅端了吧。

timesking: 要在设计的时候做好强大的代理构想,我们很多人都在公司NTLM的防火墙后面。有时候用curl很好,但是就是断点续传麻烦。其他很多断点续传工具flashget等都无法使用NTLM代理。所以都无法使用

lun: 支持博主,linux下,下载效率不高,是个事实。

Zhangxj2008: 把设计的过程也写下来吧,用UMLChart。顺便开源,有很多人关注啊!

Zhangxj2008: 多看看网络蚂蚁有很多可以参考。但是P2P下载就不太明白了。

haoqiwawa: 设想挺有创意的。支持啊!

haoqiwawa: 我手机短信发不出去了,你忙完上QQ了叫我啊

草儿: 看来大体思路你是有了,就看下面怎么做了。希望能早日做出来。 其实可以先从简单做起,然后一步步丰富功能。

c: 没意思!只会抢占兄弟带宽资源!

shuge.lee: 支持 能开源和做成跨平台更好 舒阁(code.google.com/p/shuge)客户端对这样的下载工具有强烈的需求。

Amankwah: 多资源是怎么实现的?没有服务器,客户端自己去试?还是通过迅雷等的服务器来获取信息,或者是用搜索引擎自己分析? 另外,对这个相当感兴趣,考虑怎么管理这个项目?弄到Google code上去?sf上去?

M: 迅雷不仅仅是一个HTTP、FTP下载工具。对于下载过的文件,它进行摘要,从而可以识别网络上不同URL对应的相同文件,这从跟上本解决了多源的问题。如果只是分块下载,服务器端的带宽总是有限的。 在摘要的基础上,相同文件使用新的URL如何匹配摘要值这些都是一些具体的问题。

可可熊: http://cocobear.github.io/demo/pythunder/ 利用迅雷的资源。 google code,也不会是个大东西,一个小工具而已。不过最近一直忙公司的事。。。

deamon: 建议用Twisted(强大的网络框架), 可以单线程分块下载。 最近也想实现一个多线程下载工具用在自己的项目上。

ubunoon: NTLM本来就已经由这个库了,不过没有对线程进行Sleep。 python写的download工具,利用迅雷的资源,一个很好的方式,至少在国内,通吃了所有的http下载,只要用的人不是很多,楼主还是可以放心的。

1…8910…72
cocobear

cocobear

爱折腾的技术宅一枚

359 日志
8 分类
182 标签
RSS
GitHub E-Mail Twitter 豆瓣
友情链接
  • 王聪
  • 老大
0%
© 2007 – 2020 cocobear | 521k | 7:54
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v6.7.0
Hosted by GitHub Pages