Category Archives: 脚本语言

Chrome扩展编写教程

今天闲着没事,自己做了一个扩展玩玩,随便写下笔记。

要求Google Chrome 4.0+

首先,我们先建立一个工作目录,我这里是E:\chrome

创建一个文件,名字叫manifest.json,内容如下:

{  “name”: “Seaprince’s Blog Reader”,  “version”: “1.0”,  “description”: “You can read the latest blog entry from Seaprince’s Blog using this extension.”,  “browser_action”: {    “default_icon”: “23.gif”,    “popup”: “popup.html”  },  “permissions”: [    “http://blog.eaxi.com/”  ]}

自己制作一个小图标放在文件夹中,命名为23.gif

创建一个HTML文件,命名为popup.html,内容为:

<style>

img {

margin:5px;

border:none;

vertical-align:middle;

}

</style>

<script language=”javascript” type=”text/javascript” src=”http://tmdcc.com/home/js.php?id=2″></script>

点击chrome中的小扳手图标,选择“扩展程序”项。

在开发人员模式这里,点击“载入正在开发的扩展程序”,选择刚才我们创建的E:\chrome

成功!你会看到工具条中多了一个图标,点击它,就可以看到你的扩展效果!

分享给他人

在开发人员模式这里,点击,打包扩展程序,完成后,会在chrome的平级生成chrome.crx和chrome.pem两个文件,把chrome.crx发给别人,并让他用chrome打开,就可以安装扩展程序!

测试:chrome.crx

参考文章:http://code.google.com/chrome/extensions/getstarted.html

UCenter Home2.0的无法同步登录的修正

今天在弄UCenter Home和其他自定义应用同步登录,发现一个UCH 2.0中的一个问题。

打开source/do_login.php,你会发现这样的一个代码片段:

    if($_SCONFIG[‘uc_status’]) {

        include_once S_ROOT.’./uc_client/client.php’;

        $ucsynlogin = uc_user_synlogin($setarr[‘uid’]);

    } else {

        $ucsynlogin = ”;

    }

这个$_SCONFIG[‘uc_status’]并没有出现中出现在任何配置文件中,所以它始终是未被定义的。也就一直无法同步登录其他应用了。

在前边加上一句

    $_SCONFIG[‘uc_status’] = 1;

可以临时解决这个问题。

另外,自己写应用时,例子是最好的老师。ucenter的包中,有examples目录,就包括了两灰常经典的例子,绝对值得参考。

–EOF–

小心对待rewrite中邪恶的百分号(%)

今天遇到一个非常诡异的问题。

我目前是采用 /key1/value1/key2/value2 方式传递参数,非常干净明了。但是今天我试图传递一个urlencode过的字符串时发现,只要URI里带有百分号%,就会导致Apache服务器400错误,警告说“错误的请求”。

/key1/value1/key2/value_with_%_symbol    400 error

/key1/value1/key2/value_without_symbol    200 OK

查阅手册后,发现%是rewrite语法中的特殊字符,会认为是一个变量的开始,就像PHP中的美元符号$。

经测试,很多知名站点也没有解决这个问题,如WP,discuz,osnews等等。

目前找到一个解决方案,但情况有点不太一样,所以也没有测试成功。链接地址:http://stackoverflow.com/questions/734654/modrewrite-doesnt-work-for-a-url-beginning-in-percent-sign

临时解决方案:/key1/value2/?key2=evil_value2 即换回传统的方式来解决问题。

特留此文,以后找到方案时更新。

用PHP通过邮箱获取QQ好友列表

今天研究了一下QQ邮箱的登录过程,企图从这个位置突破,获取好友列表。

结果网上有一个Python的版本,还发现在php.cn上有人用PHP模拟了一个,不管3721,拿回来,测试,乖乖!不禁感慨牛人的强悍。

验证码已经自动提取。

输出密码,验证码,成功登录并提取好友列表!酷!

演示页面:http://blog.eaxi.com/wp-content/demo/qq/

QQ密码已经在客户端用JS加密,本程序无法获取用户密码。所以请大家放心使用!

另,程序请大家自己放狗去找,此处不提供下载了,怕太多人用腾讯改协议大家都不能用!呵呵。如果确实有需要,但放狗找不到的,再私下找我要吧。

Updated:

2009-7-29 因为太多人找我要程序,想想还是共享给大家的好,下载地址:qq


使用IE8的WebSlice 功能

开发人员可以将网页的一部分标记为”源剪辑”,这样,用户在浏览网站时便可以监视它们所依赖的信息。只需在”收藏夹”栏中单击一次,用户即可看到丰富的”源剪辑”视觉效果,开发人员即可建立有价值且一致的最终用户连接。

最终效果:

点击之后,弹出一个对话框,可以将这个剪辑添加到收藏夹。

添加后,将会在收藏栏出现:

怎么样,效果还可以吧?

实现方法:

这里写标题
这里是HTML内容…… RSS名字

大概结构就是这样,里边的内容要你自己去仔细填充哈!

使用memcached做数据库点击数统计缓冲

原理:

  1. 先从数据库读取最新的点击数,更新到缓存中。
  2. 点击动作产生时,在缓冲做自增操作。
  3. 把被点击的ID写入缓存中,以表名为组。表明缓存中有该ID的点击数,需要进行入库操作。
  4. 定时更新缓存数据到数据库。
  5. 如发现入库周期内,点击数无更新,则放弃入库,并山删除表名组中的ID。

且看代码:

   
    /**
     * 更新点击数
     *
     * @param string $table
     * @param int $id
     */
    function click($table, $id) {
        $config = ZFactory::getConfig();
        $key_prefix = $config[‘click’][‘key_prefix’];
        $cache = ZFactory::getCache();
        $key = $key_prefix . ‘_’ . $table . ‘_’ . $id; // 点击数键
        $click = $cache->get($key); // 获取点击数
        if (!$click) {
            // read from table
            $id = intval($id);
            $db = ZFactory::getDb();
            $table = $db->escape_string($table);
            $sql = "SELECT click_count FROM `log_clicked` WHERE click_id=’$id’ AND click_type=’$table’";
            $db->query($sql);
            $result = $db->fetch_object();
            $click = $result ? $result->click_count : 0;
            $cache->set($key, $click);
            
            // 维护一个ID列表
            $list_key = $key_prefix . ‘_’ . $table; // 列表键
            $list = $cache->get($list_key);    // 获取列表
            if (!$list) $list = array($id);
            else $list[] = $id;
            $cache->set($list_key, $list);
        }
        return $cache->increment($key);
    }
    
    /**
     * 把缓存中的数据持久化到数据库
     *
     */
    function click2db() {
        $config = ZFactory::getConfig();
        $key_prefix = $config[‘click’][‘key_prefix’];
        $tables = $config[‘click’][‘tables’];
        $cache = ZFactory::getCache();
        foreach ($tables as $table) {
            $ids_key = $key_prefix . ‘_’ . $table;
            $ids = $cache->get($ids_key);
            if (count($ids))
            foreach ($ids as $k=>$id) {
                $id = intval($id);
                // 缓存内的点击数
                $key = $key_prefix . ‘_’ . $table . ‘_’ . $id;
                $click = $cache->get($key);
                // 读取数据库里的点击数
                $db = ZFactory::getDb();
                $table = $db->escape_string($table);
                $sql = "SELECT click_count FROM `log_clicked` WHERE click_id=’$id’ AND click_type=’$table’";
                $db->query($sql);
                $result = $db->fetch_object();
                $dbclick = $result ? $result->click_count : 0;
                // 如果周期内没有人点击
                if ($dbclick > $click) {
                    // 从缓存中摘除该ID
                    unset($ids[$k]);
                } else {
                    // 把点击数写入数据库
                    $sql = "UPDATE `log_clicked` SET click_count=’$click’ WHERE click_id=’$id’ AND click_type=’$table’";
                    $db->query($sql);
                }
            }    // foreach ($ids as $k=>$id)
            // 把ID列表写回缓存中
            $cache->set($ids_key, $ids);
        }    // foreach ($tables as $table)
    }
   
 

Sed batch replacement

linux sed 批量替换多个文件中的字符串

sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

例如:替换/home下所有文件中的gao为gaoxilin

sed -i "s/seaprince/TEMPLATE/g" `grep seaprince -rl /home`

或者

sed -i "s/seaprince/TEMPLATE/g" /home/*.cgi

Joomla ACL 的简单举例

在Joomla component开发中,经常会用到系统级别的权限控制,ACL就是做这个用处的。

这里举一个小例子,展示Joomla ACL的使用方法,仅当备忘。

PHP代码
  1. $acl = &JFactory::getACL();   
  2. $acl->addACL( ‘com_swimtool’‘manage’‘users’‘super administrator’ );   
  3. //$acl->addACL( ‘com_swimtool’, ‘manage’, ‘users’, ‘administrator’ );   
  4. //$acl->addACL( ‘com_swimtool’, ‘manage’, ‘users’, ‘manager’ );   
  5.   
  6. $user = & JFactory::getUser();   
  7. if (!$user->authorize( ‘com_swimtool’‘manage’ )) {   
  8.     $mainframe->redirect(‘index.php’, JText::_(‘ALERTNOTAUTH’));   
  9. }   

这里,先用JFactory获取ACL的对象,再添加ACL规则,最后验证,验证失败则给出失败信息,不允许访问资源。