2007年5月15日星期二

Beryl / AIGLX / ATI : 完成版

终于跑起来beryl了~ 速度不错。
贴图可见http://easyhu.blogspot.com/2007/05/beryl-aiglx.html
详细方法可见http://www.freebsdchina.org/forum/viewtopic.php?p=194263#194263


texture.c改动的地方,估计也不是写程序时候的Bug,而是AIGLX正常情况下的用法。因为我现在其实还是Direct Rendering,没有用上AIGLX(不过Indirect奇慢无比…… 不知道是什么问题)。我现在直接用--use-copy还是--force-aiglx的时候还是会看见显示混乱,估计是改了的结果。


后记:更新xorg-server,dri,libGL*后,beryl不稳定了,有时候Bus Error,一个问题是“曲线收起”就会Bus Error,还有剩下的几率比较小,但是发生原因不明。


另:我不喜欢我家的鼠标有自动双击功能!……


Old Blog Link: http://computer.mblogger.cn/henryhu/posts/64943.aspx

2007年4月23日星期一

.Net under unix-like systems: mono

MS看着Java凭借着可移植性占领了广大的市场,自然不甘心,于是搞出了.Net——MS版Java。实话说,.Net和Java很多地方差不多的……
由于.Net需要可移植性,因此.Net程序里面其实并不是机器码——实际上是MS的一种中间代码,也就是经过了一半编译过程的代码。既然是独立于系统的,.Net也就很容易被移植到MS没有兴趣/不想移植的系统上。由此,mono便诞生了——可以在Linux/BSD/unix-like上跑.Net程序。
貌似mono自己写了.Net的一大堆类库(当然很多还没有写出来…… 但可以混混了~)。
从前装好mono,运行的时候,报告gdiplus.dll找不到。我把Windows下面那个搬到了很多地方,都没有用。今天再试,突然想到可能需要原生的gdiplus,一看,果然发现有libgdiplus这个port,装好之后出现了gdiplus.so等。再运行,就没有原先的问题了。
但是,mono的不完整的实现还是限制了使用…… 我用它运行从前写的ReadAsBmp程序(能够把一个文件的任何部分当作Bmp处理等),基本上可以用,但是PictureBox的Load() mono 没有实现,载入外部图像的时候就挂掉了。而另一个 NewLines 程序 (其实功能和常见的WinLinez差不多,五个珠子连起来就消掉的小游戏,为了解决自动缩放/存盘/跨平台等功能而自己写的,给我妈玩……)由于Form.set_MainMenuStrip() mono  没有实现,窗口都没出来就挂掉了,看来目前还不能使用菜单部分啊~
总的来说,mono 已经不错了,只要能够完善类库,比起Java还是很有竞争力的。

Old Blog Link: http://computer.mblogger.cn/henryhu/posts/64263.aspx

Project: ReadAsBmp

这个东西是我为了更换MP3的Rom里面的图片而开发的,能够在指定参数之后,从文件的某个位置读取BMP格式的图像(或者说把数据当BMP格式读进来并且显示出来~),以及使用各种格式的图像进行替换。开发到现在,已经可以从某个文件中读取图像列表,自动批量显示在列表框里,然后通过点击选择图像(就不用每次都手动输入数据再显示了~ 一劳永逸啊~)。这个功能使得这个程序应该可以适用于各个牌子、各个型号的MP3的Rom~ 也可以根据列表把图片自动提取出来,保存到文件。暂时没有批量读取功能,以后再说~
这个东西是用C#写的,主要是跨平台性好,用起来还比较方便~ 另一方面是为了学习C#,大概是C#的第一个实用项目吧。


Old Blog Link: http://computer.mblogger.cn/henryhu/posts/64264.aspx

评论

# 回复: Project: ReadAsBmp 2008-7-25 3:25 behzad_ahmadpoor666@yahoo.com

评论内容不能为空

Project: TimeCountJava

用来计时的东西,设计出来的时候是给我家的宽带计时用的,所以和上网/断网这个功能结合得太紧密了,现在正在考虑分开来。
其实就是一个计时工具,能够对一小段一小段的时间进行统计,得出每月总和,每日总和,并且能够浏览历史记录。因为是用来统计上网时间的,所以还有上网和断网的功能。
虽然是用Java写的,但是貌似Java没有上下网的方法。所以,需要针对各个系统写一个用来上网/下网的小程序。我现在Windows里面用的是rasphone(系统自带),FreeBSD下面我写了一个ppp的wrapper脚本,这个脚本应该是通用unix-like系统的。
以后要增加达到限制提醒功能,另外多一些配置功能,……


Old Blog Link: http://computer.mblogger.cn/henryhu/posts/64265.aspx

2007年4月3日星期二

Beryl / Compiz / XGL / AIGLX: 新进展


鉴于Xgl的编译困难——没有能够和Mesa共同编译的发布版本,我全面转向AIGLX。新版本的Xorg(7.2)自带了AIGLX,并且默认状态就是激活的。
我原先用git抓下来编译的Xorg,竟然是7.1.99.2,竟然比发布版旧…… 跑起来之后,Xorg会在某个不确定的时刻死掉…… 而且,这个版本就是死活不肯编译 GLX Extension! 就算我 configure 的时候指定 --enable-glx 也没有用。 后来想,既然决定用新的Xorg,干脆用ModularXorg的ports算了。原先是觉得这样弄会很烦,但是也没有别的更简单的办法。
于是就照着FreeBSD wiki里的ModularXorg的方法,先备份ports目录,然后用git抓下新的(大概耗时半小时左右),接着就到ports里的各处安装ModularXorg的各个组成部分,比如xorg-proto,xorg-server,libGL*,libglut,dri,libdrm,xf86-input-mouse,xf86-input-keyboard,xf86-video-ati,还有各个小工具,比如xdpyinfo,iceauth,...
一切OK后,重新配了一下X,顺利进去了。这个X相对git下来那个稳定多了,也有了GLX Extension和Direct Rendering(虽然现在的ports里面的dri不编译glxinfo,glxgears等等,但是可以用git抓下新的Mesa的源代码,然后去progs/xdemos里面编译)。但是这个X没有6.9稳定,比如我切换到命令行再切换回来很容易出问题,而且每次退出基本上都不能正常,总是有"X in free():..."的错误。但无论如何,可以用了。
然后安装了beryl和compiz,原来想着差不多了,但是启动beryl之后…… 就出来那个"white screen of death"了。其实也不是全白,可以转动桌面立方体,弹性窗口效果等等都有,桌面还是蓝颜色的,就是所有的窗口都是白的(还有半透明效果……),没有内容。如果用--use-copy选项启动beryl,能显示内容,但稍有变化就会乱掉,而且速度奇慢(其实不用--use-copy也很慢,但是至少能动),总之就是行不通。
compiz这边,启动的时候显示"no GLXFBConfig for default depth, this isn't work"的错误,而beryl对应的是"no GLXFBConfig for default depth, falling back to visinfo",看来beryl针对这个问题进行了patch。总之就是不能正常使用……
据说这个是glproto从1.4.7升到1.4.8之后导致的一个问题,看来要等更新了……
现在打算去看看beryl的代码,哪里出的问题……
注:beryl是从compiz分离出来的项目,基于compiz的代码,进行了许多改进/创造,目前两个项目正在考虑整合问题。

Old Blog Link: http://computer.mblogger.cn/henryhu/posts/63590.aspx

2007年4月1日星期日

尚未完成: Compiz / Beryl / XGL / AIGLX on FreeBSD

和 Beryl / Xgl / AIGLX 等东西折腾了三天了,还没搞定……
其实说起来很简单:装好各种基础,再装Mesa,然后是Xgl,接着compiz,就可以了。但是Xgl的源代码的编译严重依赖于Mesa的源代码,每次 Mesa有文件上的变化Xgl也要变。但是…… 计划没有变化快…… 最新通过git抓下来的Xgl和Mesa的源代码不能一起编译…… 我常试了各个版本,尚未找到办法……
在网上看见很多安装指南,看来成功编译的不是正好Mesa和Xgl可以共同编译,就是自己做了些小的修正,但是现在的版本差别实在太大……
后来发现新的用git抓下来的Xorg可以和Mesa一起编译,貌似采用了一种更先进的依赖方法…… 于是我试着把它和现在的Xgl整合,但是…… 没有效果……
最后,我终于知道新的Xorg带了一个叫AIGLX的东西,按照www.freedesktop.org上的说法,这个是“Xgl的一个流行的替代品“。目前编译Xorg中……
Compiz倒是很容易编译,就是一直跑不起来,看来一定要跑在Xgl/AIGLX上面……
另一个搞不清楚的是,我编译安装了最新的Mesa(6.5.3 by git),卸掉了ports里的dri和libdrm,也编译安装了新的libdrm,但为什么就是没有direct rendering...

附: 各个版本的Mesa和Xgl的各个不同点
Mesa: 6.5 6.5.1 6.5.2 git cvs Xgl: git cvs
6.5.3 6.5.2
main:
bitset.h No Yes Yes Yes Yes Yes Yes
arrayobj.h No Yes Yes Yes Yes Yes No
mipmap.h No No Yes Yes Yes Yes No
mesa:
array_cache Yes Yes Yes No Yes No Yes
vbo No No No Yes No Yes No
swrast:
s_arbshader Yes Yes Yes No Yes Yes Yes
shader/slang/library:
slang_version.. Yes No No Yes No No Yes
Old Blog Link: http://computer.mblogger.cn/henryhu/posts/63557.aspx

2007年2月14日星期三

好你个中国电信!

这两天上各种网站,常常被转到search.114.vnet.cn,搜索乱七八糟的东西。明显这个不是病毒的问题(哪个病毒这么好心,专门往电信的互联星空网站跑?),再加上现在乱输网址都会跑到sh.vnet.cn,遂怀疑中国电信不干好事。

首先,看nslookup。用nslookup查各个网站(im.qq.com, www.ethereal.com)等倒是没有问题,但是涉及到错误的网址么:

> a

Server: ns-pd.online.sh.cn

Address: 202.96.209.133



Non-authoritative answer:

Name: a

Address: 218.83.175.154

而218.83.175.154和sh.vnet.cn

Name: sh.vnet.cn

Address: 218.83.175.138

是同一个局域网的。难道有叫a的网址…… 而且输b,c,d,aa,.....都一样。



这个也就算了,反正我很少输错网址的~

但是,下面这个问题严重了。比如,我上mobile.qq.com:

注:202.96.209.5 上海的一个DNS

202.96.209.133 上海的另一个DNS

***** From Ethereal (www.ethereal.com) Output ******

(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com

202.96.209.5->(My IP) DNS Standard query response, Server failure

(My IP)->202.96.209.133 DNS Standard query AAAA mobile.qq.com

202.96.209.133->(My IP) DNS Standard query response, Server failure

(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com.HenryPC.org

// 1秒以后

(My IP)->202.96.209.5 DNS Standard query AAAA mobile.qq.com.HenryPC.org

// 又1秒

(My IP)->202.96.209.133 DNS Standard query AAAA mobile.qq.com.HenryPC.org

202.96.209.133->(My IP) DNS Standard query response A 218.83.175.154

// 就是这一行,搞来一个错误的IP

(My IP)->218.83.175.154 HTTP GET / HTTP/1.1

// 当中有host: mobile.qq.com, 说明我的机器把这个IP当作mobile.qq.com了!

218.83.175.154->(My IP) HTTP/1.1 200 OK (text/html)

返回的html:

<script>

s=String(window.location.href);

...

var KeyList = new Array(273);



KeyList[0] = "\262\312\301\345"

...

KeyList[13] = "mp3"

...

KeyList[77] = "msn"

KeyList[78] = "dj"

KeyList[79] = "nba"

...

KeyList[95] = "s.h.e"

...

KeyList[273] = "\267\277\262\372";

t="http://search.114.vnet.cn/search_web.html?id=596&fm=pro&kw="+KeyList[myradom()]+"&s=83";





//t="http://218.30.64.194/response.asp?MT="+mylocal+"&srch=5&prov=&utf8";

document.location.href = t;

</script>

也就是这个HTML,导致浏览器跑到search.114.vnet.cn去了……

后面的纪录就是从search.114.vnet.cn获取网页的过程了……

关键也就是先解析mobile.qq.com不给回答,然后解析mobile.qq.com.HenryPC.org(假如原来的不行,Windows会加上默认的本地域名,我的机器上是HenryPC.org),这个原本应该给出NXDOMAIN(无此域名)的查询,竟然返回了电信的广告网站,问题就这样出现了……

所以说,完全是因为电信的DNS的胡作非为导致了这个问题!



经过用nslookup试验,发现:

当我用A方式查询(也就是IPv4的模式),DNS基本正常,但是NXDOMAIN变成了广告页面。

但是当我用AAAA方式查询(IPv6的模式,一般网站还没有这个模式),电信DNS对普通域名返回SERVFAIL(Server Fail),而对不存在的域名也返回广告!

现在的WindowsXP支持IPv6,所以先用AAAA方式查普通域名,出错;然后用AAAA方式查加上了本地域名的IP,正常应该返回没有或者不支持,然后再用A模式查域名,就好了,但是电信竟然返回了一个广告IP!…… 就这样,XP被误导了!

暂时的解决方式有把域名和对应IP放到C:\WINDOWS\SYSTEM32\DRIVERS\ETC\hosts里面,或许关掉IPv6更好……

缺乏竞争就是不好…… 等这一段过了就去用长城宽带!……

PS: 运行ipv6 uninstall后,问题暂时解决…… XP开始用A查询了……



原理解释:

我们平时打的网址(www.google.com等),其实都是为了帮助记忆,就像寄信寄到市少客站一样。但是,邮递员并不可能光靠这个来投信(特别敬业的除外),所以要知道地址,而在网上,这个就叫IP地址,是四个数字(10.0.0.1这样的),用以表明某台机子/网络。DNS服务器的作用,就是用你给的网址(域名),查询对应的IP,并告诉你结果。如果查不到,应该返回找不到!



Microsoft KB815768:

根据 RFC 1034 的 6.2.4 小节(请参见“参考”),如果 DNS 服务器上存在“A”记录,则当查询“AAAA”记录(或任何非“A”记录)时,DNS 服务器不应返回 NXDOMAIN 或 NAME_ERROR 响应。如果 DNS 服务器没有识别出“AAAA”名称查询,它应该返回 NODATA 或返回无错误 (RCODE 0) 以及一个空的回复部分。

Old Blog Link: http://computer.mblogger.cn/henryhu/posts/62479.aspx