QQ音乐WEB版不完全分析

URL:http://y.qq.com/

Q1:为什么点击了导航的连接后在播放的音乐没有停止播放,一般情况下,页面刷新后整个展示都是刷新了的,所以音乐也会停止播放。

这个分析导航按钮后会发现玄机,看源码

<a href="/y/static/index.html?pgv_ref=qqmusic.y.topmenu" target="contentFrame" class=""><span>音乐馆</span></a>

看到 target=”contentFrame”没有,这个才是真正的显示首页内容的iframe容器,刷新的内容都在这里,最外面的body也就是播放中所在的元素其实是没有刷新的。
不过有个疑问,为什么浏览器地址栏变了,后面加了#xxx?

mysql主从备份

#####################mysql主从备份#####################
准备:
1.master server:192.168.1.124
2.slave server:192.168.1.127
3.mysql版本一致
步骤:
1.启动master,关闭slave
2.在master的/etv/my.cnf中加入
[mysqld]
server-id = 1
log-bin = mysql-bin
3.在slave的/etv/my.cnf中加入
[mysqld]
server-id = 10

#master
1.GRANT REPLICATION SLAVE ON *.* to ‘wuliu’@’192.168.1.127′ identified by ‘123456’;
2.Mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 107 | | |
+——————+———-+————–+——————+
记录File和Position

#slave
1.启动mysql
2.mysql> change master to
master_host=’192.168.1.124′,
master_user=’wuliu’,
master_password=’123456′,
master_log_file=’mysql-bin.000001′,
master_log_pos=107;
3.mysql>start slave;
4.show slave status\G
其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。

备注:
如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;

(2)查看主数据库状态
mysql> show master status;

(3)记录下 FILE 及 Position 的值。
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

(4)取消主数据库锁定
mysql> UNLOCK TABLES;

Java开发exe程序

1.使用JavaFX技术
2.使用NetBeans IDE 7.4,通过build.xml生成exe和jar文件

<?xml version="1.0" encoding="UTF-8"?><!-- You may freely edit this file. See commented blocks below for --><!-- some examples of how to customize the build. --><!-- (If you delete it and reopen the project it will be recreated.) --><!-- By default, only the Clean and Build commands use this build script. --><project name="HelloWorld" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
    <description>Builds, tests, and runs the project HelloWorld.</description>
    <import file="nbproject/build-impl.xml"/>
    <!--

    There exist several targets which are by default empty and which can be 
    used for execution of your tasks. These targets are usually executed 
    before and after some main targets. Those of them relevant for JavaFX project are: 

      -pre-init:                 called before initialization of project properties
      -post-init:                called after initialization of project properties
      -pre-compile:              called before javac compilation
      -post-compile:             called after javac compilation
      -pre-compile-test:         called before javac compilation of JUnit tests
      -post-compile-test:        called after javac compilation of JUnit tests
      -pre-jfx-jar:              called before FX SDK specific <fx:jar> task
      -post-jfx-jar:             called after FX SDK specific <fx:jar> task
      -pre-jfx-deploy:           called before FX SDK specific <fx:deploy> task
      -post-jfx-deploy:          called after FX SDK specific <fx:deploy> task
      -pre-jfx-native:           called just after -pre-jfx-deploy if <fx:deploy> runs in native packaging mode
      -post-jfx-native:          called just after -post-jfx-deploy if <fx:deploy> runs in native packaging mode
      -post-clean:               called after cleaning build products

    (Targets beginning with '-' are not intended to be called on their own.)

    Example of inserting a HTML postprocessor after javaFX SDK deployment:

        <target name="-post-jfx-deploy">
            <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
            <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
            <custompostprocess>
                <fileset dir="${jfx.deployment.html}"/>
            </custompostprocess>
        </target>

    Example of calling an Ant task from JavaFX SDK. Note that access to JavaFX SDK Ant tasks must be
    initialized; to ensure this is done add the dependence on -check-jfx-sdk-version target:

        <target name="-post-jfx-jar" depends="-check-jfx-sdk-version">
            <echo message="Calling jar task from JavaFX SDK"/>
            <fx:jar ...>
                ...
            </fx:jar>
        </target>

    For more details about JavaFX SDK Ant tasks go to

http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm

    For list of available properties check the files
    nbproject/build-impl.xml and nbproject/jfx-impl.xml.

    -->
    
    <target name="-post-jfx-deploy">
       <fx:deploy width="${javafx.run.width}" height="${javafx.run.height}" 
                  nativeBundles="all"
                  outdir="${basedir}/${dist.dir}" outfile="${application.title}">
          <fx:application name="${application.title}" 
                          mainClass="${javafx.main.class}"/>
          <fx:resources>
              <fx:fileset dir="${basedir}/${dist.dir}"
                          includes="*.jar"/>
          </fx:resources>
          <fx:info title="${application.title}" 
                   vendor="${application.vendor}"/>
        </fx:deploy>          
     </target>
</project>

HelloWorld.java



import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
 
 
public class HelloWorld extends Application {
    private Scene scene;
    @Override public void start(Stage stage) {
        // create the scene
        stage.setTitle("Web View");
        scene = new Scene(new Browser(),1280,800, Color.web("#666970"));
        stage.setScene(scene);
        //scene.getStylesheets().add("webviewsample/BrowserToolbar.css");        
        stage.show();
    }
 
    public static void main(String[] args){
        launch(args);
    }
}
class Browser extends Region {
 
    final WebView browser = new WebView();
    final WebEngine webEngine = browser.getEngine();
     
    public Browser() {
        //apply the styles
        getStyleClass().add("browser");
        // load the web page
        webEngine.load("http://chrome.360.cn/test/html5/index.html");
        //add the web view to the scene
        getChildren().add(browser);
 
    }
    private Node createSpacer() {
        Region spacer = new Region();
        HBox.setHgrow(spacer, Priority.ALWAYS);
        return spacer;
    }
 
    @Override protected void layoutChildren() {
        double w = getWidth();
        double h = getHeight();
        layoutInArea(browser,0,0,w,h,0, HPos.CENTER, VPos.CENTER);
    }
 
    @Override protected double computePrefWidth(double height) {
        return 750;
    }
 
    @Override protected double computePrefHeight(double width) {
        return 500;
    }
}

3.生成后使用Inno Setup Compiler打包成安装程序,需要include NetBeansProjects\HelloWorld\dist\bundles\HelloWorld下的文件
包括jre运行环境和jar配置

DONE!

Linux安装Extmail1.6

系统环境

Linux hzbenhe 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux

Red Hat Enterprise Linux Server release 6.2 (Tikanga)

安装过程
根据http://wiki.extmail.org/extmail_solution_for_centos-5安装就可以
yum源:使用EMOS1.6.ISO本地源

安装过程整体来说还是比较简单顺利的。
目前已安装到《拾壹、配置Courier-IMAP》web和客户端邮件都可以正常收发

暂时没有配置安装垃圾邮件过滤。

安装问题
1.安装ExtMail yum install extsuite-webmail时候perl版本哟问题,我本来系统安装的比iso里的perl和要求的版本高,所以我就把系统里的先删了,安装了iso里的perl
2.同意安装cyrus-sasl时候有个cyrus-sasl-lib版本系统已有的比原来的高。
先把原来的删了rpm -e cyrus-sasl-lib,然后在EMOS包里找到cyrus-sasl-lib的rpm包安装上再yum install cyrus-sasl就可以搞定
3.telnet localhost 25错误如下

Oct 31 18:49:40 AY130822170240945887Z postfix/smtpd[10456]: connect from localhost[127.0.0.1]
Oct 31 18:49:40 AY130822170240945887Z postfix/smtpd[10456]: warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms
Oct 31 18:49:40 AY130822170240945887Z postfix/smtpd[10456]: fatal: no SASL authentication mechanisms
Oct 31 18:49:41 AY130822170240945887Z postfix/master[10443]: warning: process /usr/libexec/postfix/smtpd pid 10456 exit status 1
Oct 31 18:49:41 AY130822170240945887Z postfix/master[10443]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

安装了cyrus-sasl-plain后就ok

4.Centos5.4安装Emos1.5时候根据文档安装下来没什么大的问题。但是在测试收发邮件时候发现只能发送,不能接受,同域下的可以正常收发。
后来用了客户端,发现不能连上pop3和smtp,这个是应为iptables原因,吧25 110加上白名单就ok
但是用客户端只能拉取服务器邮件不能发送。
正纠结了
后来在远程telnet 25不通,110通,netstat查看是已经开启了25端口,此时一位是阿里云服务器屏蔽了25端口。继续找原因
在服务器端telnet localhost 25通,telnet mail.xxx.com 不通,域名是可以正确解析到本机ip的
这样问题很明显了,是telnet域有问题。
后来netstat发现25端口在监听了127.0.0.1的,而110监听0.0.0.0也就是所有的来路。这就难怪了
好,找到了问题所在。
解决:
修改main.cf
inet_interfaces = localhost 改为 inet_interfaces = all
重启postfix
然后测试下,OK了web,和客户端都能正常收发了。

这个inet_interfaces配置在EMOS1.6中已经取消。

Linux安装Extmail1.5

Extmail1.5对应RH5.X
Extmail1.6对应RH6.X

系统环境

Linux hzbenhe 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux

Red Hat Enterprise Linux Server release 5.6 (Tikanga)

安装过程
根据http://wiki.extmail.org/extmail_solution_for_centos-5安装就可以
yum源:http://mirror.extmail.org/yum/emos/1.5/os/$basearch/

安装问题
1.安装《拾壹、配置courier-imap]》时候======================
yum install courier-imap

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package courier-imap.x86_64 0:4.6.0-1 set to be updated
--> Processing Dependency: courier-authlib-devel >= 0.60.6.20080629 for package: courier-imap
--> Processing Dependency: libcourierauthsasl.so()(64bit) for package: courier-imap
--> Processing Dependency: libcourierauth.so()(64bit) for package: courier-imap
--> Finished Dependency Resolution
courier-imap-4.6.0-1.x86_64 from EMOS-base has depsolving problems
  --> Missing Dependency: libcourierauth.so()(64bit) is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
courier-imap-4.6.0-1.x86_64 from EMOS-base has depsolving problems
  --> Missing Dependency: courier-authlib-devel >= 0.60.6.20080629 is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
courier-imap-4.6.0-1.x86_64 from EMOS-base has depsolving problems
  --> Missing Dependency: libcourierauthsasl.so()(64bit) is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
Error: Missing Dependency: libcourierauth.so()(64bit) is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
Error: Missing Dependency: libcourierauthsasl.so()(64bit) is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
Error: Missing Dependency: courier-authlib-devel >= 0.60.6.20080629 is needed by package courier-imap-4.6.0-1.x86_64 (EMOS-base)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package.

解决:

wget http://shupp.org/software/courier-imap-4.1.2.tar.bz2
tar -jxvf courier-imap-4.1.2.tar.bz2 
cd courier-imap-4.1.2 
./configure --prefix=/usr/local/courier-imap --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/courier-authlib/include' COURIERAUTHCONFIG='/usr/local/bin/courierauthconfig' CPPFLAGS='-I/usr/courier-authlib/include' 

make 
make install 
cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd 
cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl 
cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d 
cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl 

配置Courier-IMAP,为用户提供pop3服务:

vi /usr/local/courier-imap/etc/pop3d 
POP3DSTART=yes 

注:如果你想为用户提供IMAP服务,可以在”/usr/local/courier-imap/etc/imapd”文件中设置”IMAPDSTART=yes”。
设置courier-imap开机自动运行:

cp courier-imap.sysvinit /etc/rc.d/init.d/imapd 
chmod 755 /etc/rc.d/init.d/imapd 
chkconfig --add imapd 
service imapd start 

1.telnet localhost 110======================
ERR Temporary problem, please try again later
maillog日志
Oct 30 16:31:44 toc-server pop3d: Connection, ip=[127.0.0.1]
Oct 30 16:32:09 toc-server pop3d: authdaemon: s_connect() failed: No such file or directory
Oct 30 16:32:09 toc-server pop3d: LOGIN FAILED, user=test@extmail.org, ip=[127.0.0.1]
Oct 30 16:32:09 toc-server pop3d: authentication error: No such file or directory

解决:

这问题一直没搞定,最后还是放弃了在RH5.6上安装EMOS1.5

Eclipse统计代码行数

使用Eclipse可以方便的统计工程或文件的代码行数。
方法如下:
1.在菜单栏点击Search,然后点击File…
2.选中正则表达式(Regular expression),并在搜索文本框输入\n
3.在文件名中输入*或*.java
4.在范围里选中Enclosing projects
5.在Search窗口就会显示出项目或文件的代码行数

Linux安装Review Board安装

花了一整天时间安装了ReviewBoard,问题多多,安装过程各种报错.主要原因是系统的yum源比较旧,像Python以及很多依赖库都需要自己手动编译来安装,ReviewBoard对Python的版本还是有要求的。这样就比较蛋疼了。
不管如何,各种磕磕碰碰的安装完成了。
系统环境

Linux hzbenhe 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux

Red Hat Enterprise Linux Server release 5.6 (Tikanga)

安装过程
安装过程直接参考官方文档就可以,还是比较简单,主要说明下安装过程中的遇到的问题。
参考:

http://www.reviewboard.org/docs/manual/1.7/admin/installation/linux/#installing-python-setuptools

http://www.reviewboard.org/docs/manual/1.7/admin/installation/creating-sites/#creating-sites

安装过程中遇到的各种问题
PS:不完全归类,因为不同系统环境可能遇到的问题也不一样
1.python模块安装
每个python模块下载下来有有个setup.py,运行python setup.py install 这样模块就会安装上。否则如果其它模块需要加载此模块会报错说不能找到xx模块
2.python-dateutil1.5
RuntimeError: maximum recursion depth exceeded python递归深度报错

vi setup.py
import sys   
sys.setrecursionlimit(1000000) #例如这里设置为一百万

这个加了其实不顶用,后面会报段错误的。后来我也不知道怎么回事,执行了dateutil里的python setup.py install 就好了。原来试过用pip安装也一样报错的。
3. /usr/bin/ld: cannot find -lpython2.7错误
这里先要说明下,本来我用的是2.4版本,因为RB要求,所以去下个了2.7安装,并ls -n 到/usr/bin,这样shell环境可以直接命令python,但是so文件还是在原来地方没有链接过去,需要把so文件ls -n到/usr/lib64里
4.在运行easy_install ReviewBoard时候各种很长的错误
关键是这些错去还不知道哪里报出来的,方法就是定向到文件,然后从文件里可以看到是在安装那个需要的包时候报错了easy_install ReviewBoard>install.log。然后再根据具体报错的包,独立安装。方法有两种,1.直接下载源码,setup.py安装。2.pip install安装
5.安装完ReviewBoard后需要建立一个site,有个工具rb-site,直接shell命令可能找不到,一般在python的根目录下的bin里可以找到。也也可ls -n到/usr/bin方便些
6.ReviewBoard site推荐选择mod_wsgi 模块。
所以在https://code.google.com/p/modwsgi/中下载编译,make install后会在apache的module下一个so文件,在httpd.conf中LoadModule进来就可以来。另需要配置虚拟主机,直接把RB根目录conf下的一个conf文件内容拷贝到httpd.conf最后就可以了。

==========================================================================
OK,安装过程就算完成了。下面就是怎么整合git怎么使用的问题,还在研究。

开源协议BSD,Apache,GPL,LGPL,MIT

BSD开源协议
一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1.如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
2.如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
3.不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence 2.0
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

1.需要给代码的用户一份Apache Licence
2.如果你修改了代码,需要再被修改的文件中说明。
3.在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
4.如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商 业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并 发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源 代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

MIT
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

[WordPress]修改主题作者版本信息

要修改主题的版本、作者、url等,直接修改style.css中的注释:

/*
Theme Name: Noodle
Version: 1.0.0
Author: Gex
Author URI: http://tomner.com

*/

[WordPress]主题做了一些修改

今天蛋疼的对主题做了一些调整。主要以下一点:

1.侧边栏加入置顶文章。
2.文章首页列表去掉置顶文章。放到了右边。因为文章列表置顶没什么作用。太占位置。
3.侧边栏分类样式调整。使得跟整个主题更加融合。
4.侧边栏分类,当页面滚动到跟随区域下方,跟随区域将固定在窗口上