2008-06-22

Ubuntu下安装ATI催化剂驱动(Ubuntu 8.04&催化剂8.6)

  其实现在的ATI驱动已经是一个图形安装界面了,不过很可惜的是貌似直接安装的话,在Ubuntu下仍让没用,比如我的Ubuntu8.04,装好后进Gnome就一片白色。稍微参考了一些资料终于装成功了,解决了困扰我很久的桌面上有小图形碎片的问题。。。。而且播放视频也不会有一条一条的横线了。。。

下面看看我的过程:

先下载好驱动,ati-driver-installer-8-6-x86.x86_64.run
安装编译所需的包:

sudo apt-get update
sudo apt-get install module-assistant build-essential fakeroot dh-make debhelper debconf libstdc++5 linux-headers-generic dkms -y


删除fglrx:
sudo apt-get remove --purge fglrx-control
sudo apt-get remove --purge fglrx-kernel-source
sudo apt-get remove xorg-driver-fglrx
生成deb包:
sudo bash ati-driver-installer-8-6-x86.x86_64.run --buildpkg Ubuntu/hardy
运行完会得到四个包:
fglrx-amdcccle_8.501-0ubuntu1_i386.deb
fglrx-kernel-source_8.501-0ubuntu1_i386.deb
xorg-driver-fglrx_8.501-0ubuntu1_i386.deb
xorg-driver-fglrx-dev_8.501-0ubuntu1_i386.deb
将旧的fglrx模块从受限模块中列入黑名单
sudo gedit /etc/default/linux-restricted-modules-common
  把其中的DISABLED_MODULES=""改成DISABLED_MODULES="fglrx"

移除旧的fglrx包:

sudo rm /usr/src/fglrx-kernel*.deb


安装刚才获得的四个包:
dpkg -i ...
装好以后重启到recovery mode选root,之后:
sudo aticonfig --initial
sudo aticonfig --overlay-type=Xv
exit
然后选RESUME正常启动到系统
据说可能会不正常,不过我是正常了。。。
貌似之后不要修改受限驱动管理器里面的东西,否则会出问题。。

装好后查查看有没有成功启用:
glxinfo |grep -e 'direct' -e 'OpenGL'
我的机子上的显示结果是:

direct rendering: Yes
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Radeon X1200 Series
OpenGL version string: 2.1.7659 Release
OpenGL extensions:
可以测试一下看看:
glxgears

fgl_glxgears
我的集成显卡功能不强,第一个只有1000多帧,第二个只有300帧左右。。。


参考文章:http://forum.ubuntu.org.cn/viewtopic.php?t=119945

2008-06-17

悲惨的转片过程

  近日得到某位老兄转的一些MV,好不容易下载回来后欣喜之余发现这位老兄实在强悍,不知用何种方法转的片,视频是.264的音频是vobris还是什么的ogg的.还内嵌了字幕封装成mkv。。
  话说平日转mkv也从来没有遇到过问题,不过这位仁兄的片神奇的很,愣是不管加harddup还是noskip都要给我跳了不少帧,最后转出来的片毫无疑问是短了不少(确实是不少,基本差15%的时间)。用了mencoder和一些软件都一样的问题。。。无语至极。。。不过本人对动画的爱是无止境的。。。在这种欲望的驱使下,义无返顾的迈向了转片的过程。。。
  首先,从原来试的情况猜可能是封装的问题,所以先把东西分离吧。用MKVextractGUI(要先装MKVtoolnix)把原来的那个mkv里面的音频流、视频流、字幕流都分离出来。
  得到track1.h264,track2.ogg,track3.ssa,第一个是视频流,先用mencoder转换了吧。oac选copy就可以了。
  获得了Xvid编码的视频流后
  之后用VirtualDub打开分离了的音频和视频,都选上直接复制视频流,之后再在视频→帧速里面的帧速变化里选择更改以使视频和音频的持续时间相匹配。
  选择另存为avi就可以得到一个和正常的MV一样时间的文件了,接下来是字幕。
mencoder "F:\Video\OTHER\ft\test2.avi" -o "F:\Video\OTHER\ft\test3.avi" -oac mp3lame -lameopts vbr=0:br=64 -ovc xvid -xvidencopts fixed_quant=3:me_quality=6:cartoon -vf scale=320:-3,expand=0:-18:0:0:1 -ofps 20 -sub "F:\Video\OTHER\ft\track3.ssa" -font "F:\Video\OTHER\tt\msyh.ttf" -subfont-autoscale 1 -subfont-outline 2 -subpos 93 -spualign 2 -subcp utf-8
老东西了,可以搜索一下本站,前面的文章有介绍。记得因为我在windows下,所以必须加一个utf-8,否则mencoder转换出来的ssa字幕乱码。。。好像也可以直接用-utf8,我沒试就是。。。
  总之到这里就解决问题了。
  

  等等,还没结束,如果是idx和SUB的字幕的话我再windows下试的mencoder是不能加载的,方法只有用刚才下的mkvmerge吧前面得到的文件和字幕再打包成mkv,然后用mencoder转换,就用sid 0参数就ok了。。。

2008-06-15

C中的字符串处理

C的标准库中提供了大量的字符串处理函数,我们先从功能分类来看看它们:

字符串长度:
原型:
size_t strlen(char const *string);
size_t是在stddef.h中定义的无符号整型。

不受限制的字符串函数:
 即之经过最后的\0来判断字符串长度
 原型:
 复制字符串:
 char *strcpy(char *dst,char const *src);
 从src处将字符串复制到dst中,返回dst的一份拷贝,即指向dst指向的内存空间的指针
 连接字符串:
 char *strcat(char *dst,char const *src);
 注意dst原先需要包含一个字符串,可以是空串,返回dst的一份拷贝,即指向dst指向的内存空间的指针
 字符串比较:
 int strcmp(char const *s1,char const *s2);
 逐字符比较,第一个不匹配的字符中较小的那个所在的字符串被认为较小,若一个字符串是另一个的子字符串则认为前者较小。
 若第一个参数小于第二个,返回一个小于零的值,相等则返回零。


长度受限的字符串函数:
 char *strncpy(char *dst,char const *src,size_t len);
 char *strncat(char *dst,char const *src,size_t len);
 int strncmp(char const *s1,char const *s2,size_t len);

 strncpy只向dst写入len个字符,若src长度小于len就用\0填满。strncat向dst中复制len个字符加一个\0,

字符串查找:

 char *strchr(char const *str,int ch);
 char *strrchr(char const *str,int ch);
 strchr在str中查找ch第一次出现的位置,而后返回指向该位置的指针。如果没有找到则返回NULL执政,strrchr返回str中ch最后出现的位置。

 char *strpbrk(char const *str,char const *group);
 strpbrk在str中查找group中任何一个字符在str中第一个出现的位置,返回指向该位置的指针。
 char *strstr(char const *s1,char const *s2);
 在s1中查找整个s2出现的位置,并方会指向该位置的指针,若s2并没有完整的出现在s1中就返回一个NULL指针,若s2为空则返回s1。

高级字符串查找:
size_t strspn(char const *str,char const *group);
 size_t strcspn(char const *str,char const *group);
 strspn返回str中起始部分中包含group中任何字符的个数,注意是从str的第一个位置开始计数,知道发现第一个不属于group中的字符位置。
 strcspn正好相反,返回的是str中起始部分不包含在group中的任何字符的个数。
 如
int len1,len2;
char test[]="12895424,1238539,3.5399sfdsfdsf";
 
len1=strspn(test,"123456789");
len2=strcspn(test,"456789");

 len1的值是8,len2的值是2。

分段提取字符串:
有时候需要从一个字符串中提取一些由各种可能的符号分割的参数,这个时候就要用strtok了
char *strtok(char *str,char const *sep);
spe定义了分隔字符的集合,str指定被分隔的字符串,每次运行strtok时都会找到str中下一个分隔标记,并且保存在标记的位置,并用\0结尾被分割的前面部分,并返回前面被分割的那个部分的起始位置的指针,如果str是一个NULL指针,这strtok从前面被保存的位置开始继续查找,直到不再有标记时返回NULL。下面这个例子可以看看:

#include <stdio.h&rt;

#include<string.h&rt;

int main()
{
char spee[]=" \t\f\r\v";
char strf[]="tesr dfidjf tesfi .df",*rest;

for(rest=strtok(strf,spee);rest!=NULL;rest=strtok(NULL,spee))
{
printf("next token is %s \n",rest);
}
}

运行结果是

next token is tesr
next token is dfidjf
next token is tesfi
next token is .df

以上就是字符串的操作了,接下来是字符操作:

字符分类:
用于分辨是否是某种字符:包括下面这些函数,全部都是形如:int isupper(int ch);

函数
若符合以下条件则返回真 
iscntrl 任何控制字符
isspace 任何空白字符' ','\f','\n','\r','\t','\v'
isdigit
十进制0-9
isxdigit
十六进制数0-9,a-f,A-F
islower
小写字母
isupper
大写字母
isalpha
字母
isalnum
字幕或数字
ispunct
标点符号,以及不属于字母或数字的图信字符
isgraph任何图形字符
isprint
任何可打印字符

字幕转换:
int tolower(int ch);
int toupper(int ch);


内存操作:
如果要处理一些非字符串数据的时候可以使用,情况于字符串处理类似,所以放在一起。

void *memcpy(void *dst,void const *srt,size_t length);
void *memmove(void *dst,void const *srt,size_t length);
void *memcmp(void const *a,void const *b,size_t length);
void *memchr(void const *a,int ch,size_t length);
void *memset(void *a,int ch,size_t length);

length表示要处理的字节数,memcpy从src复制lenght个字节到dst,不允许dst和src有重叠,memmove和memcpy类似,只是允许dst和src重叠。
memchr从a的其实位置查找ch第一次出现的位置并返回指向该位置的指针,
memset用ch覆盖a的前length个长度。

2008-06-11

不同编程语言和操作系统对应的薪水

  The Unix Geek网站日前根据Indeed职位搜索引擎统计出了美国不同程序员的收入情况,按照他们使用的编程语言、操作系统和应用程序接口进行分类。下面是使用18种编程语言的程序员年薪情况:
Erlang: $99,000O
bjective-C: $82,000
Pascal: $81,000
C++: $80,000
TCL: $80,000
C#: $79,000
Java: $79,000
Python: $78,000
Perl: $77,000
Ruby: $74,000
COBOL: $73,000
JavaScript: $72,000
ColdFusion: $64,000
Delphi: $64,000
PHP: $64,000
Visual Basic: $64,000
C: $60,000
Haskell: $53,000
下面是按照4类操作系统划分:
GNU/Linux: $86,000
Solaris: $80,000
Microsoft Windows: $55,000
Mac OS X: $51,000

最后是按照应用程序接口划分:

Win32: $86,000
Tcl/Tk: $81,000
Qt: $76,000
GTK+: $75,000
.NET: $71,000 ($75,000 "Visual Studio")
Cocoa: $43,000 ($60,000 "Mac Programming")

2008-06-02

传说中的140字小说。

Recently,there's a Twitter Writing Contest,It required competeters can only write a novel by only 140 characters,Now let's see if these novel are funny.

First Place:

“Time travel works!” the note read. “However you can only travel to the past and one-way.” I recognized my own handwriting and felt a chill.

Second Place:

Tony was a snitch, so I wasn’t surprised when his torso turned up in the river. What did surprise me, though, was where they found his head.

Third Place

When Gibson hit that homerun in the fall of eighty-eight, my old man had never been so happy. He hugged me for the first time. I was eleven.