你相信我能猜中你心中所想的那个人么?

很好玩的一个网站,在心里想一个人,若干个问题之后,他就能猜中你心中所想的那个人哈 :)

点此链接进入:http://s.kaisir.com/4R

估计他是初始化一个很详细的数据库,同时根据你的选择不停的扩充这个数据库,我尝试了几个歌手(无论国籍)都没有问题哈 ~

编译原理:求First集与Follow集的方法

最近马上要步入考试周了,编译原理的这个Follow集一直令我头大啊,今天百度了下下,找到一篇文章,看了以后我瞬间就明白了如何求解Follow集~~哈哈,如果你也不知道如何求解Follow集,请看看下面的这篇日志吧 ,其实我发现,对于Follow集,我一开始不理解的地方就在那个Vn能推出ε的时候,就需要再往后考虑一个字符:)

文法:

S→ABc
A→a|ε
B→b|ε
First集合求法:
能 由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号。如此题A可以推导出a和ε,所以FIRST(A)={a,ε};同理 FIRST(B)={b,ε};S可以推导出aBc,还可以推导出bc,还可以推导出c,所以FIRST(S)={a,b,c}
Follow集合的求法:
紧跟随其后面的终结符号或#。但文法的识别符号包含#,在求的时候还要考虑到ε。 具体做法是把所有包含你要求的符号的产生式都找出来,再看哪个有用。 Follow(S)={#}
如求A的,产生式:S→ABc A→a|ε ,但只有S→ABc 有用。跟随在A后年的终结符号是FIRST(B)={b,ε},当FIRST(B)的元素为ε时,跟随在A后的符号就是c,所以 Follow(A)={b,c} 同理Follow(B)={c}

本文转载自:http://guanjy0129.blog.163.com/blog/static/11154944520106149828498/

关于“msxml3.dll (0x800C0005)系统未找到指定的资源”的另一解决方案

今天学院的首页拉取天气预报的地方出现了“msxml3.dll (0x800C0005)系统未找到指定的资源”的错误提示,在自习室就被叫回来紧急处理,在从教学楼往宿舍走的路上用手机Google了下可能的出错原因,大部分都是说msxml3这个组件有问题,但是因为服务器之前运行一直好好的,所以我不认为是这个地方出现错误。

回到宿舍打开电脑通过VPN拨入学院的校园网,远程连入www服务器,上来先把wwwroot(网站的根目录)按照时间进行排序,看看有没有故障前后修改的文件。这样做有多个好处:
1)避免因为其他人的误操作而造成代码上的错误,想想看,把服务器检查个底朝天,最后发现是有人修改页面的时候不小心改错了行代码,我相信你会哭死吧。
2)能迅速的发现网站服务器是否被人插入恶意代码从而造成的页面访问不正常,一般的Hacker都不会注意到挂马之后被挂马文件的时间属性,从这里也能快速定位可能出现的故障原因。

可是检查下来发现上面的都不是出错原因,这时我的职业敏感性让我想到会不会是提供天气信息的那个页面出现了问题,从服务器上访问腾讯天气页面,果然,找不到服务器,在cmd下使用ping命令拼打不开的那个页面,发现根本无法解析地址,果断使用nslookup命令从Google public dns上获取解析地址,之后修改hosts文件,完成本地解析,重新打开网页,故障解决。

总结:
有时候不要被系统给出的提示信息所迷惑,而且搜索引擎提供的别人遇到的解决方案仅仅只能用于参考,切不要在没搞清楚状况之前就贸然下手。最后我要强调,培养职业敏感性很重要,多看多实践多思考,是培养职业敏感性最佳方法。

 

Parameter index out of range (1 > number of parameters, which is 0).

今天调数据库课程设计(Java+MySql)的时候通过Tomcat测试的时候总是抛出“Parameter index out of range (1 > number of parameters, which is 0).”的异常,系统提示出错的行是如下标示“抛出异常”的行。

[codesyntax lang=”java” lines=”normal”]

public List<Book> searchBorrowed(String id) throws Exception {
	List<Book> allBooks = new ArrayList<Book>();
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	String sql = "select b.name as name,b.author as author,b.category as category,borr.btime as btime,borr.rtime as rtime from borrowed borr,books b where borr.bid=b.id and isreturn=0 and pid=?";
	pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, id);//抛出异常!
	rs = pstmt.executeQuery();
	while (rs.next()) {
		Book book = new Book();
		book.setName(rs.getString("name"));
		book.setAuthor(rs.getString("author"));
		book.setCategory(rs.getString("category"));
		book.setBtime(Long.getLong(rs.getString("btime")));
		book.setRtime(Long.getLong(rs.getString("rtime")));
		allBooks.add(book);
	}
	return allBooks;
}

[/codesyntax]

 

经过多次测试,甚至编写了一个测试用的类直接本地运行调用这个函数却没有出错,Google搜索了下,大家出现这个问题大部分都是ParparedStatement的用法有问题或者Sql语句写的有问题,查了很久,也没找到原因,而最后看到 这里 最后一段话,令我恍然大悟:

[codesyntax lang=”text”]

Please forget about it. I found why the error was occurring.
I was actually using one single PreparedStatement for two different
methods (silly me), and when the flow returned from the called method,
it still was the first preparedstatement rather than the new one,
hence it couldn't found the parameter in the proper indexed position.

[/codesyntax]

 

大体意思是说他使用同一个pstmt执行了两条查询以后出现了这个问题,仔细查看源代码,发现我使用了数据库连接之后没有释放,再次调用的时候,系统就没有再实例化新的pstmt而是直接把刚才用过的这个实例返回给我了,而那个测试用的类没有出现这个问题是因为他仅仅执行了一个SQL查询就退出了,不像我实际中使用的前面还执行了一个登录的过程。知道了问题所在解决起来也便简单的多了,使用代理模式重构代码,通过代理来访问这个具体的数据库操作,从代理中来对数据库的连接与关闭进行处理,这样即更好的解耦,又使得我不用去关注数据库的连接与关闭操作,直接交给代理完成就可以了 :)

你会出这样的错误么?

[codesyntax lang=”java”]

public class Hello{
	public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
		public static void main(String[] args) {
		try{
		Class.forName("DBDRIVER");
	}catch(Exception e){
		e.printStackTrace();}
	}
}

[/codesyntax]

今天为了连接mysql数据库写了这样一段java代码,无奈却总是报错:

[codesyntax lang=”text”]

F:Java>java Hello
java.lang.ClassNotFoundException: DBDRIVER
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at Hello.main(Hello.java:5)

[/codesyntax]

大家看了这段异常会不会认为我是配置”classpath”配置错误了,可是,并不是那样的,我确信我的classpath没有配置错误,你知道他为什么会出这样的错误么……

继续阅读“你会出这样的错误么?”

动易SiteFactory前台调用工作量统计

最近有这样一个需求,需要在SiteFactory的前台调用作者的工作量统计,发现系统自身并没有提供这样的一个功能,作为一个Programer,这哪能难得住我,嘿嘿,仔细查询了SiteFactory提供的“数据结构”文档,发现在“PE_CommonModel”表中存放了大家发表的各种类型的内容。我想要实现的是统计当月每个人的发文数量(不含未通过审核的)并且按照发文数量进行排序,这样一分析SQL查询语句就出来了:

[codesyntax lang=”sql”]

select  Editor,count(*) as Num
	from PE_CommonModel
		where ModelID=1
			and NodeID=10
			and datepart(mm,UpdateTime)=datepart(mm,getdate())
			and datepart(yy,UpdateTime)=datepart(yy,getdate())
			and status=99
		group by Editor
		order by num Desc;

[/codesyntax]

简单对上面的SQL做下解释,select后面的Editor这个是要统计“作者”,如果大家需要统计“输入者”,可以将此换为“Inputer”,后面的count(*) as Num 是计算发文数量,并用Num表示,这里用Num表示也是为了后面排序时引用方便。

ModelID这一项表示了文章模型,在我的SiteFactory中,ModelID=1代表是文章模型,而NodeID代表了需要统计的小类名称,如果想要统计全部,可以去掉“and NodeID=10”这一行。后面detepart()函数为SqlServer内置的函数,用以格式化时间类型的字段,通过这两句就将查询的文章时间限定在“当月”,当然,你也可以将这两句合为一句:

[codesyntax lang=”sql”]

and datepart(yymm,UpdateTime)=datepart(yymm,getdate())

[/codesyntax]

后面的status=99代表了所有审核通过的文章,具体的status代码,请自行查询SiteFactory的相关文档。

最后的Group By以及Order By决定了分组及排序的字段,学过Sql的人一定都能明白,这里就不废话了。最后我将我的这个标签导出了,供大家导入测试。当然,如果你有心的话还可以将我所说的那些内容都替换成变量,然后调用标签的时候就能以参数的形式传递进去了,我嘛比较懒,嘿嘿,就不搞啦~~

当月工作量统计标签,单击下载。

联通WLAN使用VPN就掉线的解决方案

联通的WLAN活动对于后付费用户还在依然免费中,这确实让我觉得很爽,不过因为种种原因,经常需要使用VPN,而联通的WLAN使用VPN的时候大约1分钟左右就会掉线,小小研究了下下,发现原来基于Web验证的这个页面每隔一分钟左右就会跟服务器联系一次(心跳),如果联系不到或者超时,就会强迫用户下线~~

既然知道了原理,想要解决也变得相当容易,首先需要收集最近的路由表,我们手动把这些路由写入到本机路由,通过命令:

route add IP地址 mask 子网掩码 网关 metric 优先级

这样的顺序即可。

附件为自动识别网关,并作为当前默认网关的批处理,大家可以再增加任意多条route命令来调整本地路由 :)

当然,这样的好处还有一个:可以让VPN流量走VPN网关,而其他的流量还是走自己的网关,降低VPN的负载,增加安全性与本地网站的访问速度。

附件:Route-Test

ESX挂载NAS存储

之前部署了几台Esx Server,通过VC进行集中控管,这几天需要挂载NAS存储,连上去看了看,发现他们已经用得很好了,甚至还部署出了“Server Cluster”,在云技术突出的今天,这种应用可能是最贴近企业的了。

好了,废话不多说,我们步入正题,挂载NAS存储有什么好处呢?好处之一,提高了整个虚拟机系统的HA特性(High Availability 高可用性),这样可以在某一台虚拟机/宿主机down掉的情况下自动迁移到其他的虚拟机/宿主机,可以最大程度提高业务连续工作的时间,此外,由于挂载了存储,使得宿主机的硬盘得到了解放,甚至可以做到unlimited~~但是如果把所有的虚拟机都放在存储上,一旦存储出现问题,那造成的影响也是灾难性的,所以,如果对此有较高要求的公司或企业,可以搞NAS热备,哈哈哈 那成本,就不在本文讨论范围之列了吧 :) 继续阅读“ESX挂载NAS存储”

使用NVelocity出现的一则问题

这几天在做一款开源SNS的二次开发,这款基于.Net的SNS使用了Java平台上广泛使用的Velocity模板引擎的.Net版(看着有点像绕口令 哈哈),不过在调试的过程中,发现自己的含有中文部分的html代码全变成了乱码,第一反应就是编码不对,查看编码为Utf-8,而开源SNS中使用的编码也是utf-8,很无奈,打开那个SNS中自带的一个模板,另存时看了下,发现他保存的格式为“带签名的utf-8”把自己写的模板另存为“带签名的utf-8”,一切正常!

小知识:UTF-8与UTF-8带签名的区别
当带签名的UTF-8编码内容被浏览器解析时,浏览器直接根据签名即可判断出使用UTF-8编码来进行解析,当不带签名时,浏览器会根据内容的编码来进行判别。简而言之,带签名的将更容易被浏览器以正确的编码方式进行解析。(来源:Lucky的部落格

补充内容:
1)php UTF8 文件的签名问题
2)识别不带BOM(无签名)的UTF-8文件

联通太给力啦!

之前听说联通针对后付费开启了WIFI的免费试用,我这186的3G预付费用户一开始没打算凑热闹,后来一尝试,嘿,竟然成功开通,不过官方给的通知是试用期到4月1日。

可是没想到啊没想到,今天收到联通的一条短信,WIFI的免费试用竟然延长到了2011年的8月31日!哈,又可以摒弃学校那可恶的校园网一段时间咯 :)如下图。

哈哈,这个无线网络的信号如何呢,让我们看看AC给出的图示

信号在79%左右,还是可以的,那速度怎么样呢?

瞧,通过linkwan进行测试,速度还不错哈,达到了2Mbps宽带的水平 :)迅雷下载实测速度在300k/s左右,最高到了800k/s,虽然下载速度比不上校园网,但是这个网速很稳定~~而且校园网没法访问CCF论坛,没法下载联想官网的文件,没法无线在床上上网,这下,都解决了哈 :)

联通Wo,有时候还是很给力的 :)