| 小洛 的个人资料Paul's照片日志列表 | 帮助 |
|
|
2006/7/16 word2003保存时,出现"语音识别的数据丢失"的问题保存时总提示:文档被保存,但是语音识别的数据丢失,因为没有足够的空间存储这些数据。确保没有录音师关闭麦克风,并检查磁盘上的可用存储空间。
解决办法: 工具-选项-保存-嵌入语音数据 前面的勾去掉 2006/5/31 蚊帐和凉席上海的夏天总是来得这么早,搬家了,从2楼搬到了2楼,从北边搬到了南边,变的是位置,是环境,不变的是楼层,是上海的蚊子依然这么毒。
不幸生就了一副过敏体质已经很倒霉了,偏偏又是会招蚊子那种人……夏天还真的满难过的。家乡普通的蚊子咬了一口要一个礼拜才能好,上海的蚊子似乎进化程度很高,随便咬一口,那印记就要伴随到秋天才能慢慢消除了。
以前在家中的时候,什么无极膏,防毒虫药膏总是要常备的,纱门纱窗也想来紧闭,来了上海,这些条件变得很奢侈,所以早早的就要把蚊帐准备好了,发现可以向帐篷一样支起的蚊帐,真的方便很多,于是上周四就跑到超市买回来架好。
两天过后,怎么都觉得别扭,垫在下面的那层蚊帐也太容易揉在一起了,看起来窝窝囊囊的,再次逛超市的时候发现,原来蚊帐下面要铺凉席来支撑底面的~天~~蚊帐和凉席一定是关系企业!昨天,准确说是前天了,晚上的时候去买了一个凉席回来,铺在蚊帐里面,果然好多了,安心的睡好,不会再有轰炸机飞来飞去了。
今天晚上一口气发了3个日志,呵呵,很久没写了。很晚了,去冲冲睡觉了~pia...顺带打死一架“轰炸机” 2006/3/24 行列表格索引页面使用程序循环的解决方案在帮做一个循环的时候想到的。
在一些产品发布网页类的地方经常有碰到需要排列成一个类似九宫格的图片加文字展示的索引页面,如果通过程序来做,需要做一个双层循环,在第二层循环判断i mod 3 = 0之类的方法去做,我们都知道table tr td这个元素看起来和写起来并不那么匹配,如果带有翻页的话,最后一页没有充满整行的表格就很难控制。
昨天想到一个变通方法。
循环的时候,比较简单的就是顺序排列,我们可以产生一些例如
<img src="1.jpg"></br>Introduce...
<img src="2.jpg"></br>Introduce...
之类的代码,那我可以把这些代码定义到一个span元素中,然后事先给span这些元素定义位置,那么就可以解决索引的九宫格问题了。
例如,我定义两个span
<span id="span1"></span>
<span id="span2"></span>
然后分别把span1和span2放到td元素中定位,在定位的下方使用javascript关于span的innerHTML方法把我想要展现的html元素写入,那么就可以在对应的地方打印出图片和介绍,并且不需要双层循环表格。语法如下:
<script>
span1.innerHTML="<img src=\"1.jpg\"></br>Introduce..."
span2.innerHTML="<img src=\"2.jpg\"></br>Introduce..."
</script>
其中span的innerHTML的赋值操作可以通过循环简单的完成,这样,就完成了想要的效果了。 2006/3/16 reflect对数组的异常操作刚刚完成了一个数据交换的项目,出于对程序优美构架以及敝人懒散的考虑用到了java的reflect机制,看起来一切正常,今天因linux和windows下java的解析差别去跟了一下程序,没想到竟然捉到了这个级无敌隐藏难捉大bug....
linux和windows下碰到的java解析差别是对Wed Jun 13 00:00:00 CST 1900这样的一个日期解析的时候,windows会自动的给我加上了5个多小时,没去细考~要说的重点也不在这里。
跟程序的时候发现,我的数组开始的时候还是好好的,经过了一个方法以后就变了,本来我是要针对某一个属性的特殊值,将其设定为null,结果只经过一个对象的invoke操作,就变成了把整个数组中所有这类对象的属性都设null了~继续发现到,当新建一个object的时候,通过PropertyUtilsBean的copyProperties时候,也会把整个数组中的这个类型的对象的属性都替换成为最后一个操作的那个对象,当然copyProperties一定也是用的reflect,我的方法和这个方法实现也是基本一样的。
看来reflect的内部机制是这样子的,只是不知道它是怎么跟reference的~这应该是很细节的东西了,API上面没有写这些,按照平常的逻辑方式,是绝不会出现reflect这样子怪异的事情的。明天要交差,今天抓到这么大bug,真是有如天助~HOHO....
也没有那么多时间去看reflect的实现机制了,干脆更改成ArrayList的容器来放对象,哈,这下总没问题了吧。
项目算结束了,回顾一下,遇到了好多奇怪的问题~~有一些google也都没有google到答案,全球都没人碰到,就我在纳闷?还真奇怪了,还好java都是开源,可以去跟程序,想想在跟Hibernate的程序的时候,头就痛~真不是人干的活儿~
反正reflect的这个问题暂时算解决了,什么时候把问题丢到论坛上去,看看有没有达人帮忙解答一下了。5555~好晚了,本来打算半个小时改一下数据库的函数差异就回去的,没想到多抓了个bug,就到现在了~~
哎哎哎~~回去睡觉去了,好困~好累~明天下午去医院拆线,可是伤口还是痛痛的,不知道OK不OK~ 2006/2/24 对session.delete()的误读查看了delte的相关代码后发现,hibernate并不允许对不存在的pk进行删除或者update动作,它的实现方式为从jdbc取得的返回结果要求必须是1,否则认为失败。
所以如果我删除或者更新不存在的pk的话,返回结果就是0,那么就认为失败。
Oracle之所以成功,是因为updateBatch的时候,delete删除不存在的pk时返回的数组中保存的不是0,而是-2,hibernate对-2进行了单独处理,认为成功执行,但不知道是否完成。
DB2的jdbc驱动返回的就不是-2了,而是0,所以DB2无法完成delete不存在的pk的动作。
当然,可以通过更改源代码来实现,不过可能会造成Hibernate判断产生误差。它就会无法判断insert,update,delete的动作都是否失败。~
之前用delete动作+save动作是为了模拟saveOrUpdate的动作,因为在最开始测试的时候发现我的对象不能做saveOrUpdate,当时随便在网络上看了一下,好像有说自定义业务主键不能saveOrUpdate,后来是发现自己的配置档写错了,主键类型设置的native,其实应该是assigned,似是而非危害很大啊。
更改了主键类型再使用saveOrUpdate就没有问题了,这时候也就不需要delete+save来做saveOrUpdate的动作了,所以也不用去做delete表中不存在的pk了,最终,这个问题算是解决了吧。最少知道就算要强行去做delete数据库中不存在的主键,也可以通过编译hibernate的源文件来实现了。 2006/2/23 Hibernate变态的Dialect....书接上回……
中午吃饭的时候不死心,继续跟进,跟啊跟啊,总算跟到了源头了……
和猜测的一样,Oracle和DB2就是不同,要不怎么换了一个session就不行了呢。~
DB2和Oracle的Dialect里面有配置默认的hibernate.jdbc.batch_size,Oracle默认是15,DB2默认是0,顺便看了一下,mysql默认15,sqlserver默认和sybase的一样,都是0
不知道怎么想的~要不就都默认0,这东变西变的实在是让我等小辈不堪其苦~
哎~~一天的时间就花在找这个原因,昏啊~~
把之前更改的hibernate3.jar替换回来,在xml中配置hibernate.jdbc.batch_size去~
生闷气中…… Hibernate一个见鬼的怪事在做一个数据交换的项目的时候用到了hibernate这个东西,可是屡次发现出现怪事情,就是不知道怎么回事,情况如下:
我先抓一个hibernate的session
然后创建一个对象,key是assigned的类型
Obj obj = new Obj();
obj.setId(1000);
session.delete(obj);
这个时候我并不知道数据库里有没有对应的1000的这个记录,然后我抓取oracle的session,顺利执行,没有问题,我再抓取db2的session,怪事出现了,竟然报错说
11:31:45 [org.hibernate.event.def.AbstractFlushingEventListener]-[ERROR] Could not synchronize database state with session
org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1 at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:27) ....
百思不得其解,搞了一下午还是没解,昨天晚上把hibernate的包重新下载了一个,包括源文件一起倒入到工程,跟踪……发现原来Oracle是跑到一个BatchingBatcher的类,而DB2是跑到了NonBatchingBatcher里面,在NonBatchingBatcher判断如果处理的返回结果不为1,则throw exception....
不管怎么样,总算知道问题在什么地方了,有时间再找为什么会跑进了NonBatchingBatcher里面了,项目很近,先编辑一下NonBatchingBatcher这个class,直接替换掉,最少我现在的这个工程是可以通过的,其他的当然一定不可以这样子的。
替换NonBatchingBatcher.java如下:
//$Id: NonBatchingBatcher.java,v 1.7 2005/12/06 22:27:12 oneovthafew Exp $
package org.hibernate.jdbc; import java.sql.PreparedStatement;
import java.sql.SQLException; import org.hibernate.HibernateException;
import org.hibernate.Interceptor; import org.hibernate.StaleStateException; /**
* An implementation of the <tt>Batcher</tt> interface that does no batching * * @author Gavin King */ public class NonBatchingBatcher extends AbstractBatcher { public NonBatchingBatcher(ConnectionManager connectionManager, Interceptor interceptor) {
super( connectionManager, interceptor ); } public void addToBatch(int expectedRowCount) throws SQLException, HibernateException {
final int rowCount = getStatement().executeUpdate(); //negative expected row count means we don't know how many rows to expect if ( expectedRowCount>0 ) { if ( expectedRowCount>rowCount ) { // throw new StaleStateException( // "Unexpected row count: " + rowCount + // " expected: " + expectedRowCount // ); log.info("Unexpected row count: " + rowCount + " expected: " + expectedRowCount); }
if ( expectedRowCount<rowCount ) { // throw new HibernateException( // "Unexpected row count: " + rowCount + // " expected: " + expectedRowCount // ); log.info("Unexpected row count: " + rowCount + " expected: " + expectedRowCount); } } } protected void doExecuteBatch(PreparedStatement ps) throws SQLException, HibernateException {
} }
靠,该死的问题总算是有了能解得眉目了,自己摸索着做东西还真累~碰到奇怪的问题都无解的说。 2006/2/13 在Log4j关掉自己不想用到的log很简单的一个参数,在log4j的properties里面增加一行
log4j.logger.限定名=ERROR,于是就只把某一个包中的只有ERROR的信息才打印出来。
例如:
log4j.logger.org.hibernate=ERROR
之前不很了解,还专门再去实例化了一个SimpleLog,因为在用betwixt里面想要关掉一些log,就用它本的setLog把simpleLog塞进去。后来hibernate不能用这个办法解决,google一下,发现原来有这样简单的方法,嗯,前人的经验还是很重要呢。~ 2006/1/10 一个Mission Impossible……目前在做HOLA的东东,今天早上开会,提到了一个需要解决的问题,初看起来,基本上就是Mission Impossible了。
东西是这样的: 对方提供给我们退货单让我们接收,并且放到B2B平台,这里看起来还好,只是数据交换就可以了。 然后,在B2B平台上,厂商有登陆查看报表,并且打印,更新了一个printdate的时间,表示这个单子被处理过了,直到这个退货单有变更传过来,取消或者更新退货单,这时候需要厂商重新处理,本来的做法是先删除掉平台中这个被处理过的退货单,用新交换过来的退货单替换掉,看起来还好,可是,第一个问题出现了,对方不是按照SA的规格中的递增来做,对方理解的递增显然和我们理解的递增有了误差,于是每天的第一个出现的退货单会在当天之后的所有的交换都被重复的交换,所以,按照我们的逻辑,厂商更新的printdate也被反复的清空,其实……退货单并没有作更新。
那么,我们来做处理,可以做一个交换的历史纪录,把新交换过来的退货单和历史纪录比较,看看是否有变更,怎么比较呢?其实在数据中,有一个modifydate的字段来标示这个退货单是否有被变更过,我们就可以对比相同退货单的modifydate找到这次交换过来有变更的退货单,那么就可以不用把所有的交换过来的退货单都当作需要变更的处理,以至于厂商的printdate被反复清空,问题好像解决了,于是……更强的第二个问题出现了,对方不能提供退货单的变更日期,需要我们处理,也就是说,对方在系统内做过了退货单的变更,可是不能给出变更日期,只能把变更过的退货单传送给我们,modifydate为空,需要我们去填写……
整理一下: 1.对方每次交换都回把今天所有的退货单抓出来发给我们。 2.从某一笔开始,退货单某一栏位改变了,继续发给我们。 3.标示变更日期的modifydate为空,要从我们这边填写上。
哑然……对SA发出疑问,这样的需求合理么?SA说:数据就是这样给的,我们就要想办法做。 哦…………
那么想想: 如果对方每次只给变动的,那么可以根据PK找出来第二次传过来相同PK的数据,就是有变更的数据,可是对方显然不会只传变动的,那么……第一个方法就此宣告over,不过有一个概念可以继续使用,我们拿什么日期填入modifydate呢?对于我们这边来说,只能是接收进来的时间,经SA确认OK。
既然第一个方法行不通,那么再来考虑第二个方法。因为会要做log表,每次交换过来的数据都放入log中,就可以把最近log的数据做一个distinct,这样可以拿到没有重复的退货单数据,就先假设是今天吧。我们拿到了今天的所有无重复的退货单数据后,就可以根据退货单的PK去order by,然后再作count的动作,这样子我们可以得到今天每一个退货单的count数量,如果没有变更,那么这个count应该就是1,因为我们做了distinct,假如这个count大于1,那么就代表今天这个退货单有过变更的数据传输过来,我们再根据log中退货单的PK distinct就可以找到这些退货单,用他们进入log的时间排序,可以找到最大的那个时间,把这个时间更新进入这次交换进来的相同PK退货单的modifydate就能完成了更新退货单的变更时间。有了这个变更时间,就可以用第一个方法去处理退货单……天啊,还真罗嗦,只缘于双方的定义不一致……
还好Oracle里面有minus的方法可以对两个ResultSet进行相减,否则……只是判断记录的重复就会死人了吧…………
天啊,这个怎么都感觉很怪异很危险呢?闪先,吃饭去,让SA先定义需求好了。 2005/11/8 薏米仁的做法把薏米仁洗干净,用清水泡着
一般来说需要泡到4~5个小时,不过我工作白天不在家,于是也就头一天晚上泡着,第二天晚上回来做,也还效果不错。
泡一些绿豆,时间不用太长。
先把薏米仁下锅煮,一般这个时候我才泡上绿豆,大概1个多小时,薏米仁煮开了,把绿豆加上冰糖放下去继续煮,如果有糯米可以也放一些,煮上半个小时,加一些冷水和葡萄干,继续煮上半个小时,新鲜可口的薏米仁粥就作好啦。
嘻嘻,这两天晚上吃的很不错,就着一些咸菜,吃的是有滋有味 2005/6/3 DB2数据库里的充0select repeat('0',8-length(rtrim(char(bigint(substr(t1,6))+1)))) || rtrim(char(bigint(substr(t1,6))+1)) from luss where t1 like '00034%' repeat('str',count)是返回'str'重复count次的字符串 于是就可以按照目标长度字符串-选择出来的字串知道需要增加多少个0,于是…… 2005/4/11 给apache添加用户密码文件为了防止到时候不知道命令方式和文件放到什么地方了,先记录一下好了 htpasswd.exe在apache自己的bin的目录下 使用方式htpasswd authfile username 之后会提示输入密码 authfile放在g:/viewcvs目录下 2005/4/8 Using Subversion With ViewCVS For Windows软件列表: 在开始之前,你需要安装Subversion, Apache2, Python, Python Win32 Extension, Mod_python 上面的步骤执行完成以后,开始安装ViewCVS,检查path路径中是否放了python的路径,或者输入python的文件夹。执行安装执行脚本 Subversion档案库建立 修改Apache配置档,使用Module的方式来执行,速度比cgi的要快 LoadModule python_module modules/mod_python.so ScriptAlias /view "g:/viewcvs/www/mod_python/viewcvs.py" 更改ViewCVS配置档 svn_roots = lh: g:\svn\lh default_root = lh Address和language可以按照需求更改,我这里设置language=zh-CN 重启Apache就可以了,因为Subversion在windows下的安装有很多相关的网页说明,而在windows系统下集成viewcvs和subversion的说明性资料就几乎没有了,最后找到一个韩文的资料页面,虽然看不懂韩文,不过大致可以明白流程,这么困难的设定好了,还是有留下一些资料好了。 还有关于subversion存取级别的设定,本来以为官方说明中htpasswd -c /etc/svn-auth-file harry里面htpasswd是linux系统的命令呢,没想到是apache目录下bin里面的一个可执行文件,按照官方文档里面的说明就很简单的设定了。 原文引用 http://wiki.kldp.org/wiki.php/SubversionWithViewCVSForWindows 2004/12/14 Jbulider中光标错位的解决方法目前有2种解决方法。 第一种是把字体大小调整到某一个字号,然后基本能够达到光标和定位对齐的目的。 第二种是把关键字字体的样式全部去掉(加粗/倾斜...) 目前我是使用的第二种的方法。 2004/12/13 正在研究msn spaces不能上传图片的原因搞了一个下午,总是到下载MSN图片上传控件时候卡壳不动了。 最后才发现原来是公司的网络限制了cab的文件下载,不知道公司是什么意思…… 查看网页代码,把需要注册到机器上的cab包找了出来,拜托朋友下载后通过MSN传了给我,可是手工注册以后发现不能浏览到图像文件,极度郁闷中。 明天再过来看看有没有什么好办法,不行的话给MS发信问问看~ 为什么MS不提供这个的电话支持呢?? 明天还有一堆的工作呢~~:( 哎,总之一个郁闷的下午 |
|
|