zsbfree

技术的拉

 

置顶随笔

[置顶]给文章加入关键字链接

摘要: 最近在做一个网站,遇到需要给网站内所有的文章加关键字链接的问题,我们在浏览一些网站的文章的时候,会发现文章里面的某些关键字是加了链接的,并且高亮显示。开始技术部门打算在后台添加或者修改文章的时候,把文章里面的关键字替换为<a>标签。但是这样就出现一些问题 如果新添加一个关键字,是不是所有的文章又要重新过滤一边。把新关键字替换掉。 如果修改了关键字的名字或者是修改了关键字的链接地址,那...阅读全文

posted @ 2010-10-26 10:32 我想我是青蛙 阅读(453) 评论(5) 编辑

[置顶]合并多个声音文件

摘要: 上次,在项目中遇到了要求合并多个声音文件的需求,在网上搜索了一下,发现有一老外写的东西。现在发在首页。dudu要是觉得不好可以撤下阿usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;usingSystem.Runtime.InteropServices;namespaceMergeWaves{pu...阅读全文

posted @ 2007-08-03 14:46 我想我是青蛙 阅读(726) 评论(1) 编辑

2011年12月28日

白话MongoDB(三)(转载)

源地址http://www.ningoo.net/html/2011/mongodb_in_a_nutshell_2.html 作者:NinGoo 

通过源代码编译安装好MongoDB之后,接下来需要配置运行。在MongoDB的安装目录,有几个子目录,bin下面是可执行文件,包括

  • mongod:数据库服务端,类似mysqld,每个实例启动一个进程,可以fork为Daemon运行
  • mongo:客户端命令行工具,类似sqlplus/mysql,其实也是一个js解释器,支持js语法
  • mongodump/mongorestore:将数据导入为bson格式的文件/将bson文件恢复为数据库,类似xtracbackup
  • mongoexport/mongoimport:将collection导出为json/csv格式数据/将数据导入数据库,类似mysqldump/mysqlimport
  • bsondump:将bson格式的文件转储为json格式的数据
  • mongos:分片路由,如果使用了sharding功能,则应用程序连接的是mongos而不是mongod
  • mongofiles:GridFS管理工具
  • mongostat:实时监控工具

最简单的,通过执行mongod即可以启动MongoDB数据库服务,mongod支持很多的参数,但都有默认值,其中最重要的是需要指定数据文件路径,或者确保默认的/data/db存在并且有访问权限,否则启动后会自动关闭服务。Ok,那也就是说,只要确保dbpath就可以启动MongoDB服务了:

$ ./mongod --dbpath /tmp
Fri Apr  1 00:34:46 [initandlisten] MongoDB starting : pid=31978 port=27017 dbpath=/tmp 32-bit 

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
**       with --dur, the limit is lower

Fri Apr  1 00:34:46 [initandlisten] db version v1.8.0, pdfile version 4.5
Fri Apr  1 00:34:46 [initandlisten] git version: 9c28b1d608df0ed6ebe791f63682370082da41c0
Fri Apr  1 00:34:46 [initandlisten] build sys info: Linux ning 2.6.36-ningoo #1 SMP
Wed Nov 17 21:45:13 CST 2010 i686 BOOST_LIB_VERSION=1_42
Fri Apr  1 00:34:46 [initandlisten] waiting for connections on port 27017
Fri Apr  1 00:34:46 [websvr] web admin interface listening on port 28017

mongod的主要参数有:

dbpath: 数据文件存放路径,每个数据库会在其中创建一个子目录。用于防止同一个实例多次运行的mongod.lock也保存在此目录中。
logpath:错误日志文件
logappend: 错误日志采用追加模式(默认是覆写模式)
bind_ip: 对外服务的绑定ip,一般设置为空,及绑定在本机所有可用ip上,如有需要可以单独指定
port: 对外服务端口。Web管理端口在这个port的基础上+1000
fork: 以后台Daemon形式运行服务
journal:开启日志功能,通过保存操作日志来降低单机故障的恢复时间,在1.8版本后正式加入,取代在1.7.5版本中的dur参数。
syncdelay: 执行sync的间隔,单位为秒。
directoryperdb: 每个db存放在单独的目录中,建议设置该参数。
maxConns: 最大连接数
repairpath: 执行repair时的临时目录。在如果没有开启journal,异常宕机后重启,必须执行repair操作。

在源代码中,mongod的参数分为一般参数,windows参数,replication参数,replica set参数,以及隐含参数。上面列举的都是一般参数。如果要配置replication,replica set等,还需要设置对应的参数,这里先不展开,后续会有专门的文章来讲述。执行mongo –help可以看到对大多数参数的解释。但有一些隐含参数,则只能通过看代码来获得(见db.cpp po::options_description hidden_options(“Hidden options”);),隐含参数一般要么是还在开发中,要么是准备废弃,因此在生产环境中不建议使用。

可能你已经注意到,mongod的参数中,没有设置内存大小相关的参数,是的,mongodb使用os mmap机制来缓存数据文件数据,自身目前不提供缓存机制。这样好处是代码简单,mmap在数据量不超过内存时效率很高。但是数据量超过系统可用内存后,则写入的性能可能不太稳定,容易出现大起大落,不过在最新的1.8版本中,这个情况相对以前的版本已经有了一定程度的改善,具体请参考realzyy的测试

这么多参数,全面写在命令行中则容易杂乱而不好管理。因此,mongod也和mysqld一样支持将参数写入到一个配置文本文件中,然后通过config参数来引用此配置文件:

./mongod --config /etc/mongo.cnf

至此,已经成功的运行了一个单机的mongodb实例。

posted @ 2011-12-28 18:02 我想我是青蛙 阅读(27) 评论(0) 编辑

白话MongoDB(二)(转载)

源地址http://www.ningoo.net/html/2011/mongodb_in_a_nutshell_2.html 作者:NinGoo 

前面扯了一堆,要了解一个东西,最好的办法,还是让他跑起来,然后结合文档和测试,来验证其实现,并且了解其不足和优点。

MongoDB提供了部分系统的编译版本,但从研究学习以及线上不同依赖包的稳定性的目标,个人还是比较推荐从源代码编译安装的方式。MongoDB的源代码依赖了一些基础组件,如js引擎Spider Monkey,正则表达式引擎PCRE,安装构建工具Scons,以及C++的boost库等,因此编译还是有些麻烦的,realzyy的这篇文章已经比较详细的说明了编译的步骤,主要基于Redhat系统。在ubuntu上安装,还有几个注意点:

1. PCRE最好在编译的时候显式指明对UTF-8的支持

$ configure --enable-unicode-properties
$ sudo make -j 2 && make install

 PCRE如果不支持UTF-8,则MongoDB无法启动

Thu Mar 31 17:27:16 Assertion: 10342:pcre not compiled with utf8 support
0x8169528 0x81e704e 0x8450212 0xb73b6ce7 0x80f5b11
 ./mongod(_ZN5mongo11msgassertedEiPKc+0x208) [0x8169528]
 ./mongod(_ZN5mongo6RXTest3runEv+0x3fe) [0x81e704e]
 ./mongod(main+0x3832) [0x8450212]
 /lib/libc.so.6(__libc_start_main+0xe7) [0xb73b6ce7]
 ./mongod() [0x80f5b11]

2. Ubuntu自身带了一个Spider Monkey,但版本有些老,有些MongoDB需要的特性不支持,需要先卸载

$dpkg -l | grep xulrunner
$sudo apt-get remove xulrunner-1.9.2-dev xulrunner-1.9.2

$export CFLAGS=”-DJS_C_STRINGS_ARE_UTF8″
$sudo make -f Makefile.ref
$sudo JS_DIST=/usr make -f Makefile.ref export

3. 需要安装boost等库的支持

$sudo apt-get -y install tcsh git-core scons g++
$sudo apt-get -y install libpcre++-dev libboost-dev libreadline-dev xulrunner-dev
$sudo apt-get -y install libboost-program-options-dev \
libboost-thread-dev libboost-filesystem-dev libboost-date-time-dev

4. 源代码建议从github上下载,根据需要编译相应的版本

$git clone git://github.com/mongodb/mongo.git
$cd mongo
$git tag -l
$git checkout r1.8.0

5.最后,编译安装MongoDB的时候,建议连带头文件和库文件一起

$scons -j 2 all
$scons --prefix=/opt/mongo --full install

另外,MongoDB也可以使用Google V8来作为js引擎,从性能方面来说,V8可能是更好的选择,从jira来看,MongoDB在未来或许会改用v8作为默认引擎。

首先编译V8,然后编译MongoDB的时候使用userv8参数:

$svn checkout http://v8.googlecode.com/svn/trunk/ v8
$cd v8
$scons
$sudo cp libv8.a /usr/lib
$sudo cp libv8preparser.a /usr/lib
$sudo cp -r include/* /usr/include/

$cd mongodb-src
$scons all --usev8
$scons --prefix=/opt/mongo --full install

MongoDB在32位环境下有诸多限制,只能用于学习研究的目的,线上环境一定要使用64位系统。

Thu Mar 31 17:24:58 --oplogSize of 1024MB is too big for 32 bit version. Use 64 bit build instead.

参考:

http://www.mongodb.org/display/DOCS/Building+Spider+Monkey
http://www.mongodb.org/display/DOCS/Building+for+Linux
http://www.howsthe.com/blog/2010/feb/22/mongodb-and-v8/
http://jira.mongodb.org/browse/SERVER-446

posted @ 2011-12-28 17:59 我想我是青蛙 阅读(52) 评论(0) 编辑

白话MongoDB(一) (转载)

源地址http://www.ningoo.net/html/2011/mongodb_in_a_nutshell_1.html 作者:NinGoo 

按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发。注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储。和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式。这一系列文章,是为入门者写的,已经对NoSQL和MongoDB有一定研究和经验的,可以略过,或者看看如有疏漏,请留言指出。

面向文档,那么什么是文档呢?很明显这不是我们常见的word文档。这里说的文档,是一种可以嵌套的数据集合。从关系数据库的范式的概念来说,嵌套是明显的反范式设计。范式设计的好处是消除了依赖,但是增加了关联,查询需要通过关联两张或者多张表来获得所需要的全部数据,但是更改操作是原子的,只需要修改一个地方即可。反范式则是增加了数据冗余来提升查询性能,但更新操作可能需要更新冗余的多处数据,需要注意一致性的问题。

一个典型的例子,如blog,关系数据库中一般可以把文章设计为一张表,评论设计为一张表,那么在页面需要展示一篇文章和其对应的评论的时候,就需要关联查询文章表和评论表。但是面向文档的设计,可以将评论作为文章的一个嵌套文档存放在一起,这不但省去了关联查询,由于存储在一起,查询的性能也可以做到更好。

MongoDB的面向文档采用的是BSON,一种类似JSON的格式,但是是二进制序列化的。如上面提到的blog的文章和评论,可以做如下设计:

{ 'id':1, 'author':'NinGoo', 'title':'白话MongoDB(一)', 'content':'按照官方的说法,此处省略一万字',
    comment:[ { 'comment-author':'宋兵甲', 'comment-content':'有木有' } ,
              { 'comment-author':'尼玛','comment-content':'伤不起啊' }
            ]
}

1. 相关数据存放在一起,针对性的查询可以消除join,性能比分散存储要高且方便。
2. 整个结构清晰自解析。所有字段名和值都存储,所以不需要提前设计结构,key的名字和数目可以任意指定,也就是所谓的schema-free。
3. 由于字段名在每一行每一列都需要重复存在,会带来一些额外的存储消耗,这在海量数据及字段较多的时候也需要考虑。
4. 一个document的长度有限,1.7.2之前是4MB,目前是8MB,以后可能增长到32MB。如果有更大的数据,可以使用MongoDB底层的GridFS直接作为文件存储。
5. 如果需要查找某个评论者的所有评论,则相对困难。当然,MongoDB支持任意key的索引,这也不是什么大问题。

像上面的一个结构,为一个文档(document),相当于关系数据库中的一行记录,多个文档组成一个集合(collection),相当于关系数据库的表。多个集合(collection),逻辑上组织在一起,就是数据库(database),一个MongoDB实例支持多个数据库(database)。

大部分的NoSQL产品,为追求性能,一致性等,一般只能支持简单的基于row-key的单条或者范围查询,但是MongoDB可以针对任意列的key创建索引,甚至是内嵌文档里的key,从支持的查询的灵活性上来看,更接近传统的关系数据库,同时还能在性能上向NoSQL看齐,加上支持复制,自动分片和Map/Reduce等功能,非常的吸引眼球,正在成为一款热门的海量存储产品。其背后的商业支持公司10gen,也正在不遗余力的推广,前不久还在北京专门组织了一场技术交流会。在其首页列举的典型客户里,包括foursquare,sourceforge,github等知名互联网公司和应用,当然,也包括淘宝网。

posted @ 2011-12-28 17:49 我想我是青蛙 阅读(67) 评论(0) 编辑

2010年10月26日

给文章加入关键字链接

         最近在做一个网站,遇到需要给网站内所有的文章加关键字链接的问题,我们在浏览一些网站的文章的时候,会发现文章里面的某些关键字是加了链接的,并且高亮显示。

         开始技术部门打算在后台添加或者修改文章的时候,把文章里面的关键字替换为<a>标签。但是这样就出现一些问题

        如果新添加一个关键字,是不是所有的文章又要重新过滤一边。把新关键字替换掉。

        如果修改了关键字的名字或者是修改了关键字的链接地址,那么又要重新过滤所有文件。

        综合了一些情况后,感觉使用后台解决的方案行不通。于是我想到了前台脚本解决

   思路:

         关键字链接的信息任然存放在数据库中,在数据库中有一些字段来保存关键字的信息。

         当用户添加,删除,更新关键字的时候,在后台生成一个js文件,格式如下:

  

代码
var wordlinkdata='[{"WordLinkAlias":"wordlinkReplace4","WordLinkUrl":"http://www.sohu1.com","WordLinkName":"你大爷21"},{"WordLinkAlias":"wordlinkReplace7","WordLinkUrl":"http://cnblogs.com","WordLinkName":"电脑"}]‘

 

wordlinkdata变量存放一些json数据,这些数据是第二步的操作生成的。"WordLinkAlias"指的是关键词的名称,"WordLinkUrl"是关键字的链接。

在前台页面引用我们生成的js文件,我工作中使用的是jquery库。我们需要做工作是替换文章中所有的关键字 。这样,我们就需要用wordlinkdata的数据不断的循环判断。

代码
$(document).ready(function() {
AddWordLink();
});

function AddWordLink(){
//给特殊词加上链接
if (wordlinkdata != undefined && wordlinkdata != null) {
var content = $(".divArtContent");
if (content != null) {
var myobject = eval('(' + wordlinkdata + ')');
for (var i = 0; i < myobject.length; i++) {
content.highLight(myobject[i].WordLinkName, myobject[i].WordLinkUrl);
}
}

}
}

(
function($) {
$.fn.highLight
= function(str, url) {
if (str == undefined || str == " ") {
return this.find("a.divArtContentAlink").each(function() {
this.parentNode.firstChild.nodeName;
with (this.parentNode) {
replaceChild(
this.firstChild, this);
normalize();
}
}).end();
}
else {
$(
this).each(function() {
elt
= $(this).get(0);
elt.normalize();
$.each($.makeArray(elt.childNodes),
function(i, node) {
if (node.nodeType == 3) {
var searchnode = node;
var pos = searchnode.data.indexOf(str);
if (pos >= 0) {//查找
var spannode = document.createElement('a');
spannode.className
= 'divArtContentAlink';
spannode.href
= url;
spannode.target
= 'blank';
var middlebit = searchnode.splitText(pos);
var searchnode = middlebit.splitText(str.length);
var middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);

if (searchnode.parentNode != undefined)
searchnode.parentNode.replaceChild(spannode, middlebit);

}
}
else {
$(node).highLight(str, url);
}
})
})
}
return $(this);
}
})(jQuery);

 

$.fn.highLight扩展是一个高亮扩展,我修改了一下,用来满足需求,如果你需要修改链接的样式,或者想自己创建别的元素,你可以修改以下的代码  

 

代码
var spannode = document.createElement('a');
spannode.className
= 'divArtContentAlink';
spannode.href
= url;
spannode.target
= 'blank';

 

 

不过这个方法的缺陷是,当关键字过多的时候(超过150个),页面的速度会下降

  总结:这种方式的优势是,不需要对以前的文章做任何的修改,添加,删除,修改很灵活

          缺点是:一旦关键字太多,速度会下降。

          大家如果遇到过这种情况,可以探讨下。期待更好的解决方案

posted @ 2010-10-26 10:32 我想我是青蛙 阅读(453) 评论(5) 编辑

2010年9月28日

针对firefox ie6 ie7 ie8的css样式hack (转载)

详细出处参考:http://www.jb51.net/css/15987.html

今天做tab切换的时候,遇到问题,ie8,ie7,firefox对px高度的解析不统一,开始的时候打算
!important 解决之,后来发现ie7,ie8都支持这个了。根本无法判断。于是在网上找到一篇文章。

 

针对firefox ie6 ie7 ie8的css样式hack 以前我们大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7以上对!important可以正确解释,会导致页面没按要求显示!搜索了一下,找到了一个针对IE7、IE8不错的hack方式,IE7使用*+html或*line-height: 23px

 

针对firefox ie6 ie7 ie8的css样式hack
以前我们大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7以上对!important可以正确解释,会导致页面没按要求显示!搜索了一下,找到了一个针对IE7、IE8不错的hack方式,IE7使用*+html或*line-height: 23px,IE8使用“\9”来区分,比如:line-height: 26px\9。

 

CSS可以参照如下定义,注意顺序:
#menu { line-height: 23px; }/* firefox 浏览器实行这句定义 */
#menu { line-height: 26px\9; }/*ie6,ie7,ie8 这句定义主要尖对IE8来hack*/
#menu { *line-height: 23px; }/*ie6,ie7 这句定义主要尖对IE7来hack*/
#menu { _line-height: 23px; }/*ie6 浏览器优先实行这句定义*/ 或者写成一句

#menu { line-height:23px; line-height: 26px\9; *line-height: 23px; _line-height:23px; } 或者

* html #menu { line-height: 23px; } /* IE6 浏览器实行这句定义 */
*+html #menu { line-height: 23px; }/* IE7 浏览器实行这句定义*/

详细出处参考:http://www.jb51.net/css/15987.html



posted @ 2010-09-28 16:18 我想我是青蛙 阅读(421) 评论(0) 编辑

2010年9月17日

好久不写日志了,现在开始,好好写了。。

前进的道路总是有很多吸引人的地方。

未来只是不确定,或许这才是让人奋斗的地方

posted @ 2010-09-17 11:23 我想我是青蛙 阅读(27) 评论(0) 编辑

2008年12月15日

sharepoint 查询calendar recurrence

多的不说了,贴代码

 

Code

查询方式

 

 

Code

里面的条件可以为Today,Week,Month

 

posted @ 2008-12-15 14:55 我想我是青蛙 阅读(282) 评论(0) 编辑

2008年12月4日

sharepoint之lookup字段

摘要: 买个关子,明天再写。这个东西网络上面的资料不多。我是纯粹通过配置文件实现的。买个关子,明天再写。这个东西网络上面的资料不多。我是纯粹通过配置文件实现的。 里面有三个lookup字段,然后将要关联的list的guid放在list字段中就可以了。继续以前的。下载微软的 Visual Studio 2008 extensions for Windows SharePoint Services 3.0 (...阅读全文

posted @ 2008-12-04 23:15 我想我是青蛙 阅读(380) 评论(2) 编辑

2008年12月1日

sharepoint获取Audiences

摘要: 代码很简单。如下:[代码]阅读全文

posted @ 2008-12-01 18:17 我想我是青蛙 阅读(200) 评论(0) 编辑

获取exchangeserve的calendar的item

摘要: 在做项目中用到了这段代码。感觉不错。为了方便大家日后的查找,放在这里http://weblogs.asp.net/psperanza/archive/2008/03.aspx[代码]阅读全文

posted @ 2008-12-01 18:15 我想我是青蛙 阅读(293) 评论(0) 编辑

导航

统计

公告

昵称:我想我是青蛙
园龄:4年11个月
粉丝:10
关注:3

搜索

 

常用链接

我的标签

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜