分类目录归档:技术

如何在aspx文件中自定义类,自定义方法

一直知道jsp是如下的定义方法:

<%!
public string f(){
retrun “hello”;
}
%>

用“aspx 定义方法” “aspx 定义类”来搜索一直不得要领,突然间看见了<script>我才愰然,竟然不是前台脚本,竟然就是定义方法和变量的地方,我搜索了这么久只能说苍天啊,大地啊……

<%@ Page language=”c#”%>
<%
System.Web.HttpContext context = this.Context;
int i = 1;
context.Response.Write(i + a() + Test.hello());
%>
<script runat=”server”>
public string a()
{
return “hello”;
}
public class Test
{
public static string hello()
{
return “static, hello”;
}
}
</script>

一定要找到这些的原因是现在一些旧项目,原来的代码与开发环境都找不到,唯一能看到的就是页面了。而php或者jsp都有保存文本代码的能力,于是我想aspx也有这个能力,功夫不负有心人,这样我又可以只用notepad来写.net程序了,爽啊

当然还要再配上include,这样就可以单独定义公共方法了

<!– #include file=”head.aspx” –>

iphone中常用几款软件推荐

我不是一个游戏爱好者,所以手机的游戏软件不是太多,由此也常常被人“鄙视”拿着iphone浪费。但我试用了一下android和ios的几款相同的软件,如果再次让我选择,我可能还是会选择iphone的。

1、新浪微博:在这个微博重于QQ的时代,这款软件已经成了我的必备,每天时不时刷一下微博了解新闻动态成了一件常事。

2、Weico Pro:虽然不是官方客户端,但其用户体验性常常领先于官方应用,但这款软件是收费的,所以要想使用免费的版本,还需要将自己的手机“越狱”

3、有道云笔记:虽然网页版的功能非常的少,但不能否认他在iphone客户端做了很多工作,支持手写,涂鸦,拍照和相簿笔记。如果是简单的同步一些文字的话,他可以说是首选的一款文字同步工具。

4、QQ输入法:就像我现在的PC一直使用QQ五笔输入法一样,我的手机客户端也渐渐的转向QQ的五笔输入法,当然可能限于键盘的大小原因,使用起来不会想PC一样流畅,但打字的速度已经超越了拼音,因为大部分时候,你想用拼音输入法打更多的字使用的是全拼,而不是简拼。另外他也支持手写,标点符号在键盘的位置也相当的舒适。

5、Safari:之所以这款系统软件也拿出来说是因为他是我用iphone最重要的一款软件,也是有可能把其他软件统统消灭的软件。因为html5大行其道,替代本地应该是一件早晚的事情。

6、腾讯爱看:被我评为最好用的一款RSS订阅器。虽然默认会订阅一些腾讯自己的东西,但这一点也不影响其易用性,其配合google reader是一个非常完美的搭档。

7、百度地图:在塞班系统的时候,我已经开始安装google地图了,其最开始推出手机定位功能时,令我兴奋不已。但由于谷歌始终没在中国立住脚,测绘不准,定位也不是太准,于是就选择了百度地图。再加上百度地图现在也支持离线地图了,这样更省流量,如我把上海的地图全部下载下来有100多M,以后直接查看就能省不少流量。不管谷歌地图还是百度地图,这类服务出行必备。

8、Nike+Pro:我上一篇已经说过了,它能够记录你的运动路径与速度,是个人锻炼的好工具。

9、上海地铁:信息虽然不是很全,但查找地铁换乘正常是很方便的。当然如果有车了以后,这个可能就不需要了,因为就更需要一款导航软件,推荐高德导航。

10、掌上猫扑、凯迪社区:两个社区软件,基本上我常上的两个社区,但大部分时候都会使用Safari来上,只有一些特殊的图片看不了才会选择使用他们。天涯是我不太喜欢的一个地方,关键原因他太封闭,不登录不能看;太功利:不给钱不让直接看楼主。虽然有很多信息也出之那里。

11、米聊、微信:因为放弃QQ,所以微信用的也比较少,再因为微信是抄米聊的,于是对微信的好感也少了很多,但两款软件的功能几乎是差不多的,加上微信的用户比较多,所以渐渐米聊落在了后面。

12、大众点评:吃饭总找不到地方,在上海,大众点评还是比较好用的,不管你在哪里,他的推荐都有一定的参考价值。

13、金山快盘:同步文件最常使用的软件,在PC端也是开机启动的一款软件。由于DropBox不能在国内使用,只好在国内找一个替代的软件。

14、QQ阅读:TXT阅读效果还不错,但升级以后,看不到以前的效果了,翻页的速度确实快了,但感觉生硬。以前的那个阅读器去哪里了?同样,iBooks也是我每次都装的,因为有一些pdf文件还需要它来打开,不过由于他体积比较太,使用的机会少了很多。同样的阅读,Stanza是目前使用比较多的一款网络软件,主要功能是可自定义源。

CodeIgniter初始化需要调整的文件

使用CI开发时,需要对原来的框架配置文件做少量调整,以便我们使用。由于开发时间过长,现在只能从svn调整的记录里面来找到这些东西,可能有些地方一时记不起来为什么要调整了,记录下来下次初始化时好用

1、autoload.php,加载我们需要的选项,共有两个需要调整的地方

image

2、config.php两个地方,上面用来固定路径,后面用来加密

image

image

 

3、database.php,根据自己的数据库配置情况来调整

image

ORACLE配置示例:

// oracle
$db['default']['hostname'] = '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =host.name.or.ip)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service.name)))';
$db['default']['username'] = 'username';
$db['default']['password'] = '111111';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'oci8';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

4、routes.php将默认的首页进行调整(可选,一般不建议调整成index)

image

另外,如果是配置oracle数据库,请将system\database\drivers\oci8\oci8_result.php文件修改一下,不然会报警告

image

5、子目录配置htaccess方案

<IfModule mod_rewrite.c>
    RewriteEngine on RewriteBase /sppt/ RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ ./index.php/$1 [L]
</IfModule>

6、在每个controller前加上这段代码

function __construct(){
    parent::__construct();
}

7、开启apache的rewrite模块

#LoadModule rewrite_module modules/mod_rewrite.so

CoreSeek和Sphinx中文全文检索备忘

1、分词词典文件地址:F:\coreseek-4.1-win32\etc\unigram.txt

2、python需要安装2.6及以下版本,上下不兼容,作用oracle万能数据源接口;安装完成后,将python.exe纳入path;安装cx_Oracle,在python命令行下面import cx_Oracle不报错证明安装完成

3、所有python的配置文件都大体相同,需要定义的如下图,定义python源文件路径,源文件的入口地址,索引数据存放地址以及数据存放格式等

image

4、python源文件代码:主要是数据连接部分和中文索引时相应编码的问题;在32位win7下测试通过,但不保证所有系统下测试能通过;

# -*- coding:utf-8 -*-
# python source演示操作oracle数据库

from os import path
import os
import sys
import cx_Oracle
import datetime

class MainSource(object):
def __init__(self, conf):
self.conf =  conf
self.idx = 0
self.data = []
self.conn = None
self.cur = None

def GetScheme(self):  #获取结构,docid、文本、整数
return [
(‘id’ , {‘docid’:True, } ),
(‘name’, { ‘type’:’text’} ),
(‘yqsize’, { ‘type’:’text’} ),
(‘add_date’, {‘type’:’integer’} ),
]

def GetFieldOrder(self): #字段的优先顺序
return [(‘name’, ‘yqsize’)]

def Connected(self):   #如果是数据库,则在此处做数据库连接
if self.conn==None:
self.conn = cx_Oracle.connect(‘sppt/a123456@10.10.28.104/sgsttest’)
self.cur = self.conn.cursor()
sql = ‘SELECT id,name,yqsize,add_date FROM yqxx’
self.cur.execute(sql)
self.data = [ row for row in self.cur]
pass

def NextDocument(self, err):   #取得每一个文档记录的调用
if self.idx < len(self.data):
item = self.data[self.idx]
self.id = self.threadid = item[0] #’docid’:True
            self.name = item[1].decode(“GBK”).encode(“UTF-8”)
self.yqsize = item[2].decode(“GBK”).encode(“UTF-8”)
            self.add_date = item[3]
self.idx += 1
return True
else:
return False

if __name__ == “__main__”:    #直接访问演示部分
conf = {}
source = MainSource(conf)
source.Connected()

while source.NextDocument({}):
print “id=%d, subject=%s” % (source.id, source.name.decode(“UTF-8”))
pass
#eof

5、运行test_python_oracle.cmd,可以查看索引的过程,最后启动searchd,监听9132端口,在服务器稳定的时候,可将其作为服务,开机自动启动

6、关于python中文编码问题:主要分为:控制台编码、文件编码、文件中文编码;解码方式主要有encode decode;如,从数据库读取到utf8文件编码转换时,显示数据中的编码是中文编码,于是先解编码GBK,然后再encode utf8;如上图红字;

7、不同的控制台,运行同一个python文件,可能会得到不同的结果,跟控制台编码有关。如:用PowerCmd运行与用cmd运行得到不同结果

还未解决的问题:

  • 得到的结果是以数组的方式返回的,但没有详细解释翻页怎么来实现,所以要想知道,还需要看其api
  • 还未查看怎么样进行增量索引的问题,能否在不停止任务的时候定时增量索引

初识python

image虽然几年前因为google app engine而接触过python,但毕竟没有深入的学习,所有的东西也仅限于google提供的示例;今天又是迫不得已使用python,一看,大爱!跟js有异曲同工这秒!

  • 可单步执行
    作为解释性脚本语言的代表,当然也支持单步调试与执行,就跟js使用firebug一样舒服,可能比那还要舒服;因为js要考虑浏览器的限制,而python不需要考虑这些,可以完全拥有整个系统;
  • 类bash的编程方式
    linux shell编程在服务器端大行其道,而windows的cmd被弱化的不能再被弱化了;基于脚本编程的方式这是我见到的第一例(听说perl也是这样一种语法,没使用过);不需要其他复杂的环境,三两行代码就能完成复杂与重复的功能,真是控制系统必不可少的工具啊!
  • 强大的B/S架构的解决方案
    python目前为止在建设B/S解决方案时不输于php,两者都是解释性语言,都有庞大的用户群
  • 大量服务厂商的支持
    google app engine推出的第一个语言版本就是python,简单,人类阅读的语言;相对于java版本,gae选择python绝对是明智的,而现在的java版本又非常难用;sina app engine使用php,使用较少,暂时不做评论;

昨天写了cmd窗口的难用,当时就有朋友给了我替代方案power cmd,相当给力,打造的windows下shell编程不输于linux。python跟power cmd更加如鱼得水;

浏览器本地存储——从新浪微博得到的启示

偶然间发现如果输入一句话到微博文本框中,即使不提交,也会被持久化——你关掉浏览器再打开,还看到你写的东西,即使你退回再登录也是能够看到你写的东西;

image

但是在cookie里面并不能找到这句话,这就推翻了我对浏览器本地化只能存储到cookie中的认识;那么我想会不会ajax已经同步到了后台,由于存储的速度是立即的,使用ajax就会跟后台代码频繁交互,会拖累整个系统,所以我认为没有,而监控的结果也证明了我的想法;如在chrome里面输入一句话,打开IE登录同样的账号后就不会看到那句话;说明这句话还是持久化到本地了;

image

后来分析新浪的代码,得知,除了cookie,新的html5本地存储支持的更多,如localStorage。而新浪代码中用了三种方式:localStroage, IE的userData和cookie;而在chrome下显示locaStorage,证实了我的想法;

image

代码如下:

//storage
App.storage = (function() {
var a = window.localStorage;
if (window.ActiveXObject) {
store = document.documentElement;
STORE_NAME = “localstorage”;
try {
store.addBehavior(“#default#userdata”);
store.save(STORE_NAME)
} catch(b) {}
return {
set: function(g, h) {
try {
store.setAttribute(g, h);
store.save(STORE_NAME)
} catch(j) {}
},
get: function(g) {
try {
store.load(STORE_NAME);
return store.getAttribute(g)
} catch(h) {
return “”
}
},
del: function(g) {
try {
store.removeAttribute(g);
store.save(STORE_NAME)
} catch(h) {}
}
}
} else {
if (a) {
return {
get: function(g) {
return a.getItem(g) == null ? null: unescape(a.getItem(g))
},
set: function(g, h, j) {
a.setItem(g, escape(h))
},
del: function(g) {
a.removeItem(g)
},
clear: function() {
a.clear()
},
getAll: function() {
var g = a.length,
j = null,
m = [];
for (var h = 0; h < g; h++) {
j = a.key(h),
m.push(j + “=” + this.getKey(j))
}
return m.join(“; “)
}
}
} else {
return {
get: function(n) {
var j = document.cookie.split(“; “),
h = j.length,
g = [];
for (var m = 0; m < h; m++) {
g = j[m].split(“=”);
if (n === g[0]) {
return unescape(g[1])
}
}
return null
},
set: function(g, h, j) {
if (! (j && typeof j === date)) {
j = new Date(),
j.setDate(j.getDate() + 1)
}
document.cookie = g + “=” + escape(h) + “; expires=” + j.toGMTString()
},
del: function(g) {
document.cookie = g + “=”; expires=Fri, 31 Dec 1999 23:59:59 GMT;”
},
clear: function() {
var j = document.cookie.split(“; “),
h = j.length,
g = [];
for (var m = 0; m < h; m++) {
g = j[m].split(“=”);
this.deleteKey(g[0])
}
},
getAll: function() {
return unescape(document.cookie.toString())
}
}
}
}
}

文本编辑器和最难用的编辑器-CMD

最近由于工作原因,经常需要调出cmd窗口,以往只觉得微软自带的Notepad已经够难用的了,没想到CMD窗口竟然超越了我的心理底线,更加难用;

Notepad难用,主要体现在不能高亮显示代码,双击选中文字太不智能化,不能多标签显示,大文本搜索效率底下,功能欠缺(如不支持宏)等,于是我后来试了各种轻量级的文本编辑器,EditPlus, vim到后来的Notepad++。Notepad++是目前为止使用最多的一款文本编辑器,不仅高亮显示,还支持列编辑,括号配对,变量识别,快捷键注释等各种常用功能,一般对IDE没有什么要求的代码,我都会在Notepad++下面来完成;当然重量级的还有UltraEdit,也是一款很优秀的编辑器,但跟EditPlus一样,都是共享软件,虽然提供强大的编码功能,但对于我们这些习惯免费的人来说,升级更新都是一件麻烦事;

CMD这家伙以前在2000和XP的年代都使用过,那时还知道alt + enter全屏查看,记得当年学习c的时候,都是这样来运行自己的程序的;但到win7后,这个功能不能再使用了,如果你使用默认设计,窗口的宽度是固定的,显示不下的时候,就会帮你按行,你如果要复制一行已经被换行文字其中的一部分,是相当麻烦的,特别是这段文字跨多行的时候;不能全屏不说,这个窗口连最大化都没有,你最大的时候只是把窗口的位置定位到(0,0)的地方,呵呵,让你哭笑不得;有时候我在想,为什么这么难用的一个样子还能让他存在这么久呢?微软再没有审美,也要把这块好好做做,看人家linux,多么强调shell编程,而微软好像一直在弱化这块本来的根基;

目前为止,我们使用一些command都还要用到这个丑陋的家伙,没办法,自好自己调整一下,不至于让我们用的窝火;可以在控制台窗口属性栏中,规定一下缓冲区的大小,因为这决定了一行显示多少个字符换行,建议把它设置的大一些,而初始化窗口的大小可以稍微小一些,我们也没有必要使用最大化按钮,因为那基本上没什么作用;设置好以后,就可以在设置的范围内拖动窗口的宽度了,如果你设置的够大,就不再怕文字换行了;当然有大段文字的时候,这种情况还是不可避免的;

image

微软一直弱化命令窗口的行为有时候让人看不懂,我现在的cmd命令已经少得可怜了,当然微软又推出了Powershell来补充这项功能,但毕竟不是默认安装的,推广力度也不太,在程序员中知晓度也不高,这也是现在大部分服务器不再使用windows的原因之一吧

分享工具栏分析

有时候自己想说能够写任何能够实现的效果,但自己写代码最终的结果是费时费力;好处也是易见的,能够自己控制代码,清楚代码格式;

今天一是由于时间太急,二是别人已经找到了一个效果,需要在此基础上做一些调整,然后再加个新的工具栏,于是就想在其基础上修改,颇费了一番功夫,最终的结果也是差强人意……

js代码的压缩我有一定的了解,但像这种压缩方式目前为止只是见过,具体怎么样实现的还真不是太知道;不知道怎么实现压缩的不要紧,关键是能不能恢复成一个可以理解的方式,这个时候chrome的控制台就发挥了其作用;

image

注意看下面这句,eval要的是一个字符器,那么其function返回的p也就是相应的字符器,如果把第一个function返回的字符串提取出来则就是我们想要的东西,将eval后面的所有代码拷贝到chrome的控制台执行,得到我们认可的压缩代码;

image

然后去http://www.css88.com/tool/js_beautify/ 把压缩的代码格式化一下就可以得到如下代码,下面的代码就可以看的懂了,虽然变量还是abcd这些字母来代替,并且可以手动修改了。

他的代码可以学习的地方有如下几个:

  • 代码压缩
    他们的代码压缩方式是我经常见到但又不知道怎么去弄的方式,把关键字都提取到数组中去了,这样的解码难度确实高了不少
  • 良好的代码风格
    里面的所有私有成员都以“_”开头,一目了然
  • 代码配置化
    有自己的数据配置方式,在不改动代码的方式下实现灵活改变

但也有很大的问题在里面,这也是造成我后面扩展困难,不得不重新复制出另一套代码:

  • 全局执行方式
    现在成熟的写法很少进行全局执行,而它的所有js文件都是全局执行
  • 没有对多侧边栏进行考虑
    也许他们本就不需要考虑多个边栏,所以就没有做这方面的考虑
  • 多js加载,虽然实现了一个js里面加载多个其他js,但也造成了速度慢的等问题;
  • 可定制化差;无论从排序还是图标,都没有让人可定制化的地方

if (!window._jiathis_r) {
    var JIATHIS_CONFIGS = {
        webhost: "http://www.jiathis.com",
        lhost: "http://l.jiathis.com",
        codehost: "",
        sc: true,
        uid: 0,
        type: "right",
        move: 1,
        btn: "",
        ckprefix: "jt_",
        jtcbk: "jtss",
        jtck: "",
        custom: [],
        servicelist: {
            ‘jt_ishare’: ‘一键分享,yjfx’,
            ‘jt_copy’: ‘复制网址,fzwz’,
            ‘jt_fav’: ‘收藏夹,scj’,
            ‘jt_print’: ‘打印,dy’,
            ‘jt_email’: ‘邮件,yj’,
            ‘jt_qzone’: ‘QQ空间,qqkj,sns.qzone.qq.com’,
            ‘jt_tsina’: ‘新浪微博,xlwb,weibo.com’,
            ‘jt_tqq’: ‘腾讯微博,txwb,t.qq.com’,
            ‘jt_tsohu’: ‘搜狐微博,shwb,t.sohu.com’,
            ‘jt_t163’: ‘网易微博,wywb,t.163.com’,
            ‘jt_renren’: ‘人人网,rrw,www.renren.com’,
            ‘jt_kaixin001’: ‘开心网,kxw,www.kaixin001.com’,
            ‘jt_sohu’: ‘搜狐白社会,shbsh,bai.sohu.com’,
            ‘jt_taobao’: ‘淘江湖,tjh,i.taobao.com’,
            ‘jt_douban’: ‘豆瓣,db,www.douban.com’,
            ‘jt_xiaoyou’: ‘朋友网,pyw,share.pengyou.com’,
            ‘jt_mop’: ‘猫扑推客,mptk,tk.mop.com’,
            ‘jt_baidu’: ‘百度搜藏,bdsc,cang.baidu.com’,
            ‘jt_tieba’: ‘百度贴吧,bdtb,tieba.baidu.com’,
            ‘jt_tianya’: ‘天涯社区,tysq,my.tianya.cn’,
            ‘jt_feixin’: ‘飞信,fx,space.feixin.10086.cn’,
            ‘jt_qu1’: ‘趣一网,qyw,www.qu1.com’,
            ‘jt_tifeng’: ‘凤凰微博,fhwb,t.ifeng.com’,
            ‘jt_youshi’: ‘优士网,ysw,www.ushi.cn’,
            ‘jt_fanfou’: ‘饭否,ff,fanfou.com’,
            ‘jt_51′: ’51社区,51sq,home.51.com’,
            ‘jt_google’: ‘谷歌,gg’,
            ‘jt_buzz’: ‘谷歌Buzz,ggbuzz’,
            ‘jt_youdao’: ‘有道书签,ydsq,shuqian.youdao.com’,
            ‘jt_qq’: ‘QQ书签,qqsq,shuqian.qq.com’,
            ‘jt_msn’: ‘MSN,msn’,
            ‘jt_sina’: ‘新浪vivi,xlvivi,vivi.sina.com.cn’,
            ‘jt_huaban’: ‘花瓣网,hbw,huaban.com’,
            ‘jt_ifensi’: ‘粉丝网,fsw,cyworld.ifensi.com’,
            ‘jt_115’: ‘115收藏,115sc’,
            ‘jt_hi’: ‘百度空间,bdkj,apps.hi.baidu.com’,
            ‘jt_gmail’: ‘Gmail邮箱,gmailyx,mail.google.com’,
            ‘jt_hotmail’: ‘Hotmail邮箱,hotmailyx’,
            ‘jt_ymail’: ‘Yahoo! mail,yahoo! mail’,
            ‘jt_hexun’: ‘和讯,hx,bookmark.hexun.com’,
            ‘jt_139mail’: ‘139邮箱,139yx’,
            ‘jt_189mail’: ‘189邮箱,189yx’,
            ‘jt_i139’: ‘手机,sj’,
            ‘jt_189cn’: ‘天翼社区,tysq,club.189.cn’,
            ‘jt_139’: ‘139说客,139sk,shequ.10086.cn’,
            ‘jt_tpeople’: ‘人民微博,rmwb,t.people.com.cn’,
            ‘jt_cnfol’: ‘中金微博,zjwb’,
            ‘jt_googlereader’: ‘谷歌阅读,ggyd’,
            ‘jt_translate’: ‘谷歌翻译,ggfy’,
            ‘jt_tuita’: ‘推他,tt,www.tuita.com’,
            ‘jt_sdonote’: ‘麦库记事,mkjs’,
            ‘jt_digu’: ‘嘀咕网,dgw,digu.com’,
            ‘jt_zhuaxia’: ‘抓虾,zx’,
            ‘jt_xianguo’: ‘鲜果,xg’,
            ‘jt_zuosa’: ‘做啥,zs,zuosa.com’,
            ‘jt_ganniu’: ‘赶牛网,gnw,www.ganniu.com’,
            ‘jt_42qu’: ’42区,42q’,
            ‘jt_miliao’: ‘米聊,ml’,
            ‘jt_woshao’: ‘我烧网,wsw,woshao.com’,
            ‘jt_qingsina’: ‘新浪轻博,xlqb,qing.weibo.com’,
            ‘jt_chinanews’: ‘中新网,zxw’,
            ‘jt_gmw’: ‘光明网,gmw’,
            ‘jt_renjian’: ‘人间网,rjw,renjian.com’,
            ‘jt_leihou’: ‘雷猴网,lhw,leihou.com’,
            ‘jt_thexun’: ‘和讯微博,hxwb,t.hexun.com’,
            ‘jt_dream163’: ‘梦幻人生,mhrs,dream.163.com’,
            ‘jt_masar’: ‘玛撒网,msw’,
            ‘jt_renmaiku’: ‘人脉库,rmk,www.renmaiku.com’,
            ‘jt_fb’: ‘Facebook,facebook,www.facebook.com’,
            ‘jt_twitter’: ‘Twitter,twitter,t.co’,
            ‘jt_tumblr’: ‘Tumblr,tumblr,www.tumblr.com’,
            ‘jt_reddit’: ‘Reddit,reddit’,
            ‘jt_instapaper’: ‘Instapaper,instapaper,www.instapaper.com’,
            ‘jt_readitlater’: ‘Read It Later,readitlater,readitlaterlist.com’,
            ‘jt_diglog’: ‘奇客发现,qkfx,www.diglog.com’,
            ‘jt_wealink’: ‘若邻网,rlw’,
            ‘jt_bietiao’: ‘别挑,bt,i.bietiao.com’,
            ‘jt_leshou’: ‘乐收,ls,site.leshou.com’,
            ‘jt_myspacecn’: ‘聚友网,jyw,blog.myspace.cn’,
            ‘jt_tongxue’: ‘同学网,txw’,
            ‘jt_waakee’: ‘挖客网,wkw’,
            ‘jt_cyzone’: ‘创业邦,cyb,u.cyzone.cn’,
            ‘jt_99earth’: ‘救救地球,jjdq’,
            ‘jt_chouti’: ‘抽屉网,ctw’,
            ‘jt_dig24’: ‘递客网,dkw,www.dig24.cn’,
            ‘jt_douban9dian’: ‘豆瓣9点,db9d,9.douban.com’,
            ‘jt_hemidemi’: ‘黑米书签,hmsq,www.hemidemi.com’,
            ‘jt_meilishuo’: ‘美丽说,mls’,
            ‘jt_mogujie’: ‘蘑菇街,mgj,mogujie.cn’,
            ‘jt_tianji’: ‘天际网,tjw,app.tianji.com’,
            ‘jt_poco’: ‘Poco网,pocow,my.poco.cn’,
            ‘jt_baohe’: ‘宝盒网,bhw,www.baohe.com’,
            ‘jt_yijee’: ‘易集网,yjw,www.yijee.com’,
            ‘jt_pdfonline’: ‘Pdf在线转换,pdfzxzh’,
            ‘jt_printfriendly’: ‘友好打印,yhdy’,
            ‘jt_w3c’: ‘W3c验证,w3cyz’,
            ‘jt_bitly’: ‘Bit.ly,bitly,bit.ly’,
            ‘jt_digg’: ‘Digg,digg,digg.com’,
            ‘jt_mailru’: ‘Mail.ru,mail.ru’,
            ‘jt_diigo’: ‘Diigo,diigo’,
            ‘jt_evernote’: ‘EverNote,evernote’,
            ‘jt_friendfeed’: ‘FriendFeed,friendfeed’,
            ‘jt_myspace’: ‘Myspace,myspace’,
            ‘jt_linkedin’: ‘LinkedIn,linkedin’,
            ‘jt_mixx’: ‘Mixx,mixx’,
            ‘jt_netlog’: ‘NetLog,netlog’,
            ‘jt_netvibes’: ‘Netvibes,netvibes’,
            ‘jt_phonefavs’: ‘Phonefavs,phonefavs’,
            ‘jt_pingfm’: ‘Ping.fm,ping.fm’,
            ‘jt_plaxo’: ‘Plaxo,plaxo’,
            ‘jt_delicious’: ‘Delicious,delicious,www.delicious.com’,
            ‘jt_wong’: ‘Mister Wong,misterwong’,
            ‘jt_stumbleupon’: ‘Stumbleupon,stumbleupon’,
            ‘jt_plurk’: ‘Plurk,plurk’,
            ‘jt_funp’: ‘Funp,funp’,
            ‘jt_myshare’: ‘Myshare,myshare’,
            ‘jt_fwisp’: ‘Fwisp,fwisp’
        }
    };
    (function() {
        try {
            var g = jiathis_config || {}
        } catch(e) {
            var g = {}
        };
        var j = document.getElementsByTagName(‘script’);
        for (var i = 0, ci; ci = j[i++];) {
            if (/jiathis/.test(ci.src)) {
                JIATHIS_CONFIGS.codehost = ci.src.substring(0, ci.src.lastIndexOf("/"));
                ci.src.replace(/(type|btn|move|uid)=([^&]+)/g,
                function(a, p, v) {
                    JIATHIS_CONFIGS[p] = v
                })
            }
        }
        var d = document,
        isStrict = d.compatMode == "CSS1Compat",
        dd = d.documentElement,
        db = d.body,
        m = Math.max,
        na = navigator.userAgent.toLowerCase(),
        ie = !!d.all,
        head = d.getElementsByTagName(‘head’)[0] || dd,
        wlh = window.location.host,
        _imgw = typeof(g.imageWidth) == "number" ? g.imageWidth: 26,
        _ckpre = JIATHIS_CONFIGS.ckprefix,
        _lists = JIATHIS_CONFIGS.servicelist,
        _ref = d.referrer,
        _reced = false,
        _mt = typeof(g.marginTop) == "number" ? g.marginTop: 150,
        getWH = function() {
            return {
                h: (isStrict ? dd: db).clientHeight,
                w: (isStrict ? dd: db).clientWidth
            }
        },
        getS = function() {
            return {
                t: m(dd.scrollTop, db.scrollTop),
                l: m(dd.scrollLeft, db.scrollLeft)
            }
        },
        creElm = function(o, t, a) {
            var b = d.createElement(t || ‘div’);
            for (var p in o) {
                p == ‘style’ ? b[p].cssText = o[p] : b[p] = o[p]
            }
            return (a || db).insertBefore(b, (a || db).firstChild)
        },
        _sc = function(a, b, c) {
            var d = new Date();
            d.setTime(d.getTime() + c * 1000);
            document.cookie = a + "=" + escape(b) + (c ? ";expires=" + d.toGMTString() : "") + ";path=/"
        },
        _gc = function(a) {
            var b = document.cookie;
            var c = b.indexOf(a + "=");
            if (c != -1) {
                c += a.length + 1;
                var d = b.indexOf(";", c);
                if (d == -1) {
                    d = b.length
                }
                return unescape(b.substring(c, d))
            }
            return ""
        },
        _rec = function(e) {
            if (!_reced) {
                if ( !! e.origin && e.origin.slice( – 12) == ".jiathis.com") {
                    if (e.data && e.data != "FALSE") {
                        JIATHIS_CONFIGS.jtck = e.data
                    }
                }
                _req();
                _reced = true
            }
        },
        _custom = function() {
            try {
                var a = jiathis_config || {}
            } catch(e) {
                var a = {}
            };
            var u = a.services_custom;
            if (u) {
                if (! (u instanceof Array)) {
                    u = [u]
                }
                for (var b = 0; b < u.length; b++) {
                    var c = u[b];
                    if (c.name && c.icon && c.url) {
                        c.code = c.url = c.url.replace(/ /g, "");
                        c.code = c.code.split("//").pop().split("?").shift().split("/").shift().toLowerCase();
                        JIATHIS_CONFIGS.custom[c.code] = c;
                        JIATHIS_CONFIGS.servicelist[_ckpre + c.code] = c.name + ‘,’ + c.code + ‘,’ + c.code
                    }
                }
            }
        },
        _req = function() {
            try {
                var a = jiathis_config || {}
            } catch(e) {
                var a = {}
            };
            var b = a.shareImg || {};
            b.showType && creElm({
                src: JIATHIS_CONFIGS.codehost + "/plugin.shareimg.js",
                charset: "utf-8"
            },
            "script", head);
            var c, s, E = encodeURIComponent,
            o = _grf(_ref),
            T = document.title || "",
            Y = window.location.href || "",
            an = Y ? Y.indexOf(JIATHIS_CONFIGS.jtcbk) : -1,
            d1 = _gd(o.host),
            d2 = _gd(Y),
            q = null,
            f = (d1 && d2 && d1 == d2) ? false: true;
            if (an > -1) {
                c = Y.substr(an);
                q = c.split("#").pop().split("-").pop().split("=").pop();
                q = _lists[_ckpre + q] ? q: ”
            }
            q = (!q && o.webid) ? o.webid: q;
            if (q && f) {
                s = ‘rsc=’ + q + ‘&rnm=’ + parseInt(JIATHIS_CONFIGS.uid) + ‘&rfh=’ + E(o.host) + ‘&rfp=’ + E(o.path) + ‘&pre=’ + E(Y) + ‘&tit=’ + escape(T);
                (new Image).src = JIATHIS_CONFIGS.lhost + "/l.gif?" + s
            }
        },
        _gd = function(o) {
            var d = null;
            if (o) {
                d = o.split(".").slice( – 2).join(".");
                d = (d == "com.cn") ? o.split(".").slice( – 3).join(".") : d;
                d = d.split("/").shift()
            }
            return d
        },
        _grf = function(r) {
            var h = "",
            p = "",
            q = "",
            m;
            if (r.match(/(?:[a-z]\:\/\/)([^\/\?]+)(.*)/gi)) {
                h = RegExp.$1;
                p = RegExp.$2;
                h = h ? h: "";
                p = p ? p: "";
                if (h) {
                    for (var k in _lists) {
                        m = _lists[k].split(‘,’);
                        if (m[2] && m[2] == h) {
                            q = k.slice(3);
                            break
                        }
                    }
                }
            }
            return {
                host: h,
                path: p,
                webid: q
            }
        },
        jiathis_utility_ifr = !!window.postMessage ? creElm({
            style: "display:none;",
            frameBorder: 0,
            src: JIATHIS_CONFIGS.codehost + "/jiathis_utility.html"
        },
        "iframe") : null,
        div,
        div1 = creElm({
            id: ‘ckepop’,
            style: "height:auto;position:absolute;z-index:100000000;display:none;top:50%;left:50%;overflow:auto;"
        }),
        inputTimer,
        list,
        clist,
        as,
        texts = {},
        script,
        timerover,
        timerout,
        timerloop,
        loop = function() {
            var t = 1000,
            st = getS().t,
            c,
            c = st – div.offsetTop + _mt;
            c != 0 && (div.style.top = div.offsetTop + c / 10 + ‘px’, t = 10);
            timerloop = setTimeout(loop, t)
        },
        iframe = creElm({
            style: ‘position:’ + (/firefox/.test(na) ? ‘fixed’: ‘absolute’) + ‘;display:none;’,
            frameBorder: 0
        },
        ‘iframe’),
        dsp = (_gc("jiathis_off") == ‘yes’) ? ‘display:none;’: ”,
        rpic = g.imageUrl || (JIATHIS_CONFIGS.codehost + "/images/" + (JIATHIS_CONFIGS.btn || ‘r.gif’)),
        lpic = g.imageUrl || (JIATHIS_CONFIGS.codehost + "/images/" + (JIATHIS_CONFIGS.btn || ‘l.gif’)),
        hidemore = g.hideMore || false,
        ckjs = hidemore ? "": " onclick=’$CKE.center(this)’",
        flag = ((!isStrict && /msie /i.test(na)) || (JIATHIS_CONFIGS.move == 1 || /msie 6/i.test(na)));
        div = creElm({
            id: ‘ckepop’,
            style: dsp + "height:auto;position:" + (flag ? ‘absolute’: ‘fixed’) + ";z-index:100000000;top:" + (flag ? ‘0’: _mt + ‘px’) + ";" + (JIATHIS_CONFIGS.type == ‘right’ ? "right:0;overflow:hidden;width:" + _imgw + "px;": "left:-242px;overflow:auto;"),
            innerHTML: JIATHIS_CONFIGS.type == ‘right’ ? "<table cellPadding=0 cellSpacing=0><tbody style=’background:transparent’><tr><td style=’background:transparent’><img src=’" + rpic + "’ style=’cursor:pointer;’ onmouseover=’$CKE.over()’" + ckjs + " /></td><td><div></div></td></tr></tbody></table>": "<table cellPadding=0 cellSpacing=0><tbody style=’background:transparent’><tr><td><div></div></td><td><img src=’" + lpic + "’ style=’cursor:pointer;’ onmouseover=’$CKE.over()’" + ckjs + " /></td></tr></tbody></table>"
        });
        window._jiathis_r = div;
        _custom();
        creElm({
            href: JIATHIS_CONFIGS.codehost + ‘/css/jiathis_share.css’,
            rel: ‘stylesheet’,
            type: ‘text/css’
        },
        ‘link’);
        d.write(‘<script src="’ + JIATHIS_CONFIGS.codehost + ‘/ckepop.js" charset="utf-8"></script><script src="’ + JIATHIS_CONFIGS.codehost + ‘/ckecenterpop.js" charset="utf-8"></script>’);
        $CKE = {
            sers: "",
            pop: div.getElementsByTagName(‘div’)[0],
            centerpop: div1,
            disappear: function(a) {
                var b = window.event || a,
                t = b.srcElement || b.target,
                contain = div1.contains ? div1.contains(t) : !!(div1.compareDocumentPosition(t) & 16),
                contain1 = div.contains ? div.contains(t) : !!(div.compareDocumentPosition(t) & 16);
                if (!contain && !contain1) {
                    iframe.style.display = div1.style.display = ‘none’
                }
            },
            over: JIATHIS_CONFIGS.type == ‘right’ ?
            function() {
                if (div.offsetWidth > _imgw) {
                    return
                }
                clearTimeout(timerloop);
                clearInterval(timerout);
                div.style.cssText += ";width:" + _imgw + "px;left:" + (getWH() – _imgw) + "px";
                var t = 10,
                tmp = 0,
                step = this.pop.offsetWidth / 55;
                timerover = setInterval(function() {
                    if (t == 0) {
                        clearInterval(timerover);
                        flag && loop()
                    } else {
                        var n = Math.round(step * t–);
                        div.style.left = div.offsetLeft – n + ‘px’;
                        div.style.width = div.offsetWidth + n + ‘px’
                    }
                    div.style.zIndex = 100000000
                },
                10)
            }: function() {
                clearTimeout(timerloop);
                clearInterval(timerout);
                clearInterval(timerover);
                var t = 10,
                tmp = 0,
                step = Math.abs(div.offsetLeft / 55);
                timerover = setInterval(function() {
                    if (t == 0) {
                        clearInterval(timerover);
                        flag && loop()
                    } else {
                        var n = Math.round(step * t–);
                        div.style.left = div.offsetLeft + n + ‘px’
                    }
                    div.style.zIndex = 100000000
                },
                10)
            },
            out: JIATHIS_CONFIGS.type == ‘right’ ?
            function() {
                $CKE.cancelClose();
                if (div.offsetWidth > $CKE.pop.offsetWidth) {
                    clearInterval(timerover);
                    clearTimeout(timerloop);
                    div.style.cssText += ";width:" + ($CKE.pop.offsetWidth + _imgw) + "px;left:" + (getWH() – _imgw – $CKE.pop.offsetWidth) + "px";
                    var t = 10,
                    tmp = 0,
                    step = (div.offsetWidth – _imgw) / 55;
                    timerout = setInterval(function() {
                        if (t == 0) {
                            clearInterval(timerout);
                            div.style.left = ”;
                            flag && loop()
                        } else {
                            var n = Math.round(step * t–);
                            div.style.width = div.offsetWidth – n < _imgw ? _imgw: div.offsetWidth – n + ‘px’;
                            div.style.left = div.offsetLeft + n + ‘px’
                        }
                        div.style.zIndex = 100000000
                    },
                    10)
                }
            }: function() {
                $CKE.cancelClose();
                clearInterval(timerover);
                clearInterval(timerout);
                clearTimeout(timerloop);
                var t = 10,
                tmp = 0,
                step = Math.abs((div.offsetLeft + 242) / 55);
                timerout = setInterval(function() {
                    if (t == 0) {
                        clearInterval(timerout);
                        div.style.left = ‘-242px’;
                        flag && loop()
                    } else {
                        var n = Math.round(step * t–);
                        div.style.left = div.offsetLeft – n + ‘px’
                    }
                    div.style.zIndex = 100000000
                },
                10)
            },
            center: function(a) {
                if (a) {
                    db.style.position = ‘static’;
                    var b = getS();
                    div1.style.display = "block";
                    div1.style.margin = ( – div1.offsetHeight / 2 + b.t) + "px " + ( – div1.offsetWidth / 2 + b.l) + "px";
                    list = d.getElementById(‘ckelist’);
                    clist = list.cloneNode(true);
                    as = clist.getElementsByTagName(‘input’);
                    for (var i = 0, ci; ci = as[i++];) {
                        texts[ci.value] = ci.parentNode
                    }
                    with(iframe.style) {
                        left = top = ‘50%’;
                        width = div1.offsetWidth + ‘px’;
                        height = div1.offsetHeight + ‘px’;
                        margin = div1.style.margin;
                        display = ‘block’
                    }
                }
            },
            choose: function(o) {
                clearTimeout(inputTimer);
                inputTimer = setTimeout(function() {
                    var s = o.value.replace(/^\s+|\s+$/, ”),
                    frag = d.createDocumentFragment();
                    for (var p in texts) {
                        eval("var f = /" + (s || ‘.’) + "/ig.test(p)"); !! texts[p].cloneNode && (f && frag.appendChild(texts[p].cloneNode(true)))
                    }
                    list.innerHTML = ”;
                    list.appendChild(frag)
                },
                100)
            },
            centerClose: function() {
                iframe.style.display = div1.style.display = ‘none’
            },
            shareClose: function() {
                var a = d.getElementById("jiathis_sers");
                if (a) {
                    if (!$CKE.sers) {
                        $CKE.sers = a.innerHTML
                    }
                    var b = ‘<div style="margin:10px 5px 10px 10px;font-size:14px;">’;
                    b += ‘<p style="font-weight:normal;margin-bottom:10px;">关闭分享按钮?</p>’;
                    b += ‘<p style="color:#666;font-size:12px;font-weight:normal;margin-bottom:10px;">关闭后,该分享按钮将不再出现,您也无法使用分享到功能,确定吗?</p>’;
                    b += ‘<p style="background:none repeat scroll 0 0 #FEFFDB;border:1px solid #FFDDB3;padding:10px 15px;width:185px;"><a href="javascript:;" onclick="$CKE.doClose();return false;"><u style="font-weight:normal;">确定</u></a>&nbsp;&nbsp;<a href="javascript:;" onclick="$CKE.cancelClose();return false;"><u style="font-weight:normal;">取消</u></a></p>’;
                    b += ‘</div>’;
                    a.innerHTML = b
                }
            },
            doClose: function() {
                iframe.style.display = div1.style.display = div.style.display = ‘none’;
                _sc("jiathis_off", "yes", 86400)
            },
            cancelClose: function() {
                var a = d.getElementById("jiathis_sers");
                if ($CKE.sers && a) {
                    a.innerHTML = $CKE.sers;
                    $CKE.sers = ”
                }
            },
            open: function(A) {
                creElm({
                    src: A,
                    charset: "utf-8"
                },
                "script", head)
            },
            fireEvent: function(F, O) {
                if (F) {
                    F = typeof(F) == "function" ? F: eval(F);
                    F(O)
                }
            }
        };
        if ( !! window.addEventListener) { !! window.addEventListener && window.addEventListener("message", _rec, false)
        } else {
            if ( !! window.postMessage) { ( !! window.attachEvent && window.attachEvent("onmessage", _rec))
            } else {
                _req()
            }
        }
        if (ie) {
            div.onmouseleave = $CKE.out;
            d.attachEvent("onclick", $CKE.disappear)
        } else {
            div.onmouseout = function(e) {
                try {
                    var p = (this.compareDocumentPosition(e.relatedTarget) == 20)
                } catch(e) {
                    var p = false
                }; ! (this === e.relatedTarget || (this.contains ? this.contains(e.relatedTarget) : p)) && $CKE.out.call(this)
            };
            d.addEventListener("click", $CKE.disappear, false)
        };
        flag && loop()
    })();
    function jiathis_sendto(a) {
        try {
            var b = jiathis_config || {}
        } catch(e) {
            var b = {}
        };
        var c = encodeURIComponent,
        cu = JIATHIS_CONFIGS.custom[a] || {},
        U = String(b.url || document.location),
        W = "?webid=" + a,
        G = "&url=" + c(U),
        T = "&title=" + c(b.title || document.title),
        S = b.summary ? "&summary=" + c(b.summary) : "",
        F = JIATHIS_CONFIGS.uid ? "&uid=" + parseInt(JIATHIS_CONFIGS.uid) : "",
        E = b.data_track_clickback ? "&jtss=1": "",
        K = (b.appkey && b.appkey[a]) ? "&appkey=" + b.appkey[a] : "",
        P = b.pic ? "&pic=" + c(b.pic) : "",
        R = (b.ralateuid && b.ralateuid[a]) ? "&ralateuid=" + b.ralateuid[a] : "",
        Q = (b.evt && b.evt[‘share’]) ? b.evt[‘share’] : null,
        A = ‘http://s.jiathis.com/’,
        X = (cu.name && cu.url) ? "&acn=" + c(cu.name) + "&acu=" + c(cu.url) : "",
        B = A + W + G + T + F + E + K + P + R + S + X;
        if (a == ‘copy’ || a == ‘fav’ || a == ‘print’) {
            $CKE.open(B);
            if (a == ‘copy’) {
                jiathis_copyUrl()
            } else if (a == ‘fav’) {
                jiathis_addBookmark()
            } else {
                window.print()
            }
        } else {
            window.open(B, ”)
        }
        $CKE.fireEvent(Q, {
            type: ‘share’,
            data: {
                service: a,
                url: U
            }
        });
        return false
    }
    function jiathis_addBookmark() {
        try {
            var d = jiathis_config || {}
        } catch(e) {
            var d = {}
        };
        var a = d.title || document.title;
        var b = d.url || parent.location.href;
        var c = window.sidebar;
        if (c && !!c.addPanel) {
            c.addPanel(a, b, "")
        } else if (document.all) {
            window.external.AddFavorite(b, a)
        } else {
            alert(‘请按 Ctrl + D 为你的浏览器添加书签!’)
        }
    }
    function jiathis_copyUrl() {
        try {
            var d = jiathis_config || {}
        } catch(e) {
            var d = {}
        };
        var a = d.url || this.location.href;
        var b = d.title || document.title;
        var c = b + " " + a;
        var f = navigator.userAgent.toLowerCase();
        var g = f.indexOf(‘opera’) != -1 && opera.version();
        var h = (f.indexOf(‘msie’) != -1 && !g) && f.substr(f.indexOf(‘msie’) + 5, 3);
        if (h) {
            clipboardData.setData(‘Text’, c);
            alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友!")
        } else if (prompt(‘你使用的是非IE核心浏览器,请按下 Ctrl+C 复制代码到剪贴板’, c)) {
            alert(‘复制成功,请粘贴到你的QQ/MSN上推荐给你的好友!’)
        } else {
            alert(‘目前只支持IE,请复制地址栏URL,推荐给你的QQ/MSN好友!’)
        }
    }
}

java编译总结

环境配置
java_home           c:\Program Files\Java\jdk1.6.0\
classpath             %java_home%\lib\tools.jar;.;
path                    %java_home%\bin;

命令编译
javac -d . *.java //按包编译
java com.wondersgroup.Test //带包名执行
java -classpath D:\class12.jar; com.wondersgroup.Test //引入其他包执行

在我的备忘记录里面一直保存着这样的几个用法,当然我们谈论的都是windows的用法;今天在学习sphinx中java示例代码的时候,又有新的发现,更加自动的生成jar文件和更加自动的生成javadoc的方法,非常的简单,将代码贴在下面分析:

mk.cmd
@echo off
javac -cp . -d . *.java
jar cfm sphinxapi.jar MANIFEST.MF org/sphx/api

mkdoc.cmd
@javadoc *.java -d doc

其中javac –cp . –d . *.java跟我记录的java –classpath D:\class12.jar com.wondersgroup.Test中的classpath是一样的,只不过,这里是在编译阶段,将本包中的所有类作为classpath,带包名编译后放在本目录中;

jar cfm sphinxapi.jar MANIFEST.MF org/sphx/api最终目的是生成sphinxapi.jar;,其中已知条件是MANIFEST.MF和org/sphx/api,将其封装成sphinxapi.jar再执行;参数c表示创建新的归档文件;参数f指定归档文件名;m包含MANIFEST.MF;

MF文件如下(最后一行有回车):

Manifest-Version: 1.0
Main-Class: org.sphx.api.test

这样在执行的时候,就能找到入口地址了;jar包的执行方法

java –jar sphinx.jar test

最后一个test是作为参数传递给入口函数的;

当然,根据上次提到的服务,也可以把最后一条命令做成服务,且在开机时就启动;

Sphinx 学习2

接上篇,这样有个延续,对自己以后再看这些东西也会有个启发:

首先来看配置文件:1、sphinx.conf.in 2、sphinx.conf;这两个配置文件是一样的,在1中已经提到,sphinx.conf是由sphinx.conf.in拷贝过去的,对里面的相对路径进行了绝对化;同样在in中,也要对路径进行绝对化,不然不能记录日志,所注册的服务也不能正常启动;以下贴也修改后的配置文件

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
type            = mysql

sql_host        = localhost
sql_user        = root
sql_pass        = a123456
sql_db            = test
sql_port        = 3306    # optional, default is 3306

sql_query        = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents

sql_attr_uint        = group_id
sql_attr_timestamp    = date_added

sql_query_info        = SELECT * FROM documents WHERE id=$id
}

index test1
{
source            = src1
path            = F:/sphinx-2.0.3-win32/data/test1
docinfo            = extern
charset_type        = sbcs
}

index testrt
{
type            = rt
rt_mem_limit        = 32M

path            = F:/sphinx-2.0.3-win32/data/testrt
charset_type        = utf-8

rt_field        = title
rt_field        = content
rt_attr_uint        = gid
}

indexer
{
mem_limit        = 32M
}

searchd
{
listen            = 9312
listen            = 9306:mysql41
log            = F:/sphinx-2.0.3-win32/log/searchd.log
query_log        = F:/sphinx-2.0.3-win32/log/query.log
read_timeout        = 5
max_children        = 30
pid_file        = F:/sphinx-2.0.3-win32/log/searchd.pid
max_matches        = 1000
seamless_rotate        = 1
preopen_indexes        = 1
unlink_old        = 1
workers            = threads # for RT to work
}

 

接下来,再明白一个问题,下面这段代码是注册一个服务,服务的名称叫SphinxSearch,服务的命令就是searchd –config c:\Sphinx\sphinx.conf.in;查看服务就可以看到

F:\sphinx-2.0.3-win32\bin>searchd –install –config F:\sphinx-2.0.3-win32\bin\sphinx.conf.in –servicename SphinxSearch

image

既然windows服务可以注册,当然也可以删除,我在网上查了下,所有命令都在windows中的sc中

sc delete SphinxSearch

这样,在每次启动windows的时候,就可以自动启动SphinxSearch进程,进程端口9312,可以通过telnet命令测试启动是否成功

telnet localhost 9312

最后一步,使用代码测试是否可以使用,测试代码已经在api文件夹里了,里面有各种语言的测试demo,我们使用php文件来测试,把sphinxapi.php和test.php都拷贝到F:\wamp\bin\php\php5.3.5目录(如果设置了 php执行路径不需要这样做)执行下面的命令,并得到如下结果,则说明测试成功,进程已经在监控状态了

F:\wamp\bin\php\php5.3.5>php test.php test
Query ‘test ‘ retrieved 3 of 3 matches in 0.032 sec.
Query stats:
‘test’ found 5 times in 3 documents

Matches:
1. doc_id=1, weight=101, group_id=1, date_added=2012-01-13 05:47:21
2. doc_id=2, weight=101, group_id=1, date_added=2012-01-13 05:47:21
3. doc_id=4, weight=1, group_id=2, date_added=2012-01-13 05:47:21