归档 2010年3月

最后更新于 .

当用到socket来进行网络程序开发时,大多数情况下会遇到中文字符的发送与接收,这时若对发送的字符串用默认的方式进行处理,则一般会得到一堆乱码。

由于中文字符采用双字节表示,所以对含有中文的字符串的处理一定要按UNICODE编码方式进行处理,也就是说,使用socket发送中文字串时要事先将字串转成UNICODE格式的。

下面是简单的socket通信的代码。


//服务端代码 
try
{
    IPAddress MyIP = IPAddress.Parse("127.0.0.1");
    TcpListener MyListener = new TcpListener(MyIP, Convert.ToInt16("1235"));
    MyListener.Start();
    Socket MySocket = MyListener.AcceptSocket();
    byte[] MyData = new byte[256];
    MySocket.Receive(MyData);
    this.richTextBox1.AppendText(System.Text.Encoding.Unicode.GetString(MyData));

    UnicodeEncoding ...

最后更新于 .

公司开发机Linux上的Vim一直不支持多字节支持(:set fenc ,用这个命令就可以知道是否支持),导致在终端下的vim对中文的显示总是有问题(而且对于汉字,要按两次键才能移动过一个汉字)。 所以从新编译了一下,简单把编译的过程写在这里: 从www.vim.org上下载vim-7.2.tar.bz2 执行

tar zxvf vim-7.2.tar.bz2

注:后发现有误,tar zxvf  无法直接解压bz2,不过可以现在windows下用winrar或者7z解压。 进入vim72目录,执行(特别注意:所有的命令的操作用户,请保证是root权限,以免出现目录创建不了的错误

./configure --prefix=/usr/vim --enable-multibyte --with-features=huge
make && make install

对参数简单说明一下:

--enable-multibyte选项使vim可以支持使用多字节编码字符集的文件。
--with-features=huge 最大特性支持

这样vim就安装上啦,如果公司上有多个vim ...

最后更新于 .

js对cookie的几个操作函数,网上找的(仅作备忘)

function getCookieVal(offset) {
    var endstr = document.cookie.indexOf(";", offset);
    if (endstr == - 1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    var j = 0;
    while (i < clen) {
        j = i + alen;
        if ...

最后更新于 .

在web开发中,经常需要在客户端执行一些代码,比如对用户输入的注册信息进行有效性验证。在Asp.net中,控件的属性是默认设置为自动回传的,也就是说客户端会将数据自动提交给服务器然后刷新页面,这样不仅会增加提交服务器的次数,而且很多情况下会得到非预期的结果,最好的方法是让这些操作在客户端进行,然后一次性提交给服务器,这样既能减少数据提交量,也能免去用户对页面刷新的不适感。

我们经常遇到的一种应用就是两个ListBox列表项的选择移动,也就是下图中的示例。

                      Select示例

这里点击按钮能把左边的列表框中选中的项移动到右边,这种操作一般放在客户端进行,不然用户每选择一次页面都得刷新一次,确实很烦,我这里直接用js实现这样的客户端操作,代码如下:

<HTML>
<HEAD>
<div id="a">
<script type="text/javascript">
function movetos2()
{
    var s1 = document.getElementById("s1");
    var s2 = document.getElementById("s2");
var i;
for(i=0 ...

最后更新于 .

最近在做公司的一个内部管理系统,因为自己php不熟,公司又没有asp.net的环境,所以自己最后居然用js+CGI的模式,运行速度倒是飞快了,编码却麻烦的要死……罪过啊,罪过,又不是外网…… 废话不多说了,有一个问题就是要在调用我的CGI的时候,返回一个文件下载对话框。 好吧,在网上搜了一下,实际上只是http头里面有这样一段就可以了:

Content-Disposition:   attachment;   filename= %s\r\n\r\n

找到了php版如下:

$old_name = "E:\a.doc"; $file_name = "新文件名.doc"; if (!file_exists($old_name)) { //检查文件是否存在     echo "文件找不到";     exit; } else {     $file = fopen($old_name, "r"); //   打开文件     //   输入文件标签     Header("Content-type:   application/octet-stream");     Header("Accept-Ranges:   bytes ...

最后更新于 .

网上的一张VIM的使用图,觉得不错就贴在这里(并无盗用之意,只是实在不知道出处是哪),看看各位VIMER们能看出他是怎么实现的不?

code_complete

呵呵,相信Vimer们就心照不宣啦~~我只吐个槽-----那就是,配色是desertEx,嘿嘿

最后更新于 .

现在代码中越来越多的使用单体类,而我们通常的编写代码的方式是:

在A.h文件中:

class CTest
{
    public:
        static CTest* _ins;
        static CTest* Ins()
};

在A.cpp中:

CTest* CTest::_ins = NULL;
CTest* CTest::Ins()
{
    if ( !_ins )
    {   
        try 
        {   
            _ins = new CTest();
        }   
        catch(...)
        {   
            return NULL;
        }   
    }   
    return _ins;
}

而实际上,上面的代码通过valgrind检查内存泄漏的时候,会告诉你内存still reachable,虽然实际上当进程退出的时候,这些内存是实际释放掉了,但是还是多少会对内存泄漏的定位产生影响,而且也不符合谁申请谁释放的原则。

我们可以简单的使用stl的智能指针解决这个问题,即代码更改如下:

在A.h文件中:

class CTest
{
    public:
        static auto_ptr<CTest> m_auto_ptr;
        static ...

最后更新于 .

最近在做项目的时候,遇到一个问题,即结构体内的字段可能会在未来的时间内不停的增加(不会减少或者删除),所以在打包解包的时候就会涉及到版本兼容的问题,并且是向前和向后同时兼容。

我们先来看一下,如果结构体的内容永远不变,那么我们用结构体自解析的方法:


typedef struct _farmbase_land1
{/*{{{*/
unsigned char ID;
unsigned char bitmap;
_farmbase_land1()
{
ID = 0;
bitmap = 0;
}
int Output(unsigned int /*ver*/,char*& buff,int& iLen,int iMaxLen)
{/*{{{*/
int needLen = sizeof(unsigned char)*2;
if(needLen>iMaxLen)
{
return FBErrSystemNoMem;
}
char *t_Buff = buff;
*(unsigned char*)t_Buff = ID;
t_Buff+=sizeof(unsigned char);
*(unsigned char*)t_Buff = bitmap;
t_Buff+=sizeof(unsigned char);
iLen ...

最后更新于 .

《小强升职记》是一本关于怎样用GTD(Getting things done)时间管理方法的书,用小说形式表现。我觉得用《小强升值记》作为标题更符合。

 GTD时间管理方法解决的问题背景:

1、  知识型工作不再有清晰的界限,工作缺乏明确的边界导致每一个人的工作量加大、更加焦虑

2、  工作的到来不再按部就班,几天甚至几月的工作如潮水般涌来,这些工作总是萦绕在我们的心头,挥之不去,愈发焦虑

3、  某种意义上,职位晋升机制总是把人放在其不擅长的职位上,我们永远无法为那些新的事物/岗位/工作真正作好充分的准备

4、  在处理每天、每小时的事务时,有很多干扰因素分散了我们的注意力,以致我们无法集中足够的精力关注更重要的问题、无法“着眼大局”

GTD时间管理方法凑效的基本原理,我认为有

1、  一次只专注一件事情,轮询的处理工作。把纷至沓来的n多工作赶出我们的大脑,交给工具

2、  “在知识工作中,任务没有被指定,它需要被确定。‘这项工作的预期成果是什么?’这是一个提高知识工作者工作效率的关键性问题。这个问题可能导致一些极具风险性的决定。通常,没有正确的答案,只有不同的选择。想要获取高效益,一定要明确地认定预期结果 ...

每日归档

上个月

2010年2月

下个月

2010年4月

归档