2013年1月

svn的authz配置

设置svn目录

/project
├── trunk
├── tags
├── branches

  • super 最大级别的比如boss,不需要开发,所有的给读的权限
  • manager 项目的管理员,有读写权限,有打tag的权限
  • developer 开发人员,有读写权限,没打tag的权限
  • packer 打包人员,只有读tag的权限

[groups]
g_super = aaa
g_manager = bbb
g_developer = ccc,ddd
g_packer = eee


[project:/]
@g_super = r
@g_manager = rw
* =

[project:/trunk]
@g_super = r
@g_manager = rw
@g_developer = rw
* =

[project:/branches]
@g_super = r
@g_manager = rw
@g_developer = rw
* =

[project:/tags]
@g_super = r
@g_manager = rw
@g_developer = r
@g_packer = r
* =

php中正确获取程序路径

首先说说$_SERVER['DOCUMENT_ROOT']这个变量,这个变量是由apache的配置文件里面的documentroot决定的(当然你要是用的不是apache,那就是由其他服务器决定的),一般情况之下还是可靠的,近日,用到了apache中的alias,然后alias的目录不在virtualhost的documentroot中,于是alias的目录中用$_SERVER['DOCUMENT_ROOT']来计算文件的引入路径就出错了。

看看几个较流行的框架

Slim

public function root() {
        return rtrim($_SERVER['DOCUMENT_ROOT'], '/') . rtrim($this->request->getRootUri(), '/') . '/';
    }

Laravel

if ( ! defined('DS')) {
	define('DS', DIRECTORY_SEPARATOR);
}

$GLOBALS['laravel_paths']['base'] = __DIR__.DS;

于是slim嗝屁之,laravel依然风骚。由于laravel要求最低是php5.3,而__DIR__是5.3才有的,那在php之前的版本下使用dirname(__FILE__)就好了。

expect的使用

expect可以自动化执行需要交互的命令。

安装

yum -y install expect

使用

创建一个文件test.exp

#!/usr/bin/env expect
spawn php go-pear.phar
expect ":"
send "\n"
interact
expect test.exp

python版本

pip install pexpect
#!/usr/bin/env python
# encoding: utf-8
import pexpect

cmd = 'php go-pear.phar'
child = pexpect.spawn(cmd, timeout=None)
child.expect(':')
child.sendline('')
# child.interact()
child.close()

cocoa项目中嵌入python

添加链接库:
A5C731A1-10A4-46B3-AF78-A32AB4AF9CA2.png

文件结构:
QQ20130107-1.png

代码

main.m

#import 
#import 

int main(int argc, char *argv[]) {
    Py_Initialize();
    // 这里面自己定义一个hello函数(python的)好了
    PyRun_SimpleString("import hmac, binascii\n"
                       "from itertools import izip, cycle\n");
    int result = NSApplicationMain(argc, (const char **)argv);
    Py_Finalize();
    return result;
}

控制器里面直接使用就好了

- (IBAction)runpy:(id)sender {
    PyObject *m, *f, *a, *k;

    m = PyImport_ImportModule("__main__");
    f = PyObject_GetAttrString(m, "hello");
    a = PyTuple_Pack(1, PyString_FromString([[_email stringValue] UTF8String]));
    k = PyObject_CallObject(f, a);
    
    // NSLog(@"%@", [NSString stringWithUTF8String:PyString_AsString(k)]);
    [_keycode setStringValue:[NSString stringWithUTF8String:PyString_AsString(k)]];
    
    Py_DECREF(k);
    Py_DECREF(a);
    Py_DECREF(f);
    Py_DECREF(m);
}