2013年2月18日星期一

免费杀毒软件avast!推荐


avast!杀毒软件是由位于捷克首都布拉格的AVAST Software a.s.公司于1988首次发布的,其中央扫描引擎成功通过了ICSA实验室认证以及西海岸实验室的测试过程, 软件亦结合有反间谍软件功能、反Rootkit功能以及自我保护能力,在AV-C、AV-Test和VB100等国际知名测试机构的测试中也获得了不错的成绩。迄今全世界共计超过一亿七千万位用户使用avast!。
官方网站:http://www.avast.com
avast!有家用用途的免费版本以及企业和专业用户的付费版本。其在WindowsMacLinuxAndroid系统上都推出了免费版本。家用版本中Mac和Android版完全免费,Linux版允许非商业机构免费使用,Windows版分为免费杀毒软件、全功能杀毒软件和网络安全软件,其中免费版可以永久免费使用,相比较其全功能的网络安全软件缺少了手动沙盒、安全地带和防火墙、反垃圾邮件这些附加功能,不过依然保留了文件防护,邮件防护,网页防护,P2P防护,即时消息防护,脚本防护和行为防护这八大核心模块,在防护和查杀上相比其付费版基本没有删减。所以其免费版依然值得推荐,依然值得大家下载使用。
下载avast!免费版后即可安装,安装时注意不要勾选其捆绑的谷歌浏览器

去掉谷歌浏览器前面的对勾后,点击快速安装来安装软件,安装完成后会自动进行一次快速扫描

安装完成后,设置下去掉那些没用的社区功能,点击主界面上的设置,在打开的窗口里点击社区,去掉“显示avast!推荐功能”和“显示社交功能”前的对勾后点击确定,可以让界面清爽些。

然后点击“维护”中的“注册”来填表注册一年免费许可(免费版是永久免费,不过需要每 12 个月进行一次重新注册,但在此之前,摘要主屏幕上会显示一条消息,提示您的注册即将到期。只需重新注册,您的保护即可延续 12 个月。)

注册后,更新病毒库,就可以使用了。还可以连接自己的avast!帐号(主界面上点击连接后使用邮箱连接,如果不能连接可以在国外VPN下重试)

avast!防护查杀都不错,资源占用也很少,不过有些小问题,比如卡程序、卡下载等,下面说说解决方法。
小a首次安装成功后进行一次全盘扫描,扫描前打开PUP(方式是,在完整的系统扫描下点击更多详细信息然后点击设置再点敏感度,勾选PUP保存即可),扫描需要一些时间,扫描后就基本上不会出现卡程序的现象了。

至于卡下载,这是小a的网页防护搞得了,其默认扫瞄80端口所有数据包括下载。解决方法很简单, 相比大家都是使用的是IE、谷歌或火狐这几个主流浏览器,那你就可以在网页防护的专家设置里勾选只扫描知名浏览器那个选项即可解决。

更多的功能介绍使用,可以点击界面上的支持,然后点击Open help来参考其官方制作的简体中文帮助文件学习。
其收费版中的安全地带中使用其安全DNS服务器功能默认可以防止DNS污染,及其他被DNS污染的网站,还有其Android版也很强大啊,而且完全免费,安卓用户不妨试试。

免费领取迅雷8GB离线空间 别错过哦

迅雷的VIP还是非常给力的,闲吧之前就经常去搜索迅雷VIP账号使用,但毕竟迅雷VIP账号少而且经常需要更换。这下好了,可以免费领取迅雷8GB离线下载空间,先到先得哦~闲吧是早已经领到了。
免费领取离线下载使用资格的用户享有以下权限:
  1.  8G离线空间;立即查看离线空间>>
  2.  离线下载资源到云端(即秒下),还有图片等文件预览等功能;
  3. 一次的免费使用有效期为自领取 成功之日起6个月;过期后需要再次领取才能继续使用。
温馨提示:
  1. 本次免费名额仅10万;先到先得,领完为止;
  2. 需要下载新版迅雷客户端才能使用,立即下载>>安装完客户端需要重启客户端才能生效。如果已是7.2.12版本,安装插件>>,即可使用。

10 款免费的 PPTP VPN

作为一种常见的 VPN 协议,PPTP (Point-to-Point Tunneling Protocol,点对点隧道协议) 的搭建非常简单。
但是搭建该协议所需要的服务器,不管是虚拟专用服务器、独立服务器、还是云服务器,其价格却不便宜,所以,很少有人愿意提供免费的 VPN 服务, 不过庆幸的是,我们仍然有以下 10 款免费的 PPTP VPN 可以用:
1. SecurityKISS
SecurityKISS PPTP VPN
在 SecurityKISS 网站的任意一个下载页面,你只要输入邮箱地址就可以通过邮件获得 2 个 PPTP/L2TP VPN 帐号,其中一个是美国的,另外一个是英国的。
除此之外,你还可以通过邮件里面提到的用户 ID 和密码登录 SecurityKISS 网站,并获得更多的来自美国、英国、法国等地区的服务器 IP 地址。而除了 PPTP 和 L2TP 之外,SecurikyKISS 还提供适用于 Windows、Mac 和 Linux 系统的 OpenVPN 服务。
顺便一提,不管你使用哪种或者多少个 VPN 服务,每天的免费流量最多 300M。
2. Super Free VPN
SuperFreeVPN
打开 Super Free VPN 网站,你就可以看到它所提供的免费 PPTP VPN 的帐号,其中服务器和用户名是固定的,而密码则可长达 8 个小时才更新一次。
顺便一提,由于该网站已经被墙,你或许需要将它的服务器 "superfreevpn.com" 改为以下对应的 IP 地址:
69.60.121.29
3. JustFreeVPN
JustFreeVPN
一打开 JustFreeVPN 网站,你就可以看到 3 个免费的 PPTP VPN 帐号,其中一个是美国的、一个是英国的、还有一个是加拿大的。
不同的帐号,服务器不同,用户名都是 "justfreevpn",密码不同并且不定期更新。
4. UFreeVPN
UFreeVPN PPTP VPN
UFreeVPN 网站同样提供一个美国的、一个英国和一个加拿大的免费 PPTP VPN 帐号,其中每个帐号的服务器不同,用户名和密码相同并且都是固定不变的,所以不需要经常更换密码。
5. NewFreeVPN
NewFreeVPN
在 NewFreeVPN 网站三个不同的网页上,你可以发现三个不同的免费 PPTP VPN 帐号,其中一个是美国的、一个是英国的、还有一个是加拿大的,每个帐号的服务器不同,但是用户名都是 "free",而密码都是 "1234"。
6. Tsunagarumon
Tsunagarumon
Tsunagarumon 网站是日文的,并且需要注册,但是过程却很简单。你只需要在它的申请页面,输入邮件地址,选择同意服务条款,点击红色按钮,再次确认邮件地址,如果准确无误,点击下一个红色按钮。
完了之后,进入你的收件箱,打开来自 Tsunagarumon 的邮件,并点击里面的链接,然后你就可以收到免费的 PPTP VPN 帐号信息了。
7. FreeCanadaVPN
FreeCanadaVPN
FreeCanadaVPN 是一个免费的加拿大 VPN,服务器是 "freecanadavpn.com",用户名是 "free",密码则不定期更新于页面的右上角。
8. BestUKVPN
BestUKVPN
顾名思义,BestUKVPN 是一个英国的 VPN,其中服务器是 "bestukvpn.com",用户名是 "free",密码则不定期更新。
9. Zace Book
Zace Book Free VPN
Zace Book 是一款罗马尼亚的免费 VPN,其服务器是 "vpn.zacebook.com",用户名是 "VPN",密码一两天更新一次。
10. VPN Book
VPN Book
VPN Book 同样是罗马尼亚的,其服务器是 "pptp.vpnbook.com",用户名是 "pptp",密码一两天更新一次。
除了 PPTP,VPN Book 还提供免费的 OpenVPN 服务。
以上 10 款免费的 PPTP VPN 服务里面,SecurityKISS 是最好的,可惜有流量限制,所以,还是那句话,多一个 VPN,翻墙就多一份保障。
额外收获:
如同文章里面提到的 "Super Free VPN" 那样,如果其他某个 PPTP VPN 的服务器域名被墙,你可以将它们改为对应的 IP 地址。

Http 连接和 Socket 连接的区别


1、TCP连接   要想明白Socket连接,先要明白TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一 方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)
2、HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接 请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回 复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
3、SOCKET原理
3.1套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一 个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应 用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
3.2 建立socket连接
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描 述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
4、SOCKET连接与TCP连接
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
5、Socket连接与HTTP连接
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实 际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导 致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接 将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请 求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

2013年2月17日星期日

在Ubuntu上安装并C++使用libmemcached




最近要用C++开发项目需要操作memcached,查找到libmemcached是专门为C/C++提供的memcached客户端决定用它。



1. 在命令行下: wget https://launchpad.net/libmemcached/1.0/1.0.7/+download/libmemcached-1.0.7.tar.gz 下载文件。



2. 输入:sudo apt-get install libevent-dev 安装libevent-dev (据说这个很重要,不然libmemcached就不能运行,最好安装)



3. 解压缩下载文件:sudu tar -zxvf libmemcached-1.0.7.tar.gz



4. 编译:  ./configure



5. 输入:make  

    这里很可能会出下面错误:

libmemcached/backtrace.cc: In function 'void custom_backtrace()':
libmemcached/backtrace.cc:57:6: sorry, unimplemented: Graphite loop optimizations can only be used if the libcloog-ppl0 package is installed

  解决办法是修改Makefile,查找并去掉 floop-parallelize-all(应该有两处需要去掉),看了网上资料说是去掉后表示不使用Graphite loop 优化。

   成功编译。



6. 安装:make install



7. 编写文件 MemCachedClient.h 输入下面内容:


#ifndef MEMCACHEDCLIENT

#define MEMCACHEDCLIENT

#include <libmemcached/memcached.h>
#include<iostream>
#include<string>
#include<time.h>
using std::string;
using std::cout;
using std::endl;

class MemCachedClient
{
    public:
        ~MemCachedClient()
        {
            memcached_free(memc);
        };

        MemCachedClient()
        {
            memcached_return rc;                                                                  
            memcached_server_st *server = NULL;

            memc = memcached_create(NULL);
           
            server =memcached_server_list_append(server, "192.168.45.144", 11211, &rc);

            rc=memcached_server_push(memc,server);                                        


            if (MEMCACHED_SUCCESS != rc)                                                              
            {
                 cout <<"memcached_server_push failed! rc: " << rc << endl;
            }

            memcached_server_list_free(server);
        };


        int Insert(const char* key, const char* value,time_t expiration = 3)
        {
            if (NULL == key || NULL == value)
            {
                return -1;
            }

            uint32_t flags = 0;

            memcached_return rc;

            rc = memcached_set(memc, key, strlen(key),value, strlen(value), expiration, flags);

            // insert ok
            if (MEMCACHED_SUCCESS == rc)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        };
       
       
        string Get(const char* key)
        {
             if (NULL == key)
             {
                return "";
             }

            uint32_t flags = 0;

            memcached_return rc;

            size_t value_length;
            char* value = memcached_get(memc, key, strlen(key), &value_length, &flags, &rc);

            // get ok
            if(rc == MEMCACHED_SUCCESS)
            {
                return value;
            }

            return "";
        };

    private:
        memcached_st* memc;                                                                
};

#endif



    再编写 test.cc  文件


#include<iostream>
#include"MemCachedClient.h"
using std::cout;
using std::endl;

int main()
{
    MemCachedClient mc;

    mc.Insert("kingcat","value123");
    cout << mc.Get("kingcat") << endl;
    return 1;
};



8. 用g++编译: g++ test.cc -o test -lmemcached (一定别把库链接忘了否则编译不通过)



9. 执行./test

    执行时会报错:libmemcached.so.10: cannot open shared object file: No such file or director

    原因是 libmemcached.so.10 被安装到了 /usr/local/lib下,而共享库默认位置是 /usr/lib 网上说可以把目录 /usr/local/lib 设置到环境变量,但我设置完后不起作用。

    于是用建立一个链接: ln /usr/local/lib/libmemcached.so.10  /usr/lib/libmemcached.so.10

    重新执行,顺利通过!


使用libmemcached提速memcached的操作



memcachedCacheRailsRubyGoogle
libmemcached是一个基于C/C++实现的memcached client library,memcached gem给这个library提供了ruby封装,根据原作者的性能评测,它比目前常用的memcache-client gem最多要快150倍。

因为对memcache的操作在rails处理整个http请求中所占时间比例并不多,而且JavaEye网站大部分是做cache读取操作,于是做了2个试验测试一下2者对于提升整个网站的性能到底有多少帮助:
1. 测试访问JavaEye网站的首页,在这个请求中只有一个缓存读取操作,使用ab简单地跑单次请求10000次:
使用memcache-client,平均完成每个请求是9.247 ms
使用memcached,平均完成每个请求是8.982 ms

对于整体性能提升在3%左右

2. 测试访问某个论坛版面的页面,整个请求有超过60次的缓存读取操作,使用ab简单跑单次请求1000次:
使用memcache-client,平均完成每个请求是95.872 ms
使用memcached,平均完成每个请求是91.591 ms

对于整体性能提升在5%左右

从试验可以看出,对于整体性能还是有一定提高的。JavaEye用的cache插件是cache_fu,它只支持memcache-client,不过通过简单的修改就可以支持这个新gem,我提交了一个补丁,有兴趣的话可以从这里下载到补丁。

--分割线--
cache_fu的作者已经将这个补丁添加到代码树,可以从github checkout:  http://github.com/defunkt/cache_fu/tree/master

libmemcached使用(c 客户端连接 memcached) 2011-07-14 15:07:13



libmemcached 下载地址。https://launchpad.net/libmemcached/


//g++ -o testmemcached testmemcached.cpp -lmemcached


#include <iostream>
#include <string>
#include <libmemcached/memcached.h>

using namespace std;

int main(int argc,char *argv[])
{
   //connect server

   memcached_st *memc;
   memcached_return rc;
   memcached_server_st *server;
   time_t expiration;
   uint32_t flags;

   memc = memcached_create(NULL);
   server = memcached_server_list_append(NULL,"localhost",11211,&rc);
   rc=memcached_server_push(memc,server);
   memcached_server_list_free(server);

   string key = "key";
   string value = "value";
   size_t value_length = value.length();
   size_t key_length = key.length();


   //Save data

   rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
   if(rc==MEMCACHED_SUCCESS)
   {
       cout<<"Save data:"<<value<<" sucessful!"<<endl;
   }

   //Get data

   char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc);
   if(rc == MEMCACHED_SUCCESS)
   {
       cout<<"Get value:"<<result<<" sucessful!"<<endl;
   }

   //Delete data

   rc=memcached_delete(memc,key.c_str(),key_length,expiration);
   if(rc==MEMCACHED_SUCCESS)
   {
       cout<<"Delete key:"<<key<<" sucessful!"<<endl;
   }

   //free

   memcached_free(memc);
   return 0;
}



在下载客户端 libmemcached-0.50/tests 下有测试列子,也可参考。比如cpp_example.cc