scourgen

7二/100

解决UCenter在添加应用时出现”通信失败”的问题

最近在研究UCenter,研究过程中碰到一个非常奇怪的问题,那就是添加完一个应用后,无法正常的通信,老是出现通信失败的问题.

经过跟踪,发现竟然是uc.php内的一个变量没有设置,导致uc.php在处理通信请求时总是失败

if(in_array($get['action'], array('test', 'deleteuser', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcreditsettings', 'updatecreditsettings'))) {
 require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';
 $GLOBALS['db'] = new dbstuff;
 $GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
 $GLOBALS['tablepre'] = $tablepre;
 unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
 $uc_note = new uc_note();
 exit($uc_note->$get['action']($get, $post));
 } else {
 exit(API_RETURN_FAILED);

}

第58行的$database竟然在前文没有定义过,改成'mysql'后,就可以正常通信了.

分类: IT 没有评论
24一/100

Firefox 3.6 性能测试,较Firefox 3.5 性能提高47%!

Firefox 3.6终于发布了,官方发布的Features集中在了宣传新的Personas换肤功能上.其实Personas在去年就开始在Mozilla Addons下载中心提供测试及下载了,Scourgen周围的很多Firefox使用者都用这个插件换了主题.可惜Personas还不支持换标题栏里更换背景图片,只能给标题栏换一个颜色.

而其实3.6最大的改进则提供了HTML5以及极大的增强了JavaScript的性能,而对此官方却没有做太大的介绍,只放了一个演示视频做对比,Scourgen花了点时间对Firefox3.6的JavaScript性能较上一版本(Firefox 3.5.7)做了一个对比,可以发现多数项目都有100%左右的提高,而平均性能提高则达到了47%

分类: IT 继续阅读
22一/101

最新的Adium 1.4hg修改版,支持小i的msn群里显示发言人名字.

Adium不能在小i的msn群里显示发言人的名字,用/showname也没有用,逼得我开着虚拟机用Windows live messenger.

今天看到一篇文章,是讲如何将Adium修改成支持msn群的,但是提供的都是老版本,于是下载了Adium的源码,一步一步进行修改.

  1. 安装Mercurial
    Adium使用Mercurial管理代码,所以得先装这Mercurial.个人建议用mac port进行安装,比较方便.

    sudo port install mercurial
  2. 安装完就可以创建一个工作目录,然后下载Adium的源码了:
    cd ~
    mkdir adium_build
    hg clone http://hg.adium.im/adium
  3. 下载完成后进入Utilities/dep-build-scripts目录
    cd Utilities/dep-build-scripts/
  4. 下载一些相关的包,以下脚本会自动下载10几个包,并且会自动把文件解压到source目录
    ./common.sh -d
  5. 下载Pidgin的源文件并解压缩
    cd source
    mkdir im.pidgin.adium.1-4
    cd im.pidgin.adium.1-4
    wget http://developer.pidgin.im/static/pidgin.mtn.bz2
    bzip2 -d pidgin.mtn.bz2
  6. 因为pidgin是用monotone这个源码管理软件进行管理的,所以我们得再安装monotone
    sudo port install monotone
  7. 然后对monotone的独特项目管理包(.mnt)文件进行解压,得到pidgin的源文件
    mtn db -d pidgin.mtn migrate
    mtn -d pidgin.mtn pull --set-default
    mtn.pidgin.im "im.pidgin.*"
    mtn -d pidgin.mtn co -b im.pidgin.adium.1-4 .
  8. 用monotone更新一下pidgin的代码
    mnt pull
    mnt update
  9. 然后开始build相关联的包
    ./general_dependencies_make.sh
  10. 如果很快就结束的话,多半是有错误发生,可以看一下log文件,比如我就出现了perl里的某个XML Parser包找不到的错误,导致intltool包编译不成功.
    vim ./build/purple_dep_make.log/usr/bin/install -c -m 644 'libgadu.pc' '/Users/scourgen/StudyWorkSpaces/Adium/adium-1.4/Utilities/dep-build-scripts/build/root-i386/lib/pkgconfig/libgadu.pc'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /Users/scourgen/StudyWorkSpaces/Adium/adium-1.4/Utilities/dep-build-scripts/source/intltool-0.36.2/install-sh -c -d
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking for perl... /opt/local/bin/perl
    <span style="color: #ff0000;">checking for XML::Parser... configure: error: XML::Parser perl module is required for intltool</span>
  11. 于是再调用port安装这个XML Parser
    sudo port install p5-xml-parser
    --->  Computing dependencies for p5-xml-parser
    --->  Fetching p5-xml-parser
    --->  Attempting to fetch XML-Parser-2.36.tar.gz from http://distfiles.macports.org/perl5
    --->  Verifying checksum(s) for p5-xml-parser
    --->  Extracting p5-xml-parser
    --->  Configuring p5-xml-parser
    --->  Building p5-xml-parser
    --->  Staging p5-xml-parser into destroot
    --->  Installing p5-xml-parser @2.36_0
    --->  Activating p5-xml-parser @2.36_0
    --->  Cleaning p5-xml-parser
  12. 再执行第9步,正常的话应该得到如下提示:
    Done - now run ./purple_dependencies_make.sh
  13. 然后开始编译purple的相关包,这步时间会稍微久一点.
    ./purple_dependencies_make.sh
  14. 然后在正式编译purple之前进行修改,加入显示msn群里发言人名字的功能.
    if ((value = msn_message_get_attr(msg, "P4-Context")) != NULL)
    {
    char *body_enc2;
    body_enc2 = g_strdup_printf("<b>***%s***</b>  %s", value,
    body_enc ? body_enc : "");
    g_free(body_enc);
    body_enc = body_enc2;
    }

    将上述代码插入到source/im.pidgin.adium.1-4/libpurple/protocols/msn/msg.c 847行之后,变成:

    842 #if 0
    843         if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL)
    844         {
    845                 purple_debug_misc("msn", "User-Agent = '%s'\n", value);
    846         }
    847 #endif
    848
    849     if ((value = msn_message_get_attr(msg, "P4-Context")) != NULL)
    850     {
    851         char *body_enc2;
    852         body_enc2 = g_strdup_printf("<b>***%s***</b>  %s", value,
    853             body_enc ? body_enc : "");
    854         g_free(body_enc);
    855         body_enc = body_enc2;
    856     }
  15. 然后开始编译LibPurple
    ./purple_make.sh --i386 --regenerate
  16. 然后编译Mac通用的二进制文件
    ./universalize.sh
  17. 然后编译多语言文件
    ./make_po_files.sh
  18. 最后安装新的Frameworks到Adium中
    ./copy_frameworkds.sh
  19. 最后回到Adium的主目录,进行编译
    cd ../..
    make
  20. 完成后,会在主目录的build/Release-Debug目录中出现Adium.app,这就是最终的可执行文件了.
    打开程序,看看效果.

    不错吧,已经可以看到3个*中间的发言人名字了.

为了方便大家,这里提供我编译的版本的下载地址,是基于最新的1.4hg进行修改的,直接下载就能用了

Adium 1.4hg Scourgen编译版

分类: IT 1个评论
21一/100

实测Bootcamp 3.1,显卡性能大幅度提高

Apple发布了虚拟化软件Bootcamp的3.1版本,在这个版本中,除了正式支持了Windows 7之外,最明显的改进就是极大地提高了显卡的性能。

显卡驱动升级到了188.61

而在我的MacBook Pro上的Windows 7的显卡评分也从3.0时的5.9 5.3提高到了6.4 6.4


升级前


升级后

分类: IT 没有评论
19一/101

JavaScript Templates(JST),JavaScript语言下的模板引擎

JavaScript Templates(简称JST)是TrimPath开发的一款JavaScript语言的模板引擎,它可以在任何网页的前端使用,并用来处理大量的,实时的数据的前台展示.JST也是vivipos的打印模板处理引擎.

JST使用的语言是JavaScript,而使用的数据格式则是普通的JSON格式.

简单示例:

<div id="tpl_id">Hello <b>${name}</div>
<script language="javascript" src="trimpath/template.js"></script>
<script>
var a={name:"scourgen"};
alert(TrimPath.processDOMTemplate("tpl_id", a));
</script>

则会alert出scourgen.

JST支持一下几种语法:

  • 变量判断:
     ${name|default:"is null"} 
  • 语句判断
    {if name=="scourgen"}
    scourgen is here
    {else}
    no people
    {/if}
    
  • 赋值
    {var nameList=["scourgen","John","Shelly"]} 
  • 循环
    {for name in nameList}
    Hello ${name}!
    {/for}
     
  • 宏操作
    //借用官方的例子:</li>
    </ul>
    <a name="Macro_Declarations">  Examples:
    {macro htmlList(list, optionalListType)}
    {var listType = optionalListType != null ? optionalListType : "ul"}
    <${listType}>
    {for item in list}
    <li>${item}</li>
    {/for}
    </${listType}>
    {/macro}
    
    Using the macro...
    ${htmlList([ 1, 2, 3])}
    ${htmlList([ "Purple State", "Blue State", "Red State" ], "ol")}
    {var saved = htmlList([ 100, 200, 300 ])}
    ${saved} and ${saved}</a>
  • 执行JS
    //借用官方的例子:</li>
    </ul>
    <a name="eval_blocks">  <select onchange="sel_onchange()"></select>
    {eval}
    sel_onchange = function() {
    ...Do some complicated javascript...;
    ...more js code here...;
    }
    {/eval}</a>
  • HTML属性/CSS压缩

    //借用官方的例子:
    <a name="minify_blocks"> <select onchange="{minify}
    ...Do some complicated multi-line javascript...;
    ...more js code here...;
    this.enabled = false;
    {/minify}">
    <select onchange="{minify END_OF_JS}
    ...Do some complicated multi-line javascript...;
    ...more js code here...;
    this.enabled = false;
    END_OF_JS"></a>

用JST的好处

  1. 提高性能:对于大数据量的,需要及时处理的数据操作,大可将数据的处理放到前台,减轻后台压力
  2. JST语法简单,JST的语法和Smarty,Velocity类似,如果有以上模板系统开发经验的话,可以马上上手.
  3. 增加系统扩展性,提供另外一种Model到View的途径
  4. JST速度极快
    我用官方的demo作了两个测试,数据量分别是5和1000
    数据量为5条记录时:

    数据量为1000条记录时:

    可以看到,虽然记录数量增长了200倍,而运行时间和程序堆栈执行次数却只增长了39倍和117倍,而通过对Profile进行进一步分析,可以看出大部分时间是在入口函数以及DOM操作上,足以得出结论:JST的性能是很适合对大容量的数据进行处理的.

分类: IT 1个评论
12一/100

Apple store的真实收入

最近看到一些新闻,标题是《Gameloft:18 个月,1000 万次付费下载》

比如 Gameloft,在其美国时间 1 月 7 日发布的新闻稿中,其董事长兼 CEO Michel Guillemot 宣布它已经获得了1000 万付费下载。按 Gameloft 的游戏大多分布在 4.99 到 6.99 的价格计,它在 18 个月内获得 5000 万美元的收入是不成问题的。

平均售价6美金,1000万次付费下载,收入是否真的就等于5000万美元?

这不是一个简单的乘法。

Scourgen的朋友Jacky曾经是苹果的粉丝,他曾经告诉我有一种gift card可以在淘宝上买到,这种gift card可以用rmb购买,再兑换成购买价格几十倍的app store内的美金。于是我在淘宝上以“app store”为关键字进行了搜索,搜索结果竟然有1119条,而多数宝贝都是以35人民币的价格贩卖100美金的充值面额,也就是说你花35人民币,以原来5%的价格(35人民币 除以 (6.8汇率 乘以 100美金) =5.15%),就可以在app store上买总计100美金的应用程序,如果算做5美金一个应用程序的话,则可以用35元买20个应用程序,折合每个1.75元。花2块钱不到买一个在iphone上运行的正版软件,真是非常吸引人的事情,难怪scourgen随便打开几个宝贝,发现每个宝贝的成交都有10个以上,看来好多人已经用这种方法去购买app store内的软件了。

我想,任何一个人如果知道可以通过这种方法以低价购买app,他们肯定不会继续以20倍的价格继续购买app了吧?

做一个悲观的假设,如果所有购买gameloft的app的用户都使用这种方法进行购买,则gameloft真实的收入是多少呢?1000万次付费下载,每次1.75元(0.26美元),则是260万美元。260万美元,看起来还真不少,等等,你忘记了apple!因为根据app store与应用程序开发商的协议,所有程序销售额的30%均需要给apple分成,所以gameloft拿可怜的260万美金收入还得打7折,也就是182万美元。

新闻稿的5000万美元和182万美元之间可是差太多了,这是否代表着现在的app store并没有想象中的那么美好?做iphone程序可能真的不怎么赚钱。

分类: IT 没有评论
13十二/090

解决ofbiz在MAC下出现Keystore密码错误的问题

报错信息:

2009-12-13 13:55:01,489 (main) [            SSLImpl.java:63 :ERROR]
---- exception report ----------------------------------------------------------
Exception: java.io.IOException
Message: Keystore was tampered with, or password was incorrect
---- cause ---------------------------------------------------------------------
Exception: java.security.UnrecoverableKeyException
Message: Password verification failed
---- stack trace ---------------------------------------------------------------
java.security.UnrecoverableKeyException: Password verification failed
sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:769)
sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
java.security.KeyStore.load(KeyStore.java:1185)
org.ofbiz.base.util.KeyStoreUtil.getSystemTrustStore(KeyStoreUtil.java:110)
org.ofbiz.base.util.SSLUtil.getTrustManagers(SSLUtil.java:106)
org.ofbiz.catalina.container.SSLImpl$AllowTrustManager.<init>(SSLImpl.java:61)
org.ofbiz.catalina.container.SSLImpl.<init>(SSLImpl.java:46)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.tomcat.util.net.SSLImplementation.getInstance(SSLImplementation.java:75)
org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:152)
org.apache.catalina.connector.Connector.initialize(Connector.java:1058)
org.apache.catalina.core.StandardService.initialize(StandardService.java:677)
org.ofbiz.catalina.container.CatalinaContainer.init(CatalinaContainer.java:218)
org.ofbiz.base.container.ContainerLoader.loadContainer(ContainerLoader.java:188)
org.ofbiz.base.container.ContainerLoader.load(ContainerLoader.java:65)
org.ofbiz.base.start.Start.initStartLoaders(Start.java:259)
org.ofbiz.base.start.Start.init(Start.java:96)
org.ofbiz.base.start.Start.main(Start.java:410)
--------------------------------------------------------------------------------

其实是因为在mac下,java 1.6的cacerts默认密码从以前的"changeit"变成了"changeme"

可以用如下办法恢复密码:

cd  #cd ~
#keytool -importkeystore -srckeystore /System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/Deploy.bundle/Contents/Home/lib/security/cacerts -destkeystore newcacerts
Enter destination keystore password: changeit
Re-enter new password: changeit
Enter source keystore password:              #直接回车,留空
#sudo mv newcacerts /System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/Deploy.bundle/Contents/Home/lib/security
#sudo mv cacerts oldcacerts
#sudo mv newcacerts cacerts

就ok啦

分类: Java 没有评论
24十一/090

使用MODx快速构建适合搜索引擎优化的CMS网站

MODx是一个轻量的,适合于SEO的CMS系统.MODx获得了<2009 Best Open Source PHP CMS>的提名,不过最终输给了功能更为强大,用户也更为广泛的Drupal.不过这不妨碍它作为轻量开源CMS的代表给希望快速制作网站的用户们提供一个更好地选择.

MODx的安装过程非常快速,几乎没有过多的页面跳转,安装过程便在ajax操作的提示下顺利完成,甚至测试数据库是否联通都是用ajax实现的,从安装程序的人性化可见MODx非常注重用户体验.

如果在安装过程中选择安装Sample Site,MODx便会自动将一个默认的网站导入当前的系统,方便第一次使用的用户理解系统.

MODx安装Sample site后显示的首页

而一个CMS是否强大和易用,通过其后台设置便可知道,让我们看一下MODx的后台界面

MODx后台界面

在后台界面中,操作员可以非常直观的对当前网站的栏位,文章以及互相之间的层次结构进行调整,而通过更加详细的功能设置则可以使MODx开启URL优化及更多的SEO优化功能.

后台设置之URL优化

如果你以为MODx的功能仅仅是这些那你就错了,MODx作为一个非常有潜力的CMS,当然少不了可自定义的扩展功能!在他的官方网站上,有着近600个扩展插件供你安装使用!

MODx的官方提供扩展下载

而最令人激动的是,MODx还有一个非常活跃的社区供所有使用MODx的用户交流讨论,至今为止已经有25万个发言了,当然如果你的英文不是很好的话,他也有使用中文交流的板块供你使用.

怎么样?下一个网站,使用MODx构建吧!

下载地址:
MODx 1.02.zip (3.6m)

安装需求:
PHP,MySQL数据库.

22十一/090

搬家了

感谢owen的帮助,让我终于搬到了mt的主机上。

分类: IT 没有评论