浏览模式: 标准 | 列表

我从 WordPress 转到 SaBlog-X 已经有快 1 年了,现在使用的是 SaBlog-X 1.6 版本,今天用了一下 Google 刚出的浏览器 Chrome,发现在这个浏览器中无法使用 SaBlog-X 发文章,主要是 SaBlog-X 中的 FckEditor 编辑器的问题,但是到 FckEditor 官方网站上去看了一下,发现其实最新版本是支持的,然后又查看了一下 SaBlog-X 1.6 中 FckEditor 的代码,发现其实只要做少许改动(只需要把判断浏览器支持的地方做一下修改),就可以支持 Chrome 了,而且还可以支持 Opera 9.5、Safari 3.1。

这里是修改后的三个文件: editor.zip

只需要把他们解压缩后,覆盖掉 /admin/editor 下的那三个文件就可以了。

» 阅读全文

8月
23

PHPRPC 3.0 for .NET 发布

PHPRPC 3.0 for .NET 可能让大家期待太久了。不过今天终于完成了。

这个版本支持 .NET Framework 1.0、1.1、2.0、3.5,.NET Compact Framework 1.0、2.0、3.5 和 Mono。也就是说,支持目前所有版本的 .NET。支持所有基本类型、大部分容器类型(如ArrayList、Hashtable、数组等)、自定义可序列化对象类型的传递。可以与其它语言的 PHPRPC 服务器和客户端进行完美交互。

下载地址请访问 PHPRPC 官方网站:http://www.phprpc.org

2008 年 2 月 24 日更新:

对于动态代理对象增加了引用参数传递的支持。
对于服务器端发布的方法也增加了引用参数传递的支持。
对客户端和服务器端传递包含大量自定义对象的容器(数组、ArrayList、Hashtable 等)进行了一些优化。

2008 年 7 月 9 日更新:

修正了对象反序列化的一个 bug,该问题会影响传递对象数组或者传递带有对象的 ArrayList、Hashtable 等容器的正常传递。

2008 年 8 月 17 日更新:

增加了发布全局方法的功能,进一步提高了服务器性能。
修正了大整数右移位运算的 bug。

2008 年 8 月 23 日更新:

修正 Cookieless Session 情况下 URL 重定向的错误。
修正 Session Cookie 被错误清除的问题。
服务器端返回时增加了 Content-Length 头,避免响应信息被 chunked 编码。
修正了 UTF-8 编码时,输出重定向和序列化字符串被添加 UTF-8 BOM 头的问题。
Mono的二进制版本重新用 1.2.6 版本的 Mono 编译,1.9.2 版本 Mono 编译器存在错误,编译出的二进制版本无法正确执行。

» 阅读全文

同样废话不多说,看例子:

Ruby代码
  1. class Test  
  2.   def initialize  
  3.     @foo = 'a'  
  4.     @bar = 'b'  
  5.   end  
  6.     
  7.   def foobar(a, b)  
  8.     puts @foo << a << @bar << b  
  9.   end  
  10. end  
  11. x = Object.const_get("Test").new  
  12. args = ['1''2']  
  13. x.method('foobar'.to_sym).call(*args)  

Ruby太简单了,我想解释也可以省了。

 

» 阅读全文

废话不多说,先看例子:

Ruby代码
  1. Object.module_eval("class Test1\nend")  
  2. x = Object.const_get("Test1".to_sym)  
  3. x.method(:attr_accessor).call("test1".to_sym)  
  4. x.method(:public).call("test1".to_sym)  
  5. x.method(:public).call("test1=".to_sym)  
  6. x.method(:attr_accessor).call("test2".to_sym)  
  7. x.method(:public).call("test2".to_sym)  
  8. x.method(:public).call("test2=".to_sym)  
  9. x.method(:attr_accessor).call("test3".to_sym)  
  10. x.method(:public).call("test3".to_sym)  
  11. x.method(:public).call("test3=".to_sym)  
  12. y = Test1.new  # also can use x.new  
  13. y.test1 = 'Hello'  
  14. y.test2 = 'Ruby'  
  15. y.test3 = 1.86  
  16. puts y.class  
  17. puts y.test1, y.test2, y.test3  

原理就是利用 module_eval 定义一个空类,然后利用 const_get 获取到该类的引用,最后利用反射机制调用 attr_accessor、public 等方法完成类的定义。

这样做有什么好处呢?好处是,只要我们知道类名及其属性名,就可以动态的创建一个类,这在反序列化未知类的对象时是非常有用的。

» 阅读全文

8月
20

XXTEA for Ruby

Ruby代码
  1. ############################################################  
  2. #                                                          #  
  3. # The implementation of PHPRPC Protocol 3.0                #  
  4. #                                                          #  
  5. # xxtea.rb                                                 #  
  6. #                                                          #  
  7. # Release 3.0.0                                            #  
  8. # Copyright (c) 2005-2008 by Team-PHPRPC                   #  
  9. #                                                          #  
  10. # WebSite:  http://www.phprpc.org/                         #  
  11. #           http://www.phprpc.net/                         #  
  12. #           http://www.phprpc.com/                         #  
  13. #           http://sourceforge.net/projects/php-rpc/       #  
  14. #                                                          #  
  15. # Authors:  Ma Bingyao <andot@ujn.edu.cn>                  #  
  16. #                                                          #  
  17. # This file may be distributed and/or modified under the   #  
  18. # terms of the GNU Lesser General Public License (LGPL)    #  
  19. # version 3.0 as published by the Free Software Foundation #  
  20. # and appearing in the included file LICENSE.              #  
  21. #                                                          #  
  22. ############################################################  
  23. #  
  24. # XXTEA encryption arithmetic library.  
  25. #  
  26. # Copyright (C) 2005-2008 Ma Bingyao <andot@ujn.edu.cn>  
  27. # Version: 1.0  
  28. # LastModified: Sep 30, 2008  
  29. # This library is free.  You can redistribute it and/or modify it.  
  30.   
  31. module Crypt  
  32.   
  33.   class XXTEA  
  34.   
  35.     class << self  
  36.   
  37.       private  
  38.   
  39.       Delta = 0x9E3779B9  
  40.   
  41.       def long2str(v, w)  
  42.         n = (v.size - 1) << 2  
  43.         if w then  
  44.           m = v.last  
  45.           if (m < n - 3) or (m > n) then return '' end  
  46.           n = m  
  47.         end  
  48.         s = v.pack("V*")  
  49.         return w ? s[0, n] : s  
  50.       end  
  51.   
  52.       def str2long(s, w)  
  53.         n = s.length  
  54.         v = s.ljust((4 - (n & 3) & 3) + n, "\0").unpack("V*")  
  55.         if w then v[v.size] = n end  
  56.         return v  
  57.       end  
  58.   
  59.       public  
  60.   
  61.       def encrypt(str, key)  
  62.         if str.empty? then return str end  
  63.         v = str2long(str, true)  
  64.         k = str2long(key.ljust(16, "\0"), false)  
  65.         n = v.size - 1  
  66.         z = v[n]  
  67.         y = v[0]  
  68.         sum = 0  
  69.         (6 + 52 / (n + 1)).downto(1) { |q|  
  70.           sum = (sum + Delta) & 0xffffffff  
  71.           e = sum >> 2 & 3  
  72.           for p in (0...n)  
  73.             y = v[p + 1]  
  74.             z = v[p] = (v[p] +  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
  75.           end  
  76.           y = v[0]  
  77.           z = v[n] = (v[n] +  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff  
  78.         }  
  79.         long2str(v, false)  
  80.       end  
  81.   
  82.       def decrypt(str, key)  
  83.         if str.empty? then return str end  
  84.         v = str2long(str, false)  
  85.         k = str2long(key.ljust(16, "\0"), false)  
  86.         n = v.size - 1  
  87.         z = v[n]  
  88.         y = v[0]  
  89.         q = 6 + 52 / (n + 1)  
  90.         sum = (q * Delta) & 0xffffffff  
  91.         while (sum != 0)  
  92.           e = sum >> 2 & 3  
  93.           n.downto(1) { |p|  
  94.             z = v[p - 1]  
  95.             y = v[p] = (v[p] -  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
  96.           }  
  97.           z = v[n]  
  98.           y = v[0] = (v[0] -  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff  
  99.           sum = (sum - Delta) & 0xffffffff  
  100.         end  
  101.         long2str(v, true)  
  102.       end  
  103.   
  104.     end  
  105.   
  106.   end  
  107.   
  108. end  

 

» 阅读全文