利用Google两步验证来增强你网站的安全性

密码学当中最安全的密码是一次性密码OTP(One Time Password),即每次使用的密码都不同。目前安全性要求比较高的系统,比如网上银行或公司vpn、财务等系统都使用了一些一次性密码方案,比较多的是RSA的token卡,它上面显示六位数字,每一分钟变化一次。YubiKey、短信验证等都算是OTP的实现。
但是这些方案都需要单独一种硬件支持。对于有大量用户的网站不太实惠,要增强安全性,还需要用户花钱买一个token卡,于是Google搞了一个”身份验证器”(Google Authentication)。Google公开算法,于是我们 就可以利用它来增加我们网站的安全性了。
Continue reading “利用Google两步验证来增强你网站的安全性”

Visual Leak Detector下载

Visual Leak Detector (VLD) 1.9h (Beta),点这里开始下载!

Visual C++内置内存泄露检测工具,但是功能十分有限。VLD就相当强大,可以定位文件、行号,可以非常准确地找到内存泄漏的位置,而且还免费、开源
在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。
也可以一次设置,新工程就不用重新设置了。只介绍在Visual Studio 2003/2005中的设置方法,VC++ 6.0类似:

  1. 打开Tools -> Options -> Projects and Solutions -> VC++ Directories;
  2. 然后点击include files下拉列表,在末尾把VLD安装目录中的include文件夹添加进来;
  3. Continue reading “Visual Leak Detector下载”

两道关于指针的C语言笔试题

实验室的师兄师姐为找工作都在狂做C/C++的笔试题,偶们也掺和了下,做了两道指针方面的,大家一起来看看吧。

1. 求n的值。

int a[20];
char * p1 = (char * )a;
char * p2 = (char *)(a+5);
int n= p2-p1;
答案:20。
解析:int为4个字节,char为1个字节。a是int*型指针,加减运算以4个字节为单位,a+5便会指向第20个字节;而p1,p2是char*型,它们进行加减运算时以1个字节为单位。于是p1指向第1个字节而p2指向第21个字节,于是21-1=20,n的值为20。

2. 求 * p 的值。

Continue reading “两道关于指针的C语言笔试题”

MFC多核多线程编程遇到的问题总结

  1. 多线程编程必须有操作系统为基础,知道什么是互斥、临界区、事件、信号量等概念;
  2. 知道线程是CPU资源分配的基本单位;
    给线程分配CPU,可以用:SetThreadAffinityMask(tHandle,0x00000001)函数,tHandle表示线程的HANDLE(不是CWinThread*),第二个参数表示可以使用的CPU的编号,0x00000001表示只能使用第一个CPU;如果0x00000011,表示可以使用第一和第二个CPU,依此类推; Continue reading “MFC多核多线程编程遇到的问题总结”

我也定个暑期计划(2009.7.20-2009.8.5)

没有计划是不行的,没有计划整天都昏昏沉沉的,不知道要干什么,大家都有计划(苏洋ABitNo),我也来制定个计划。他们俩还处于无忧无虑的阶段,可以学些自己想学的东西,我就不行了,研究生——唯导师命是从。

1. 把RSIP中图像分割的部分重看,提升效率
2. 看多核多线程的资料,应用到大图的分割中
     7.31 多核多线程技术已经看明白
3. 实验大图分割效果
4. 继续调研分割方法,看能否找到适用的算法(速度快,效果好)
5. 把专利申请写完并提交 => 进行中
     7.18 说明书修改基本完成,明天把其它的文件全都修改完。
     7.19 所有文件改完;已经提交费用减缓申请。
     7.20 所有文件交给俞师姐看;费用减缓学校已经盖章。 
     7.21 所有文件都已经打印,学校的章盖了,明天上午去海淀区科委盖章,直接到专利局提交!
     7.23 搞定
6. 最多间隔两天,更新一下完成情况

如何避免由于编译器差别带来的错误

转自http://acm.cist.bnu.edu.cn
1、判题系统使用的是G++编译器,和普通使用的TC,VC都有所不同,建议大家使用Dev C++作为IDE,或者用TC和VC写代码,提交前使用Dev C++编译,预防编译错误。
提交C语言代码最好使用G++,G++兼容C和C++。C的代码可以用GCC也可用G++提交,而C++的代码不能够用GCC提交,只能用G++。
Continue reading “如何避免由于编译器差别带来的错误”

poj_1009(TLE&MLE)

/*
//ACM Poj 1009
//File: 1009.cpp
//Author: Kangzj
//Mail: Kangzj@mail.bnu.edu.cn
//Date: April 29, 2009
*/
#include
#include
#include
#include
using namespace std;
struct node
{
  int pix;
  int count;
};
int main()
{
  int width,i;
  int pix;
  long len;
  ostringstream buff;
    while(cin>>width&&width!=0)
  {
    //读入图像并解码
    vectorimgin;
    while(cin>>pix>>len&&len!=0)
    {
      vectortemp(len,pix);
      imgin.insert(imgin.end(),temp.begin(),temp.end());
    }
    int height;
    int size=imgin.size();
    height=size/width;
    vectorimgout(size,0);
    for(i=0;i=start)
        {
          max=abs(imgin[pos-1]-imgin[pos]);
        }
        if((pos+1)m?max:m;
        }
        if(pos+widthm?max:m;
          if(pos+width+1m?max:m;
          }
          if(pos+width-1>=start+width)
          {
            int m=abs(imgin[pos+width-1]-imgin[pos]);
            max=max>m?max:m;
          }
        }
        if(pos-width>=0)
        {
          int m=abs(imgin[pos-width]-imgin[pos]);
          max=max>m?max:m;
          if(pos-width+1< =start-1)
          {
            int m=abs(imgin[pos-width]-imgin[pos]);
            max=max>m?max:m;
          }
          if(pos-width-1>=start-width)
          {
            int m=abs(imgin[pos-width-1]-imgin[pos]);
            max=max>m?max:m;
          }
        }
        imgout[pos]=max;
      }
    }
    //将输出图像编码
    buff< rle;
    //第一个先放进去
    node tn;
    tn.pix=imgout[0];
    tn.count=0;
    rle.push_back(tn);
    //游程编码
    for(i=0;i

虽然AC了,但其实是不合格的,时间和空间都超了,500000000的数据量没法处理,好在测试集里没有这样的数据。。。转了一篇别人做的,质量真的不错,想到了好多我根本就没去想的问题,受教了。
代码完全是按题意做的,一点也没有改进: