Updates from December, 2009 Toggle Comment Threads | Keyboard Shortcuts

  • admin 4:38 pm on December 20, 2009 Permalink | Reply
    Tags: chrome,   

    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

     
  • admin 4:04 pm on August 12, 2009 Permalink | Reply
    Tags:   

    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–

     
  • admin 12:10 pm on August 11, 2009 Permalink | Reply
    Tags: html5, video   

    HTML5 video 标签测试 

    如果你的浏览器支持HTML5,那么,你将可以看到下面的视频。



    如果看不到……下载一个firefox3.5最新版吧。

     
    • GOODSPEED 11:49 am on March 8, 2011 Permalink | Reply

      IE 9 LOOKS FINE!

  • admin 11:47 am on July 24, 2009 Permalink | Reply
    Tags: , , rewrite   

    小心对待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 即换回传统的方式来解决问题。

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

     
    • 小诗 11:21 am on June 25, 2010 Permalink | Reply

      这个问题可以解决了。
      在wp里的重写规则是:

      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ – [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]

      然后用php中的:$_SERVER['REQUEST_URI']获取网址斜杠后的字符串。
      如:
      xx.com/%BF%AA%D0%C4
      $_SERVER['REQUEST_URI'] 就等于 /%BF%AA%D0%C4

    • 淡淡的阳光 4:51 pm on June 26, 2010 Permalink | Reply

      你的路径写得就有问题,如果访问的文件名包含’%',那么合理的url就应该是

      /key1/value1/key2/value_with_%25_symbol
      而不是
      /key1/value1/key2/value_with_%_symbol

    • admin 1:14 pm on July 1, 2010 Permalink | Reply

      @淡淡的阳光
      对的,应该先urlencode。

  • admin 4:24 pm on July 16, 2009 Permalink | Reply
    Tags: , qq   

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

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

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

    验证码已经自动提取。

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

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

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

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

    Updated:

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


     
    • 幽默笑话 10:56 am on July 20, 2009 Permalink | Reply

      这样都行?

    • admin 11:21 am on July 20, 2009 Permalink | Reply

      @幽默笑话
      呵呵,为什么不行?自己测试一下了。

    • kevin yang 1:39 pm on July 23, 2009 Permalink | Reply

      我找到了相关的php class,不过还不是很明白客户端怎么实现的。能不能email我一个客户端的。谢谢~

    • admin 4:09 pm on July 23, 2009 Permalink | Reply

      @kevin yang
      邮件已经发出,请查收。

    • kevin yang 11:59 am on July 24, 2009 Permalink | Reply

      谢谢~~

    • Changer 12:25 pm on July 28, 2009 Permalink | Reply

      找了很久了,能不能发个代码给我看看,谢谢

    • admin 9:35 am on July 29, 2009 Permalink | Reply

      @Changer
      已经公开下载,谢谢捧场!

    • bill 9:36 am on September 15, 2009 Permalink | Reply

      谢谢 我也想要代码

    • hiton 11:18 am on November 3, 2009 Permalink | Reply

      劳烦楼主把代码发到我信箱 不胜感激 .. hitont(at)gmail.com

    • admin 2:37 am on November 4, 2009 Permalink | Reply

      @hiton

      上文已经提供下载,请自己下载。

    • shimmer8711 4:19 pm on November 26, 2009 Permalink | Reply

      这个代码现在已经不能用了,老是提示验证码错误,不知道是什么原因啊

    • zhang 7:53 pm on November 27, 2009 Permalink | Reply

      已经无法使用了。

    • Dicky 11:31 pm on January 16, 2010 Permalink | Reply

      好像已经无法使用,总是提示验证码错误,楼主有最新版本吗?

    • PP 3:59 pm on February 26, 2010 Permalink | Reply

      您好,现在验证码是不是不可以用了,请问有什么办法可以解决嘛,谢谢

    • tangtang 3:51 pm on October 14, 2010 Permalink | Reply

      你好。能不能把这个程序发给我一份呢。谢谢了。

    • admin 12:23 am on October 24, 2010 Permalink | Reply

      @tangtang
      已经在帖子中有了哦。。但不知道还能不能用。你可以试试!

  • admin 4:02 pm on July 9, 2009 Permalink | Reply
    Tags: ie8, webslice   

    使用IE8的WebSlice 功能 

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

    最终效果:

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

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

    怎么样,效果还可以吧?

    实现方法:

    <div class="hslice" id="randomposts">
     
    <div class="entry-title">这里写标题</div>
     
    <div class="entry-content">
     
    这里是HTML内容……
     
    <a style="display:none;" rel="feedurl" href="RSS地址">RSS名字</a>
     
    </div>
     
    </div>

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

     
  • admin 3:10 pm on July 1, 2009 Permalink | Reply
    Tags:   

    使用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)
        }
       
     

     
    • admin 12:56 am on July 13, 2009 Permalink | Reply

      redis会不会更好?抽个时间测试一下!

    • mr 8:09 am on May 8, 2010 Permalink | Reply

      如何使用? 添加代码到 functions.php 文件?

  • admin 2:49 pm on August 27, 2008 Permalink | Reply
    Tags:   

    JS网页可见大小获取(兼容FF,IE,OP在HTML,XHTML)

    window.client={
        width: document.body.clientWidth,
        height: Math.min(document.documentElement.clientHeight, document.body.clientHeight)
    };

     
  • admin 11:35 am on August 19, 2008 Permalink | Reply
    Tags:   

    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

     
  • admin 2:39 pm on July 18, 2008 Permalink | Reply
    Tags:   

    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规则,最后验证,验证失败则给出失败信息,不允许访问资源。

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel