9/26/2006

转换分区格式--linux技巧

好久不用windows,留着FAT32真是没什么用。为避免中文乱码及azureus-error中提到的那个恶心的错误,我一直计划着把FAT32转成ext3。
最初,我硬盘里共有三个FAT32分区。由于都有内容,只能慢慢整理,慢慢转换。
由于概念不清,基础知识不扎实等,走了很多弯路。
第一次转换
最初我是想能不能无损数据完成转换的,但没有找到相关资料。就了下面的方法:
  1. 用fdisk删除一个分区,然后再新建一个分区;
  2. 重启(fdisk提示说重启后才生效);
  3. mkfs;
  4. 修改/etc/fstab;
  5. mount -a;
可是实践时,出了大麻烦。执行完第一步后,机器已经起不来了,搞了半天才知道,第一步已经改变了分区表,hdaX的X很多都变了。于是用live-CD启动,上网找了一堆资料,终于在RecoveringUbuntuAfterInstallingWindows指导下搞定了。
第二次转换
也就是今天,我刚刚做的。
  1. umount /dev/hdaxx
  2. 用fdisk的t命令改变分区格式,改成83(linux);
  3. 重启;
  4. 用mkfs.ext3 /dev/hdax或mkfs -t ext3 /dev/hda建立新的文件系统;
  5. 修改/etc/fstab;
  6. mount -a;
成功了,但却无法往分区上写东西。
重启后就可以写了。
总结
要注意区别分区和文件系统,用fdisk只是为了改变分区格式,用mkfs才是建立我们熟悉的vfat,ext2,ext3等文件系统。第一次做lfs时,我忘了改变分区格式,结果无论如何都启动不了lfs,重做了几遍,还好有备份。
不保证上述方法同样适用于你的系统。

参考资料
man fdisk
man mkfs
http://www.linuxmine.com/39733.html

9/23/2006

c++笔记--模板,成员初始化等

模板类,不能像通常的类那样将单独的实现文件放在一个cpp中。
如果非要这么做,就必须在每个函数前加上export关键字。形如:
export T& A::getNext(const T& any)
但export虽然是c++标准的关键字,但目前可见的绝大部分编译器均不支持它。详情请看参考资料。
因此,一般情况下我们应该将模板类的全部声明和定义写在一个头文件中。
当然,如果你不嫌使用时需要包含两个文件(即.h和.cpp)的麻烦,可以将定义单独写到一个cpp中。
从模板类继承时,不要忘了尖括号。如:
template <class T>class B:public A<T>
习惯上在template另起一行,函数也是如此。即:
template <class T>
class B:public A<T>

在构造函数中初始化成员变量时,应该尽力保证初始化顺序和声明顺序一致。
如果不注意的话,则可能出现类似这样的错误或警告。
:: === cb, Debug ===
testdriver.cpp:110: instantiated from here
LinkedList.h:37: warning: count will be initialized after
LinkedList.h:75: warning: when initialized here
:: === Build finished: 1 errors, 3 warnings ===
但很奇怪的是,已经生成了可以运行的可执行文件。
另一个例子请看参考资料。

参考资料:
export关键字
http://gcc.gnu.org/ml/gcc-help/2005-04/msg00317.html

gaim2.0内置QQ协议了--多截图






我现在用的版本是svn20060917。以下是我看到的主要改进:
一:内置了QQ协议,添加帐号方法如图示。好像还不能收发文件;
二:用户昵称用不同颜色显示,平滑移动,及一些小的界面改进
三:能显示google talk好友的图片了。

另外,tencent最近搞了个webqq,竟然……

参考资料:
http://www.zoudan.com/doc/qq_gaim.htm
http://gaim.sourceforge.net/

9/22/2006

ubuntu dapper下安装xgl--还差一点

(此外省略前期准备,以后再补充)

关键的安装代码
sudo apt-get install compiz xserver-xgl libgl1-mesa xserver-xorg libglitz-glx1 compiz-gnome

结果输出:
Password:
Reading package lists... Done
Building dependency tree... Done
xserver-xgl is already the newest version.
libgl1-mesa is already the newest version.
xserver-xorg is already the newest version.
libglitz-glx1 is already the newest version.
compiz-gnome is already the newest version.
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
compiz: Depends: compiz-plugins (>= 0.2) but it is not going to be installed
E: Broken packages

没办法,源里没有csm包,所以安装不能继续。我只能先不安装一些东西,代码如下:
sudo apt-get install xserver-xgl compiz-gnome libglitz-glx1 libgl1-mesa
……
……
……
经过一番努力,xgl终于成功了,可是一点特效都没有,只是窗体的标题栏全都消失了。
用gconf-edit看了一下,一个plugin也没有加载成功,汗……
于是开始疯狂google,在参考了不下100个网站后,宣告放弃。
我觉得是xgl的源有问题,并且相信过几天就能修复。等等吧!

9/20/2006

linux下打拳皇(KOF)--ubuntu技巧









安装
sudo apt-get install xmame-x

下载rom
kofXX.zip和neogeo.zip放到/usr/share/games/xmame/roms
如果是在KDE下,路径可能需要相应的改变。一般是在/usr/lib/games/xmame/roms

运行
xmame kofXX
其中XX为96,97等等。也可以用完整的文件名,比如kof97.zip
部分机器在这里可能会出现黑屏的情况,这时只要按Ctrl+alt+F1切换到其它终端,然后再按ctrl+alt+F7回到图形界面即可。应该是xmame太旧了,我正在下最新版本的源码……

设置键位
按TAB即可开始设置键位。从设置界面里看到,可以两个人对打。

图形界面前端
如果你想方便地设置显示及声音等选项,建议安装一个图形前端。比如gxmame,kxmame。我这里只介绍gxmame,源里好像有点问题。建议直接去sourceforge.net/projects/gxmame下载最新的0.35b2的deb预编译包。
装上后,会在游戏菜单里面生成相应的项目。单击界面,选择“available”,然后再点击"Refresh",然后再双击相应项目就可以开始游戏了。个人感觉属性里,display的resolution最重要了,在这里可以选择放大的比例。
需要注意,gxmame也是调用xmame,所以使用它也可能会有黑屏的现象。解决方法见上文。

可能遇到的问题
除了已经提到的黑屏问题。rom文件的有效性问题是最大的问题,网上下的zip并不是每个都好用的,只有下下来试玩一下才知道。gxmame也能帮我们验证有效性。

输出模式
共有三种,分别是x11,SDL,openGL,分别可以用ctrl+insert,ctrl+home,ctrl+pageUP切换出来。选择输出模式主要是为了降低CPU占用率,避免声音断断续续,节省系统资源。如果显卡3D驱动已经安装,选择openGL可以使CPU占用率保持在30%以下。另外alt+pageDown可以切换到全屏模式。

截图
见最开始部分。除了neogeo,CPS1,CPS2游戏也都可以玩。


相关资源:
http://x.mame.net/
sourceforge.net/projects/gxmame

9/18/2006

ACE安装配置--ubuntu技巧

ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。
不再继续介绍了,我来介绍一下ACE在ubuntu下的安装,并运行一个简单的示例。
sudo apt-get install libace-dev libace-doc libace5.4.7c2a libssl-dev
这样,一个完整的开发以及运行环境就建立起来了。
下面,写一个简单的程序来体验一下这个框架。


#include <ace/INET_Addr.h>
#include <ace/SOCK_Connector.h>

#include <ace/SOCK_Stream.h>
int main(int argc, char *argv[])
{
const char *pathname =
argc > 1 ? argv[1] : "/";
const char *server_hostname =
argc > 2 ? argv[2] : "www.herofit.com";
ACE_SOCK_Connector connector;
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
if (peer_addr.set(80, server_hostname) == -1 )
return 1;
else if (connector.connect( peer, peer_addr) == -1)
return 1;
char buf[BUFSIZ];
iovec iov[3];
iov[0].iov_base=(void*)"GET ";
iov[0].iov_len=4;
iov[1].iov_base=(void*)pathname;
iov[1].iov_len=strlen(pathname);
iov[2].iov_base=(void*)" HTTP/1.0\r\n\r\n";
iov[2].iov_len=13;
if (peer.sendv_n(iov, 3) == -1)
return 1;
for(ssize_t n;(n = peer.recv(buf,sizeof(buf)))>0;)
ACE::write_n(ACE_STDOUT, buf, n);
return peer.close();
}

编译上面的程序:
g++ testace.cpp -o testace -lACE
运行:
./testace index.php www.herofit.com



最后提醒一点,ACE的授权许可证并不要求使用它的软件开放源码。

参考资料:
http://www.flyingdonkey.com/ace/
http://www.cs.wustl.edu/%7Eschmidt/ACE.html