- 浏览: 57772 次
- 性别:
- 来自: 北京
最新评论
文章列表
参考的是以下两篇文章:
Let’s Make a Map和Interactive Map with d3.js
GEO data下载在natural earth网站,不过我用的抽取数据的命令是:
ogr2ogr -f GeoJSON -where "ADM0_A3 = 'CHN'" cn_cities.json ne_10m_populated_places.shp
ogr2ogr -f GeoJSON -where "sr_adm0_a3 = 'CHN'" cn_province.json ne_10m_admin_1_states_prov ...
最近需要研究一个开源软件中协议的流程与实现,由于协议比较复杂,程序层次架构设计耦合严重,用wireshark抓包分析+log或者gdb跟踪代码效率都不高.想到之前java项目用过一种切面编程,可以在函数开始或结束等地方自动添加代码,而且有比较灵活的控制方式.当时注意到CPP也有这种编程的实现,于是琢磨着用到此项目中来.
项目主页:http://www.aspectc.org/
直接下编译链接好的linux下的包,然后开始编例子.
编译出现麻烦点,编译器报错:
sorry, unimplemented: inlining failed in call to ...
查看了一下源文件,是 ...
一次udp包错误的分析经历
- 博客分类:
- Server
前一段学了个命令netstat -su,拿着没事乱看服务器udp包的统计数据,发现某几台server的udp包错误率相当高,于是开始了这次分析之旅.
一般的netstat -su显示出来的* packets receive error,都是因为某个程序无法或无力完全处理udp包,导致系统udp buffer满了,然后内核开始丢弃数据包. 当然也有可能是系统的buffer size设的过小.可以用sysctl -a | grep mem查看一下系统的buffer size先.
确认不是系统配置问题以后,开始乱找程序原因.用tcpdump -i eth0 udp和tcpdump -i eth1 ...
从dmesg里分析core原因
- 博客分类:
- C/CPP Dev
服务器上由于怕软件bug以及磁盘的限制,一般会将core文件关掉.
ulimit -a查看当前core file size设置.
这样程序有bug崩溃以后,只能通过dmesg查看有限信息.典型信息如下:
collector[1847]: segfault at 000000000000000c rip 000000000040308a rsp 0000007fbffff820 error 4
at后面地址:访问越界的地址,rip:指令地址,rsp:栈地址,error:错误类型.
error number是由三个字位组成的,从高到底分别为bit2 bit1和bit0,所以它的取值范围是 ...
2013-01-18
git:
只显示修改的文件: git ls-files -m
bash:
Ctrl-W to kill the last word, and Ctrl-U to kill the line
vim:
vim替换时使用换行,输入CTRL-V <CR>来得到这里的 ^M(<CR>即回车键)
系统:
strace -ttt -p pid 查看正在运行程序的系统调用的时间点,可以为辅助查找系统慢的原因。
关于std map的插入和删除
- 博客分类:
- C/CPP Dev
关于代码里map的删除,有一点困惑:
在删除前用iterator保存位置,对map进行插入或删除后,iterator是否有效.
看完标准后释然,直接上标准:23.1.2.8:The insert members shall not affect the validity of iterators and references to the container, and the erase members shall invalidate only iterators and references to the erased elements.
原生的用lighttpd起的程序不好检查memory leak.
使用spawn-fcgi调起用valgrind起的fastcgi程序即可.
spawn-fcgi -n -a 127.0.0.1 -p 9000 -- /usr/bin/valgrind --leak-check=full --log-file=/tmp/valgrind.log /path/to/prog
spawn-fcgi -n -a 127.0.0.1 -p 9000 -- /usr/bin/valgrind -v --tool=callgrind --log-file=/tmp/valgrind /path/to/ ...
最近做日志分流,早闻scribed大名,正好安装尝试一下.据说源码很简单,安装很麻烦.
公司yum源里其实有打好包的scribe,可惜是centos5的,苦逼的未升级的历史遗留centos4只能蛋疼的从源码安装.
刚开始借鉴的这篇:
http://dongxicheng.org/search-engine/scribe-installation/
后来发现这篇更简洁:
http://agiletesting.blogspot.com/2009/10/compiling-installing-and-test-running.html
步骤都差不多,先装boost(已有),再装t ...
转自http://blog.chinaunix.net/uid-20554140-id-3144488.html
在/etc/screenrc里加入:termcapinfo xterm|xterms|xs ti@:
te=\E[2J
即可.
若滚动条不起作用,自动弹回,将profile里的scrolling项中的scroll on output去掉~
set ft=html & set ft=php
google之,网上就一个解决方法:改~/.screenrc.还得重启所有screen进程.
结果detach以后再reattach,设置失效.
继续搜之,无解.
只好自己重新折腾.
最后简单解决:
不用改~/.screenrc(改应该也可以,都设置为utf-8),直接用screen -rU reattach即可.
若screen -rU 进去后无效,则ctrl+a, :defencoding utf-8<cr> :encoding utf-8 utf-8<cr>,以后再reattach进程都用screen -rU即可.
这年头,google带来的信息量太大 ...
安装完gitosis以后要记得修改post-update权限
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
总结:
1. 重构:类中某个方法,纠结于多个出口与do{}while()+ret_code+break的方式,多个出口 - 行数稍少,但是return太多太刺眼,do{}while - 行数太多.纠结良久,拆分原函数变为5行,另两个函数一个变为8行,一个变为20行;还是易读性最重要,当纠结的时候,拆分逻辑吧.槑.
2. autoconfigure,automake:纠结于link: too few arguments. g之无解,只好用有限的理解读configure,加--disable-dependency-tracking解决之.圡.
3. 外链一第三方库,见2,成功配置生成静态库.c ...
网上一般会说有了spawn-fcgi以后,不需要lighttpd,那应该是针对PHP.
针对C写的fastcgi程序,应该还是需要lighttpd来转一下的.直接访问的话,得到的是空白页.猜测lighttpd调用c的fastcgi程序时候,传递了一些特殊的参数.
spawn c-fcgi process的script
spawn.sh:
spawn-fcgi -n -a 127.0.0.1 -p 9000 -- <fastcgi prog path>
lighttpd的配置:
lighttpd.conf:
在fastcgi.server域内加一行:
"/fcgi&quo ...
类似于
XXX package where not found, install them or build with --without-XXX
或
XXX-headers and/or libs where not found, install them or build with --without-XXX
用yum -y install XXX-devel.
devel应该为development version了.
配置fastcgi的时候,需要确认php等是否是支持fastcgi的版本.
若为C/C++,下载fastcgi的API/libraries,编译安装,设置LD_LIBRAR ...