前不久糗百改版,所以原有的qiushibaike.vim插件用起来会有一些问题,今天有时间就修改了一下. 如图:
下载地址: http://www.vim.org/scripts/script.php?script_id=3083 有不清楚的朋友可以到 用Vim(gvim)看糗事百科查看说明。
作者是 Vim.
发布于 in最后更新于 .
前不久糗百改版,所以原有的qiushibaike.vim插件用起来会有一些问题,今天有时间就修改了一下. 如图:
下载地址: http://www.vim.org/scripts/script.php?script_id=3083 有不清楚的朋友可以到 用Vim(gvim)看糗事百科查看说明。
作者是 Web开发.
发布于 in最后更新于 .
用C++越久,越是觉得C++太多陷阱,真是防不胜防。 我们看这样一段代码:
#include <stdio.h>
using namespace std;
class C
{
public:
C(int a) {
printf("%d\n", __LINE__);
}
virtual ~C() {}
};
int main(int argc, char **argv)
{
C x1(1);
return 0;
}
编译执行正常,结果是:
7
然后我们改一下,把构造函数变成无参数的:
#include <stdio.h>
using namespace std;
class C
{
public:
C() {
printf("%d\n", __LINE__);
}
virtual ...
作者是 Web开发.
发布于 in最后更新于 .
各位C、C++开发的朋友们,有没有想过小小的printf也会有陷阱呢?这篇文章,我们就深入来探究一下(代码均在suse10 32位系统下编译测试通过)。 废话不多说,直接上代码:
int64_t a = 1; printf("%d\n", a);
结果是多少呢?当然是1,你可能会说。 我们来看一下结果:
1
果然是1!但是你会不会以为是 a 首先被自动转化成了 int 类型,然后输入为 1的呢? 如果真这么简单,本文到此也该结束了。我们换一个写法:
int64_t a = 1; int b = 2; printf("%d, %d\n", a, b);
这次的结果是多少呢?1 和 2?真的吗?我们来看一下结果:
1, 0 ...
作者是 Web开发.
发布于 in最后更新于 .
在日常的前后台联调中,我们都习惯用host的方式来使某个域名的cgi都访问测试环境,然而这有一个显而易见的问题: 如果一个域名下有十几个CGI,而这次提测的只有其中的一个,那么要想整个环境可用,你除了要保证这个CGI可用之外,和你完全无关的十几个CGI也要全部调通。 很纠结,不是吗? 其实我们有更好的方式,那就是用反向代理,我们可以用nginx来实现。 以 appsupport.qq.com 这个域名举例,比如本次提测的cgi路径是:
/cgi-bin/appstage/send_topic.cgi
这个cgi要访问测试环境: 172.16.197.186;而这个域名上的其他cgi都要访问正式的外网环境(如10.137.148.124)。 到http://nginx.org/en/download.html下载windows版本的nginx,解压到C盘,然后修改他的nginx.conf文件如下:
#测试环境 upstream test_env { server 10.6.207.119; } #预发布环境 upstream pre_env ...
作者是 Web开发.
发布于 in最后更新于 .
相信对于这个标题,用过lisp的朋友一定不陌生,本来也是准备了一大堆理论要讲,想了想还是直接举例子比较好。 就举最近产品提的一个产品需求吧,简单描述一下:
公司内部都是用C++,当时第一点想到的肯定是配置一个xml文件,里面配置上这些参数,在进程启动的时候,用tinnyxml或者其他xml解析器把xml解析成C++可以辨识的数据结构。
我们来看一下这个xml配置有多复杂:
<freq_config interval="60" pt_relevant="1">
<app_list>
<app appid="0" max_day_load="360000">
<time_range_list>
<time_range begin_time="1" end_time="5" load_perc="0.1" />
<time_range begin_time="17" end_time="20" load_perc="0.5" />
</time_range_list>
<pt_config ...
作者是 Web开发.
发布于 in最后更新于 .
之前已经已经写过一篇《从开放平台建设者角度对应用开发者的一点架构建议(1)》,主要是介绍了最基本的openid、平台数据、应用内部数据的存储建议,这一次我们更深入一点。
对之前的文章,我们提到了三种数据:
相信大部分个人开发者的第一反应是,上面每份数据建一张表,之间建立很多外键关系。这样的确会有很大的好处,很多数据查询操作都可以直接通过sql语句完成,比如:
上面的架构都很好的,并且开发成本非常低,但是这一切的前提是你的应用的用户量有多少。
100w是个坎,100w之前没有任何问题,100w之后,这种架构就是垃圾
很多人会说,对于一个小应用,考虑那么大量用户干嘛?你这是过度设计了吧。
有这种思想的人不少,没错,当年facebook过100w用户的时候,已经是一家有很多职员的公司了。那你会不会觉得,当我们的小应用成长为100w用户的时候,我们已经有了足够的资金,足够的职员,可以考虑重构了?
然而事实是,zynga新推出的游戏《帝国与同盟》在facebook上上线一周,日活跃就达到3000w,更别说注册用户量。而就国内的情况来说,在朋友网上面的任何一款应用,只要不是太差,1~2个月 ...
作者是 Web开发.
发布于 in最后更新于 .
之前的文章已经提到了 django+fastcgi的运行并不如意(web.py+spawn-fcgi却正常很多……),所以特意抽时间研究了一下uwsgi,试了一下,运行的很好,也很快,哈哈。 所以笔者的所有之前用apache+django搭建的项目(如fuload等)都已经替换成了nginx+django+uwsgi。 一.安装uwsgi
xml_implementation = libxml2改成
xml_implementation = false
python uwsgiconfig.py --build
python setup.py install
这样 ...
作者是 Web开发.
发布于 in最后更新于 .
在上一篇文章linux下nginx+python+fastcgi部署总结(django版)中,我们部署了nginx+django+fastcgi的环境,这次我们来部署一下nginx+web.py+fastcgi。 其实web.py上的官方网站已经说的比较清楚了,原文如下: http://webpy.org/cookbook/fastcgi-nginx 这里主要讲一下一些原文没有照顾到的地方。
一.安装依赖
二.配置nginx
在server配置项下增加
location / { #这两种方法都可以,只不过spawn-cgi启动的方法不同 #fastcgi_pass 127.0.0.1:9002; fastcgi_pass unix:webpy.sock; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param ...
作者是 Web开发.
发布于 in最后更新于 .
最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx+fastcgi,此文是整个搭建的步骤,主要留作备忘,也希望对大家有所帮助。
注意:虽然本文成功的搭建了django运行fastcgi的实例,但是在实际运行中发现了很多问题,比如程序执行异常,进程在每次请求之后退出之类的。可能是我机器的问题,也可能是程序本身bug,大家如果用来搭建外网环境,请务必多多测试。
一.编译nginx
在网上买了一本《实战nginx-取代Apache的高性能服务器》,写的比较浅,主要是些配置方面的东西,不过却正是目前我所需要的。
由于需要支持https和rewrite,所以除了nginx的源码之外,又下载了 openssl-0.9.8r.tar.gz 和 pcre-8.12.tar.gz,把他们和nginx-1.0.4.tar.gz放到同一个目录。
为了方便编译,笔者写了一个脚本,代码如下:
#!/bin/bash #============================================================================= #脚本所在绝对目录 abs_path(){ local path=$1 local basename=$( basename ...
作者是 Vim.
发布于 in最后更新于 .