CDEFGAB 1010110

挖了太多坑,一点点填回来

Apt-get Install Error

apt-get, bug, error, linux, ubuntu

最近不知道为何,在更新 Ubuntu 内核时总是报错:

1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-52-generic.postinst line 1010

Google 了一下,是以前使用 apt-get 卸载软件时不完全引起的,解决方法是:

1
2
3
4
5
$ cd /var/lib/dpkg
$ mv info infobak
$ mkdir info
$ dpkg --configure -a
$ apt-get -f install

困扰了我多年的顽疾终于得到解决了,妈蛋!

Have a nice day!

老生常谈cookie跨域

cookie, jquery, php

很早之前就做过跨域设置 cookie 的项目了,但是以前没有做好积累,今晚花了点时间重新复习一下。

OK ,有两个域名, www.a.com 和 www.b.com ,现在要通过 a 网站来设置 b 网站下的 cookie 。

a 网站下 setcookie.php 的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<head>
    <meta charset="utf-8" />
    <title>Cookie Cross Domain</title>
    <!--
    -->
    <script type="text/javascript" src="http://www.b.com/cookie/setcookie.php?name=world"></script>
</head>
<body>
    <h1>test</h1>
    <!--
    <iframe src="http://www.b.com/cookie/setcookie.php?name=hello"></iframe>
    -->
</body>
</html>

用 JavaScript 来调用或者用 iframe 调用都是没有问题的。

一句话Shell脚本(2)

linux, script, shell

昨天玩octopress时出了问题,没有动任何东西的情况下,系统默认的ruby版本变成了1.8,导致本地的octopress既不能提交也不能本地预览。后来分别卸载了ruby1.8和ruby1.9,启用了新的PPA之后,重新安装ruby的两个版本,并通过update-alternatives把ruby版本默认设置成1.9。

可惜octopress还是无法启动,出现了http://stackoverflow.com/questions/13778858/octopress-errors-rake-preview-watch-or-generatehttp://stackoverflow.com/questions/16517144/why-the-pygments-code-rb-plugin-is-breaking中提到的问题。百思不得其解啊,为什么ruby版本明明是1.9,调用的gem库却是1.8下的呢?

类似Zend_Config_Ini风格的python Parser

ini, linux, python

写完上一篇文章之后,做了一个类似Zend_Config_Ini的Python parser,可以用来解析标准和非标准格式的ini文件,但是不能写文件。如果只用来读取文件内容的话,还是挺方便的。

ini文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
master.host                 = stats10.mezimedia.com
master.username             = scltrk
master.password             = Mhok8homL7
master.dbname               = tracking

slave.host                  = stats11.mezimedia.com
slave.port                  = 3308
slave.username              = scltrk
slave.password              = Mhok8homL7
slave.dbname                = tracking

msgsite                     = smarter
offset                      = 20000

Python读取ini文件

hack, ini, php, python

标准的ini文件中,应该有一个类似[section]的部分作为正文的开头,但是很多情况下,ini文件都是不标准的,比如下面这个格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
master.host                 = stats10.mezimedia.com
master.username             = scltrk
master.password             = Mhok8homL7
master.dbname               = tracking

slave.host                  = stats11.mezimedia.com
slave.port                  = 3308
slave.username              = scltrk
slave.password              = Mhok8homL7
slave.dbname                = tracking

msgsite                     = smarter
offset                      = 20000

在PHP中,对ini文件的格式容错率较高,不管是不是以[section]开头,PHP总能以正确的方式解析,不管是用原生的parse_ini_file函数还是Zend_Config_Ini类库,都可以非常方便无错地解析ini。

Redis实验(1)

linux, python, redis

研究了一下redis的常用技巧。

除了SET方法之外,redis还有MSET方法可以批量设置,如果发现有同名的key存在,就会覆盖原有的key。如果不想覆盖已经存在的key,请使用MSETNX方法。

用法:MSET key value [key value …]

1
2
3
4
5
6
7
redis> MSET key1 "Hello" key2 "World"
OK
redis> GET key1
"Hello"
redis> GET key2
"World"
redis> 

用法:MSETNX key value [key value …]

1
2
3
4
5
6
7
8
9
redis> MSETNX key1 "Hello" key2 "there"
(integer) 1
redis> MSETNX key2 "there" key3 "world"
(integer) 0
redis> MGET key1 key2 key3
1) "Hello"
2) "there"
3) (nil)
redis> 

一句话Shell脚本(1)

linux, script, shell, work

公司里的中国项目包括DHB和SMCN两个。

在DHB的SEM Search Landing页面上,会展示SMCN的产品,之前的Tracking是直接从DHB跳转到商家页面,从DHB到商家的跳转会记录一个Offer Outgoing Log。最近加入了新的逻辑,将DHB的跳转作为一个Affiliate Outoging Log,而Dest Url是SMCN的一个跳转脚本,这样就将以前的DHB->商家页面跳转变成了从DHB->SMCN->商家页面的跳转。

根据字符串名称动态调用Python的函数和对象方法

magic, php, python

在PHP里,根据字符串动态调用方法是一件很简单的事情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Foo {
    // static method
    public static function sbar() {
        echo "foosbar!";
    }

    // normal method
    public function bar() {
        echo "foobar!";
    }
}

// normal function
function bar() {
    echo "bar!";
}

$name = "bar";
$sname = "sbar";

$name();

$foo = new Foo();
$foo->{$name}();
$foo::$sname();

输出结果:

bar!
foobar!
foosbar!

Redis主从复制

linux, redis

晚上在家尝试做了一下redis的主从复制。下面的Linux命令有一部分需要sudo才能完成。

首先复制一份redis.conf:

1
$ cp /etc/redis/redis.conf /etc/redis/slave.conf

有几处地方需要修改:

1
2
3
4
5
6
$ vi /etc/redis/slave.conf

port 6380
logfile /var/log/redis/redis-server-slave.log
dbfilename slave.rdb
slaveof 127.0.0.1 6379