2007年8月30日
今天一个同事碰到dll hell问题,简单说就是vb6中修改src时候,改变了接口的参数数目,结果编译后就重新生成clsid, 原先使用这个dll的地方就必须重新注册,否则无法使用。 原本以为com已经成为历史了,不想现在还还会遇到这种问题,幸亏及时想到这个可能性,不然又要花费一些时间来寻找原因了。现在很多人好像已经不知道com为何物了。。。
错误提示: 将 COM 对象与其基础 RCW 分开后不能再使用该对象 原因: 在Finalize中调用了com对象的方法 解决方案: 显示调用,而不是放到析构函数里面 参考: http://www.cnblogs.com/LzmTW/archive/2006/12/21/59... http://webnews.giga.net.tw/article/news.microsoft....
2007年4月12日
- thread间共享变量时候要使用VolatileWrite/VolatileRead,保证写入读取及时得到反映。
- 使用ODP.net时候,尽量不要用abort方法来中止thread,避免出现内存泄露。
- 对限制资源的访问需要锁定资源。 有很多方法锁定方法。
- deadlock的防止策略
- Thread中用raiseevent引发的事件,在其他thread中是同步的,需要注意。如果需要,要用代理来实现异步调用。
感想:相对于vc ++来说,.net中多线程的现实容易了许多。 比如进程间共享数据,原先需要用filemapping,现在可以直接共享。
2007年4月10日
最近开始的项目使用的数据库升级了,旧系统是9i新新系统采用10g。 新系统初期需要从旧系统中导入数据,这几天一直在查找相关资料。 遇到的问题: 1. 旧系统24*7运行,新系统运行前,不能常时间停止服务。 2. 数据量大,至少有xxxGB的数据,甚至可能到TB。 Oracle官方推荐了4种升级方式: The following sections describe the upgrade methods you can use to upgrade your database to the new Oracle Database 10g release: · Database Upgrade Assistant · Manual Upgrade · Export/Import · Data Copying 第一种是用DBUA工具,优点是升级速度快,缺点是一旦升级失败,会造成原有数据库不可用,风险很大。 第二种没有仔细研究,和第一种方法类似。 第三种用EXP、IMP来导数据,好处很多,但是数据量巨大的时候,无法接受等待时间,时间风险很大。 第四种使用db link直接copy数据,要求网络直接对接。 以上四种方法各有优缺点,最后在oracle官方的案例里面看到Amadeus的方案: Using TTS for Fast Database Upgrades with Minimal Downtime (PDF) 用Transportable Tablespace来copy数据,TTS只有在copy所谓metadata的时候会比较费时间,其他数据的 copy都是和文件传输速度差不多。 另外一个文档也可以参考一下,文档中说downtime只有10分钟左右,真是做的很棒!
2007年3月30日
Selenium是什么? 它用来对Web应用程序做功能或系统测试。这些测试有些时候也被称作接收测试/用户测试/集成测试。Selenium不止意味着单元测试。
ibm网站上的介绍:http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/ Selenium指南:http://wiki.springside.org.cn/display/springside/Selenium Selenium Core FAQ :http://wiki.javascud.org/display/SEL/Selenium+Core+FAQ
我想Selenium最cool的功能应该是用firefox下的插件Selenium IDE来生成脚本。 WatirRecorders 好像还没有动工,WatinRecorders已经出了0.1版了,值得期待。
刚刚发现类似于watir的dotnet版本,名字叫watin,读what in。 项目主页: http://sourceforge.net/projects/watin/WatiN (pronounced "what-in") stands for Web Application Testing in dotNet. Inspired by Watir, WatiN enables web application testing, through Internet Explorer on a Windows platform, expressed in any .Net language. watin中好像没有watir中frame有时无法访问的bug。 3月份刚刚release了1.0,有空来试试看:) 突然发现dotnet的open source很活跃阿。
2007年3月27日
这几天一直在看Agile web development with rails这本书。 看书之前想到了下面几个问题,需要在书中寻找: - 如何进行输入validate,比如必须,数字,日期,范围,怎么做一般的逻辑检查?
- 如何改变输入的默认形态? 比如datetime的默认形态是:yyyy-mm-dd hh-mm,怎么使用yyyy-mm-dd?
- password的设置,怎么加密?
- 下拉选择框怎么实现?
- 有没有masterpage?
- session , cookie怎么使用?
- 如何迁移页面?
- transaction怎么实现?
- unit test怎么做? performance test呢?
- active record 对多个表的处理?
- ajax有么?
- web service 怎么去用?
- cache 怎么用?
看了4天,终于看完这本书了:) 上面的问题除了5,也都找到答案。 看完书的总的感觉是,rails 改变了我们的开发模式, 可以把注意力集中到更加抽象的层面,很快的开发出原型进行迭代开发,另外就是动态语言的表现真的很cool。
2007年3月26日
第一次使用ruby on rails 还是在2005年,当时很震惊竟然可以这么快速的开发web应用。ROR使用MVC,他的设计原则是“不要重复自己”(Don't Repeat Yourself)和“成规优于自定”(Convention Over Configuration),对大多数使用者来说,入门难度很低。因为简单高效,使得ROR很快流行起来。 从初次使用到现在,期间一直用java或者.net来开发,几乎没有碰过rails, 只是偶尔用ruby写写小程序来提高开发效率。最近比较有空,重新耍耍看。 下面是安装步骤 - 安装ruby ,从rubyforge.org可以下载,windows user可以从http://rubyinstaller.rubyforge.org安装oneclick的version.
- 用gem安装rails以及需要的模块:C:\> gem install rails --include-dependencies
- IDE可以从http://www.radrails.org/下载
参考: - Ruby on rails 的 wiki
- homepage
- java eyes 的 新手十分钟初体验
2007年3月23日
很多公司被禁止访问网络,只能收发email。 当然公司这么做也有他的原因。 其实,只要能收发email,你可以访问互联网几乎所有的资源。 前几天搜索到的一篇指南: Accessing the Internet by E-mail FAQ 可以通过邮件访问ftp,http,newsgroup 等等。。。 If you don't have direct access to the Internet through your BBS or online service, you're not alone. Many of the world's countries with Internet connections have only e-mail access to this world-wide network of networks.
2007年3月22日
2007年3月5日
在前面的 一篇blog中,使用到了这样的代码
1 class SongList 2 def [](key) 3 return @songs[key] if key.kind_of?(Integer) 4 return @songs.find { |aSong| aSong.name == key } 5 end 6 end
在第四行中,有find这样一个方法,可以按照指定条件对songs进行遍历,最终返回一个符合条件的个体。 下面就来看看这个方法到底是怎么实现的,
1 class Array 2 def find 3 for i in 0 size 4 value = self[i] 5 return value if yield(value) 6 end 7 return nil 8 end 9 end 10
发现是在Array这个类中,增加了一个method,在method中嵌入了一个遍历操作。 如果只是这样的话,那么ruby和其他语言也就没有什么差别了,我们注意到第5行中有 yield 这么一个东东。其实他起到了一个代理的作用,实现了实际操作部分和遍历的分离。
再看看下面这个例子,来了解一下yield的功能。
1 def threeTimes 2 yield 3 yield 4 yield 5 end 6 threeTimes { puts "Hello" } 7 8
这里定义了名叫threeTimes的blocks, blocks中会重复3次外部的操作,当row 6的代码执行后,会得到后面的结果:
可以看到blocks为我们提供了如此灵活的手段,其实他语言中需要通过代理或接口或函数指针来实现。 其实.net 3.x以后的版本也提供了类似的功能,一个叫LINQ(Language Integrated Query )的东东。 可以使用类似SQL的方式过滤集合
LINQ Query:

 string[] names = { "Geoff", "Jessica", "Mike", "Megan",
"Priscilla", "Jack", "Alma" };
IEnumerable<string> expr = from s in names
where s.Length == 5
orderby s
select s.ToUpper();
foreach (string item in expr)
Console.WriteLine(item);

上面的用法是不是很简洁方便?
用ruby来实现的话,将会是这样:
1 names = [ "Geoff", "Jessica", "Mike", "Megan", "Priscilla", 2 "Jack", "Alma" ] 3 4 expr = names.select { 5 |n| n.length == 5 6 }.sort.collect { |n| n.upcase } 7 8 expr.each {|n| puts n }
正因为blocks如此方便,在阅读ruby程序的时候,可以看到被广泛的使用着。
2007年2月22日
2007年2月20日
2006年3月15日
在GridView 的属性中,将某个column设置为:
DataFormatString="{0:yyyy-MM-dd}" 发现格式化并没有起作用,同时修改
HtmlEncode="False" 才会发生作用, 为什么呢?
google了一下,发现了微软的说明,还有这里有更详细的解释:
When the HtmlEncode property is true, the value of the field is HTML encoded to its string representation before the formatting string is applied. For some objects, such as dates, you might want to control how the object is displayed with a formatting string. In those cases, you must set the HtmlEncode property to false.
2006年3月14日
使用VS2005开发时,在IDE 菜单中选择 Web Site -- Asp.net Configuration 可以通过自带管理页面可视化配置你的项目。
可是发布项目的机器上并没有安装VS2005,仅安装了framework 2.0。 按照以下步骤即可使用此工具:
- 在开发的机器上(安装VS2005)通过菜单配置你的项目,记下此时的url,我的是:http://localhost:4343/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=D:\source\TaskSystem\&applicationUrl=/TaskSystem
- 在目标机器上将次目录C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles通过IIS建立一个Application ,可以使用默认的名字,当然也可以改名,配置属性支持asp.net 2.0。
- 发布你的项目比如TaskSystem到C:\Inetpub\wwwroot\TaskSystem
- 修改上面的url,http://localhost/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=C:\Inetpub\wwwroot\TaskSystem\&applicationUrl=/TaskSystem
- 通过此url配置你的应用程序:) 最好把它加到收藏夹里面,就不用记了。
注: 由于安全限制,只能在本地访问此链接。 本文所涉及的内容仅在win2003中测试通过。
|