
| jianjian 生日 1974.8.30 性别 男 来自 重庆 现在 上海 (1999-Now) 毕业学校 成都科技大学(1992-1996) MSN/EMail jianjian@sunnet.org IRC irc.sunnet.org:6667 #sndt #mylinux |
| 虽然我也做过一些win32下面的C++开发,但是我的主要兴趣还是在UNIX下面的C开发。欢迎志同道合者来信交流。 长期开发WEB系统会令人生厌,经常性地开发一些独立的,规模较大的,比较底层的程序让人觉得能够找回不少兴奋的感觉。 以我个人的经验来看,编写程序大致由如下几类知识做为基础: 一门精通的语言 所选择的操作系统的特质 所牵涉到的特定协议(if any)的特质 程序功能 数据结构 算法 当然还必须要有好的工具。为了在UNIX下面编写程序,我不得不额外再花很多时间去搞明白gcc, make, cvs, vim,然后又花了很多时间寻找到了最顺手的终端工具
SecureCRT, 所以你看,光把C语言学会,学精,有什么用?
|
|
完成FLV metadata injection以后,紧接着就是FLV文件抓图和加水印的工作。比较通行的办法就是用ffmpeg来抓图,不过我实在不希望自己的整个系统流程那么复杂,而且ffmpeg抓出来的图尺寸相当大,然后还需要我的系统流程中增加一个环节把尺寸再变小,同时加上水印,实在是比较烦琐。系统流程越复杂,调用的非自有的外部程序越多,那么可能出现的环节中断的危险就越大,可自控性越低,所以这一个通宵就用在解决这个问题上了。 avcodec 库的确是个好东西,再加上 jpeglib, 两个库就能完成所有这些工作,不过这两个库需要蛮多的研究才能搞懂用法,尤其是avcodec, 真是强大,想想半个月前看到这个名词还一头雾水,现在已经用它在写程序了。用C语言有个麻烦就是你没有很多现成易用的库封装借口,但是也有个好处就是基本上所有的库都是C语言接口,而其他的语言不一定有,所以这也是C语言一直以来的优势和劣势。在一个系统中,把关键核心的技术点用C语言来解决,把周边的技术用其他语言来解决,是一个不错的平衡。 一个技术团队比较好的组成也应该是这样,我记得看到过一段蛮有意思的对话,提问者说:“为什么专门搞PHP,ASP的程序员总是解决不了比较高难的问题”,回答的人说:“你能指望一个连C语言的难度都不能克服的人有毅力和精神去钻研这么难的问题吗?”这个回答虽然有失偏颇,但也不无道理。一个团队中2-3个精英级的程序员负责解决高难度的东西,然后开发出调用借口给其他的程序员快速开发。不要让团队中的精英去把琐碎的问题也解决掉,那样只会浪费他们宝贵的精力和智慧。 水印用了一个简单的alpha算法实现,水印色重70%,目标图像色重30%。首先需要 jpg2bmp.c 负责将水印图片转换成我们自己格式的图像文件,其实蛮类似PPM,flvsnapshot.c 每次会先尝试读入这个水印图片,然后alpha到FLV截图文件的最顶部。加到最底部实在是没心思了,懒得去算位置了。
其实这些计算坐标之类的琐碎技术应该让C语言的培养成员来完成,也是一个锻炼和熟悉。 |
|
从10天前开始研究Youtube模式,从而开始了对 MENCODER FFMPEG FLV 的研究。为了在FreeBSD下装上一个mencoder 我可怜的PIII 550机器跑了半晚上。后来,很自然的,跟大多数研究youtube的朋友们一样,遇到了FLV文件的 metadata 的丢失和注入问题,一开始用flvtools2来解决,不过效率是在可怕,假如靠它来做一个youtube,大概注入metadata的时间不比转换的时间短多少,于是自己动手,开始研究FLV文件格式,尤其是各种TAG以及AMF标准的data type的定义,真是前后关联错综复杂,看得眼睛又近视了几度,终于完成了自己的FLV METADATA注入程序。 其实这个程序两晚上就已经完成了,多花了一个通宵是因为误把 onMetaData 写作 OnMetaData ,一个字母的大小区别让我抓狂了一晚上,把上千行代码翻来覆去DEBUG了无数遍,总是以为问题出在那无数的 _write_UIxxx() 和 _write_AMF_xxx()上面,最后才发现所有的问题就是这一个字母,毕竟年龄大了。 SNDT FMI使用了SNDT FILEOBJ库,对文件的读取操作相当迅速。注入一个 10M 大小的 FLV 文件,从分析到计算,到完成最终文件只要0.8秒,而flvtools2需要30多秒 -- 相信我,我没骗你,的确要这么久。 SNDT FMI对FLV文件进行一次快速扫描,计算出帧数,时间长度等基本信息,然后进行METADATA的组合,将结果组合在BINOBJ中,然后将FLV文件头,我们自己的METADATA数据,以及源FLV文件的音频视频数据整合成为最终数据文件。SNDT FMI使用固定缓冲,无论文件多大,读分析的时候只使用256字节做为缓冲,组合写的时候为了提高运行速度,使用16K内存做为缓冲区。 flv.c
flvfinal.c
sunlib2/
|
|
这是一个为迅速编写man page而开发的程序,可以方便/迅速地将格式化的文本转换为man page兼容的格式。因为是自用,以及给UNIX的程序员使用,在UI方面并未考虑太多的友好性。另外,这个程序只能产生最基本的man page格式 -- 不过已经足够了,总比手动编写好。
快速上手:
注意事项:
技巧:
关于悬挂模式:
下载
|
|
系统管理员从此可以获得简便的方式来维护管理FTP帐号(比如WEB方式,甚至直接mysql command line),并且ServU-MySQL提供了分组资源限制功能,这个组有点类似ServU的用户组,但是它是跟MySQL帐户表中的组对应的。没有什么解释能够比一个例子更易懂,下面就是举例解说: 假设某个论坛的用户按级别分成了三个组, 分别为 1, 2, 3,论坛管理员可以定制:
同时ServU-MySQL还有如下限制功能: 同一IP只能连入一个帐号,那些试图在同一IP连入几个不同帐号的行为被禁止。 同一帐号只能同时允许一个人使用,用户不能把帐号给别人,然后几个人从不同的地方一起连。 ServU-MySQL对数据库的链接是永久的,所以用户的频繁登录验证并不会造成效率浪费。 需要 ServU-MySQL 的用户可以联系我获取, MSN/Email jianjian@SunNet.ORG , 针对实际情况稍作定制就可以使用。 |
|
Anti-Spam!
|
|
sunmwd MySQL 中间件 Sunmwd已经于2002年出售给一家软件公司商业化。 |
|
HTTPD.RSD
|
|
HSL(HIRC Scripting Language) v2.0
HSL v2.0引擎能够快速解释并执行类似的脚本,其中 print(), itoa(), random() 就是以C语言预植入HSL引擎的库函数。
|
|
LZW
|
|
HIRC
|
|
udp_proxy 透明代理UDP应用,主要用于继续架设 CS 1.1服务器 这里下载源代码 编译udp_proxy非常简单:(FreeBSD下面你需要gnu make--gmake,也就是Linux自带的make了) $ tar zxf udp_proxy.tgz 然后再运行udp_proxy来代理外部玩家的udp packets: ./udp_proxy -H 61.151.251.135 -P 27015 -h 127.0.0.1 -p 27014 -t 30 这样其他CS玩家就可以用 61.151.251.135:27015 上服务器来玩了 如果你要在你的服务器上为朋友架设一个上qq的透明代理,使用如下命令即可: ./udp_proxy -P 8000 -h 202.96.170.166 -p 8000 -t 20 udp_proxy跟socks服务器不同之处,在于udp_proxy是不需要任何身份验证的透明代理,客户端软件不支持任何代理,只要把服务器地址填为udp_proxy的地址即可。 |