存档

‘编程开发’ 分类的存档

JAVA访问IBM Domino服务器(java,diiop)

2010年4月19日 liangdi 1 条评论

由于项目的需要,要对Domino服务器上的文档以及其附件做索引,提供搜索.所以自己也先整理一下思路.程序中使用DIIOP协议连接服务器(需要NCSO.jar),遍历视图中的文档,再读取其附件,以及需要建索引的字段,然后建索引,由于一个文档可能包含多个附件,所以要将各附件解析后h合并再建索引.

本文先完成对Domino文档以及其附件的读取.步骤比较简单

1.获得Sessio,需要用户,密码以及IOR.
Session session = NotesFactory.createSessionWithIOR(IOR, user, pass);

2.选择数据库和视图
Database db = session.getDatabase(null, “datastorge01.nsf”);
View view = db.getView(“(SWSearch_main)”);

3.遍历文档,读取字段信息以及拆解附件.
view.getFirstDocument();
view.getNextDocument(doc);
Vector attNames = session.evaluate(“@AttachmentNames”,doc);//附件

JAVA代码:
阅读全文…

分类: 编程开发 标签: , , ,

使用Memcache缓存提升搜索引擎项目性能

2010年4月18日 liangdi 没有评论

搜索项目已经上线了,客户使用的硬件不错,系统表现的也不错,不过所谓”编程无止境”,针对客户的使用特点,我决定对系统做个使用Memcache缓存提升性能的方案,对于整个搜索系统来说需要缓存的地方很多:搜索结果、分词(同义词)、以及客户定制的一些功能.本文就针对搜索结果做缓存看看性能提升效果 .

Memcache服务器使用很简单从http://memcached.org/ 下载,开启服务的简单命令:/path/to/memcached -u root -d,JAVA-Client可以使用这个:http://github.com/gwhalin/Memcached-Java-Client/downloads.

根据系统需求,写一个CacheUtil类,根据搜索关键字+搜索类型+搜索起始记录数 组成的字符串作为key,保存搜索结果HashMap,同样根据key取得搜索结果直接返回.

阅读全文…

MongoDB体验(linux,java)

2010年4月17日 liangdi 没有评论

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

上面是MongoDB的介绍,如果需要更详细的了解或者是下载MongoDB,请访问:http://www.mongodb.org/

我之所以选择去了解和使用MongDB,除了它具有一些特有的性质,高性能外,主要一点就是开发方面,相比关系型数据库,用ORM库,而且还要维护scheme(这里当然不包括各种快速开发框架 ),本文是一个Java中使用MongoDB的一个简单例子 ,对一个对象的增加以及显示.就一个java类和一个jsp页面. MongoDB的安装和使用以及其文档也很丰富,这里就不再做介绍 .
阅读全文…

分类: 编程开发 标签: , ,

CentOS5.4安装Erlang开发环境

2010年2月1日 liangdi 1 条评论

很早就听说Erlang的大名了,可惜一直没有机会去接触.最近这段时间有看到了她和Ajax Comet之间有一下联系,所以就打算部署起来看看起庐山真面目.
CentOS5.4中编译安装Erlang比较顺利
首先去下载Erlang 的源码包 http://ftp.sunet.se/pub/lang/erlang/download.html

下载解压后直接编译就好了,我下载的是当前最新的 R13B03

./configure --prefix=/usr/local/erlang
make && make install

或者直接

./configure
make && make install

在configure的过程中可能会提示缺少包 curses 解决方法是安装 ncurses-devel

yum install ncurses-devel

没有其他大问题了.

安装好了之后就测试一下吧~

执行/usr/local/erlang/bin/erl

如果你没有设置–prefix 直接执行 erl 就可以了

需要注意一点是 erlang 是用 “. ” 作为语句结束的

现在来执行一下它的Hello World!

在提示符中输入 回车就可以看到执行结果了


[root@liangdi ~]# /usr/local/erlang/bin/erl
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> io:format("Hello World!\n").
Hello World!
ok
2>

文章作者:liangdi 最后修改:2010.01.22 转载请注明来自:[自由的心灵]

原文链接:http://liangdi.icentos.net/2010/02/01/install_erlang_with_centos/

分类: Linux/Unix, 编程开发 标签: ,

Pthread 编程练习 二 线程同步

2010年1月24日 liangdi 没有评论

线程的同步, 发生在多个线程共享相同内存的时候, 这时要保证每个线程在每个时刻看到的共享数据是一致的. 如果每个线程使用的变量都是其他线程不会使用的(read & write), 或者变量是只读的, 就不存在一致性问题. 但是, 如果两个或两个以上的线程可以read/write一个变量时, 就需要对线程进行同步, 以确保它们在访问该变量时, 不会得到无效的值, 同时也可以唯一地修改该变量并使它生效.

最初在学习线程的时候,教程中举了一个售票的例子,就是多个窗口(多线程) 同时销售100张票(共享相同的变量)的问题
我们看看没有处理线程同步的代码

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

int giCounts = 100;
void thread_a_func(void);
void thread_b_func(void);
void thread_c_func(void);

int main(){
	pthread_t ltThreadIDa,ltThreadIDb,ltThreadIDc;
	if(pthread_create(&ltThreadIDa,NULL,(void *)thread_a_func,NULL)!=0)
	{
		printf("create thread a error!\n");
	}
	if(pthread_create(&ltThreadIDb,NULL,(void *)thread_b_func,NULL)!=0)
	{
		printf("create thread b error!\n");
	}
	if(pthread_create(&ltThreadIDc,NULL,(void *)thread_c_func,NULL)!=0)
	{
		printf("create thread b error!\n");
	}
	while(giCounts > 0){
		sleep(1);
	}
}

void thread_a_func(void){
	while(1){
			if(giCounts > 0) {
				usleep(1000); //处理售票事务
				printf("1号台卖出票号:%d\n",giCounts--);
			}
			usleep(1000);
	}
}

void thread_b_func(void){
	while(1){
			if(giCounts > 0) {
				usleep(1000); //处理售票事务
				printf("2号台卖出票号:%d\n",giCounts--);
			}
			usleep(1000);
	}
}

void thread_c_func(void){
	while(1){
			if(giCounts > 0) {
				usleep(1000); //处理售票事务
				printf("3号台卖出票号:%d\n",giCounts--);
			}
			usleep(1000);
	}
}

阅读全文…

PHPWind development HOWTO 之四 插件action设计一个方法

2010年1月22日 liangdi 1 条评论

一个复杂的插件有很多的功能,PHPWind的约定中大多插件用action=xx 去执行不同的功能
这样一来phpwind 的一个插件可能就是这样的结构
/hackname/index.php:

用if或者switch

action==功能1?
执行功能1
返回或者渲染模板
action==功能2?
执行功能2
返回或者渲染模板
action==功能3?
执行功能3
返回或者渲染模板
action==功能4?
执行功能4
返回或者渲染模板

这样各功能都在同一个文件里面维护起来麻烦,结构也不清晰,当然你也可以把每个执行功能的代码require_once进来
我们在这里也来做个简化的改变
1:约定/hack/hackname/ 下面 增加一个action目录来存放我们个action的逻辑处理程序
PS:(至于怎么命名可以根据自己的喜好,我这里用这样的方法,前台默认为/action/index.php 后台为/action/admin_index.php,前台调用的就直接是action.php 后台管理的就 admin_action.php,这里的action就是前端请求对应的action,对于不存在的action 你可以做异常抛出,也可以转到/action/index.php下)
2:修改相应的/hack/hachname/index.php 和 admin.php的代码 使其成为一个简单的action控制器
index.php的代码如下:
阅读全文…

Pthread 编程练习 一 邂逅Pthread线程

2010年1月20日 liangdi 没有评论

POSIX 线程 是 线程的 POSIX标准,定义了创建和操纵线程的一套 API.  https://computing.llnl.gov/tutorials/pthreads/#PthreadsAPI
今天回顾一下Pthread的创建线程的基本操作

数据类型

  • pthread_t:线程句柄
  • pthread_attr_t:线程属性

线程操纵函数(简介起见,省略参数):

  • pthread_create():创建一个线程
  • pthread_exit():终止当前线程

源码pthread.c


#include <stdio.h>
#include <unistd.h> //sleep
#include <pthread.h> //ptrhead  头文件
void thread_a_func(void);
void thread_b_func(void);
int main(){
    pthread_t ltThreadIDa,ltThreadIDb;
    if(pthread_create(&ltThreadIDa,NULL,thread_a_func,NULL)!=0)
    {
        printf("create thread a error!\n");
    }
    if(pthread_create(&ltThreadIDb,NULL,thread_b_func,NULL)!=0)
    {
        printf("create thread b error!\n");
    }
    while(1){
        sleep(1);
    }
}

void thread_a_func(void){
    while(1){
        printf("out>> thread_a\n");
        sleep(1);
    }
}

void thread_b_func(void){
    while(1){
    printf("out>> thread_b\n");
        sleep(1);
    }
}

运行需要连接 pthread库 所以要加 -l pthread

# gcc -o pthread -l pthread pthread.c
# chmox +x pthread
# ./pthread
# out>> thread_a
# out>> thread_b
# out>> thread_a
# out>> thread_b
# out>> thread_a
# out>> thread_b
# out>> thread_a
# out>> thread_b
# out>> thread_a
# out>> thread_b

文章作者:liangdi 最后修改:2010.01.20 转载请注明来自:[自由的心灵]

原文链接:http://liangdi.icentos.net/2010/01/20/pthread_one_create_a_thread/

使用语法高亮插件,测试一下

2010年1月18日 liangdi 3 条评论

JAVA:

public class HelloWorld {
    public static void main(String [] args){
        System.out.println("Hello World!");
    }
}

JavaScript: 我的最爱

~function(){
     alert("Hello World!");
}()

C:

#include <stdio.h>

int main(){
    return 0;
}

PHPWind delevelopment HOWTO 之三 PHPWind数据库操作以及一个简单的插件

2010年1月12日 liangdi 没有评论

导读:在本帖中我们讨论pw的数据库操作,所以你得先有点php操作mysql的知识基础,以及sql语句的基础
数据是一个系统的核心
基本上所以的逻辑操作都是围绕着数据来的,pw也是如此.
最低层面的讲,数据的操作主要为:增加,删除,读取,修改
PHPWind是使用Mysql数据库
数据库对象$db 在global.php中PwNewDB();创建
该方法根据你的设置来判断创建mysql或者mysqli的对象,这两个类pw封装在/require/db_mysql.php 与 /require/db_mysqli.php
所以你要想知道$db有哪些方法,直接查看对应的类文件就可以了

阅读全文…

PHPWind delevelopment HOWTO 之二 PHPWind模板的简单使用

2010年1月12日 liangdi 没有评论

模板在一般应用系统中是展示数据用的,在PW中也不例外,pw的mvc架构可以理解为跟目录下的是Controller控制器,require下的是业务逻辑处理,处理后的数据在模板中展示.
首先我们要知道的是,pw的模板并不是特制的解析模板,而是php脚本,具体看http://www.stwind.org/article-4921-e.html,所以原则上可以执行任意的php代码,但是如果又把所有的业务逻辑放在模板中,这又违背pw的设计了,所以在模板中我们就尽量做到数据的显示,比较,判断,列出等操作,当然你如果有特殊需要也可以嵌入自己想要的代码.
要想制作好pw的模板你得了解以下一些基本知识,基础的php知识(变量,各种程序结构等),基本的HTML等一些基础的东西,还有php嵌入HTML中的写法
首先要理解的就是print<<<EOT与EOT;的组合

阅读全文…