- 博客(291)
- 资源 (30)
- 收藏
- 关注
原创 python的并发库:asyncore和eventlet
asyncore就是纯粹的异步socket,和c++使用异步socket没有什么大的区别,就是封装了loop等。实际上还是会有很多状态。eventlet采用coroutine,本质上也是异步socket,但是已经是将异步socket同步化,没有任何状态(状态都保存在栈中),只有异步才需要考虑状态,同步根本没有状态之分。所以eventlet明显比asycore要好用很多,也复杂很多。贴一
2013-09-06 14:03:50 5189
原创 日报使用腾讯开放API
日报加上数据分析,权限一直是个问题,所以花一天时间和腾讯的开放API对接,能使用QQ号登录。https://github.com/winlinvip/daily-report
2013-09-05 19:21:48 1480
原创 性能优化的奇点
只考虑单进程的性能,多进程可以弥补单进程的性能缺陷,但是一样有单进程的性能优化问题。最初服务器的性能大约是支持800个连接,就跑到CPU100%,优化后能跑到1500连接;若码率为500kbps时,带宽从400Mbps直接上升到750Mbps,提升80%多。有些地方还是真是值得注意,性能优化就和创造一个复杂系统一样,只要指导思想对了,指日可待。性能优化工具最重要,靠人的感觉绝对是不准的
2013-07-26 11:05:54 1550
原创 centos6的性能分析工具集合
保建国是我们另外一个组做存储的人,对内核比较了解,看到我在做性能优化,说perf这个可以看到内核消耗的时间。gprof主要是优化用户空间程序调用,但有时候程序性能就是内核使用时间太多。果然,发现socket write的系统调用次数太多,改成用户空间大的buffer之后,一次发送给内核发送,性能直接提高50%。centos6下面才有这个工具,系统自带的。使用方法:perf re
2013-07-19 10:34:05 2712
转载 linux下破解Python集成开发环境WingIDE4.1,以及使用PyCharm的使用
转载这篇文章:http://blog.csdn.net/hmily_andy/article/details/7198500windows的破解:http://blog.chinaunix.net/uid-20393955-id-3043667.html不过获取偏移量那部分我写了个脚本。readme.txt下载安装包:http://www.win
2013-06-20 18:55:20 2611
原创 KDD: dev number
设备驱动有个number,分为major和minor。驱动安装后,在dev下面创建node,即驱动对应的文件,读写文件即使用驱动。// hello.c/**# to make and install modulemakesudo insmod hello.ko# print the installed module major number.cat /proc/devices
2013-06-20 08:51:55 1289
原创 python cherrypy RESTful API,cherrypy支持跨域ajax访问,CROS,crossdomain ajax
cherrypy的文档说明比较少,看官网的例子,在python2.6中不能直接运行,需要修改如下:#!/usr/bin/python2.6'''see also:http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htmhttp://docs.cherrypy.org/stable/progguid
2013-06-09 11:52:49 3933
翻译 关于段错误的看法。。。
Another important difference between kernel programming and application programmingis in how each environment handles faults: whereas a segmentation faultis harmless during application development
2013-05-30 16:17:44 1085
原创 gdb几个有意思的用法
gdb比较有意思的用法。1. 调试core dump文件时,可以用frame查看堆栈的某个位置(当然gdb调试也可以)。这样可以看到其他位置的变量,而不仅仅是出错的那个地方。2. 自定义函数,譬如我需要频繁的执行c然后bt,可以定义个函数:(gdb) define doit>c>bt>end然后执行这个函数就好了:(gdb) doit然后不断回车就可以了。3.可以用
2013-05-29 11:55:22 1542
原创 KDD:HelloWorld
源文件:// hello.c#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk(KERN_ALERT "hello, world, init\n"); return 0;}static void hello_exit(void){ pri
2013-05-28 09:53:56 1356
原创 ARP:地址解析协议
以太网内部是用MAC地址传输的,ARP就是IP到MAC的映射。本机的IP和MAC信息:[winlin@dev6 ~]$ ifconfigeth1 Link encap:Ethernet HWaddr 08:00:27:55:0F:09 在hosts中添加一个地址记录:vi /etc/hosts192.168.20.190 winlin002其中,wi
2013-05-11 22:06:59 5897
原创 NAT穿透,UDP打洞程序
在看NAT穿透和UDP打洞原理,网上都是讲原理,没有程序,我把程序写出来。server.py,辅助打洞的服务器。peer.server.py,被打洞的节点。peer.client.py,主动打洞的节点。基本原理是:1. peer.client向peer.server发个包,把自己的洞打好,这样peer.server可以给peer.client发包。这个包会被NAT拒绝掉,所
2013-05-07 18:22:23 4595
原创 找了2周的一个bug,鬼使神差的重现了这个bug
从2013-04-28找到2013-5-27,一共10天。提交了16次修正代码。有时候是Segmentation fault.,有时候是Illegal instruction。死在了一个不可能死的地方(当然所有地方都不可能死,在程序员看来)。最开始怀疑是用了空指针,所以加了很多assert(p != NULL),发现不管用。然后用tcmalloc找,找到了一个,但是还是
2013-05-07 09:06:27 1789
原创 python2.6写看门狗并发邮件
top -b 就可以去掉特殊字符。python写看门狗很合适,永不死,以及方便获取各种信息。若程序死掉,获取一些信息,然后重启程序,发邮件。发送的邮件为html格式,比文本更方便阅读。#!/usr/bin/python2.6# -*- coding: utf-8 -*-import time;import os;import sys;import signal;im
2013-05-05 21:49:43 2636
原创 造第一个SIP包REGISTER
在网上看到SIP都是直接讲明文,没有谁把代码贴出来的。用Python2.6写了一个REGISTER消息,用wireshark抓包可以抓到,不用服务器端支持,是UDP的。import socket;import time;s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM);s.sendto('REGISTER sip:192.
2013-05-04 17:14:57 1870
原创 flash p2p(RTMFP)协议
adobe在2012-12-13公开了flash p2p的协议,最新的更新是2013-4-15.http://tools.ietf.org/html/draft-thornburgh-adobe-rtmfp-06在http://www.rtfmp.net上有协议的链接。翻译第一段:1. 简介 Adobe的RTMFP是为在IP网络中的点对点数据传输服务设计的。RTM
2013-05-04 10:17:34 3428
原创 还是使用tcmalloc检查内存错误
内存越界问题是最难查的c/c++问题,valgrind很有用,有时候不能用valgrind(譬如代码中有setjmp和longjmp时),可以使用tcmalloc库查内存越界问题。
2013-05-03 15:34:29 4566
原创 写可读的代码,代码不可读就是杯具
比较下代码:和下面的代码:前者除了函数名可读,其他的基本上不知道在干吗。后者基本上都是望文生义。代码可读性差,就是不负责任。写给自己的代码,往往很随意。是对自己不负责任。写给大家的代码,不能这么干,别人看不懂,就是对他不负责。
2013-04-28 13:48:40 1631
翻译 [Uncle Bob Martin] Screaming Architecture
http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html注:原文在后面。Screaming ArchitectureUncle Bob30 Sep 2011ArchitectureImagine that you are looking at the bluepri
2013-04-25 18:43:06 1415
原创 linux socketpair(UNIX domain socket)
/*g++ sp_block.cpp -g -O0 -o sp_block*/#include #include // socketpair#include #include // fork#include #include // atoi#include // errno#include // strerror#include int RecvFD(i
2013-04-21 19:13:40 2067
原创 linux MBR
http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.htmlIBM这篇将boot的过程的文章,提到MBR的结构:找了一台linux虚拟机,取数据如下:[winlin@dev6 ~]$ df -hFilesystem Size Used Avail Use% Mounted
2013-03-13 09:33:18 1368
原创 gprof性能分析绝对不能猜测
在流媒体服务器中,需要存储直播数据,发送给客户端,由于客户端的网速不一定都是很快,所以需要一个数据结构来存储。由于直播数据是视频和音频包,实际上是有时间序列的,那么用list最合适了,list需要频繁的在尾部插入,在头部删除。那么就用std::list。后来发现系统出现问题,大约30%的时间都用在了list的operator++上面:Each sample counts as 0.
2013-02-23 18:11:21 2058
原创 ssh使用key登陆
生成private key和public key:ssh-keygen生成key:id_rsa.pub 公钥id_rsa 私钥将key添加到目标机器:.ssh/authorized_keys编辑允许登陆的ip:sudo vi /etc/hosts.allow编辑服务器的名称:sudo vi /etc/sysconfig/n
2013-02-08 20:48:46 1170
原创 e2esoft VCam推流时推送声音
VCam可以虚拟摄像头,视频源可以是文件,FMLE推流时若需要使用视频文件的声音,可以如下设置:在声音设备中,将默认的输出设备设为e2eSoft VAudio Speaker,如下图所示:这个时候,VCamManager的声音就输出到了这个设备,很重要的一点是,需要把其他声音过滤掉。在音量合成器中,选择e2eSoft VAudio Speaker设备,如下图:
2013-02-04 16:55:55 5191
原创 linux服务脚本/etc/init.d/xxxx
服务脚本的写法:#!/bin/bash### BEGIN INIT INFO# Provides: MyServer# RequiRED-Start: $all# RequiRED-Stop: $all# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Descripti
2013-01-28 13:43:15 1918
原创 linux使用pid file
UNIX环境编程里面,讲了如何使用pid文件,但是比较隐晦,今天整理一下:原文如下:#include #include #include #include #include #include #include #include #define PIDFILE "deamon.pid"#define write_lock(fd,offset,whence,len)
2013-01-28 12:32:18 2889
原创 getrusage性能
#include #include #include #include /*** test in 32-bit, Red Hat Enterprise Linux AS release 4* Linux 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux* 1. donot us
2013-01-23 11:36:03 1151
原创 获取客户端ip地址
int GetPeerIP(int peer_fd, std::string& ipv4_or_ipv6_addr){ int client_fd = peer_fd; // discovery client information sockaddr_in addr; socklen_t addrlen = SmtSizeof(addr); if(
2013-01-22 15:38:48 1236
原创 linux(Centos6)安装svn服务器
直接执行:sudo yum install -y subversion就可以安装svn服务器。启动服务器方法为:svnserve -d -r /svnroot指定/svnroot目录为代码仓库的路径。新建仓库的方法是:cd /svnroot/svnadmin create repos使用时为svn方式,例如:svn co sv
2013-01-18 18:31:01 998
原创 linux(Centos6)安装SVN支持svn和svn+ssh方式
svn方式很简单,svnadmin create之后svnserve启动就可以访问,用svn+ssh方式需要使用serve的tunel即隧道方式,即在登录时启动一个隧道将请求作为svn方式。这个方式好像很难找到资料,百度上的真是大多是互相copy,几乎都不验证,费了老半天劲才搞明白如何做。其中有几点要注意:1. svn+ssh,需要添加一个linux系统用户,能登录系统的。2. 用
2013-01-18 18:28:27 2457
原创 linux(Centos6)安装Redmine 2.2.1
Redmine比BoardReview还要折腾,主要是让apache支持Redmine(即不通过3000端口访问,通过80端口访问),总是提示错误。后来查看apache的错误日志,才知道需要修改:1. config/environment.rb,指定环境变量。ENV['RAILS_ENV'] ||= 'production'2. public/dispatch.fcgi,加载rubygem
2013-01-17 17:32:30 5785 2
原创 linux(Centos6)安装boardreview1.7.1
最近要开始团队checkin代码,所以代码审查boardreview很重要,昨天把boardreview搭出来,svnhook那块还没有搞,不过这个简单了。最关键的是两个问题:1. boardreview是管理系统,所以依赖的东西特别多。python必须要2.6以上。2. sourceforge.net被墙了,所以有些东西在pypi上下载后安装就好了。服务器是centos6,以下是
2013-01-17 10:06:58 2959
原创 ccache编译速度很快
ccache-3.1.9.ziphttp://ccache.samba.org/http://samba.org/ftp/ccache/ccache-3.1.9.tar.xzhttp://ccache.samba.org/manual.html一个快速编译的工具,确实很快,会缓存很多头文件。一般如果改动了core(所有模块依赖它),那么所有的都得重新编译,一般是23秒左
2013-01-09 14:26:09 1568 1
原创 使用自己制定的openssl
若程序需要调用openssl,但是系统的不见得就是需要的版本,这时候可以自身编译一个版本出来,然后引用当前目录的libssl.so。所以需要在编译时指定so,并且用patchelf来修改程序查找so的目录。并且,libssl.so本身是依赖于libcrypto.so,所以也需要修改它的路径。第一步,编译opensslmkdir objscd objswget http://
2013-01-07 18:21:28 2257
原创 centos设置yum源为光盘源
公司服务器是RHEL4,所以下了个Centos4的镜像,装上虚拟机发现有两个问题:1. 安装时崩溃:VirtualBox添加虚拟机时不使用SATA硬盘,改为IDE硬盘,估计那个时候还没有SATA。2. yum无效,因为RHEL4已经不维护了,所以需要将yum的源改为本地,但是改过之后还是不行,有两点要注意:第一点,操作步骤:[winlin@localhost ~]$ cd /e
2013-01-07 16:07:23 3481
原创 Android桌面小组件的命名空间
今天发现,如果命名空间设置不对,无法控制widget的控件:public class ParentsAppWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWi
2013-01-07 07:40:46 1527
原创 Android桌面小组件:最简例子
http://blog.csdn.net/winlinvip/article/details/8471212是Android的实例,今天做了一个最简单的实例,即显示两个文本。代码下载地址:http://download.csdn.net/detail/winlinvip/4963888步骤如下:1. 安装ADT:下载开发包:http://developer.androi
2013-01-06 08:58:57 4231
翻译 Android桌面组件开发例子
我的索爱手机给老丈人用了,但是老人家眼睛看不清楚,所以我得开发一个软件,方便使用。型号是SonyEricsson Xperia X8 E15I,是Android2.1,很老的版本了,但在2010年算比较新的了。试了一下,其实android的开发很简单,没有有些人说的那么复杂。1. 开发环境先下载ADT开发工具:http://developer.android.com/sdk/ind
2013-01-06 00:01:05 2699 1
Pattern.Oriented.Software.Architecture.Volume.2
2012-11-29
mp4 file format引用文档
2012-11-04
The.Cpp.Programming.Language.Special.Edition
2012-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人