2007年4月25日星期三

一个OpenSource的RTP库

JRTPLIB 是一个用C++语言实现的RTP库,目前已经可以运行在Windows、Linux、FreeBSD、 Solaris、Unix和VxWorks等多种操作系统上。要为Linux 系统安装JRTPLIB,首先从JRTPLIB的网站(JRTP)下载最新的源码包

一个很好的媒体资料网址

http://ajsoft.pudn.com/program/program-65_250.htm

2007年1月23日星期二

程序员常用工具、软件库网址

Cross-platform GUI ToolkitsQT我认为QT是目前为止最强大的跨平台的GUI库,Linux界面GDK就是使用QT开发的,它提供Open Source的版本和商业版本,可惜用Open Source版本开发的软件必须也是Open Source的,若用来开发商业软件就要支付使用QT的费用。用途开发GUI界面非常简单,而且程序效率很高,特别在2D绘图方面,比GDI Plus强很多
wxWidgetswxWidgets是另一个跨平台的库,是完全免费的,可以用来开发商业软件,而且它是native的,在windows下它封装了windows API,在Linux下封装了GTK+,所以其开发的软件编译后要比使用QT时小很多。学习wxWidgets也不是很难,但它还是不如QT简单,而且不如QT强大,为了对不同的平台的API的封装都提供相同的封装函数,很多平台特有的功能它没有封装进去,所以过于简单,需要特有的API时不得不使用native的API
GTK+GTK+是因为QT版本的限制而发展起来的,linux的GNOME界面就是使用GTK+开发的,目前在windows下也可以使用,并且可在VC下编译,只是GTK+在windows下的界面不是很好看,不如在linux下的GNOME界面那样惊艳。而且GTK+学习起来不容易,不如QT简单,对中文的支持也是很头疼的事情。不过GTK+和wxWidgets一样是完全免费的,并且可以用来开发商业软件
IDECodeBlocksCodeBlocks是使用wxWidgets开发的一个IDE,可以用来开发C、C++程序,支持QT、wxWidgets、Win32等开发,支持GCC、VC、Borland C++等编译器
wxDevcpp在Devcpp的基础上开发的一个IDE,支持wxWidgets的开发,还提供可视化界面用来编辑对话框
Eclipse开发Java应用最流行的工具,安装插件后也可以用来开发C、C++程序
2D/3D LibraryCairo跨平台的2D图形库,类似于GDI Plus。对字体的渲染需要解决对中文的支持,目前我还没有找到合适的方法来解决中文的问题
GLFW免费的OpenGL图形开发包,支持多种C++编译器
IrrlichtIrrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等
OGREOGRE是一款开放原代码的图象渲染引擎(实际上是一款面向对象的图象渲染引擎),它是由一个小而强的团体编写并维护,由许多团体共同开发的。OGRE不是一款游戏引擎,它只是一款图象引擎,但很容易和其他库结合来建立一款游戏引擎。你需要建立游戏引擎的库有:声音、网络、输入、冲突检测,OGRG并不包含这些库,但它留有接口用于你在你的应用程序中将其他库连接到OGRE
SDLSDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D 硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发大奖的文明:权利的召唤(Civilization: Call To Power)。SDL在GNU LGPL 2(一个国际上的开源组织)下发布,这个版本允许你将SDL免费地用于商业软件的开发。
OpenGLOpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。OpenGL非常接近硬件,是一个图形与硬件的接口,包括了100多个图形函数用来建立三维模型和进行三维实时交互。OpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数,大大地简化了编写三维图形的程序

2007年1月20日星期六

IE Add-On for Firefox

I found a firefox add-on which can let firefox to use IE inside and this is very useful since so many web pages are designed by using Microsoft private html or script, and can't display correctly in firefox. You can download the add-on from https://addons.mozilla.org/firefox/1419/

常用vi编辑器命令

命令状态:
j,k,h,l:上下左右
0: 行首
$: 行尾
i,I :插入命令,i 在当前光标处插入 I 行首插入
a,A:追加命令,a 在当前光标后追加,A 在行末追加
o,O:打开命令,o 在当前行下打开一行,O在当前行上插入一行
r,R :替换命令,r 替换当前光标处字符,R从光标处开始替换
数字s: 替换指定数量字符
x: 删除光标处字符
dd: 删除当前行
d0: 删除光标前半行
d$: 删除光标后半行
ctrl+f :后翻页
ctrl+b:前翻页
G : 文件尾
数字G: 数字所指定行
/string 查找字符串
n 继续查找
N 反向继续查找
% 查找对应括号
u 取消上次操作
ex命令状态
:set number 显示行号
:set smd 显示显示状态
:0 文件首
:1,5 copy 7 块拷贝
:1,5 del 块删除
:1,5 move 7 块移动
:1,$s/string1/string2/g 全文件查找string1并替换为string2
:wq! 存盘退出

Unix常用命令


  • du 查看目录所占磁碟容量
    命令格式: du [-sk] directory
    例子 :
    du dir1 显示目录 dir1 的总容量及其次目录的容量
    du -sk dir1 显示目录 dir1 的总容量,以k bytes为计量

  • find 文件查找
    命令格式: find dir -name filename command
    例子:
    find . -name hello -print 寻找目前目录及所有的子目录内叫hello的文档.
    find . -ctime +7 -print 找出七天内未被更动的文档
    find . -size +2000m -print 找出大小超过2000 bytes的文档
    find /tmp -user b1234567 -print 在/tmp下属於b1234567的文档
    find . -name '*.c' -exec rm {} 删除所有的.c档
    find . -name test\* -print 显示当前目录及其子目录文件名前4位为test的文件名

  • ln 文档连结
    命令格式:ln -s oldname newname ( Hard link )
    同一文档,可拥有一个以上之名称,可将文档做数个连结.
    例子 :
    ln -s file1 file2   将名称 file2,连结至文档 file1.

  • grep 搜索字符串
    命令格式:
    grep string filename
    寻找字串的方法很多,比如说我想找所有以M开头的行.此时必须引进pattern的观念.以下是一些简单的□例,以及说明:
    ^M 以M开头的行,^表示开始的意思
    M$ 以M结尾的行,$表示结束的意思
    ^[0-9] 以数字开始的行,[]内可列举字母
    ^[124ab] 以1,2,4,a,或b开头的行
    ^b.503 句点表示任一字母
    * 星号表示0个以上的字母(可以没有)
    + 加号表示1个以上的字母
    \. 斜线可以去掉特殊意义
    cat passwd | grep ^b 列出大学部有申请帐号者名单
    cat passwd | grep ^s 列出交换学生申请帐号者名单
    cat passwd | grep '^b.503' 列出电机系各年级...
    grep '^\.' myfile.txt 列出所有以句点开头的行

  • fgrep 搜索字符串
    命令格式:fgrep string file

  • file 显示文件类型
    命令格式:file fileall
    文件类型为shell script,ELF 32bit,ASCII text,data or tar file

  • diff 比较文档或目录之不同内容
    命令格式:diff [-r] name1 name2 ( name1 name2 可同时为档名,或目录名称.)
    例子 :
    %diff file1 file2
    比较文档 file1 与 file2 内,各行之不同处.
    %diff -r dir1 dir2
    比较目录 dir1 与 dir2 内,各文档之不同处.

  • cmp 比较文档相同部分
    命令格式:cmp file1 file2

2007年1月17日星期三

Paste custom data from clipboard

Follow the below steps can read a new clipboard format data from clipboard to your application:

  1. Use RegisterClipboardFormat function to register a new clipboard format
  2. Use IsClipboardFormatAvailable function to determines whether the clipboard contains data in the specified format or not
  3. Use OpenClipboard to open the clipboard
  4. Use GetClipboardData to retrieves data from the clipboard
  5. Use GlobalSize to retrieves the current size, in bytes, of the data
  6. Use GlobalLock function to get a pointer to the first byte of the object's memory block, and then use memcpy to copy data from this pointer
  7. Use GlobalUnlock function to decrement the lock count associated with a memory object
  8. Use CloseClipboard function to close the clipboard
Below is an example

char* cData = NULL;
// Register a new clipboard format named "cf/new-cf-name"
UINT cfType = RegisterClipboardFormat("cf/new-cf-name");

if (!cfType && IsClipboardFormatAvailable(cfType)) {
    return;
}

// Open Clipboard
if (OpenClipboard() )
{
    // Get data from clipboard
    HANDLE hData = GetClipboardData(cfType);
    if (hData)
    {
        DWORD size = GlobalSize(hData);
        cData = new char[size];
        char* sData = (char*)GlobalLock(hData);

        if (sData) {
            memcpy(cData, sData, size);
        }
        GlobalUnlock(hData);
    }
    CloseClipboard();
}

if (cData) {
    // Handle the data...
}