分类: 网页设计

  • 网页快讯

    网页快讯:常见问题
    以下是有关网页快讯的一些常见问题的解答。

    什么是网页快讯?

    网页快讯是网页中您可以订阅的一个特定部分,通过它您可以了解收藏网站何时提供更新的内容(如当前气温或不断变化的拍卖价格)。一旦您订阅了网页快讯,它将在收藏夹栏中显示为一个链接。在更新网页快讯时,收藏夹栏上的链接将以粗体格式显示。然后,您可以单击该链接来查看更新内容。

    如何了解网页快讯何时在网页上可用?

    当“网页快讯”在网页上可用时,您将在命令栏上看到相应的“网页快讯”按钮 。当您将鼠标指向网页中的可用内容时,其旁边也会出现“网页快讯”按钮。

    是否可以让 Internet Explorer 在网页快讯可用或更新时发出声音?

    可以。若要为网页快讯启用声音,请执行以下步骤:

    打开 Internet Explorer,单击“工具”按钮,然后单击“Internet 选项”。
    单击“内容”选项卡,然后单击“源和网页快讯”下的“设置”。
    在“源和网页快讯设置”对话框中,选中以下复选框中的一个或两个:
    在找到网页的源或网页快讯时播放声音
    在更新被监视的源或网页快讯时播放声音
    如何向收藏夹栏中添加网页快讯?

    若要向收藏夹栏中添加网页快讯,请执行以下步骤:

    打开 Internet Explorer,并转到包含要向收藏夹栏中添加的网页快讯的页面。
    请执行下列操作之一:
    单击命令栏上的“网页快讯”按钮 。
    单击页面上的“网页快讯”按钮 。
    在对话框中,单击“添加到收藏夹栏”。
    在您添加“网页快讯”之后,您将在收藏夹栏左侧看到它。

    如何从收藏夹栏中删除网页快讯?

    若要从收藏夹栏中删除某个网页快讯,请右键单击该网页快讯,然后单击“删除”。

    如果关闭网页上的网页快讯按钮?

    通过执行下列步骤,您可以停止在网页上显示网页快讯按钮:

    在 Internet Explorer 中,单击“工具”按钮,然后单击“Internet 选项”。
    单击“内容”选项卡,然后单击“源和网页快讯”下的“设置”。
    在“源和网页快讯设置”对话框中,清除“在页面中打开网页快讯发现”复选框。

  • Trackbacks技术规范

    博客中的Trackbacks已经越来越少被应用了,其实这是一个很不错的东东,只是被大量的广告顶上了,让越来越多的人取消掉了这个功能。其实这个的缺点主要在于不能确定ping过来的文章内容,则给广告提供了良好的群发条件。更可惜的是目前这种并没有太好的解决方案,并且在逐步被淘汰。

    TrackBack最早是Movable Type上的一个小功能。可以说就是这个小功能在blog界却掀起了一场革命。
    TrackBack为将全世界无数个blog连接起来的功能。例如,当你读了某个网站的文章,想对此写下自己的感想。这个时候利用网站准备的讨论功能进行投稿是很最常见的做法。但这样只是把自己的评论意见写下来向别人的网站投稿,而你自己手里却什么也没留下。
    TrackBack则与之有很大的区别。可以把评论写到自己网站上。然后向刊载原始文章的服务器发送该网页的URL及标题、部分正文、网站名称等信息(注)。尽管这一过程只是称之为“发送TrackBack Ping”,但通过这种办法,在原始文章的地方就留下了你的评论的URL、标题等部分信息。当然别人也可以向原始文章发送TrackBack Ping,所以在原始文章中就将包括你的TrackBack Ping在内的所有评论都记录了下来。
    此外,如果你在自己网站上也设置了TrackBack Ping功能的话,那么谁都可以通过TrackBack Ping来发表针对你的意见了。这样,多家网站就通过相关话题而联接起来。各种评论在因特网上就像网眼一样联接起来。这样就创造出了与日记网站完全不同的文化。
    很可惜这样的想法并不能在互联网的条件下实现,被淘汰的命运很难被避免,我只是在想WORDPRESS在哪个版本会放弃使用TrackBack。 (更多…)

  • wordpress评论的超链接问题

           最近关注了下博客的营销,每种博客都有自己的方法来屏蔽广告效果,而wordpress则是用一个标记让超链接失效,不被搜索引擎抓取的。

          我们现在比较长见的是rel=’external nofollow’与rel=’nofollow’两种参数的应用。这是Google挑头增加为了应对垃圾链接引入的一个rel=’nofollow’属性,此属性随后被各大搜索引擎广泛采用。 而rel=’external nofollow’只是更相对于rel=’nofollow’参数更加规范一些。
          rel=’external nofollow’与rel=’nofollow’其功能就中文译文”不要读取” 及”外部链接不要读取”,就已说得很清楚了。

          其实也就是说评论对于SEO的外部链接是起不到作用的,所以还是建议那些非博友的广告评论省省力气吧,其实就是通过了也是不能达到外部连接的效果。

    然而最近有人说起rel=’external’ 不清楚是什么意思,不知道这个属性是否同rel=’external nofollow’与rel=’nofollow’ 一样的功能。

          其实rel=’external’只是一个替代target=”_blank” 的属性。target=”_blank” 的属性是打开新窗口。但有些博客因为是采用严格的DOCTYPE声名的,如果你打开网站的源代码,在第一行的位置就可以看到:<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>在这种情况下target=”_blank”可能会失效,因此采用rel=’external’这个参数来替代。

    因此rel=’external’的属性只是打开新窗口的作用。

  • DIV+CSS并不能使你的网站节省流量

          话说很久以前,我就一直保持这个观点,但是一直苦于div+css的主流趋势所致,使我之前使惯了table到现在要大量的div标签,其实每个新产品出来都会攻击上一代产品,无情的将上代产品的缺陷上撒盐,目前html5出来后我已经看到一些文章在攻击div大量的重复使用。而html5则推出了几个新的标签来代替div,

    HTML 5 添加了一些新元素,专门用来标识这些常见的结构:

    • section:这可以是书中的一章或一节,实际上可以是在 HTML 4 中有自己的标题的任何东西
    • header:页面上显示的页眉;与 head 元素不一样
    • footer:页脚;可以显示电子邮件中的签名
    • nav:指向其他页面的一组链接
    • article:blog、杂志、文章汇编等中的一篇文章

    那为什么说我一直不认同div+css呢,可能是因为我是太过习惯table了,到div+css主流之后我很少设计网页了。另外最重要的一个原因就是我网站运营中的数据统计,事实证明div+css更浪费流量,每每都看到div+css降低运营成本的文章,网站重构的文章,其实这些有多少考虑到网站的运营实际情况呢?

         我所运作的大多网站都是靠搜索引擎来获取流量,这样有一个特点就是大量访问者都只是访问一个页面就离开,这样的话table就比div+css要节省很多流量,然后事实上有多少网站具有高浏览量的特性呢?

         其实div和table差不多 table是去加一些属性,而div是加标签到css中去解析,这样就会导致访问一个页面的情况下table表现出来一个页面的内容,div+css却要表现出来一个页面+全局的css内容+分类的css内容等,只有当访问者浏览超过3个页面以上的时候浏览才相当或者比table更节省流量。在用户角度上我还测试大量使用的IE,当使用table写网站的时候,重复的代码内容在每个分页的加载,IE的表现并不是重新加载,它似乎做了处理,表现出来是很快的。很可能这部分相同代码的流量是不消耗的。一样能够表现出CSS的重用性。起码给用户的体验是表现出来的。最后一个批评table的噱头是不容易改版及可读性差,我个人也认为这个是不可以理解的,比起要看两个文件才能看出是什么格式,我认为还是只看一个页面要容易理解,这个可能跟我之前大量使用table有关,另外不容易改版我也认为这个是不合适的,在模板的使用中,无论是div+css还是table,都是只修改一个模板然后整个网站都生成新的页面了。不存在什么大量文件需要修改。

         现在html5的一些文章已经在说html5的优势了,我也觉得在html和xhtml中,更多的运用html更适合中国的网站情况,我也希望能用一个HTML5写出来的wordpress模板。

  • Akismet和文章版本不连续的问题

        最近Akismet似乎有些什么问题了,在后台的拦截数总是不断上涨的,但是垃圾评论中却是没有显示的,另外不知道什么原因,一些俄罗斯的朋友很钟爱我的博客,时时的发些恭维的赞美的俄文,虽然我要翻译成英语在翻译成中文,依然很欣慰。不过拜托下次不要一下就让我看出是发广告呀。另外还会有乱码的评论,wordpress是UTF-8的编码能够支持很多的语言,我也很想知道是什么语言导致出现代码的,而且这些Akismet都是拦截不住的,每次都会发布上去,不知道拦截的那些数据是怎么统计出来的。 

       另外我发布文章ID是不连续的,其实这个问题我已经网上搜过了,是因为之前的历史版本造成的,我用一个命令给禁止了,可是还是依然有这样的问题,之后我又找到了一个修改代码的方法,但是想想每次更新版本都要更新代码,还是不老麻烦的。我想知道大家都是怎么处理这些问题的。  那我现在发完文章了,去广大博友家中串门,回访回来的看到这个一定要不吝相告啊。

  • XML-RPC Ping Services 更新

    原来已经设置的XML-RPC Ping Services有很长时间没有更新过了,这次官方查看最新的XML-RPC Ping Services发现时比以前要少了一些,所以写下来几下少了哪些,我现在使用的XML-RPC Ping Services列表:

     http://rpc.pingomatic.com/
    http://api.moreover.com/ping
    http://api.my.yahoo.com/rss/ping
    http://blogsearch.google.com/ping/RPC2
    http://ping.bitacoras.com
    http://ping.feedburner.com
    http://ping.syndic8.com/xmlrpc.php
    http://rpc.blogrolling.com/pinger/
    http://rpc.icerocket.com:10080/
    http://rpc.technorati.com/rpc/ping
    http://rpc.weblogs.com/RPC2
    http://topicexchange.com/RPC2
    http://www.blogdigger.com/RPC2
    http://www.blogoole.com/ping/
    http://www.popdex.com/addsite.php
    http://www.wasalive.com/ping/
    http://www.weblogues.com/RPC/
    http://blogping.unidatum.com/RPC2/
    http://www.xianguo.com/xmlrpc/ping.php
    http://www.zhuaxia.com/rpc/server.php
    http://blog.youdao.com/ping/RPC2

    wordpress官方站给出的:

    http://api.moreover.com/RPC2
    http://bblog.com/ping.php
    http://blogsearch.google.com/ping/RPC2
    http://ping.weblogalot.com/rpc.php
    http://ping.feedburner.com
    http://ping.syndic8.com/xmlrpc.php
    http://ping.bloggers.jp/rpc/
    http://rpc.pingomatic.com/
    http://rpc.weblogs.com/RPC2
    http://rpc.technorati.com/rpc/ping
    http://topicexchange.com/RPC2
    http://www.blogpeople.net/servlet/weblogUpdates
    http://xping.pubsub.com/ping
    http://blogsearch.google.com/ping/RPC2
    http://www.xianguo.com/xmlrpc/ping.php
    http://www.zhuaxia.com/rpc/server.php
    http://blog.youdao.com/ping/RPC2

    其中google重复了一个,wordpress默认带的http://rpc.pingomatic.com/也没有了,我更新下最新的吧。

  • CSS布局设计 顺口溜

    一、IE边框若显若无,须注意,定是高度设置已忘记; 

    二、浮动产生有缘故,若要父层包含住,紧跟浮动要清除,容器自然显其中; 

    三、三像素文本慢移不必慌,高度设置帮你忙; 

    四、兼容各个浏览须注意,默认设置行高可能是杀手; 

    五、独立清除浮动须铭记,行高设无,高设零,设计效果兼浏览; 

    六、学布局须思路,路随布局原理自然直,轻松驾驭HTML,流水布局少hack,代码清爽,兼容好,友好引擎喜欢迎。 

    七、所有标签皆有源,只是默认各不同,span是无极,无极生两仪—内联和块级,img较特殊,但也遵法理,其他只是改造各不同,一个*号全归原,层叠样式理须多练习,万物皆规律。 

    八、图片链接排版须小心,图片链接文字链接若对齐,padding和vertical-align:middle要设定,虽差微细倒无妨。 

    九、IE浮动双边距,请用display:inline拘。 

    十、列表横向排版,列表代码须紧靠,空隙自消须铭记。

  • 禁用 WordPress 文章修订功能并只留自动保存功能的方法

    WordPress 之所以能生成修订版,是因为在更新一篇文章之前,先执行了挂在“pre_post_update”钩子上的函数。在 wp-includes/default-filters.php 中,可以看到这一行:

    add_action( ‘pre_post_update’, ‘wp_save_post_revision’ );
    这样每次修改都会自动调用 wp_save_post_revision 这个函数来创建修订版记录。我需要做的就是把这一行注释掉,这样就不会在 Update 后生成修订版了。

    但仅仅改了这一行还不行,有一种情况仍然会产生修订版。那就是在修改已经发布的文章时,自动保存功能会产生新的修订版。我们可以在 wp-admin/includes/post.php 文件中,找到 wp_create_post_autosave 函数。通过阅读代码和注释,可以知道如果正在编辑的文章还没有自动保存过,就会创建一个修订版。为了让它仅仅起到保存的作用,需要将最后一行的

    return _wp_put_post_revision( $_POST, true );
    改成:

    return edit_post();
    整个函数如下:

    function wp_create_post_autosave( $post_id ) {
     $translated = _wp_translate_postdata( true );
     if ( is_wp_error( $translated ) )
      return $translated;
     
     // Only store one autosave.  If there is already an autosave, overwrite it.
     if ( $old_autosave = wp_get_post_autosave( $post_id ) ) {
      $new_autosave = _wp_post_revision_fields( $_POST, true );
      $new_autosave[‘ID’] = $old_autosave->ID;
      return wp_update_post( $new_autosave );
     }
     
     // Otherwise create the new autosave as a special post revision
     //return _wp_put_post_revision( $_POST, true );
     return edit_post();
    }
    通过修改这两行代码,即保留了自动保存功能,又去掉了历史记录功能,另一个额外的好处是可以让文章ID连续增长。唯一不好的是需要修改源代码,这样在升级 WordPress 以后又要重新做一次。

    ————-

    我看了上面几个与之相关插件的代码:

    super-switch 是直接增加定义来处理,类似在 wp-config.php 中加代码的方法。
    No Revisions 是使用代码 ‘@remove_action ( ‘pre_post_update’, ‘wp_save_post_revision’ );’来处理,即上面第二种方法中的第一步(1.0)。
    Revision Control 这个插件处理得比较好,多语言,可以设置关闭文章的多版本功能和页面的多版本功能,还可以设置最多保留几个修订版本(1.9.1)。推荐使用。

    要清理已经存在的文章修订记录,可以使用插件:Delete-Revision

    也可以自动动手来处理,执行 SQL (注意按顺序执行):

    DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = ‘revision’);
    DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts WHERE post_type=’revision’);
    DELETE FROM wp_posts WHERE post_type=’revision’;
    如果要将 ID 重新设置为连续,可以使用月光博客提供的 SQL,每修改一个 ID 需要更新 4 条语句,如把 ID 59 修改为 58 :

    UPDATE wp_posts SET id = 58 WHERE id = 59;
    UPDATE wp_term_relationships SET object_id = 58 WHERE object_id = 59;
    UPDATE wp_postmeta SET post_id = 58 WHERE post_id = 59;
    UPDATE wp_comments SET comment_post_ID = 58 WHERE comment_post_ID = 59;
    ————-

    最后,我只使用了修改 wp-config.php 的方法,既然官方提供了这个设置,应该会有效吧,我先试试,因为目前我使用的是 WordPress2.7.1 的版本,如果行,可能上面提到的第二种修改方法是出自于这之前的版本。

    ——呵呵,刚刚试过了,修改 wp-config.php 的方法在修改已经发布的文章时,自动保存时会创建 Revision ,在更新文章后,会又创建 Revision 。现在试试 Revision Control 插件,毕竟这只是后台的功能,这个插件对前台没有影响。
    PS:我不太喜欢装很多插件,崇尚简洁,追求速度。

    使用 Revision Control 插件后,完美禁用 WordPress 文章修订功能,文件编辑时自动保存会创建新的 ID 记录。再来,现在试试第二个修改代码的方法。

    ——呵呵,这一次是真正的解决了这个问题,自动保存功能可用,自动保存时不再是草稿,而是直接替换原发布的内容,不再产生新的 ID ,更新文章不再产生 Revision。推荐大家使用第二种方法。

  • MySQL升级的3种方法

    MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的MySQL变得更美好,我们有必要去给它升级,尽管你会说它现在已经跑得很好很稳定完全够用了。下面我们来看看几种常用的升级方法。

    介绍之前,我们先做一些声明,MySQL采用二进制包来安装,升级都是在同一台DB Server上操作。

    第一种,很简单,适用于任何存储引擎。

    1. 下载并安装好新版本的MySQL数据库,并将其端口改为3307(避免和旧版本的3306冲突),启动服务。

    2. 在新版本下创建同名数据库。

    # mysqldump  -p3307  -uroot  create mysqlsystems_com

    3. 在旧版本下备份该数据库。

    # mysqldump  -p3306  -uroot  mysqlsystems_com > mysqlsystems_com.bk

    Note: 你也可以加上–opt选项,这样可以使用优化方式将你的数据库导出,减少未知的问题。

    4. 将导出的数据库备份导入到新版本的MySQL数据库中。

    # mysql -p3307 -uroot mysqlsystems_com < mysqlsystems_com.bk

    5. 再将旧版本数据库中的data目录下的mysql数据库全部覆盖到新版本中。

    # cp -R /opt/mysql-5.1/data/mysql  /opt/mysql-5.4/data

    Note: 大家也都知道这个默认数据库的重要性。

    6. 在新版下执行mysql_upgrade命令,其实这个命令包含一下三个命令:

    # mysqlcheck –check-upgrade –all-databases –auto-repair
    # mysql_fix_privilege_tables
    # mysqlcheck –all-databases –check-upgrade –fix-db-names –fix-table-names

    Note: 在每一次的升级过程中,mysql_upgrade这个命令我们都应该去执行,它通过mysqlcheck命令帮我们去检查表是否兼容新版本的数据库同时作出修复,还有个很重要的作用就是使用mysql_fix_privilege_tables命令去升级权限表。

    7. 关闭旧版本,将新版的数据库的使用端口改为3306,重新启动新版本MySQL数据库。到此,一个简单环境下的数据库升级就结束了。

     

    第二种,同样适用任何存储引擎。

    1. 同样先安装好新版本的MySQL。

    2. 在旧版本中,备份数据库。

    # mkdir /opt/mysqlsystems_bk  ;  mysqldump -p3306 -uroot –tab=/opt/mysqlsystems_bk  mysqlsystems_com

    Note: –tab选项可以在备份目录mysqlsystems_bk下生成后缀为*.sql和*.txt的两类文件;其中,.sql保存了创建表的SQL语句而.txt保存着原始数据。

    3. 接下来在新版本的数据库下更新数据。

    # mysqladmin -p3307 -uroot create mysqlsystems_com

    # cat /opt/mysqlsystems_bk/*.sql | mysql -p3307 -uroot  mysqlsystems_com       ( Create Tables )

    # mysqlimport mysqlsystems_com /opt/mysqlsystems_bk/*.txt            ( Load Data )

    4. 之后的所有步骤与第一种方法的后三步5、6、7相同。

    第三种,适用于MyISAM存储引擎,全部是文件间的拷贝。

    1. 安装。

    2. 从旧版本mysqlsystems_com数据库下将所有.frm、.MYD 和.MYI文件拷贝到新版本的相同目录下。

    3.之后的步骤依然同于第一种的后三步。

    以上就是三种升级MySQL的方法,看似没有出现什么问题,其实,在实际的生产环境中,为会有诸多问题发生,这就需要我们在升级之前充分了解新版本中增加了哪些新功能,进一步分析升级以后这些新特性是否将会对我们原来应用产生影响。

  • 另类MYSQL数据批量修改

       今天在整理网站的时候,发现一个郁闷的问题,就是有大量重复内容需要更改,但是没有什么工具,SQL语句也不熟悉了,危急之时想到了一个不错的办法,就是把数据库导出来,然后用记事本替换,达到要求,目前还是不错。

  • APMServ网站服务器平台

    APMServ 是一款拥有图形界面的快速搭建Apache、PHP、MySQL、Nginx、Memcached、phpMyAdmin、OpenSSL、SQLite、
    ZendOptimizer,以及ASP、CGI、Perl网站服务器平台的绿色软件。无需安装,具有灵活的移动
    性,将其拷贝到其它目录、分区或别的电脑时,均只需点击APMServ.exe中的启动按钮,即可自
    动进行相关设置,将Apache和MySQL安装为系统服务并启动。APMServ集合了Apache稳定安全的
    优点,并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、
    虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设
    置,只需鼠标一点即可完成。

    官方地址:http://apmserv.s135.com/

  • 一行JS代码败掉百万大单

    Opera 公司在大规模采购服务器的过程中,发现了史上最昂贵的 Javascript 代码。由于这行代码,此服务器供应商成功丢掉了百万订单。
    缘起:

    前一段时间,Opera 浏览器公司需要越来越多的服务器。本身公司预见到 Opera Mini, Opera Link, Opera Turbo 会带来爆炸性增长,所以要添置 N 台服务器,减缓服务器压力。(事实上 Opera 确实迎来了爆炸式增长,可以参见每月公布的全球移动互联网报告。)

    由于这些服务都是吃服务器的,Opera Mini 服务器要为全球几千万手机用户省流量加速,Opera Turbo 则负责电脑全网加速,Opera Link 频繁同步保证用户数千实时更新。所以需要添置的服务器不是几台的数量级,管理层批准整个订单的预算达几百万克朗(当前汇价1挪威克朗基本等于1元人民币)。

    经过:

    信息系统部门的技术控们海皮起来了,这帮人的工作性质决定他们在服务器身上花的时间比在异性朋友身上都多。经过他们的上蹿下跳,公司采购到了收集样机测试的流程。所有供货商把机器发到挪威奥斯陆总部进行测试试用。

    技术控们像条女朋友一样挑服务器,直到一台服务器把他们全部击溃了。这台服务器来自所有人都知道的全球一级厂商(名字不敢提)。当Opera工作人员启动之后,用 Opera 浏览器访问管理界面,被直接转到错误界面。这还不是问题全部,当找到问题根源时,连同 CSS 发明人(现任 Opera CTO)带旗下所有人都崩溃了。

    错误的原因是,服务器管理界面被下面一个经销商加了一行代码,判断到 Opera 浏览器访问管理界面直接粗暴的转向错误页面。

    结果:

    由于这行代码,此公司成功的激怒了 Opera 公司所有相关人员,成功的丢掉了这笔百万大单。Opera 公司感到奇怪,写明代码找我们浏览器的麻烦,还想卖给我们公司服务器?

    元凶:

    就是一行 Javascript 代码,逻辑是简单粗暴的处理用户,发现用户使用 Opera 浏览器直接转向错误页面。 这算是史上最昂贵的 Javascript 代码了。
    if (is.opera) { window.location.href=”config/error.htm”; }

  • wordpress 编辑器使用教程

    WordPress是使用的TinyMCE作为可视化的编辑器

    TinyMCE 是一个基于 Web 和 Javascript,跨平台的所见即所得 HTML 编辑器控件。它由 Moxiecode Systems AB 开发并遵守开放源码的 LGPL 协议。它可以将 HTML 格式的TEXTAREA 区域及其他 HTML 元素转换成编辑器实例。

    Rich Editing 基础
    富文本编辑(Rich editing),又叫 WYSIWYG(What You See Is What You Get),意味着您在打字的同时可以看到最终效果。富文本编辑器在您专心写作的时候在后台生成HTML代码。字体,链接,图片以及其他都将以最终效果直接显示在编辑器中。

    WordPress 包含一个富文本编辑器,这个编辑器能在主流浏览器上良好工作。编辑 HTML 和输入文本是有所区别的。每个 Web 页面都包含了两个组成元素:结构,即编辑器产生的 HTML 代码,还有就是显示,当前使用的 WorfPress 主题的 style.css 定义了外观样式。更进一步说,WordPress 采用了 XHTML 1.0,也就意味页面的显示效果不能被结构元素控制。所以插入多个断行并不能在网页上产生空白,多余的的断行会被系统自动过滤掉。

    当您使用编辑器时,大部分键盘的快捷键和其它编辑器是一样的。例如:Shift+Enter插入断行,Ctrl+C = 拷贝,Ctrl+X = 剪切,Ctrl+Z = 撤销,Ctrl+Y = 重做,Ctrl+A = 全选,等等。 (Mac机器上使用Command键代替Ctrl)。所有快捷键参见快捷键表。

    如果您不喜欢富文本编辑器,你可以在“我的配置”子菜单中关闭它,就在管理菜单的“用户”中。

    高级可视化编辑
    图像和附件
    图像插入按钮允许您插入一个在服务器上存在的图像。插入图像只要将图像的 URL 填入弹出的对话框中的 URL 一栏即可。

    如果您需要从您的电脑上传图像或音频文件,您可以使用文本编辑下的上传工具。当您上传图像文件时,上传工具将尝试生成图像的缩略图。把您上传的图像插入到您的文章中,首先点击缩略图,然后在出现的菜单中根据您的意愿选择 “使用…”、“链接到…”的相关选项,一切就绪后,点击 “发送到编辑器” 完成操作。

    Rich Editor 中的 HTML 代码
    您在可视化编辑器中输入的 HTML 代码将会直接显示在您的文章中。如果您想输入 HTML 代码需要在工具栏上点击 “HTML” 按钮便可编辑 HTML 代码,完成后单击 “更新”。如果您输入的代码有效并被编辑器识别,您立即就可以看到效果。

    在富文本编辑器中粘帖
    当从网页复制内容时根据您的浏览器和具体网页的不同可能产生复杂的情况。编辑器会尝试修正粘帖的错误HTML代码,最好使用HTML模式或者第二行工具栏的粘帖按钮。另一种选择是可以一段一段的粘帖,在大多数浏览器中,三击即可。

    从其它程序粘贴内容,例如 Word 或 Excel,最好用第二行的粘帖按钮完成,或者在HTML模式下完成。

    最快速写作
    比起伸出手去移动您的鼠标,然后单击工具条按钮,使用快捷键显然更方便。Windows 和 Linux平台请使用 Ctrl + letter,Macintosh 用户请使用 Command + letter。

    字母 动作 字母 动作
    c 拷贝 v 粘帖
    a 选择全部 x 剪切
    z 撤销 y 重做
    b 醒目的 i 斜体
    u 下划线 1 头部 1
    2 头部 2 3 头部 3
    4 头部 4 5 头部 5
    6 头部 6 9 地址:

    以下快捷方式使用不同的快捷键: Alt + Shift + letter.

    字母 动作 字母 动作
    n 拼写检查 l 左对齐
    j 文本左右对齐 c 居中对齐
    d 删除线 r 右对齐
    u • 列表 a 插入链接
    o 1. 列表 s 移除链接
    q 引用 m 插入图像
    g 全屏 t 插入 “More” 标签
    p 插入分页标签 h 帮助
    e 跳转到HTML模式

  • Sql Server、Access数据排名的实现方法

    在很多时候,我们需要统计数据的排名情况,最常见的是成绩、投票数等等的。但是,在SQL SERVER 2005 之前,SQL SERVER 2000 并没有提供这个直接的函数供我们使用,同样 ACCESS 也是如此。

    对于 ACCESS :
    select name, score, (select iif(isnull(sum(1)), 1, sum(1) + 1) from score_rank where score > a.score) as rank from score_rank a order by score desc
    对于 SQL SERVER 2000 及更低版本 :
    select name, score, (select ISNULL(sum(1),0) + 1 from score_rank where score > a.score) as rank from score_rank a order by score desc
    对于 SQL SERVER 2005 及更高版本:
    SELECT name, score, RANK() OVER (ORDER BY score DESC) AS [rank], DENSE_RANK() OVER (ORDER BY score DESC) AS [rank1], NTILE(4) OVER(ORDER BY score DESC) AS [rank2] FROM score_rank ORDER BY score DESC;

  • 一个php图片上传类,功能基本齐全

    <?php
    /****************************
    上传类 By:donnier
    ****************************/
    class upload_class{
    private $ptname;    //上传表单名称;
    private $udname;    //是否以月份建立子目录(0为否,其他为真);
    private $ufname;    //是否以时间建立文件名(0为否,其他为真);
    private $ultype;    //上传文件类型;
    private $ulsize;    //上传文件大小;
    private $ulname;    //输出文件名称;
    private $ulpath;    //输出文件路径;
    private $wm;     //水印附加(0为不加,其他为加);
    private $wmtype;    //水印类型(0为文字,其他为图片);
    private $wmpic;     //水印图片;
    private $wmpicquality;   //图片质量;
    private $wmpictrans;   //图片透明;
    private $wmstr;     //水印字符;
    private $wmstrsize;    //字符大小;
    private $wmstrfont;    //字符字体;
    private $wmstrcolor;   //字符颜色;
    private $wmpos;     //水印位置(1为顶端居左,2为顶端居中,3为顶端居右……);
    function __construct($ptname=’upfile’,$udname=1,$ufname=1,$ultype=array(‘image/jpg’,’image/jpeg’,’image/png’,’image/pjpeg’,’image/gif’,’image/bmp’,’image/x-png’),$wm=1,$wmtype=1,$wmpic=’images/wm.gif’,$ulsize=2097152,$ulpath=’images/temp/’,$wmpictrans=20,$wmpicquality=80,$wmstr=’DONLINE’,$wmstrsize=5,$wmstrfont=’./font/cour.ttf’,$wmstrcolor=’#ff0000′,$wmpos=9){
      $this->ptname=$_FILES[$ptname];
      $this->udname=$udname;
      $this->ufname=$ufname;
      $this->ultype=$ultype;
      $this->ulsize=$ulsize;
      $this->ulpath=$ulpath;
      $this->wm=$wm;
      $this->wmtype=$wmtype;
      $this->wmpic=$wmpic;
      $this->wmpicquality=$wmpicquality;
      $this->wmpictrans=$wmpictrans;
      $this->wmstr=$wmstr;
      $this->wmstrsize=$wmstrsize;
      $this->wmstrfont=$wmstrfont;
      $this->wmstrcolor=$wmstrcolor;
      $this->wmpos=$wmpos;
    }
    function uploadfun(){
      if($_SERVER[‘REQUEST_METHOD’]==’POST’){
       if(!is_uploaded_file($this->ptname[‘tmp_name’]))$this->errorfun(‘上传失败!’);
       if(!in_array($this->ptname[‘type’],$this->ultype))$this->errorfun(‘不支持的文件类型!’);
       if($this->ulsize<$this->ptname[‘size’])$this->errorfun(‘文件太大!’);
       if($this->udname){date_default_timezone_set(‘UTC’);$this->ulpath=$this->ulpath.’month_’.date(‘Ym’).’/’;}
       else{$this->ulpath=$this->ulpath;}
       $this->createfun($this->ulpath);
       if($this->ufname){$t=pathinfo($this->ptname[‘name’]);$this->ulname=$this->ulpath.time().’.’.$t[‘extension’];}
       else{$this->ulname=$this->ulpath.$this->ptname[‘name’];}
       if(file_exists($this->ulname))$this->errorfun(‘该文件已存在!’);
       if(!move_uploaded_file($this->ptname[‘tmp_name’],$this->ulname))$this->errorfun(‘移动文件错误!’);
       $this->wmfun();
       $this->errorfun(‘上传成功!’);
      }
    }
    function createfun($d){
      if(!file_exists($d)){$this->createfun(dirname($d));mkdir($d);}
    }
    function wmfun(){
      if($this->wm){
       if(file_exists($this->ulname)){
        $groundimg=getimagesize($this->ulname);
        $ow=$groundimg[0];
        $oh=$groundimg[1];
        switch($groundimg[2]){
         case 1:$g=imagecreatefromgif($this->ulname);break;
         case 2:$g=imagecreatefromjpeg($this->ulname);break;
         case 3:$g=imagecreatefrompng($this->ulname);break;
         case 4:$g=imagecreatefromwbmp($this->ulname);break;
         default:$this->errorfun(‘不支持的背景图片类型!’);
        }
       }
       else{$this->errorfun(‘背景图片不存在!’);}
       if(file_exists($this->wmpic)){
        $wmimg=getimagesize($this->wmpic);
        $ww=$wmimg[0];
        $wh=$wmimg[1];
        switch($wmimg[2]){
         case 1:$w=imagecreatefromgif($this->wmpic);break;
         case 2:$w=imagecreatefromjpeg($this->wmpic);break;
         case 3:$w=imagecreatefrompng($this->wmpic);break;
         case 4:$w=imagecreatefromwbmp($this->wmpic);break;
         default:$this->errorfun(‘不支持的水印图片类型!’);
        }
       }
       else{$this->errorfun(‘水印图片不存在!’);}
       switch($this->wmtype){
        case 0:$tp=imagettfbbox(ceil($this->wmstrsize*2.5),0,$this->wmstrfont,$this->wmstr);$ww=$tp[2]-$tp[6];$wh=$tp[3]-$tp[7];unset($tp);break;
        case 1:$ww=$ww;$wh=$wh;break;
        default:$ww=$ww;$wh=$wh;break;
       }
       if($ow<$ww || $oh<$wh)$this->errorfun(‘背景图片太小!无法生成水印!’);
       switch($this->wmpos){ 
        case 0:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));break;//随机
              case 1:$x=0;$y=0;break;//1为顶端居左    
              case 2:$x=($ow-$ww)/2;$y=0;break;//2为顶端居中    
              case 3:$x=$ow-$ww;$y=0;break;//3为顶端居右    
              case 4:$x=0;$y=($oh-$wh)/2;break;//4为中部居左    
              case 5:$x=($ow-$ww)/2;$y=($oh-$wh)/2;break;//5为中部居中   
              case 6:$x=$ow-$ww;$y=($oh-$wh)/2;break;//6为中部居右    
              case 7:$x=0;$y=$oh-$wh;break;//7为底端居左 
              case 8:$x=($ow-$ww)/2;$y=$oh-$wh;break;//8为底端居中    
              case 9:$x=$ow-$ww;$y=$oh-$wh;break;//9为底端居右    
              default:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));break;//随机        
          }
       imagealphablending($g, true);
       switch($this->wmtype){
        case 0:
        if($this->wmstrcolor){$R=hexdec(substr($this->wmstrcolor,1,2));$G=hexdec(substr($this->wmstrcolor,3,2));$B=hexdec(substr($this->wmstrcolor,5));}
        else{$this->errorfun(‘水印文字颜色不存在!’);}
        imagestring($g,$this->wmstrfont,$x,$y,$this->wmstr,imagecolorallocate($g,$R,$G,$B));break;
        case 1;imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);break;
        default:imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);break;
       }
       @unlink($this->ulname);
       switch($groundimg[2]){
              case 1:imagegif($g,$this->ulname);break;
              case 2:imagejpeg($g,$this->ulname,$this->wmpicquality);break;
              case 3:imagepng($g,$this->ulname);break;
        case 4:imagewbmp($g,$this->ulname);break;
              default:$this->errorfun(‘生成图片失败!’);
       }
       if(isset($wmimg))unset($wmimg);
          if(isset($w))imagedestroy($w);
          unset($groundimg);
          imagedestroy($g);
      }
    }
    function errorfun($e=’未知错误!’){
      $msg='<script language=”javascript” type=”text/javascript”>’;
      $msg.=’alert(“‘.$e.’”);’;
      $msg.=’history.back();’;
      $msg.='</script>’;
      echo $msg;
      exit;
    }
    }
    ?>

  • HTTP协议基础

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
          通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

    通用头域

    通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

    Cache-Control头域

    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

    Public指示响应可被任何缓存区缓存。

    Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

    no-cache指示请求或响应消息不能缓存

    no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

    max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

    min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

    max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

    Date头域

    Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

    Pragma头域

    Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。

    请求消息

    请求消息的第一行为下面的格式:

    MethodSPRequest-URISPHTTP-VersionCRLFMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。

    SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

    典型的请求消息:

    GEThttp://download.microtool.de:80/somedata.exe

    Host:download.microtool.de

    Accept:*/*

    Pragma:no-cache

    Cache-Control:no-cache

    Referer:http://download.microtool.de/

    User-Agent:Mozilla/4.04[en](Win95;I;Nav)

    Range:bytes=554554-

    上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

    Host头域

    Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    Referer头域

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    Range头域

    Range头域可以请求实体的一个或者多个子范围。例如,

    表示头500个字节:bytes=0-499

    表示第二个500字节:bytes=500-999

    表示最后500个字节:bytes=-500

    表示500字节以后的范围:bytes=500-

    第一个和最后一个字节:bytes=0-0,-1

    同时指定几个范围:bytes=500-600,601-999

    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。

    User-Agent头域

    User-Agent头域的内容包含发出请求的用户信息。

    响应消息

    响应消息的第一行为下面的格式:

    HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF

    HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

    1xx:信息响应类,表示接收到请求并且继续处理

    2xx:处理成功响应类,表示动作被成功接收、理解和接受

    3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

    4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

    5xx:服务端错误,服务器不能正确执行一个正确的请求

    响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

    典型的响应消息:

    HTTP/1.0200OK

    Date:Mon,31Dec200104:25:57GMT

    Server:Apache/1.3.14(Unix)

    Content-type:text/html

    Last-modified:Tue,17Apr200106:46:28GMT

    Etag:”a030f020ac7c01:1e9f”

    Content-length:39725426

    Content-range:bytes554554-40279979/40279980

    上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

    Location响应头

    Location响应头用于重定向接收者到一个新URI地址。

    Server响应头

    Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

    实体

    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。

    Content-Type实体头

    Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头

    Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

    例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

    Last-modified实体头

    Last-modified实体头指定服务器上保存内容的最后修订时间。

  • MySQL查询优化讲座之管理员的优化措施

     前面的部分中讲解的优化措施都是没有特权的MySQL用户能够执行的。可以控制MySQL服务器或计算机的系统管理员能够执行额外的优化措施。例如,有些服务器参数附属于查询处理过程,并且是可以调整的,而且某些硬件配置因素对查询处理速度有直接的影响。在很多情况下,这些优化措施提高了整个服务器的性能,因此可以让所有的MySQL用户都受益。

      一般来说,当你执行管理员优化的时候,应该紧记以下规则:

      • 访问内存中的数据快于访问磁盘上的数据。

      • 尽量把数据保存在内存中可以减少磁盘操作。

      • 保留索引中的信息比保留数据记录的内容更重要。

      我们在后面将讨论如何应用这些规则。

      增加服务器缓存的大小。服务器拥有很多参数(系统变量),你可以改变这些参数来影响服务器的操作。其中的几个参数直接地影响查询处理的速度。你可以改变的最重要的参数是数据表缓存的大小和存储引擎用于缓冲索引操作信息的缓存大小。如果你拥有可用的内存,就把它分配给服务器的缓存,以允许信息存储在内存中并减少磁盘操作。这会有很好的效果,因为访问内存中的信息比从磁盘读取信息的速度快得多。

      • 当服务器打开表文件的时候,它试图保持这些文件的打开状态,以减少打开文件操作的数量。为了实现这样的功能,它在表缓存中维护打开文件的信息。table_cache系统变量控制着这个缓存的大小。如果服务器访问了大量的表,表缓存就会被填满,并且服务器会关闭那些有一段时间没有使用的表,为打开新表留出空间。你可以通过检查Opened_tables状态指示器来访问表缓存的效果:
    CODE:

    SHOW STATUS LIKE ’Opened_tables’;
      Opened_tables显示了某个数据表必须打开的次数(因为它还没有打开)。这个值也显示为mysqladmin状态命令的输出信息中的Opens值。如果这个数字是稳定的或缓慢增长,那么它的设置可能是正确的。如果这个数字增长得很快,就意味着这个缓存太小了,必须经常关闭数据表来为打开其它的数据表留出空间。如果你拥有文件描述信息,增加表缓存大小将减少数据表打开操作的数量。

      • MyISAM存储引擎使用键缓冲来保持与索引相关的操作的索引信息块。它的大小是由key_buffer_size系统变量控制的。这个值越大,MySQL就一次性在内存中保持更多的索引信息块,可以增加在内存中(而不用从磁盘上读取新的信息块)找到键值的可能性。键缓存的默认大小是8MB。如果你拥有很多的内存,这是一个很保守的值,你可以直接增加它的大小,并且会看到基于索引的检索、索引的建立和修改操作的性能有很大改善。

      在MySQL 4.1以上版本中,你可以为MyISAM数据表建立附加的键缓存,并指定某些表使用它们。这样可以帮助提高这些数据表上的查询处理速度。

      • InnoDB和BDB引擎拥有自己的用于缓冲数据和索引值的缓存。它们的大小是由innodb_buffer_pool_size和bdb_cache_size变量控制的。InnoDB引擎还维护了一个日志缓冲。innodb_log_buffer_size变量可以控制它的大小。

      • 另一个专用的缓存是查询缓存,我们在”使用查询缓存”部分中解释。

      当你改变这些参数值的时候,应该遵循下面一些原则:

      • 每次只改变一个参数。如果你一次改变多个相互独立的变量,那么就很难评估每种改变的效果了。

      • 逐渐地增加系统变量值。根据理论,数量越多,性能越好,但是如果你使某个变量变得太大了,有可能造成系统资源匮乏,导致逆向效果,降低速度。

      • 不要在运行业务MySQL数据库的服务器上做调整参数的实验,最好建立一个独立的测试服务器。

      • 为了大致了解哪种参数变量可能适合自己的系统,你可以查看MySQL发布文档中包含的my-small.cnf、my-medium.cnf、my-large.cnf和my-huge.cnf选项文件(在Unix系统上,你可以在源发布文件的支持文件目录和二进制发布文件的共享目录总找到这些文件。在Windows上,它们位于基本的安装目录中,其扩展名可能是.ini)。这些文件可能让你知道最好改变服务器上的那些参数以适应不同的使用层次,并且为这些参数提供了一些典型值。

      用于提高服务器的操作性能的其它一些策略还包括:

      禁止不需要的存储引擎。服务器不会为禁止的引擎分配任何内存,因此我们可以利用这一点。如果从源文件建立MySQL,那么在配置的时候,大多数存储引擎就可以被排除在服务器之外。对于那些包含在服务器中的引擎来说,使用适当的启动选项可以在运行时禁止其中的大多数。
    保持授权表许可的简单性。尽管服务器在内存中缓存了授权表内容,但是如果你在tables_priv或columns_priv表中有一些数据行的话,服务器就必须为每个查询语句检查表层次和列层次的权限。如果这些表是空的,那么服务器就能优化自己的权限检查过程,略过这些层次。

      如果你从源文件建立MySQL,那么就把它配置为使用静态类库,而不要使用共享类库。使用共享类库的动态二进制文件节约磁盘空间,然而静态二进制文件速度更快。但是,如果你使用了用户自定义函数(UDF)机制,那么有些系统要求使用动态链接。在这类系统上,静态二进制文件不能工作。

      使用MyISAM键缓存

      当MySQL执行某个利用了MyISAM数据表索引的语句的时候,它会使用键缓存来保持索引值。这种缓存减少了磁盘I/O:如果在缓存中找到了某个数据表需要的键值,就不需要再次从磁盘中读取。不幸的是,这种键缓存是有限的,并且在默认情况下,它是所有的MyISAM数据表共享使用的。如果在键缓存中没有找到键值并且键缓存是满的,争用将会导致:必须丢弃缓存中的某些值,为新值留出空间。如果下次需要那些已经被丢弃的值,就必须再次从磁盘上读取。

      如果你很倚重MyISAM数据表,那么把它的键保存在内存中效果会很好,但是缓存中的争用却会导致相反的效果。从同一张表或不同的表读取数据都可能引起争用。你可以通过把键缓存设置成足以保存某个特定数据表的全部索引,从而避免同一张数据表的争用,但是其它数据表的键仍然需要争用缓存空间。

      MySQL 4.1以上版本为这个问题提供了一种解决方案:它支持我们建立多个键缓存,并允许我们把某张数据表的索引指定并且预先装入某个缓存。如果你的数据表使用得很频繁,并且你有足够的内存,能够把它的索引载入缓存中,那么这种操作就是有用的。这种能力允许你同时避免同一张表和不同的表的争用:建立一个足够大的缓存,让它保存数据表的全部索引,并且指定该缓存专门用于那张数据表。在键被载入缓存之后,不在需要磁盘I/O操作。同时,键值永远不会被丢弃,对数据表的键的查看操作可以在内存中完成。

      下面的例子显示了如何为sampdb数据库的member数据表建立一个键缓存,该缓存的名称是member_cache,大小为1MB。执行这些指令的时候,你必须有超级(SUPER)权限。

      1.建立一个足够容纳数据表索引的独立的缓存:
    CODE:

    mysql> SET GLOBAL member_cache.key_buffer_size = 1024*1024;
      2.给数据表指定键缓存:
    CODE:

    mysql> CACHE INDEX member IN member_cache;
    +—————+——————–+———-+———-+
    | Table | Op | Msg_type | Msg_text |
    +—————+——————–+———-+———-+
    | sampdb.member | assign_to_keycache | status | OK |
    +—————+——————–+———-+———-+
      3.把数据表索引预先读入它的键缓存中:
    CODE:

    mysql> LOAD INDEX INTO CACHE member;
    +—————+————–+———-+———-+
    | Table | Op | Msg_type | Msg_text |
    +—————+————–+———-+———-+
    | sampdb.member | preload_keys | status | OK |+—————+————–+———-+———-+
      如果你希望把其它的数据表载入同一个缓存中,或者为其它的数据表建立键缓存,上面的操作就足够了。

  • JS返回上个页面的代码

    <a href=javas

    cript:history.back()>返回</a>

  • 11种刷新按钮的方法

    以下是代码片段:
    <input type=button value=刷新 onclick=”history.go(0)”>
    <input type=button value=刷新 onclick=”location.reload()”>
    <input type=button value=刷新 onclick=”location=location”>
    <input type=button value=刷新 onclick=”location.assign(location)”>
    <input type=button value=刷新 onclick=”document.execCommand(‘Refresh’)”>
    <input type=button value=刷新 onclick=”window.navigate(location)”>
    <input type=button value=刷新 onclick=”location.replace(location)”>
    <input type=button value=刷新 onclick=”window.open(‘自身的文件’,’_self’)”>
    <input type=button value=刷新 onClick=document.all.WebBrowser.ExecWB(22,1)>
    <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
    <form action=”自身的文件”>
    <input type=submit value=刷新>
    </form>
    <a id=a1 href=”自身的文件”></a>
    <input type=button value=刷新 onclick=”a1.click()”>

  • 什么是UED

      UED: user experience design,用户体验设计。
      user experience用户体验,可以查看这里
      简介:UED是进行产品策划的主力之一,他们用自己的知识、经验、设计能力拿出设计方案。ED不只是互联网专家,还是行业专家。能够用自己的互联网知识来设计出行业专家想实现的操作,而付诸以商业营销。
      用户体验设计师的职责主要有哪些?
      用户体验设计师——user experience design,国外叫UED,国内也简称UE设计。
      我们来分析一则国外的UE设计师招聘要求,看看你还需要欠缺什么吧:
      我们正在寻找一名高级用户体验设计师加入我们的产品设计团队。
      We are looking for someone to join our growing Product Design group as a sr.
      user experience designer.
      指责包括产品创新,界面视觉引导,原型设计,与开发一起推动设计实现。
      Responsibilities include producing innovative,visually appealing human interface designs; creating design prototypes;working with developers to make designs a reality.
      我们需要这个人可以独立工作,和团队成员合作,交流各种想法,画出原型,参与产品整个的周期。
      We need someone who can work independently, engage team members, communicate ideas, create prototypes, and finally work with team members throughout the release cycle of the product. This position reports to the Principal Designer.
      日常的工作包括:Day-to-Day Activities:
      * 基于人机交互、图形化设计、界面设计和其他相关理论,进行设计。
      Generate designs based on common sets of HCI, graphic design, interface design and other relevant theories
      * 画出不同层次的原型:纸上的,框架的,可交互的网页,Flash的。
      Create prototypes at different levels of fidelity: paper, wireframe,interactive HTML, and Flash
      * 到不同的部门演示概念和想法,组织反馈意见。
      Present ideas and concepts to x-functional teams and incorporate feedback accordingly
      * 生成视觉元素比如icon,边框,用户控件,窗口规范,图形化的布局
      Create visual elements such as icons, borders, custom widgets, window treatments, and graphical layouts
      * 同产品设计团队合作去发展一些重要附加值的概念,还有修订产品。
      Collaborate with Product Design team to develop concepts of key additions and edits for the product
      * 同商业方面的专家、市场部沟通,确认设计并得到认可。
      Communicate designs to business specialists and marketing team members for validation and buy-in.
      * 同开发人员沟通,提供明确的定义和执行的方向。
      Communicate designs to development and provide definition and direction during implementation
      * 同质量控制部门沟通,提供在测试阶段需要的清晰理解。
      Communicate designs to quality control and provide clarifications during the testing phase
      * 同首席设计师和产品设计团队一起工作,符合内部设计流程和标准。
      Work with Principal Designer and Product Design team to evolve internal design process and standards.
      * 需要1/10的时间出差。
      This job requires 10% travel
      资格条件:Qualifications & Requirements:
      * 在应用程序的交互设计方面(界面设计,产品设计)有4-5年的工作经验。在web应用和桌面应用方面有扎实的经验。
      4-5 years experience in application interaction design (UI Design, Product Design); solid experience with both web applications (not web sites) and desktop applications
      * 设计、人机交互、可用性专业或者可以展示对设计的理解、交互设计理论和实践的能力。
      Education in design, HCI, usability or ability to display formal understanding of design and HCI theory and practice
      * 理解室内产品设计的生命周期。
      Understand in-house product design lifecycle
      * 优秀的交流技巧:书写和口头。
      Good communication skills: written and verbal
      * 了解基于浏览器和客户端的技术(HTML, Java, Flash,.NET)。
      Knowledge of browser-based and desktop technologies (HTML, Java, Flash,.NET)
      * 原型技术,包括DHTML, Dream Weaver, Flash或类似的。
      Prototyping skills using DHTML, Dream Weaver, Flash, or similar
      * 有开发和运行可用性测试的经验。
      Experience with developing and running usability testing
      * 有行业研究经验(Cooper的目标导向设计方法优先)
      Experience with field research (goal-directed method by Cooper is preferred).
      * 可以使用设计过程描述清楚问题如何产生以及如何解决,无论是独立工作还是和团队一起。
      Should demonstrate ability to use design processes for problem definition and solution creation while working individually and with a group
      * 可以创造出图形元素:icon,控件,窗口,边框,数据布局。
      Ability to create graphical elements: icons, widgets, windowing and boarders, data layout