TAR备份文件时候排除特定目录

在备份站点的关键文件时,通常需要排除附件、用户头像等体积比较大的目录来节省备份时间。因为不常用Linux,操作过程并不顺利,为了日后方便,遂在此记录些细节,:)

  • 要排除某个目录请使用–exclude PATTERN选项,如需指定多个目录,请相应增加–exclude数量
  • PATTERN必须是相对路径,如果是目录,则不能以/结尾
  • -czvpf中的p为保留目录权限信息,:)

例子:
tar -czvpf archiver.tar.gz ./target_dir/ –exclude ./target_dir/attachments –exclude ./target_dir/uc_server/data/avatar

Posted in Server | Tagged | Leave a comment

平铺地图滚动的性能优化

一款手机游戏需要实现背景图的无缝循环滚动,基本思路就是生成若干数量的背景图实例前后对接在一起。编码中考虑到要降低内存消耗,除了将背景图转换为单份BitmapData复用外,也需要对生成的背景图数量进行控制。因为对移出显示区域的图片可以重复使用,所以最终生成的图片数量为:Math.ceil(显示区域宽度/图片宽度)  + 1。最后的+1是为了补上当第一张图片再未完全移出显示区域时在图片队列尾部留下的空隙。

以下是滚动方案:

方案一:

在EnterFrame内递减已对接好的若干图片的x坐标,首图移出显示区域后改变其x坐标将其移至队列尾部。此方法需要更新多个显示对象的坐标值,性能一般,移出显示区域的图片还会显示,同时会撑大显示区域(实际大小为图片数量*图片宽度)。虽然可以使用遮罩解决,但是还要生成一个显示对象赋值给mask。

方案二:

使用scrollRect,递增其x坐标来实现类似镜头移动效果。默认就隐藏了移出显示区域外的图片部分,不用使用遮罩。只需控制scrollRect的x坐标,逻辑相对方案一清晰,也减少了代码量。需要注意的是DisplayObject.scrollRect属性是一个getter,取值做修改的时候内部可能赋值一个实例返回给你,所以你直接修改其x坐标是不会生效的,最佳的做法是在最初赋初值的时候在外部保存一个引用,要修改x坐标时直接通过保存的引用修改,然后将这个引用再赋值给DisplayObject.scrollRect即可。代码如下:

不生效:

area.scrollRect.x += 1;

会生效:

scrollRectRefCopy.x += 1;
area.scrollRect = scrollRect;

小记:

  1. 遮罩对象也需要加入到显示列表,否则是不会生效的。
  2. 单纯的提高移动速度(因数)不会降低帧频,重要的是控制移动的显示对象的数量。
  3. 不要设置移动对象容器的cacheAsBitmap为true,在移动(大面积重绘)的情况下会让移动设备掉帧,上述例子iOS未设置时帧频为23~24浮动,设置后直接掉到17~18。
  4. 由于原理不同,方案二在处理图片连续性问题的解决方案是,在首图移出显示区域后,重置scrollRect.x为scrollRect.x – tile.width。这样也可以避免对显示列表的频繁更新。
Posted in Actionscript | Leave a comment

无法将使用Embed元标签嵌入的MovieClip绘入BitmapData

昨天在为一个手机应用做测试的时候发现无法将使用Embed元标签嵌入的MovieClip绘入BitmapData,位图数据为空。原本以为是MovieClip有问题,尝试后排除此可能。

最后经过过客的调试发现,使用Loader载入的同个swf可以正常绘制。目前还未找出使用Embed嵌入的MC绘制失败的原因。

测试过程中有一个细节,就是实例化BitmapData时,除了第三个参数transparent需要设置为true外,第四个参数fillColor需要与MC的文档背景色一致,否则背景会不透明,显示为一个色块。

Posted in Actionscript | Leave a comment

vsftpd配置记录

约定

  • vsftpd的配置文件位置/etc/vsftpd.conf
  • vsftpd的pam服务名为vsftpd,对应的pam配置文件为/etc/pam.d/vsftpd,vsftpd配置文件内对应的配置行为pam_service_name=vsftpd
  • vsftpd的user_config_dir为/etc/vsftpd/users

注意事项

  • 卸载自带的低版本vsftpd,yum -y remove vsftpd
  • 编译安装pam_mysql,并从/usr/lib/security/拷贝一份pam_myql.so到/lib/security/
  • xferlog_std_format不能为TRUE,否则日志写到独立的文件中
  • pam模块调试,可以查看日志tail -n 50 /var/log/secure,内有详细信息(通过命令ls -ltr /var/log查看近期更新过的日志文件,随即定位到/var/log/secure)
  • vsftpd的配置(/etc/pam.d/vsftpd)内容。其中crypt不能写在config_file指定的文件内,没有发现文档内有约定config_file的内容,后来是查看/var/log/secure发现的。
auth required pam_mysql.so crypt=2 config_file=/etc/vsftpd/pam.conf
account required pam_mysql.so crypt=2 config_file=/etc/vsftpd/pam.conf

遇到的问题

  • 编译安装过程中的./configurate出现libpam.so和libcap.so找不到的问题,这是因为服务器系统为64位,只需修改源码目录下vsf_findlibs.sh文件内对应的lib目录为lib64即可
  • 服务启动后无法登录,请参考/var/log/secure的日志信息排错,包括pam_mysql依赖的mysql两张数据表是否正确,且指定给pam_mysql的字段配置是否完整。
  • 所有配置均OK的情况下依然无法登录(/var/log/secure里体现为pam_mysql_check_passwd() returning 1),请尝试将用户的密码简化,如改为123。
  • 登录成功但无法获取文件列表,需要注意查看/var/ftp目录是否存在、ftp客户端的错误提示,以及检查ftp用户和对应的local_root目录的用户权限是否设置正确。

pam_mysql模块文档内提到日志表的logtimecolumn存储的是时间戳,但是实际的字段类型应该为datetime(/var/log/secure 内显示使用NOW()插入),请注意。

PAM服务默认的库目录为/usr/security//usr/lib/security/,RedHat则在/usr/security/,其他内容推荐参考互动百科的条目,有提及更多细节。

TODO:pam_mysql的日志解析

Posted in Server | Tagged | Leave a comment

学习python中的easy_install

Python模块安装方式有两种:

使用内置的distutils库编写setup.py,而后python setup.py即可,这需要自行从PyPI中下载所需的模块解压后执行命令安装,并且根据具体模块的实际情况,你有可能需要手动解决包之间的依赖。

另外一种就是使用easy_install了。easy_install 是PEAK出品的setuptools的一个外部命令,用于调用其内部的ez_install工具来增加Python的包管理。使用easy_install安装模块只需要执行easy_install <module_name>,easy_install就会自动从PyPI中搜索最新版本的模块并下载、编译、安装,同时也会自动解决包之间的依赖问题。当然,easy_install的能力并不仅限于此,除此之外还有更多的用法,具体的请各位参考网上的资料哈!

安装方法,到PyPI里的setuptools主页下载源码包,解压到任意目录后执行python setup.py install即可。使用前请检查系统环境变量内是否包含<python root>/Scripts。

egg文件类似于Java中的jar,是源码的一种打包格式,用于分发安装,也是PEAK的setuptools所支持的一个特性。

打包方法:在模块根目录下新建一个setup.py,输入以下内容:

from setuptools import setup, find_packages

setup(
    name = "eggtest",
    version = "0.1",
    packages = find_packages(),

    description = "egg test demo desc1",
    long_description = "egg test demo desc2",
    author = "zhengwei",
    author_email = "test@egg.com",

    licence = "GPL",
    keywords = ("test", "egg"),
    platforms = "Independent",
    url = "http://zhengwei.name/"
)

然后执行python setup bdist_egg就会将你的模块打包至<python root>/Lib/site-packages下了。注意packages = find_packages(),此行是使用find_packages()自动查找模块下的子文件夹,如果子文件夹下有__init__.py,就作为包导入。如果要导入根目录下的模块,请指定py_modules = ["module1", "module2"]即可。

egg文件的命名格式为<name>-<version>-<python version>,上述代码生成的egg包名就为eggtest-0.1-py2.7.egg。当然,同时也支持将模块打包为zip、exe和rpm(linux only)格式,具体参见:

http://blog.csdn.net/hong201/archive/2009/05/28/4219035.aspx
http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html

关于egg包的卸载,egg文件可以遗留,但是必须要移除site-packages/easy-install.pth内对应的包名,这样才能确保不能在python内继续引用相关模块,:)

参考引用:http://www.juziblog.com/?p=365001
官网文档:http://docs.python.org/library/distutils.html
setup.py参考:https://github.com/facebook/tornado/blob/master/setup.py

Posted in Python | Leave a comment

恢复PDT内的高亮变量(关键字)的背景色

目前由于工作需要,经常在Flash Bulider和PDT之间切换。

平日习惯了Notepad++中的Obsidian配色方案,所以也把PDT的配色方案改成了Obsidian,FB保持原样。刚开始还好欢乐,后来发现经常切换明暗背景,眼睛更不舒适了,所以决定还原PDT至默认的配色。

在一阵Restores Defaults后,发现当选中变量时,编辑器自动高亮的背景色依旧是暗棕色,不得其解。苦苦寻找后终于找到配置的地方了,在此处记录下,备查~

选项路径:Perferences -> General -> Editors -> Text Editors -> Annotations

Restore Defaults即可。:)

Posted in PHP | Leave a comment

Linux维护常用命令(保持更新)

  1. 分析apache访问日志,显示两列(访问次数,URL),按访问次数正序排列,用于筛查占流量的资源
    cat localhost-access.log | awk ‘{print $11}’ | sort | uniq -c | sort -n
  2. 查看Apache的并发请 求数及其TCP连接状态
    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

    返回结果示例:
    LAST_ACK 5
    SYN_RECV 30
    ESTABLISHED 1597
    FIN_WAIT1 51
    FIN_WAIT2 504
    TIME_WAIT 1057

    其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕, 等待超时结束的请求数。

Posted in Server | Tagged , | Leave a comment

Aptana插件版手动安装包下载(非在线)

使用PHP做Web开发的时候,习惯使用PDT + Aptana这对拍档,但是Aptana在线安装实在太慢了,遂找到插件的离线安装包。

可能是官方对多线程的下载进行了限制,所以请直接下载,不要使用下载工具,否则速度会很慢的。

安装时请取消“Contact all update sites to during install to find required software”,这样能避免在一些情况下安装缓慢,进度条长时静止的情况。

Enjoy it,:)

地址如下:
http://download.aptana.com/tools/studio/plugin/install/studio/index.html

来源于官方文档Wiki:
http://docs.aptana.com/docs/index.php/Plugging_Aptana_into_an_existing_Eclipse_configuration

Posted in PHP | Tagged | Leave a comment