php中引用的使用

[| 2011/07/06 11:01]
php使用引用的方法很简单,函数定义中的参数列表中使用引用的参数加上地址符号即可,函数内和实参都按普通方式。

智器rdesktop无声的问题

[| 2011/07/06 01:00]
之前一直试图让电脑可以连接智器放歌,一度试图搞一下direct sound抓取电脑声音发送到智器,搞了几天后发现不可行,对windows下的那套api完全不会,要想搞这个得先学很长时间的windows api,时间成本太大。又没有别的现成程序,于是考虑别的途径。

后来发现rdesktop可以用来远程登录windows,而windows的远程桌面是带了声音重定向的,于是准备反向来搞,让智器去登录windows,把声音redirect到智器上。

rdesktop使用倒是很简单,可惜连接上后所有关于声音的程序都无法运行,查了一下,说需要在组策略gpedit.msc里配置一下,让windows允许对声音重定向,默认是不允许的。配置允许后,程序可以运行了,但是声音依旧没有。

由于alsa有独占声卡的问题,一度以为是智器里某个程序把声卡占用了,导致rdesktop无法获取声卡控制权,在上面花了很长时间,没什么进展,也没法调试,很乱。

后来想到有个帖子里说到不同版本的rdesktop对于声卡独占还是不一样的,于是考虑是不是rdesktop的问题,上网一搜,果然很多人表示在使用rdesktop连接vista以后的系统时无声音,是个bug。很高兴,下了新版的代码编译了一下,但发现还是没声音。。。继续搜索,有人说在08 r2和win 7下要想播放声音,不但需要设置声音的redirect,还要设置一下磁盘的redirect才行。估计也是个bug。。于是随便设置了floppy=/tmp/***,有声音了。。很高兴。

播放了几首歌,发现声音总是断断续续,不知道是带宽问题还是智器cpu问题还是智器声卡问题,留待查证。
以前一直没找到比较好的工具查看网卡当前流量,今天发现了一个好东西:iftop,很不错的小工具,ubuntu源里面自带,装上后就可以了,还带了文字图形界面,可以查看每个连接的速度,很不错。

pcntl_fork使用注意事项

[| 2011/07/05 15:24]
今天同事用到了pcntl_fork,看了一下源码,发现就是简单的对c里面fork的一个封装,那么问题就来了,岂不是cgi每执行一遍就fork出一个新的cgi出来,并且cgi不退出,最后导致进程爆炸?试了下,果然是。所以这个函数只能用在cli模式下的php脚本里,跑在cgi模式下的php用这个就是自杀。

php中数组加法

[| 2011/06/30 12:40]
以前很少用加号连接数组,今天看到一个把数组相加的代码,以为就是简单的两个数组拼接。但逻辑上感觉不对,查了一下,原来是把后面数组中的元素按key添加到前一个数组中,若前一个数组已有该key,则不覆盖。即类似于取了一个并集。对于交叉元素以加号左边的数组中的对应值为准。

智器mount权限问题

[| 2011/06/30 00:50]
今天给智器mount一个sd卡,发现mount后的权限总是700,各种设置umask均无效,修改hal无效,折腾了好久。

后来经测试,当快速换卡,存储卡在proc中为非mmcblk0p1时(如mmcblk2p1),可以mount成非700权限。为mmcblk0p1时,无论怎样都是mount成700。怪事,莫非是智器的bug。

智器编译的噩梦

[| 2011/06/29 10:52]
智器的CPU从拆机图上看是TCC8902,主频600MHZ,ARM架构。由于内置的ubuntu里的perl有问题,apt的时候报一堆错,所以需要重新安装一个perl,activeperl提供的下载只有x86和x86_64,故需要自己编译。搞了一下发现太蛋疼了,比之前买的cpu限制为300mhz的vps还慢一个数量级。。通过分析cpu使用情况,发现虽然存储用的是flash芯片,但io速度并不是瓶颈。在解压缩的过程中主要是nand_flash_q服务占用了一半的cpu,也就是读写闪存芯片耗费了过多的cpu。在config和make的过程中io耗费的cpu大概占用了百分之三十。用户态cpu占用率为百分之七十。关于为什么智器速度要慢于弱vps的问题,我分析可能是如下原因:
1,对于不同架构cpu,主频并不决定性能的绝对高低。性能还跟一二三级缓存大小、流水线等有关,故智器的cpu频率虽高,未必性能要强于300mhz的至强。
2,那个弱vps是openvz技术,openvz技术里操作io耗费的cpu不知道是不是计入小鸡的份额里,很大可能是不计入。这样的话由于智器有将近一半的cpu被用来做io操作了。故跟vps比的时候只相当于300对300.
3,智器的iowait占用cpu量极小,故推测io速度不是瓶颈,这个推断是否正确?感觉总是和直觉上不符。


以上只是个人推测观点,有错误之处还请高手指教。

智器改装

[| 2011/06/28 14:44]
最近比较忙,很久没写日志,现在又有时间了。

先搞一下智器,本来想搞个小主机用来搭建个家庭多媒体中心,后来查了一下新的成本较高,旧的扩展性太差。突然想起来有个限制的智器,很不错,arm架构,功耗不大。256内存,有ubuntu 9.10.可以拿来用。于是翻出来接上电源。

首先启动ssh服务,自己带了,编辑/etc/rc.local让它开机自启。连上无线路由器,现在可以同局域网ssh上去操作了。

下面是公网访问,本来想搞个端口映射出来,电信给的路由器很烂,配了没啥效果,所以决定先用ssh做个端口转发,使用博客服务器做跳板,优点是路由器公网ip变了也没事,缺点是每个命令都要中美之间走两个来回,延迟巨大。用upnp应该能解决端口映射的问题,这个后续研究。

下一步想搞个远程音乐播放出来,智器是由esound提供音频服务,windows下有个WinESD客户端,不过已经十多年没有更新了,感觉不靠谱,自己研究一下写一个出来。

mmap使用

[| 2011/06/12 01:35]
最近用到opencv库,该库只能从文件中载入图像,而我的数据是在内存中的。需要将数据映射到文件再供opencv使用,于是想到mmap。
mmap主要是用来将文件的内容映射到内存地址,而将内存中的内容映射到文件不知行不行,于是决定尝试一下。

于是将mmap的第一个参数设置为存放数据的存储区指针,大小设置为数据大小,文件描述符为打开的一个空文件。发现映射前后内存区数值未变化,但是文件内容并未变化,调用msync无效,后来发现映射后的地址和传入的地址不同,原来已被使用的内存地址不能用来mmap,函数自动调整了映射位置,后来又做了些测试,总结如下特性:
1,mmap不能改变对应文件的大小,比如文件之前10k,即使映射100k,文件还是10k。
2,mmap映射大小和文件大小无关,10k的文件可以映射100k出来,当然后90k其实是无意义的。
3,mmap映射后的内存大小以映射时指定大小为准,比如10k文件映射100k,那么对于映射地址可操作的地址空间是100k。
4,mmap只向文件同步修改过的内容,而不是同步不一致的内容,比如映射了10k,目标内存地址原内容和文件内容完全不同,后修改了指定内存地址1k的内容,同步后文件只有1k的内容修改。

以上只是通过测试得出的特性,具体mmap的实现原理还有待读代码体会。
最近想搞个fastcgi模块跟nginx交互,弄了个测试程序结果怎么也跑不起来,直接显示502,nginx日志显示“upstream closed prematurely FastCGI stdout while reading response header from upstream”。调了很长时间调不出来,gdb显示程序运行没什么问题。后来请教高人,终于发现了问题,原来cgi回复里面http头一定要自己构造的,其中的“Content-type: text/html”必不可少,且由“
”结尾,也可自己根据需要添加cookie等头信息,然后需要有一个“
”组成的空行(http头规定),然后是http内容,http内容就可以自己随便写了。
分页: 4/23 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]