小站Elpis
表妹今年高考,所以突然想到了这么个想法:
每天早上定时给手机发送励志的语句。觉得如果早上起床,能够收到一条励志的短信,会感觉很好。后来想想,发笑话也不错,能放松一下。
于是就开始做,顺带着学习Flask和python了。现在个把月过去了,网站基本完成,自我感觉也还好,毕竟是第一次坚持着做下来了。
刚开始的template的编写比较费时间。因为现在HTML5和CSS3的风头很盛,就直接用上了,还专门借了几本书来看。这中间改HTML,CSS,然后调,改调,改调,花了很长的时间。这中间受到了V2EX上bcxx(记不得具体的名字了)的blog的风格的影响(不过现在貌似没了,github上都没那个项目了),用了白色做底色,然后加了很淡的边框。然后慢慢的完善功能,现在终于基本的都OK了。
发送短信我是想通过飞信来实现,在网上找了找,有第三方的web接口可以用,但是要提供飞信密码,而且也不能保证实时性,所以就排除这个方法。还找到了Pyfetion,飞信的python实现。下下来,试了试,基本可以用。但是添加好友功能很纠结,基本都是无效的,而且返回值有问题。现在努力解决这个问题。
网址: http://www.elpis.dotcloud.com
Posted via UltraBlog.vim.
测试UltraBlog插件
测试下从vim发表markdown格式的文章
标题
标题1
- 列表1
- 列表2
- 列表3
标题2
- 列表4
- 列表5
- 列表6
水平线
斜体 粗体 粗斜体
超链接Google
代码
1 2 | import os os.path.append('.') |
1 2 3 4 5 6 | 保留格式 haha hasdf saf asdf asdf |
Posted via UltraBlog.vim.
UDP发送package过大时,手动分包
发送端:
将一个frame分割成n份,每份PAYLOAD_SIZE的大小,存放在DataPacket结构体中,DataPacketHeader中成员为:id 由当前的时间生成的唯一标示,用来识别是否同一个frame,从而在接受端组合成一个frame。total_num 一个frame总共分成了多少份来发送,在接受端判断是否接受了frame的全部的packet,如果全部接受了则拼成一个frame。len每个packet中payload的大小。DataPacket的结构payload在前,header在后,顺序不能变,这样是为了接收的时候能够少用几次memcpy,加快处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #define PAYLOAD_SIZE 30*1024 typedef struct _DataPacketHeader { quint64 id; //the specific sign quint32 total_num; quint32 num; quint32 len; } DataPacketHeader; typedef struct _DataPacket { quint8 payload[PAYLOAD_SIZE]; struct _DataPacketHeader header; } DataPacket; |
接收端:
首先申请一块内存buf,大小为frame的大小加上一个DataPacketHeader的大小。将buf分成N份,每份PAYLOAD_SIZE大小,最后一份大小为PAYLOAD_SIZE+sizeof(DataPacketHeader),对应一个frame需要N个packet来发送。然后声明一个大小为N的sign数组来记录某个区域内是否已经存放了数据。第n个packet的数据payload应存放在buf+n*PAYLOAD_SIZE地址处。实际接收时,将数据直接接受到buf中第一个空区域,即sign[i]==0的PAYLOAD_SIZE*i + buf位置处。在没有丢包,顺序到达的情况下,数据已经被放到了正确的位置。如果出现丢包或者没有顺序到达的情况,则把此处的数据memcpy到应该存放的位置,即datapacket->num * PAYLOAD_SIZE + buf处。
不断的接收,直到sign数组中每个元素都为1时,说明所有的packet都已经接收,且存放在正确的位置。此时buf中的数据就是frame的数据,size为FRAME_SIZE。
每次接受到一个packet的时候判断data->id是否与当前的相同,如果大于当前的id,则说明有新的frame在发送,而且旧的frame没有完全接收,此时,直接丢弃旧的frame,清空sign数组,开始接受新的frame。
全部代码在github:https://github.com/gfreezy/CameraVideoSendAndReceive
把png图片转换成css3
git删除远程分支
远程分支为tcpserver
git push origin :tcpserver
用vim删除行尾的^M
1 | :%s/^M//g |
^M为Ctrl+v+m打出来的
六维发布含有“海贼王”的主题时进行提醒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | # coding=utf-8 from sgmllib import SGMLParser import urllib2 import time import ctypes from ctypes import * msg = windll.user32.MessageBoxW interested = [u"海贼王"] class UpdatedEntry(SGMLParser): def reset(self): SGMLParser.reset(self) self.urls = [] self.titles = [] self.in_ul = False self.in_li = False def start_ul(self, attrs): if ('class', 'textinfolist') in attrs: self.in_ul = True def end_ul(self): self.in_ul = False def start_li(self, attrs): if self.in_ul: self.in_li = True def end_li(self): self.in_li = False def start_a(self, attrs): if self.in_li: for k, v in attrs: if k == 'href': self.urls.append(v) elif k == 'title': self.titles.append(v) def end_a(self): self.in_a = False def getWebPageContent(url): f = urllib2.urlopen(url) data = f.read() ## encoding = f.headers['content-type'].split('charset=')[-1] encoding = "gbk" ucontent = unicode(data, encoding) return ucontent def processUpdate(): url = 'http://bt.neu6.edu.cn/?gid=12' content = getWebPageContent(url) updated = UpdatedEntry() updated.feed(content) ## for (count, url) in enumerate(updated.urls): ## print "%s: " % updated.titles[count] ## print "http://bt.neu6.edu.cn/%s" % updated.urls[count] found = False for (count, title) in enumerate(updated.titles): for interest in interested: if title.find(interest) != -1: print "%s found:\n%s\nhttp://bt.neu6.edu.cn/%s\n" \ % (interest, title, updated.urls[count]) msg(0, u"%s\nhttp://bt.neu6.edu.cn/%s\n" \ % (title, updated.urls[count]),\ u"%s found" % interest, 0) interested.remove(interest) if len(interested) == 0: return True return False def timer(func, intervl): while True: if func(): return time.sleep(intervl) if __name__ == '__main__': ## msg(0, u"hello", u"hel", 0) timer(processUpdate, 10) ## if not processUpdate(): ## print "not found" |
Vim emacs配置文件
开源世界旅行手册
在网上搜emacs相关的内容时,找到个好东西。
是linux toy的文档,名字叫《开源世界旅行手册》。
听名字就很酷,里面的内容也真的很酷,文笔很喜欢。
基本跟Linux有关的都有涉及到,而且文档的主人也力荐
Archlinux,跟我一样。
文档地址如下:
emacs插件el-get的一点记录
在http://emacser.com/el-get.htm上面看到了el-get的介绍,便下载下来尝试了一下。按照emacser上面的介绍一步一步的往下做,便掌握了基本的操作方法。闲逛时发现了highlight-tail这个插件。按照作者说的,用很sexy的渐变颜色来显示最近修改的地方。感觉很cool,便想尝试下。highlight-tail在这下载 。我想通过el-get的方式来安装。直接修改el-get-sources变量
(setq el-get-sources
'(el-get
highlight-tail))
(el-get)
出错。


