小站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

http://www.stubbornella.org/content/2011/04/25/css-3-gradients/

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配置文件

vim  emacs配置文件同步到github上了,这样以后就不怕弄丢了

地址如下

vim        git://github.com/gfreezy/vimrc.git

emacs  git://github.com/gfreezy/emacs.git

开源世界旅行手册

在网上搜emacs相关的内容时,找到个好东西。

是linux toy的文档,名字叫《开源世界旅行手册》。

听名字就很酷,里面的内容也真的很酷,文笔很喜欢。

基本跟Linux有关的都有涉及到,而且文档的主人也力荐

Archlinux,跟我一样。

文档地址如下:

http://i.linuxtoy.org/docs/guide/index.html

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)

出错。

Read more...

无觅相关文章插件,快速提升流量

Next Page »

Recent Comments

Search