CentOS6安装webkit2png

增加源

/etc/yum.repos.d/CentOS-ATrpms.repo

#ATrpms
[atrpms]
name= CentOS-$releasever - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
enabled=1

shell:

rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms

安装依赖包

yum -y install qt47 qt47-devel qt47-webkit qt47-webkit-devel gcc gcc-c++
yum -y install xauth

安装SIP

cd /usr/local/src
wget http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.13.1.tar.gz
tar vzxf sip-4.13.1.tar.gz
cd sip-4.13.1
python configure.py
make && make install

安装Imaging

cd /usr/local/src
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar -zxvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py install

安装PyQt

cd /usr/local/src
wget http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-4.9.tar.gz
tar vzxf PyQt-x11-gpl-4.9.tar.gz
cd PyQt-x11-gpl-4.9
python configure.py -q /usr/lib64/qt47/bin/qmake-qt47
make && make install

webkit2png下载和使用

http://github.com/AdamN/python-webkit2png/

./webkit2png.py -x 1024 768 -g 1024 0 http://box.inote.cc -o ibox.png

安装中文字体

yum -y install wqy-zenhei-fonts.noarch

visual c++杂记

控制台应用程序增加图标

新建文件icon.rc,与图标文件icon.ico放在同一目录下

MAINICON ICON icon.ico

用visual studio打开另存为res文件。
新建一个项目,在资源里添加进刚才的res文件,编译就可以了。

控制台程序不显示控制台

修改程序入口

#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup")

Oracle clob字段的插入

一般的sql插入语句,当要插入的长度大于4000的时候,数据库就会报错。
可以使用dbms_lob包来处理,先插入一个空的clob值,再将其取出,利用dbms_lob包将数据写入,再更新表。(blob同理)

#创建表
DROP TABLE "SCOTT"."pre_test";
CREATE TABLE "SCOTT"."pre_test" (
"id" NUMBER(8) NULL,
"message" CLOB NULL
);
insert into "pre_test" ("message") values (empty_clob());

待续...

2013-12-11 23:51 更新

由于时间较长,手上目前木有Oracle数据库可供测试,以下代码为伪代码,不能正常运行,但能说明流程:

select message into x;
dbms_lob.write(x, ...);
update "SCOTT"."pre_test" set message=x;

IE下文本框的padding

IE下input的padding是根据input里面的值的长度来的,当值的长度小于input的长度时input的左右padding表现在框上面,而当值的长度大于框的长度时,padding则表现在值上面,只有把值拖到最后面的时候才能看见padding。

这和标准浏览器有很大的区别,也是很头疼的地方。所以在IE下最好使用margin,而不是padding。

redis安装配置

安装

http://redis.io/download 这儿有,不多说。要注意的一点,redis没有make install;所以安装包直接放在/usr/local/redis目录下就好了。

配置

cd /usr/local/redis
cp redis.conf /etc/redis.conf
cd /usr/local/redis/src
ln -s redis-cli /usr/bin/redis-cli
ln -s redis-server /usr/bin/redis-server

对配置文件进行修改

daemonize yes
logfile /dev/null
# 设置最大内存
maxmemory 

开机启动脚本

#!/bin/bash
source /etc/init.d/functions
BIN=/usr/bin
CONFIG=/etc/redis.conf
PIDFILE=/var/run/redis.pid

[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"

RETVAL=0
prog="redis-server"
desc="Redis Server"

start() {
	if [ -e $PIDFILE ];then
		 echo "$desc already running...."
		 exit 1
	fi
	echo -n $"Starting $desc: "
	daemon $BIN/$prog $CONFIG
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
	return $RETVAL
}

stop() {
	echo -n $"Stop $desc: "
	killproc $prog
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE
	return $RETVAL
}

restart() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	condrestart)
		[ -e /var/lock/subsys/$prog ] && restart
		RETVAL=$?
		;;
	status)
		status $prog
		RETVAL=$?
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|condrestart|status}"
		RETVAL=1
esac
exit $RETVAL

存为redis文件,放到/etc/init.d/redis, chmod +x redis

php soap带验证

Server端

<?php
class Server {
    private $authenticated = false;

    public function auth($authcode) {
        if($authcode === '123456789') {
            $this->authenticated = true;
            return true;
        } else {
            throw new SoapFault('403', '403 Forbidden');
        }
    }

    public function getData() {
        if(!$this->authenticated) {
            throw new SoapFault('403', '403 Forbidden');
        }
        $data = array(
            'text' => 'ni mei a'
        );
        return json_encode($data);
    }
}

/*//生成wsdl文件
include("SoapDiscovery.class.php");

$disco = new SoapDiscovery('Server','Server');

$handle = fopen('server.wsdl', 'w+');
fwrite($handle, $disco->getWSDL());
fclose($handle);
*/


$objSoapServer = new SoapServer("server.wsdl");
// $objSoapServer->setClass("Server");
$serv = new Server;
$objSoapServer->setObject($serv);
$objSoapServer->handle();

Client端

<?php
try {
    $client = new SoapClient('server.wsdl',array("exceptions" => 1));

    $authvalues = new SoapVar(array('authcode' => '123456789',), SOAP_ENC_OBJECT);

    $header = new SoapHeader('urn:Server', 'auth', $authvalues, false, SOAP_ACTOR_NEXT);

    $client->__setSoapHeaders(array($header));
    $data = $client->getData();

    var_dump($data);
} catch (SoapFault $e) {
    echo $e->faultstring;
}

php pdo操作mysql数据库

连接mysql

$db = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8', 'root', '');

操作数据库

$rs = $db->prepare('SELECT * FROM pre_member m LEFT JOIN pre_group g ON m.groupid=g.gid WHERE m.username=:username');
$rs->execute(array(':username' => $username));
//fetchObject()
while($row = $rs->fetch()) {
    //...
}

注意

//每次操作完之后都要关闭游标,否则下次运行sql语句的时候会出现问题。
$rs->closeCursor();

[同步]mysql双向同步

条件

服务器1(CentOS6.0x32 Mysql5.5.18)
IP: 192.168.1.2
服务器2(CentOS6.0x64 Mysql5.5.18)
IP: 192.168.1.3

修改配置文件

修改 服务器2 上的/etc/my.cnf文件

server-id=2

重启mysql

service mysqld restart

启动

以下都是进入mysql后,执行的语句:

#服务器1 上执行
grant select,replication slave on *.* to 'sync'@'192.168.1.3' identified by 'your password';
flush privileges;
show master status;
#记下File和Position的值 log1

#服务器2 上执行
grant select,replication slave on *.* to 'sync'@'192.168.1.2' identified by 'your password';
flush privileges;
show master status;
#记下File和Position的值 log2

#服务器1 上执行(问号分别替换为刚才log2里面记下的两个值)
change master to master_host='192.168.1.3',master_user='sync', master_password='your password', master_log_file='?', master_log_pos=?;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
show slave status;

#服务器2 上执行(问号分别替换为刚才log1里面记下的两个值)
change master to master_host='192.168.1.2',master_user='sync', master_password='your password', master_log_file='?', master_log_pos=?;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
show slave status;

于是,同步就搞定了!

多行文本或未知宽高的图片垂直居中

项目中经常会遇到多行文本或未知宽高的图片垂直居中,同事提供的一种近乎万能的方法,备份下来:


据英国媒体报道,本月10号,自2000年以来历时最长的月全食将发生,全球多个地区如半个非洲、中东地区、包括中国在内的亚洲中部等地区以及澳大利亚西部的人们均可以观察到这次月全食。


#text { width: 400px; height: 400px; border: 1px solid #f00; display: table-cell; vertical-align: middle; position: relative; }
#text .box { *position:absolute; *left: 0; *top: 50%; }
#text .box p { *position: relative; *top: -50%; }

2011年12月14日更新css如下:(支持最外层元素浮动)


.text { width: 400px; height: 400px; border: 1px solid #f00; display: table; vertical-align: middle; text-align: left; *position: relative; }
.text .box { display: table-cell; vertical-align: middle; *position:absolute; *top: 50%; }
.text .box p { *position: relative; *top: -50%; }

demo下载:vertical.zip

Lua杂记

lua中与大部分编程语言不一样的地方

--不等于
~=
--注释风格:
--注释line1
--[[
注释line1
注释line2
]]
--字符串连接符号
..
--长度
#
--table,类似于php中的数组函数库

--比较运算符==,与php中的“===“类似,比较值的类型,当用引用比较的时候,仅两个变量表示的是同一个对象时才相等
==

--lua中,只有 false 和 nil 为假,0是真

nginx负载均衡配置

配置文件

以下代码仅作示例,仅仅是把动态页面均衡到各个server上。

upstream myServer {
    server 127.0.0.1:81; 
    server 127.0.0.2:81 down; 
    server 127.0.0.3:81 weight=1; 
    server 127.0.0.4:81 backup; 
}
server {
  listen 127.0.0.1:80;
  server_name type.so www.type.so;
  access_log /var/log/httpd/domains/type.so.log combined;
  
  location / {
	try_files $uri @backend;
  }
  
  location ~* \.(jpeg|jpg|gif|png|bmp|ico|js|css|swf)$ {
	root /var/www/html/type.so;
        expires 7d;
	try_files $uri @backend;
  }
  location ~ .*\.(htaccess|htpasswd|mdb)?$ {
    deny all;
  }
  
  location @backend {
    internal;
    proxy_pass http://myServer;
    include proxy.inc;
  }
}

javascript杂记

合并两个数组

var a = [1, 2],
    b = [3, 4];
console.log(a.concat(b))

IE6,7 innerHtml未知的运行时错误

HTML错误的嵌套例如在p里嵌套div那修改div的innerHTML属性也会出现错误

ajax发送数据时的特殊符号

% & + 编码这几个符号


% %25
+ %2B
& %26

或者:encodeURIComponent

页面跳转

// 类似于HTTP跳转,浏览器无当前页面的历史记录
window.location.replace("http://type.so");

// 浏览器有历史记录
window.location.href = "http://type.so";

变量的作用域

php的变量作用范围

$str = 'something';
function infunction() {
    echo $str; //报错
}
function infunc() {
    $str = 'one two three';
    echo $str; //one two three
}
echo $str; //something
//不搭嘎啊

javascript变量作用范围

var str = 'something';
function infunction() {
    console.log(str); //something
    str = 'one two three';
}
console.log(str); //one two three
//想function里面的变量私有化,则需要var来定义

python变量作用范围

str = 'something';
def infunction():
    print(str) #something
def infunc():
    print(str) #报错
    str = 'one two three'
#在def中不对外部变量赋值时,外部变量可直接使用(global)
#一旦在def中对变量复制,def中的变量将会私有化(locale)