标签归档:windows

RSS feed of windows

最后更新于 .

相信不少朋友像我一样,无论在linux还是windows下都用vim来办公,但是毕竟vim原生于linux,windows下的某些支持还是做的不太好。 这个系列的文章,我们就一起探讨一下。 一.鸡肋的文件查找 在linux下,查找包含一段文字的文件列表是很方便的:

grep "txt" *

要遍历所有所有的子文件夹也很容易:

grep "txt" * -r

但是到了windows下,用那个鸡肋的文件查找功能基本上查不到任何想要的东西,怎么办呢? 非常幸运的,vim考虑到了这一点,在内部实现了 vimgrep 这样一个命令,之前有在文章中介绍过,这次我们详细介绍一下. 虽然名字看起来和grep很像,但是用法还是不一样的,先来看一下普通的查找:

:vimgrep /an error/ *.c

而如果需要循环遍历所有子目录的话,语法如下:

:vimgrep /an error/ **/*

搜索到的文件列表会加入到quickfix中去,执行:

:copen

即可看到所有的文件列表。 OK,这样windows下内容查找的问题就解决啦~ 二.没有类似软链接功能 有些没用过linux的朋友可能不明白什么叫软链接,简单来说即一个文件或者文件夹指向了另一个文件或者文件夹,在外面的使用者看起来,没有任何区别。但是为什么在windows下使用vim会遇到这个问题呢? 这里要先介绍一下vimwiki这个插件,这个插件可以用vim来打造个人wiki ...

最后更新于 .

前一段时间在博客中和fuadam讨论过python中调用print的时候,是否可以直接打印decode之后的字符的问题。(原文:python-django的中文编码总结)
一开始我的结论是,print只能打印encode的字符,不能进行decode,但是后来在直接执行python test.py(在vim中是!python %)后,发现确实能够正常打印,那我之前究竟是怎么看到错误的结果的呢?

首先,我们需要在vimrc中做如下配置来实现python的一键执行:

function CheckPythonSyntax()
    let mp = &makeprg
    let ef = &errorformat
    let exeFile = expand("%:t")
    setlocal makeprg=python\ -u
    set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
    silent make %
    ...

最后更新于 .

之前已经写了一篇linux下搭建python+apache的文章。但由于windows下的支持python2.6的mod_python.so一直没有找到下载(http://www.apache.org/dist/httpd/modpython/win/的下载列表里面并没有python2.6的支持),所以一直没有搭建。
今天偶尔在网上搜索mod_python-3.3.1.win32-py2.6-apache2.2.exe居然被找到了,虽然目前还不知道出处在哪里,但是起码可以用啦。

放出下载如下:

mod_python-3.3.1.win32-py2.6-apache2.2.exe

需要注意的就是安装结束会要求选择apache目录,一定要选择conf目录的上一级目录.
其他配置就不说了,和linux下是一样的。

最后更新于 .

然后最痛苦的时候来了,尽管已经了解并掌握了几乎所有必需的知识,对于一个任务,我们能从功能上比较完美的实现,但这个时候,我们已经站上一个高度,追求完美的品质告诉我们一定要把界面做得尽量美观,让人过目难忘或者心情舒适。但开发过程中我们发现这是一个很痛苦的过程,一切并不像想象中的那么简单,自己做出来的界面经常会让自己反胃!我写过小游戏,写过播放器,但自己几乎不会去用它们,为什么?就是因为做出来的界面让自己实在难以提起兴趣,它们跟那些软件相比,差得太远。

我们很快就发现这个阶段遇到的困难,跟以前不一样。以前的难题可以通过经验和知识来克服,这次却不行了。我们之所以感到痛苦而不是困惑,就是因为问题不是出在专业技能上,这是审美的问题,这是大多数程序员缺乏、甚至是匮乏的素质。在程序员的世界里,大家都很容易陷入代码的泥淖而不自觉,这对于后台开发人员无所谓,但对于一名前台开发人员,一名从事界面开发的专业人来说,审美素质是很重要的,当这些人沉浸到代码和功能中时,那就是一场灾难!在界面的开发过程中,我们必须拿出大量时间来思考关于美学的东西,尽管这会中断你的工作,对于敲代码的程序员来说这很困难的,因为一旦开始了Programming,直到遇到难题为止,高效的节奏总是让人难以停下来。但适当的时候我们还是应该停下来,到了一定阶段,只有思考才可以让自己继续提高。

忘了从什么时候开始,在写界面的代码之前我总是喜欢先设计一下。当然我并不是那么专业的美工,我只是拿个画图工具把界面勾画一下,这里用什么控件,那里用什么控件,颜色该如何搭配……我们应该通过这个步骤,尽量把自己的美学融入设计之中,这样才能减少开发过程中的困惑和中断 ...

最后更新于 .

经过在第一阶段的痛苦磨炼,我们总算是打下了比较坚固的基础,可以快速的开发各种常见的窗口程序,各种控件的应用比较熟练,也能利用消息机制完成各种需要的功能。但一个完整的窗口程序不仅仅是由一堆简单的控件堆砌而成,在很多场合下,控件的事件响应函数需要调用具体的、功能性的代码。打个比方,尽管你可以使用如CPicture这些MFC提供的控件为你的窗口添加一些图片,但老实说,你并不知道这个控件中到底是怎么添加图片的,我发现,大多数情况下我们都是在窗口的属性编辑器里添加自己需要的属性,很少自己手动的添加一些功能性的代码。这个阶段我们的程序的一个明显的特点就是没有属于自己的控件,我们从来不会用面向对象的方式来开发自己的控件。

因为这样,我们可以做的事情很少。例如,窗口程序中,最常见的就是添加各种图片元素,复杂一些的如flash,此外还有一些其他的多媒体元素,如让窗口播放视频,显示OpenGL等的3D实时渲染结果,自定义绘制各种图表等。如果不能做到这些,我觉得就算不上真正懂了界面开发的技术,因为提到的所有这些,都关系到界面开发中最重要的技术之一,那就是GDI。GDI是每一个窗口程序都不可或缺的技术和元素,没有它,你的窗口不免功能单调、有形无神。

我曾在这些问题前徘徊了很久,尽管有这样或那样的教程,但大多杂乱无章,而且网上的资料看多了你就会发现几乎所有的教程追根朔源都引自有限的几个版本,就是这几个版本,也只是机械的调用API,你拿来后经常会出错,往往是因为这些作者也没有弄透彻。

学到了这里,去理解GDI的技术,就是迫在眉睫的需要了,如果不突破GDI的封锁,3D渲染输出、图表绘制、游戏开发这些复杂功能我们永远也理解不了,我们也永远不会知道各种不同格式图片之间的区别,例如bmp图片是用的或运算,而png图片用的是与运算 ...

最后更新于 .

一直纠结于究竟该用什么标题:总结其实说不上的,毕竟自己经验也不怎么丰富,充其量也就是一小结;换用感悟之类的也不大合适,这会让人以为我故作老成、经验丰富,诱骗大家,知根知底的朋友们当然很容易就揭穿我了。想来想去,虽然以后还有很长的路要走,但就暂且用“总结”来回顾一下自己做界面开发的一些经验和心得吧。
第一语言是C++,所以当初选择学习MFC似乎是理所当然的了。这是我最开始上网找资料以决定学什么时认定的道理,那时以为这是当然的嘛,可在过去这么长时间后,回头想想,甚是为自己的盲目而汗颜。我不是说MFC不好,在我看来,MFC是十分强大而优秀的,因此才会成为VC开发人员的首选。它的框架之庞大复杂,虽然使得其功能强大,而且拓展性强,但对于初学者来说实在太过晦涩,其架构和模版在简单明了的windows程序基础上加入了大量设计模式和其他常见的界面开发理念,如所见即所得和文档/视图模型,而这些东西,对于初学者来说是很难理解的。初学者固然可以通过模版向导来生成一个程序框架,也可以在窗口设计器里用鼠标拖拽出你的窗体,但除此之外呢?在相当长一段时间里,我只知道该怎么用MFC,但不知道为什么,经常性的觉得它的模版的架构是莫名其妙。
因为经常性的要用到,所以我经常为给程序加入某个功能而到处查资料,实现后却也只是一知半解,即使在我浏览过几遍精通MFC等书,依然无法为我答疑解惑,即使是最权威的《mfc windows程序设计》一书也是如此。我一度怀疑自己的学习方法,后来知道,问题的根本不是学习方法,而是学习顺序。提到的这些书 ...

最后更新于 .

本篇主要是一些使用示例,由于部分代码是来源网上,原作者已经无法考证,所以如有原作者看到,可以告诉我,我给注明~

上一篇链接--libcurl的使用总结(一)

另:文末附有所有代码的打包下载,均在suse 10下编译运行通过

1.下载文件到本地

/*==============================================
#  Author:          DanteZhu - http://www.vimer.cn
#  Email:           dantezhu@vip.qq.com
#  FileName:        test_download.cpp
#  Version:         1.0
#  LastChange:      2010-03-09 14:20:44
#  Description:     
#  History:         
============================================*/

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include ...

最后更新于 .

最近的项目中由于要在C++代码中调用PHP的URL,所以不得不借助libcurl这个库,由于第一次用,所以很多地方很是纠结,特此写在这里,方便给同样刚入门的朋友指引。
分两篇介绍,第一篇是理论知识,第二篇是实例。快速链接--libcurl的使用总结(一)

一.下载安装
    1.到http://curl.haxx.se/download.html上下载最新版本,由于公司的机器安装rpm有依赖关系,所以直接下载了source
    2.编译。解压后进入curl的目录,直接执行 make all 就行。
    3.等待编译结束后,可以查看目录结构。
        curl/include/curl : 头文件目录 (一般只要包含curl.h即可)
        curl/lib/.lib/      : lib文件目录(有libcurl.a和libcurl.so,注意,如果这两个文件在同一目录下,-lcurl默认是链接.so滴)

二.函数简要说明
在基于LibCurl的程序里 ...

最后更新于 .

呵呵,废话不多说,先看看到底是啥好玩的语言特性~~ 1.

#include <iostream> #include <string> #include <vector> #include <map> using namespace std; int main(int argc,char* argv[]) {     char a[20]="world";     printf("%c\n",a[2]);     printf("%c\n",2[a]);     return 0; } 对于这段代码,你觉得是否会编译通过,并且正确运行呢? 2.

#include <iostream> #include < ...

最后更新于 .

今天组内调来了一个架构组的大牛,结果一来就给我的代码找出了一个问题。唉,还是学艺不精啊。
问题如下:通常我们在使用C++的new的时候,都是这样用的:


char *temp = NULL;
temp = new char[1000];
if(temp == NULL)
{
return false;
}

初看起来似乎没有问题,我们来做个测试,测试代码如下:


int main(int argc,char* argv[])
{
char *test=NULL;
while(1)
{
test = NULL;
test = new char[1000000];
if(test == NULL)
{
printf("I am wrong\n");
break;
}
}
printf("I am ok!\n");
return ...