夕角@超限界

eGear更新至0.1.0

Posted by epocher on 11月 23rd, 2008

eGear 是我在空闲时间开发的一个小项目,最初发布于Linuxsir的这贴

基于curl和qt4,
现在已经基本实现下载软件的一些基本功能,如, http 和 ftp 的多线程下载等
目前版本: 0.1.0
0.1.0 版说明:
1、去除了dbus依赖,使用socket实现单运行实例。dbus对可移植性有一定影响。
2、增加 python 蜘蛛脚本支持,附带一个 auto-index 网页的抓取脚本。(使用时注意,过多任务会占用过多资源)
3、增加了几个必需的配置选项,包括代理等。

Posted in egear | No Comments »

[转]Linux / Windows 跨平台C++编程问题研究

Posted by epocher on 11月 22nd, 2008

April 3rd, 2008 by Sensheng Xu

最近由于工作需要而在跨平台C++编程上下了不少功夫,同时也因为经验太少而走了很多弯路。在这里稍微总结一下。 (注:这里的Windows标准指的是WinSDK,Linux标准指的是libc。)

一、关于线程同步

Linux下有pthread,当然,有人把它移植到了Windows,但是实现的方法其实是天壤之别。首先Linux下信号量是静态初始化的,因 此和Windows创建内核对象来初始化信号量的方式相比,效率要强得多。在移植Alex的Linux代码的过程中我们发现,在一段需要反复创建和销毁 semaphore的代码中,Windows XP的效率要比Linux (Ubuntu Server 7.10) 低上一小截,而Vista下则出现了明显的差距。为了在Linux和Windows维护同一份代码,最后我们不得不改设计,让Linux“迁就 ”Windows一把—-不再反复创建线程,而是一开始就创建一条线程死循环并从队列里拿数据。实验证明,这种方法使得程序在Linux和Windows 下效率都很高。结论:如果一开始就打算让你的程序L/W两边跑的话就好好想想semaphore/mutex/event的问题了。

二、关于许许多多的标准库函数

VC到目前的8.0是越来越远离标准了,M$不断的逼我们一步一步的远离标准库。大量的标准库函数会给出安全警告,并在名字前面加了下划线。 同时,M$“建议”我们使用_s的安全版本(例如itoa的安全版本是_itoa_s)。
有些标准函数的形参及返回值,Windows和Linux规定有所不同,这一点需要特别注意。其实这还不是最可怕的事情。有些是比较阴险的问题,一不小心 就会阴沟里翻船。例如,重载的bool operator() (…) const函数,M$所需要的比较结果和Linux正好相反。

三、关于并不标准的标准模板库STL

STL的hash_map给我们带来了很大的困扰。事实上STL的标准就已经有好几套。我甚至怀疑我们自己用C写一个hash_map的时间成本更小。其实从一开始移植的时候我就已经有不祥的预感,因为打开MSDN查看hash_map的文档就看到了这一句话:

In Visual C++ .NET 2003, members of the <hash_map> and <hash_set> header files are no longer in the std namespace, but rather have been moved into the stdext namespace. See The stdext Namespace for more information.

总结:使用标准库仍然不失是跨平台程序的法宝,但是要注意函数声明及返回值,必要时使用条件编译。C的移植性比C++好N多;STL是使用的时候很爽但移植的时候令人很痛苦,不推荐。

还在进一步努力中,不过问题已经一一得到解决。同时,希望可以和有这方面经验的朋友共同探讨一下这方面的问题,互相增进。

转自:没有一个名字但是有一个blog

Posted in C++, Linux | No Comments »

mount 的 noexec 参数导致 vfat/ntfs 分区的程序不能运行

Posted by epocher on 07月 28th, 2008

主要是在用 wine 运行游戏的时候发现的 (其实Linux原生程序也有同样的情况), 在 fat/ntfs 分区下的游戏不能直接运行, 要复制到Linux 分区下才行.

这相当麻烦, 但一直没有解决, 网上也没什么相关资料. 直到今天才想到是否wine挂载参数的问题. 用mount 发现 vfat ntfs-3g 的默认挂载参数里都有个 noexec , 于是用上 exec 参数尝试了一下,

问题解决, vfat nfts-3g 都有效, 以后可以节省不少无用功了…

Posted in Linux, 游戏 | No Comments »

Posted by epocher on 07月 4th, 2008

天啊,无知的我一直以为现在几乎没有用“拔号”上网了,哪有人不想要更快的网络呢?结果这新闻让我傻眼了…

拔号用户不想要“宽带”

Posted in Internet | No Comments »

无限试驾 截图

Posted by epocher on 06月 7th, 2008

无限试驾不算新游戏了,但玩过的人应该不多吧?

配置要求太BT了… 不过高兴的是我的S41勉强扛得住,因为笔记本的分辨率只有 1280×800。。。

Posted in 游戏 | 1 Comment »

xorg-server 已支持 自动识别输入设备

Posted by epocher on 06月 1st, 2008

这是 emerge hal 的一些log:

X Input Hotplugging (if you build xorg-server with the HAL useflag)
reads user specific configuration from /etc/hal/fdi/policy/.
You should remove the Input sections from your xorg.conf once you have
migrated the rules to a HAL fdi file.

也就是说,现在不用在xorg.conf 里设置烦人的输入设备了,hal会自动认出。这确实是易用性的一大提高 :D

尝试把xorg.conf 里的 Input 块 都去掉,一切正常

Posted in Linux, gentoo | 2 Comments »

一个 wine 程序的包装脚本

Posted by epocher on 05月 17th, 2008

wine 让我们可以方便地使用win下的软件,但文件路径的传递很不好用,所以写了个脚本包装一下:

1: 直接参数传递文件路径,由脚本转换成wine的虚拟路径

2: 支持文件路径有空格的情况

3: 支持一次打开多个文件

#!/bin/bash
EXEPATH=~/".wine/drive_c/Program Files/Microsoft Office/OFFICE11/WINWORD.EXE"
FILEARGS=()
VDRIVER="Z:\\"
for i in "$@"
do
     if ! echo $i | grep "^/.*"; then
         i="`pwd`/$i"
     fi
     i="`echo $i | sed -e 's/\//\\\\/g'`"
     FILEARGS=( "${FILEARGS[@]}" "${VDRIVER}${i}" )
done
wine "${EXEPATH}" "${FILEARGS[@]}"

Posted in Uncategorized | No Comments »

Gentoo故障查找经验谈(二)

Posted by epocher on 05月 10th, 2008

本文最新版在

方法篇(二)

以下介绍一些比较有效的方法。具体的解决手段意会即可以,千万别照搬。

一、经验法

笔者把经验法大致分成以下三类:

(1)向高手提问

这是很多新手自然而然想到的方法,但是我建议应该把这当成最后的手段。
我认识的大部分学Linux的人,在有一定的经验后,都很乐意向新手回答问题,但几乎没有一个人能坚持下来。
为什么呢?因为那实在不是一件愉快的事…
关于怎么样向他人提问,权威的解释在: Gentoo的问题解决之道

(2)在文档中查找相似问题

坦白说,本人刚用Gentoo时,有很多时间就是用来看文档的。

(3)根据自身的经验

不要忘了自己曾经解决过的问题,特别是在重装的时候。

二、排除法

根据可供排除的程序之间的关系,我将排除法分成如下几类,并各举一个例子,以助理解:

(1)并列排除法

例:compiz-fusion 有三个可用的窗口装饰器,分别为:
GTK Window Decorator, KDE Window Decorator, Emerald。
当你的启动compiz后,发现窗口标题栏消失的时候,为了排除是否自己使用的窗口装饰器的问题,可换用另外两个窗口装饰器试试

(2)链式排除法

指一个软件的启动或运行过程中,先后与几个因素有关。
例:一般我们为了方便进入图形界面,会安装登录管理器(dm),所以这时进入图形界面的顺序是这样:
xdm–>X->kdm/gdm–>kde/gnome/…
当我们遇到无法进入图形界面的问题时,可用startx绕过dm,从而可确定是否dm的问题,以此进行排除。

(3)树状排除法

这是比较复杂的情况,同时也是比较符合现实的。
例:在配置一个基于apache+mysql+php的站点时,显然出现的问题可能与apache, mysql和php有关,同时关于这三个软件,又有如下关联:
apache是否正确启动,是否载入php支持,与/etc/apache2和/etc/conf.d/apache2的配置有关.
php能否正常运行与版本的兼容、是否编译了apache支持、php的配置文件等因素有关。
mysql是否正常工作与mysql本身的配置、用户名及密码、用户的权限等因素有关。
如果把这些关联关系画在一张图上就组成了一棵树。

(三)程序输出分析法

这是分析程序的log、标准输出、调试信息等进行排错的方法。
例:这是我遇到过多次的问题,stardict在X不正常挂起后,启动不了。
于是我在bash中手动打入”stardict”, 回车,结果发现stardict输出一行:

error: .stardict/stardict.cfg is a null file (大致意思是这样)

于是

rm .stardict/stardict.cfg

问题解决。

(四)最小化系统法

又称不相关因素排除法。这是在关联因素实在太多时,相当有效的一个方法。
比如:你第一次安装显示驱动、xorg-x11和kde,却无法进入桌面,怎么办?排除法?要排除的因素太多了…
可尝试使用最小化系统法,解析如下:
1、只使用最基本的xorg-x11和vesa驱动启动桌面:
把 /etc/env.d/90xsession 中的 XSESSION 的行注释掉
把 /etc/X11/xorg.conf 中的驱动换成 vesa
这时用 startx,会进入一个极简单的桌面环境(叫twm或dwm?)。
如果有问题,检查 xorg 的配置或log吧。
2、运行 kwin –replace& 或 metacity –replace&
检查窗口管理器是否正常工作
3、startkde & (gnome 下是什么命令,我忘了…)
尝试在此环境下启动kde/gnome,虽然结果与正常的启动会有所出入,但可以得到很多信息。
4、尝试使用专业显示驱动启动X

Posted in gentoo | No Comments »

极品飞车11…

Posted by epocher on 05月 1st, 2008

五一没事干,又拿极品飞车11出来玩了…

听着本本疯狂的叫,真有些不忍…  但也管不了那么多了,谁叫我这么喜欢极品飞车 :D

在查攻略,这是一位网友的话,听了很有共鸣啊:D

也许有大侠不屑于上述评论,但请注意我是用键盘的。不是不知道方向盘好,也不是买不起,而是——会影响生活中我的驾驶风格!我曾经玩过一段时间方向盘,后 果就是坐我车的人大部分都很晕!在游戏里你可以开着GTI连续响胎冲过一个又一个急弯,而在生活中如果你开着GOLF也这样响胎的话,老婆早就拼死也要把 车卖掉了。因为在游戏里你翻车了可以用一个标志搞定,生活中恐怕就只能用一个或几个骨灰盒搞定了。越是拟真的游戏,我越不敢用方向盘。

这里顺便贴一下这位网友推荐的车,感谢这位不知名的网友(又是抄袭风行的中国网站惹的祸…)

类型         首选          备用
赛道       911turbo            GT
直线         GTO              ZONDA
甩尾        M3E46            911GT2
飙速       911turbo           LP640

Posted in 游戏 | No Comments »

Gentoo问题查找经验谈(一)

Posted by epocher on 04月 27th, 2008

本文档最新版在

实体篇(一)

当我们安装系统或升级过程遇到问题的时候,第一个要想清楚的是从何入手。本篇主要介绍可能产生错误的地方和其他可以提供排错信息的地方。

一、文档

Gentoo的文档的主要来源有官方的 Gentoo官方文档 和非官方的 Gentoo维基 。现在还有中文版的 Gentoo中国Gentoo中文维基 。Gentoo的文档是公认的种类齐全,品质优良,提供了对使用中出现的绝大部分问题的解决方法。

有句老话:尽信书不如无书。在使用文档的时候,我们要时刻想到:写文档的人的系统环境可能跟你不一样;写这文档的时候,软件包版本可能跟你不一样。文档可能过时,且并非总是正确的。

二、使用者

使用者指的就是安装和使用Gentoo的人。所我遇到的问题来看,大约有70%的问题是由使用者自身的原因引起的。比如使用不谨慎,安全意识不够等等。

我把使用者放到这里是为了说明,当遇到问题的时候,不要总是怪别人,静下心来,想想自己做过什么,也许就是你不经意的一个命令,导致了问题的发生。

三、portage

在每时每刻有可能有新的ebuild加入,也会有老的ebuild移出portage,维护portage是件困难的事,因为其中涉及到许多软件之 间、软件和库之间的错综复杂的依赖关系。我们敬仰ebuild开发者,因为有他们替我们做了这么多的工作,才会有现在这样一个完整的、统一的 portage供我们使用。同我们也该认识到,他们也是人,他们也会出错,这是我们应该容许的。

所以当你升级中遇问题时,请不要着急,给开发者一点时间,说不定第二天升级的时候就解决了。

四、软件包版本

软件包升级本身也可能引入bug,请认识到这一点。

遇到某包升级遇到的问题时,也许降级是一个好的方法。

五、配置文件

主要有 /etc ,/usr/kde/*/etc 和 $HOME 下的 隐藏文件。

配置不正确引起的问题很多,更常见的是非正常的关机 引起的配置文件错误。这种情况下,你只需把配置文件删除或改名,即可确定是否配置文件的问题。

六、/var/log 下的log

log文件并非引起 错误的来源,但也可以为我们提供足够的信息供错误分析。

比如 xorg.conf 的配置错误一般在 /var/log/Xorg.0.log 里有所体现。

七、man 和 doc

上面的doc 指的是 /usr/share/doc 。

遇到问题先试一下 man 往往会节省你很多时间。对Gentoo而言,比较实用的有man portage、man make.conf、man emerge等

Posted in gentoo | No Comments »