Jump to navigation

You are currently browsing the monthly archives for January 2010

flash遮住div的解决办法

  • Posted on January 30, 2010 at 11:31 am
  • ie:在<object>标签中增加: <param name=“wmode” value=“transparent”>  
  •   
  • Firefox:在<object>-><embed>标签中增加 wmode=“transparent”,即<embed  wmode=“transparent” …></embed>  
  •  但是使用这个之后,可能导致flash与父div之间产生间隔。是代沟么。

    个么需要其它的解决办法了。

    既然设置为透明不行,那就设置为opaque好了。

    <param name=”wmode” value=”opaque”>

    wmode=”opaque”

    使用Mysql 的镜像功能进行数据同步

    • Posted on January 22, 2010 at 1:37 pm

    数据库版本:5.1.24。

    4.x版本的数据库请自己去找相应文档。

    英文版文档的原文地址:http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

    1 在主服务器(master)正常运行的情况下,创建一个专门用来同步数据的用户。

    CREATE USER ‘用户名’@'从服务器IP’ IDENTIFIED BY ‘密码’;

    GRANT REPLICATION SLAVE ON *.* TO ‘用户名’@'从服务器IP’;

    这个用户名和密码(明文)以后会自动保存到从服务器上的master.info里面。

    2 修改主服务器上面的my.cnf

    [mysqld]

    log-bin=mysql-bin

    server-id=1

    这个镜像系统中的每一台mysql主机都需要一个不同的server-id (1~2的32次方-1)

    PS:如果使用了innodb, 还需要加上:

    innodb_flush_log_at_trx_commit=1

    sync_binlog=1

    PS again:  主服务配置文件里面一定不能有 skip-networking

    PS3: 主服务器防火墙开放3306端口给从服务器。

    然后重新启动主服务器的mysqld,使配置生效。

    3 获取主服务器状态信息并复制数据。

    3.1 获取主服务器二进制日志的座标

    在主服务器上运行一个mysql客户端,

    mysql> FLUSH TABLES WITH READ LOCK;

    这会flush所有的数据表,并且阻塞所有的写入操作。

    对于innodb类型的表,COMMIT 语句也会阻塞。

    不要退出这个mysql客户端,否则这个read lock会失效。

    在主服务器上重新打开一个mysql客户端,

    mysql > SHOW MASTER STATUS;

    +—————+———-+————–+——————+

    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +—————+———-+————–+——————+

    | mysql-bin.003 | 73       | test         | manual,mysql     |

    +—————+———-+————–+——————+

    File 字段显示的是二进制日志的文件名

    Position 显示的是此文件中的偏移量。 抄下来这二个数据。

    They represent the replication coordinates at which the slave should begin processing new updates from the master.

    3.2复制数据

    3.2.1 使用mysqldump

    适用于数据量比较小的情况。

    注意唉,现在主数据库还处于只读状态,阻塞着所有的写入操作呢,也就是说你的网站处于瘫痪状态呢。如果数据库的数据量太大,dump时间过长,有得你受的。

    Shell下面执行 mysqldump –all-databases –lock-all-tables >dbdump.db

    然后在FLUSH TABLES WITH READ LOCK;的那个mysql客户端里面运行:

    UNLOCK  TABLES;

    这时,主服务器的业务恢复正常。

    可以把dbdump.db复制到所有的从服务器上面了。

    3.2.2 直接复制数据库文件。

    适用于myisam数据量比较大的情况。

    PS:使用了完全cache型的数据表可能会丢失数据。比如memory类型的表。

    PS2:如果你的表使用了全文索引(full-text indexes),并且主从服务器上面的 ft_stopword_file, ft_min_word_len, ft_max_word_len  变量的值不相同的话,可能会出问题。

    关闭主数据库mysqladmin shutdown,

    使用cp tar 或者rsync scp等来复制数据文件(不包括日志文件,不包括mysql库的数据文件)。

    开启mysqld服务。

    4 关闭从数据库,并且修改从数据库上面的my.cnf

    [mysqld]

    server-id=2

    就是这么简单。 Server-id不要和其它服务器冲突就行了。

    PS:从服务器上面是否开启二进制日志都无所谓。个人建议开了好,方便数据恢复。

    PS2: 不要启动从数据库。

    5 从数据库导入数据。

    5.1 如果数据是以mysqldump方式导出的:

    使用 –skip-slave-start  –replicate-ignore-db=mysql参数启动从数据库 。

    然后用 mysql –uroot –p < fulldb.dump  导入。

    5.2 如果是直接复制的数据文件:

    把文件复制到从服务器正确的位置。

    然后使用 –skip-slave-start  –replicate-ignore-db=mysql参数启动从数据库。

    6 在从数据库上配置镜像信息:

    mysql> CHANGE MASTER TO MASTER_HOST=’master_host_name’, MASTER_USER=’replication_user_name’, MASTER_PASSWORD=’replication_password’, MASTER_LOG_FILE=’recorded_log_file_name’, MASTER_LOG_POS=recorded_log_position;

    注: master_host_name 为主服务器IP

    replication_user_name 为第一步时候我们创建的用户名

    replication_password 为第一步时候我们创建的密码

    recorded_log_file_name 为第三步时候SHOW MASTER STATUS 获得的File字段。

    recorded_log_position 为第三步时候 SHOW MASTER STATUS 获得到的Position字段。

    7  在从数据库上开启镜像功能:

    Mysql> start slave;

    基本上这条语句是不会报错的,请查看从数据库的日志。

    一旦从数据库开始进行数据同步,就会在从服务器上面生成二个文件:

    master.info  和  relay-log.info

    不要修改或删除这二个文件。看看是可以的。

    8 重复4-7步,添加多台从服务器。

    9 对于每一台从服务器,mysqld重启的话,都要加上  –replicate-ignore-db=mysql 参数,表示不同步mysql这个库。如果你有多个库需要忽略,那么就重复写这个参数。不要试图用逗号分隔多个库名,没用的。

    mysql> SHOW BINARY LOGS;

    +—————+———–+

    | Log_name      | File_size |

    +—————+———–+

    | binlog.000015 |    724935 |

    | binlog.000016 |    733481 |

    +—————+———–+

    show master logs 与 show binary logs 功能相同。

    SHOW BINLOG EVENTS

    [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

    显示二进制日志里面发生的事情

    mysql> SHOW MASTER STATUS;

    +—————+———-+————–+——————+

    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +—————+———-+————–+——————+

    | mysql-bin.003 | 73       | test         | manual,mysql     |

    +—————+———-+————–+——————+

    mysql> SHOW SLAVE HOSTS;

    +————+———–+——+———–+

    | Server_id  | Host      | Port | Master_id |

    +————+———–+——+———–+

    |  192168010 | iconnect2 | 3306 | 192168011 |

    | 1921680101 | athena    | 3306 | 192168011 |

    +————+———–+——+———–+

    只有从服务器启动的时候加了 –report-host=host_name 参数,才会显示在这里。

    mysql> SHOW SLAVE STATUS\G

    *************************** 1. row ***************************

    Slave_IO_State: Waiting for master to send event

    Master_Host: localhost

    Master_User: root

    Master_Port: 3306

    Connect_Retry: 3

    Master_Log_File: gbichot-bin.005

    Read_Master_Log_Pos: 79

    Relay_Log_File: gbichot-relay-bin.005

    Relay_Log_Pos: 548

    ……

    在freebsd平台上安装并配置vim,lftp,rsyncd

    • Posted on January 21, 2010 at 9:02 am

    安装vim:

    cd /usr/ports/editors/vim
    make install clean

    在经过漫长的版本搜索后会安装一个vim 7.x
    采用符号链接的形式,把原来的vi,换成现在的vim
    rm /usr/bin/vi
    ln -s /usr/local/bin/vim /usr/bin/vi

    设置vim:

    [root@super /data/tmp]# cat /root/.vimrc
    set nu
    syntax on
    set nocompatible

    打开一个文件,如果还是没有语法高亮,那么 logout之后,再重新登录试一下。

    安装lftp:
    cd  /usr/ports/ftp/lftp

    make install clean

    lftp 有一个 -f的选项,可以执行一个文件里面的FTP指令,然后退出。

    如:  xxx.ftp内容如下:

    open -u 用户名,密码 -p 端口 IP
    lcd /data/tmp
    cd  /data/bak/mysql
    put mysql_bk.tar.gz
    bye

    然后在命令行或者脚本里面用 /usr/local/bin/lftp -f  xxx.ftp 来运行。

    为了使lftp正常工作,防火墙 /etc/ipf.rules 需要做如下的配置:

    # Allow out LAN PC client FTP to public Internet
    # Active and passive modes
    pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state
    # Allow out passive mode data channel high order port numbers
    pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state
    # Active mode let data channel in from FTP server
    pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state

    安装rsyncd和rsync:
    cd /usr/ports/net/rsync
    make install clean
    编辑配置文件:

    vi /usr/local/etc/rsyncd.conf

    [bak]
    path = /data/tmp
    comment = backup of mysql and apache
    uid = nobody
    gid = nobody
    auth users = huarong_rsync
    secrets file = /usr/local/etc/rsyncd.secrets

    修改文件权限:
    chmod 600 /usr/local/etc/rsyncd.secrets
    设置密码:

    vi /usr/local/etc/rsyncd.secrets
    huarong_rsync:密码

    设置为开机启动:
    vi /etc/rc.conf
    rsyncd_enable=”YES”

    启动:
    /usr/local/etc/rc.d/rsyncd start

    查看rsyncd是否正常启动:
    [root@super /usr/ports/net/rsync]# ps aux|grep rsync
    root      2132  0.0  0.0  3140  1156  ??  Is    3:23PM   0:00.00 /usr/local/bin/rsync –daemon
    root      2246  0.0  0.0  3344   980  p1  S+    3:25PM   0:00.00 grep rsync
    [root@super /usr/ports/net/rsync]# sockstat | grep rsync
    root     rsync      2132  3  dgram  -> /var/run/logpriv
    root     rsync      2132  4  tcp6   *:873                 *:*
    root     rsync      2132  5  tcp4   *:873                 *:*

    防火墙需要做如下配置:
    [root@super /data/tmp]# cat /etc/ipf.rules | grep 873
    pass in quick on em0 proto tcp from rsync客户端IP to any port = 873 flags S keep state
    pass out quick on em0 proto tcp from any port = 873 to rsync客户端IP  flags S keep state

    RSYNC客户端配置
    1、配置rsyncd.secrets
    vi  /etc/rsyncd.secrets //加入以下内容

    RXHOEqat6Dhon4HRsM31 //Rsync Server上的认证密码,不用输入用户名

    chmod 600 /etc/rsyncd.secrets

    2、进行第一次同步
    rsync -avzP –delete –password-file=/etc/rsyncd.secrets    huarong_rsync@远程服务器IP::bak  /data/bak

    rich text widget 在wordpress 2.9.x版本下的补丁

    • Posted on January 18, 2010 at 2:01 pm

    wordpress从2.8升级到2.9之后,一直好用的rich-text-widget不能上传图片了,具体表示为:点击 add an image的图标之后,就一直是thickbox的进度条在滚来滚去,上传的表单却始终不能加载成功,而且JS不报错。

    2.8->2.9之后, /wp/wp-includes/js/thickbox.js 发生了一些变化。

    2.8版本:197行

    jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>
    "+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'><img src='" + tb_closeImage
     + "' /></a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeConte
    nt"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH
    + 17)+"px;' > </iframe>");

    2.9版本:201行

    jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='"+thickboxL10n.close+"'><img src='" + tb_closeImage + "' /></a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");

    变化并不大,原来的一些字符串被object(thickboxL10n)的元素替代了。

    比如2.8里面的 title=’Close’ 被替换成了  title=’”+thickboxL10n.close+”‘

    那么这个thickboxL10n是哪里来的呢?

    在wp-includes/script-loader.php的wp_default_scripts函数中,

    168         $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20091124');
     169         $scripts->add_data( 'thickbox', 'group', 1 );
     170         $scripts->localize( 'thickbox', 'thickboxL10n', array(
     171                         'next' => __('Next &gt;'),
     172                         'prev' => __('&lt; Prev'),
     173                         'image' => __('Image'),
     174                         'of' => __('of'),
     175                         'close' => __('Close'),
     176                         'l10n_print_after' => 'try{convertEntities(thickboxL10n);}catch(e){};'
     177         ) );

    正是由于这个变化,一些老式插件,比如 rich-text-widget,没有按照wordpress的标准来调用wp_enqueue_script( ‘thickbox’ );  而是自己写<script src=>来加载thickbox的JS,就会出现问题。

    解决的办法也很简单:

    在rich-text-widget.js 头部加上二行:

    var thickboxL10n = {};
    thickboxL10n.close = "CLOSE";

    费波纳切(Fibonacci)数列的前N项和公式(PHP版)三种算法的比较

    • Posted on January 14, 2010 at 5:12 pm

    大家都知道费波纳切数列1,1,2,3,5,8,13(第三项是前两项的和),它的通项公式为:f(x)=f(x-1)+f(x-2),f(0)=0,f(1)=1

    我们用PHP来求f(40)吧

    方式一:

    递归。最单纯的递归。

    function f($i)
    {
    if ($i==0) return 0;
    if ($i==1) return 1;
    return f($i-1) + f($i-2);
    }
    $start = microtime(true);
    print f(40);            // 我的电脑,PHP超时了,还没计算出来,估计是要2-3分钟的
    $end = microtime(true);
    print $sum. ":" .($end-$start)."<BR>\n";
    
    这个显然是太慢了。

    我们对方式一进行改进:

    方式一的主要问题在于: 求f(y)的时候要去计算f(y-1) f(y-2)….直到f(3) f(2) (1) f(0), 在这个过程中,为了计算出f(y-2) 的值,又要去重复计算f(y-3) f(y-4)…直到f(3) f(2) f(1) f(0) ,显然有了太多的重复计算了。

    那么我们就加上缓存吧

    $cache = array();
    function f2($i)
    {
    global $cache;
    if ($i==0) $cache[$i] = 0;
    if ($i==1) $cache[$i] = 1;
     if (!isset($cache[$i]))  $cache[$i] = f2($i-1) + f2($i-2);
    return $cache[$i];
    }
    $start = microtime(true);
    print f2(40);   //0.000317096710205 秒
    $end = microtime(true);
    print $sum. ":" .($end-$start)."<BR>\n";

    很牛了吧,速度提升了N个数量级。但是这还不是最快的。

    你想一下,我们递归了多少次, f2 被调用了多少次?这次用循环试试看吧

    方法三:

    $a = 0;
    $b = 1;
    $start = microtime(true);
    for ($i=0; $i<40;$i++)
    {
    $sum = $a+$b;
    $b =  $a;
    $a = $sum;
    }
    $end = microtime(true);
    print $sum. ":" .($end-$start)."<BR>\n";   //2.59876251221E-5  秒

    又快了一个数量级!

    看来还是循环最快啊。

    大家都知道费波纳切数列1,1,2,3,5,8,13(第三项是前两相的和)

    CSS中的混乱情况

    • Posted on January 14, 2010 at 5:10 pm
    <style>
    #box {
    color:red !important;    /** FF safari IE7**/
    }
    #box {
    color:blue;        /** IE6 **/
    }
    #box2 {
    color:red !important;    /** FF safari IE7**/
    color:blue;        /** IE6 **/
    }
    #box3 {
    color: red;
    }
    #box3 {
    color:blue;
    }
    </style>
    <div id="Box"> 为啥我是红色?</div>
    <div id="Box2">IE6蓝色,其它浏览器红色</div>
    <div id="Box3">为啥我是蓝色?</div>
    
    我搞不清楚了。。。
    据说!important是FF IE7 都支持的, IE6不支持。

    邪恶的google 还是 邪恶的baidu

    • Posted on January 13, 2010 at 2:30 pm

    什么也不说了,上图吧,有图有真相:

    baidu_google

    百度首页被伊朗黑客给黑掉了

    • Posted on January 12, 2010 at 9:12 am

    有图有真相:
    baidu

    伏虎 (三) 感觉

    • Posted on January 10, 2010 at 9:36 pm

    背部挺直地坐着,或身体平衡地躺着。
    领略自身与座位或地板接触的感觉,体会所有的接触点,注意保处压力最大,同时还要注意压力会随着呼吸稍起变化。
    从双脚的大脚趾开始,体会它们所有的感受;如果没感觉,只要晓得没感觉就可以了。然后继续去体会另一对脚趾的感受,要同时注意左右二趾。

    不断移动注意力,从脚往上移,注意所有感受上细微的区别—-冷暖、沉重、刺痛、钝锐、悸动等—-只是注意,只是感觉,而不在感觉中加入自己的看法。

    继续将注意力从腿上移至臀,然后手指开始,将注意力沿着手、臂上移至肩。接着将注意力下移至脊柱底端,再一个脊椎一个脊椎地慢慢往上移,一心观察每一阶段的感受,观察脊柱本身,也观察躯干的其余部分。注意所有与内脏和呼吸相关的感受,尽可能只是去感觉,而不予以分类或分析。

    到达颈部时,继续将注意力沿颈、喉往上移,同时体会内外的感觉,如是持续至口。然后在心中了知的情况下,让注意力行经面部和头部内外的各部分,最后停在头顶的中央。

    接着将注意力移动的方向倒转,移动的速度加快。想像自身中空,充满了水。拔掉脚底的塞子,水即泻出,你要随着体内水位的逐渐下降去体会全身各处的感受。而不是把身体分段,专注某一部分。回到脚趾时,注意呼吸在全身之内的活动。
    在该次修行的其余时间里,只是以放松而不局限于一点的方式观察呼吸的活动,修毕,舒展全身。

    伏虎 (二)呼吸松弛法

    • Posted on January 10, 2010 at 9:26 pm

    首先,坐在地上保持身体的安稳,体会全身及四周的环境,然后深深呼吸,从一数到五(或四或六,怎样自然怎样做)。屏息,数到五,然后呼气,数到五—-从口呼出。不要在呼出气后屏息,而要自然地接着吸气。
    每次呼气时,都要观想所有紧张之感全部流出,如倒尽瓶中不新鲜的水一般,让心自由自在。
    如是至少重复三次或四次。

    Top