博文

LiteBlaster 正式发布(2007-06-09 17:22:00)

摘要:前些日子本人的网站终于有稳定的服务器了,所以狠狠心买了域名+四线空间+数据库 各位有空去逛逛~~~ http://www.auwaysoft.com/ 现在介绍下 LiteBlaster LiteBlaster 是一款基于 .NET Framework 原创的 ASP.NET 论坛系统。后台程序库采用 C#/VB.NET 编写,前台采用 DIV/TABLE+CSS+JavaScript 的形式,并灵活运用 AJAX 技术为客户端带来不一样的体验。 主要特性 基于 ASP.NET ,利用 ASP.NET 强大的基础框架可以高效完成数据库读写并提供便捷的扩展途径。 提供丰富的 CSS 内置样式,方便美工人员修改界面。 AJAX 技术的引入(不影响传统浏览方式)令回帖、编辑帖子、修改设定等操作实现真正的“页面无刷新”,快速响应与低带宽一直是 LiteBlaster 的设计目标之一。 突破性地完整支持 MS Access、MS SQL Server 以及 MySQL 数据库,一份论坛程序同时具有三种数据库连接能力,一次程序扩展即可让三个数据平台受益。同时,论坛程序专门针对 MS SQL Server 以及 MySQL 提供了部分查询优化,提高查询速度。此外,您还可以使用与 MS Access 相兼容的数据库作为后台,论坛程序将以 MS Access 兼容模式访问该数据库(通过 OLE-DB)。 提供智能易上手的数据库备份、还原功能。 详尽的用户组管理及经验值管理策略让论坛管理更加积极主动,创新的单用户双用户组设计可以更加灵活地组织用户权限。 对敏感性的密码、提示问题答案等均采用 MD5 扩展方式不可逆加密保证用户信息的安全性,同时提供多个解决方案方便论坛管理人员维护论坛秩序使其时刻符合相关法律条文要求。 论坛程序相当多的内容都提供了 UBB 代码、表情符号支持,您可以通过灵活的 UBB 制作丰富多彩的富文本信息。 系统的经验值管理策略及多样的经验值奖励方案让论坛体验更加丰富。 最佳回复、快捷版面订阅、吸附式投票设计等特色功能使得论坛增色不少。 希望各位喜欢并支持!! 到http://bbs.auwaysoft.com/逛逛或者去http://www.auwaysoft.com/LiteBlaster/查看更多信息......

阅读全文(2993) | 评论:0

.NET 窗体间传送数据方法谈 —— 迟来的补遗(2007-05-07 03:16:00)

摘要:其实这篇文章早就该写出来了。毕竟有关WinForm窗体间传送数据的帖子在.NET相关版面中相当有热度。 本人当初考虑起笔的时候,感觉这个东西不是三言两语就能搞定的,毕竟方法甚多,要说清楚也不那么容易。其次呢,我这人并不勤于笔墨,更新最快的live space频率最高的时候也就一星期一篇而已。 现在仔细思量了一下,还是早点出的好。于是打算结合之前遇到的问题,稍微将解决思路一带。复杂的技术就不再细说,重点提供各位几种实用易上手的方法。 注: 本文中提到的方法可能会不定期补充,毕竟我不能保证一次性总结那么全面(更何况我一直不擅长总结~~,大家发现什么其它方法或者俺没说清楚的地方给俺说声)。 以下所有方法均基于两个普通窗体类Form1、Form2(实例对应f1、f2);如果没有专门说明,这两个类均位于同一程序集中。 传送的数据均以32位整型为例。 如果没有单独说明,就按照双向传送数据对待。 本文中提到的数据传送方法并不仅单单适用于窗体间数据传送,很多方法同样适用于更为宽泛的类数据传送。 方法一:静态变量法 优点:发挥静态变量的优势,很少代码就能搞定。 缺点:静态变量也容易导致多个窗体共同访问时出现混乱,并且在这两个窗体类的多个实例之间传递的时候不具有相互独立性。 Form1或者同一程序集的其它类中声明一个静态中间变量,如     class Form1 : Form{
        ...
        public static int internalVar;    // 也可以是internal static
        ...
    }  然后,Form1以及Form2的实例自然可以方便地访问Form1.internalVar这个中间变量了。 ......

阅读全文(3932) | 评论:1

Opera 之 Browser JavaScript(2006-12-11 17:07:00)

摘要: LiteBlaster 论坛程序新版本今天测试哈……   按照惯例,俺是要完全兼容 Opera 滴,不过测试的时候偶尔发现一句: “Opera has modified the JavaScript on 192.168.1.111 (Rich text editor submit fix). See browser.js for details”     奇怪,以前从来没碰到过这个啊??还browser.js呢~~~不行,要坚决解决,最爱的 Opera 一定要全兼容啊……   去 Opera Community 和 Opera Support 上和 E 文奋战了 N 长时间才了解到:Browser JavaScript 是 Opera Fixing the World 计划的一部分,通过修改不兼容网站的 js 脚本来解决兼容问题。   我就更奇了怪了,我的网站差不多就是按照 Opera 标准做的,怎么不兼容了?   再翻 browser.js 源代码一看才恍然大悟,Opera 为了修复某网站的 rich text 提交问题而发布了兼容脚本,源码如下:  }else if(  name.indexOf('/richtext.js')>-1  ){ // Bug 230549, bug 208097
   // Rich text editor checks for "On" where Opera and FireFox return "on". sigh.
   addPreprocessHandler( 'designMode != "On"', 'designMode != "on"', true, function(t){return t.indexOf('kevinroth.com/rte/demo.htm')>-1;} );
   opera.postError('Opera has modified the JavaScript on '+hostname+' (Rich text editor subm......

阅读全文(5242) | 评论:0

LiteBlaster 后期开发有感(2006-08-23 18:12:00)

摘要: 这个论坛程序折腾了我一个暑假,本来暑假就短……现在第一个版本终于全部封装完毕了,准备内部测试。

 我想开发中应当没有什么,一切都很顺。但到后期时间一紧就容易出乱子,眼看暑假就要OVER了,开发自然要逼快一下了,很重要的后期工作中出了些麻烦,在这里分享下顺便发点牢骚~~
 顺便提一下,LiteBlaster采用ASP.NET 1.1(毕竟.NET 2.0的服务器少啊……)作为服务器技术,页面采用传统Table布局和DIV混合的方式,用CSS和JS定位,并用AJAX给绝大部分模块作了个外壳。数据库设计兼容MS Access,MS SQL Server以及MySQL。

 这样形成了一个免费一条龙的开发、使用流程:开发主要用SharpDevelop、ASP.NET Matrix、Dreamweaver,使用的时候挂上Access或者MySQL,的确是免费……不过Dreamweaver是个麻烦事(要好多米啊)……不过也好替代,比如高级记事本之类的,我用的是EmEditor。因为这个项目的确用不到什么界面设计的地方,关键的用于元素定位js和css都是服务器动态分发的,Dreamweaver显然找不到这些文件,所以设计模式没啥用,一直就用代码模式在写……平时只修改一个文件的时候就直接用EmEditor了。其它的辅助工具像NUnit、FxCop等也是免费的。
 
 兼容多个数据库是比较头疼的地方,不过相信也是优势。需要加个中间层再作一些特殊处理。另外由于针对SQL Server和MySQL作了一些优化,再加上起初程序底层架构过于垂直化,所以中间层以上部分仍然有些地方需要跨过中间层之间访问数据模块。这铁定是今后重构的重点。

 在这里,我要把大多数的牢骚送给MySQL。

 这个暑假是我第一次使用MySQL,所以有很多都不大了解。当然MySQL的SQL语法自然是清楚了,其中最喜欢的就是LIMIT子句,分页太方便了。

 不过我在开发过程中一直使用Access来进行简单的单元测试和阶段测试,到最后一块测试的时候发现连接不上MySQL。仔细一查,发现OLE-DB连接服务MySQLProv要自己安装……我想没有哪个......

阅读全文(2989) | 评论:0

C# 3.0 特性预览(2006-05-20 23:57:00)

摘要:    声明:本文主要是根据微软《C# 3.0 Specification》文档翻译而成(本文内容并非完整按照该文档进行编排),并对msdn相关文档中的资料进行整理而成。若有翻译不妥之处,恳请指正。
    
    阅读本文前,需要了解:
    1、C# 3.0代号“Orcas”,是基于C# 2.0的扩展。提供了多种具有更高层次功能的类库。这些扩展允许构造组合(compositioanl)API来实现具有同关系型数据库及XML等领域相等效能的表达效力。
    2、LINQ项目可以看作是一个未来技术的演示项目,可以从MSDN网站上下载预览包。LINQ项目旨在扩展C#及VB.NET在语法上对语言集成查询的支持。借助这些特性,我们可以用类似SQL或者XQuery之类的语句进行代码编写。LINQ项目的内容不单独介绍,因为它对于C#中的特性主要就是C# 3.0中的语言集成查询特性。
    3、写这篇文章的目的很简单,就是希望有兴趣的朋友可以开始3.0的探索了,这样当3.0的编译器出台时不至于再赶时间学习。并不建议初学者花费精力来掌握本文内容,了解一下发展概况即可,否则很容易导致两头都搞不好。况且这并不是最基础的内容。
    4、本文内容仅基于预览版本内容(PDC 2005 Technology Preview),并非最终版本。C# 3.0完成后,有可能会增加或者更改某些特性。预览版本可能还不能支持C# 3.0中的某些内容,对于这些内容,将简单介绍。
    5、本文旨在将新的特性展现出来,针对每个特性并不进行深入的探讨,读者如果有兴趣可以自行参阅相关资料。
    
    那么,我们就开始吧。
  &nb......

阅读全文(3859) | 评论:1

C# 2.0 特性介绍(2006-04-23 01:35:00)

摘要:注意:C# 2.0大纲根据网络资料收集整理而成,并在各个部分加以个人的理解以及运用。本文中的内容并不能够达到完整的层次,但是覆盖最基本的要求,并且往往可以通过本文的内容举一反三使得自己提升到更高的层次。如果有不足之处,恳请指点。     C# 2.0需要支持.NET Framework 2.0的编译器,对于MS来说就是VS 2005,开源社区的SharpDevelop2也是不错的选择,但是Borland最新的C# Builder 2006暂不支持.NET 2.0。在这里列举这些特性的目的就是让各位已经开始使用VS 2005等开发工具的朋友可以在短时间熟悉新语言环境,运用新的语言特性,高效率完成任务。
   
    C# 2.0引入了很多语言扩展,最重要的就是泛型(Generics)、匿名方法(Anonymous Methods)、迭代器(Iterators)和不完全类型(Partial Types)。
    1. 泛型允许类、结构、接口、委托和方法通过它们所存贮和操作的数据的类型来参数化。泛型是很有用的,因为它提供了更为强大的编译期间类型检查,需要更少的数据类型之间的显式转换,并且减少了对装箱操作的需要和运行时的类型检查。
    2. 匿名方法允许在需要委托值时能够以“内联(in-line)”的方式书写代码块。匿名方法与Lisp语言中的拉姆达函数(lambda functions)类似。
    3. 迭代器是能够增量地计算和产生一系列值得方法。迭代器使得一个类能够很容易地解释foreach语句将如何迭代他的每一个元素。
    4. 不完全类型允许类、结构和接口被分成多个小块儿并存贮在不同的源文件中使其容易开发和维护。另外,不完全类型可以分离机器产生的代码和用户书写的部分,这使得用工具来加强产生的代码变得容易。
   
    不过呢,虽然具有这些改进(有的需要从.NET内部进行革新),但是在源代码级别将保持高度的兼容性,所以完全可以放心遗......

阅读全文(5164) | 评论:1

论Borland转让IDE业务(2006-02-14 14:07:00)

摘要:   太平洋时间2006年二月8日凌晨1时,Borland发表声明:Borland以1亿美元收购测试工具厂商Segue,同时为了促进Borland向应用软件周期管理(ALM:Application Lifecycle Management)厂商转型,Borland决定出售自己曾经赖以生存的IDE(Integrated Develop Environment)业务。(原文见此)    这次出售的IDE产品线包括Delphi, C++Builder, C#Builder, JBuilder (和Peloton), InterBase, JDataStore, nDataStore, Kylix以及Turbo系列产品及工具。   一、我记忆中的Borland    Borland曾经是专门研发IDE的厂商。在当年,IDE市场是一个竞争非常激烈的大环境。在其中,有Borland, HP, Intel, IBM, Microsoft, SUN, Symantec等一群重型厂商。在打拼多年之后,能够还留有较多实力应该是只剩下Borland和Microsoft了。而后者并不是以IDE为盈利点。只有Borland是利用自己的IDE研发实力证明了自己的存在价值。    Borland的IDE产品线享有盛誉,从最老的Turbo系列(Turbo C和Turbo Pascal更是经典)到目前的Borland Developer Studio等都深受广大开发者的喜爱。    Turbo C, Turbo Pascal到现在一直都有很多人依然在研究(尽管已经早已超出了产品生命周期);C++ Builder见证了Borland研发C++的实力;Delphi更是将一个即将死亡的语言(Pascal)挽救了回来并让其成为了主流语言,并打败了RAD鼻祖级软件、Microsoft力推的VisualBasic,同时曾力挽狂澜挽救了风雨飘摇的Borland,并在今年迎来了她的10岁生日;Delphi向Linux移植的产品Kylix(尽管这可能是一个错误的决定)很快成为了Linux上的首选开发工具;JBuilder更是值得所有Borlander自豪的产品,它在竞争激烈的Java开发市场中将S......

阅读全文(4140) | 评论:1

串行事务调度初窥(2005-07-12 18:55:00)

摘要:“事务(Transaction)”应该可以认定是一个数据库术语了,但在本文中它可被宽泛地认为是一个可供调度的信息集合,被交通员调度的车辆便是生活中的例子。
“串行”是对目前大多数人进行开发的串行机而言的,即在每一个时间步只执行一个指令,操作一个数据。也就是说,本文不涉及并行算法。
本文旨在介绍事务调度的最基本的几种管理方案。此方案没经过特殊优化,模型很可能效率不高,但足以描述几种调度思想。
下面,我们将从简易的队列开始模拟事务的调度。


一.队列
队列(Queue)是基本的算法结构之一,采用FIFO(First In First Out)机制,体现传统的“先到者先得”的思想,要求事务执行的优先级以事务加入的时间为线索。
调度模块通常有两部分组成:监听和事务处理。以后各节均以此为模版讲解。
首先,应当阐明本例中可用到的队列方法:Empty()返回一布尔值,标明队列是否为空;Front()返回队列的队头事务;EnQueue(Code c)将事务t插入队尾;DeQueue()将队头删除。
然后,假定当前用于缓存事务的队列为TransQ,那么监听代码可写作:
public void Listen(){
    Code c;//c用于储存属于某个事务的指令
    while(AppRun){
        //AppRun是一个布尔变量,用于终止程序

        //得到要加入的事务
        AcceptNewTransaction(out c);

        //加入事务
        TransQ.EnQueue(......

阅读全文(4660) | 评论:2

虚拟机文化(2005-05-17 21:42:00)

摘要:注:文中的“虚拟机”指软件开发框架及现实的virtual machines。但所述特性并非适用于所有虚拟机。


现今的虚拟机技术日臻成熟,虚拟机的应用也越来越广泛。为什么呢?因为人们在总体上利大于弊的判断基础上逐渐接受了虚拟机。然而,人们往往去探讨如何更好地使用虚拟机来架构自己的程序,却没有认真研究软件开发中虚拟机思想的运用。
在这里,我将借剖析虚拟机的优势来引出部分有关思想。


一.跨平台
“跨平台执行”应当是每一个桌面用户的愿望:用着Windows的简便,想着MacOS的绚丽;WinXP够优秀,却难以运行早期Windows的非兼容程序及LE格式程序。于是乎,我们用VirtualPC和VMware去构建一个虚拟的操作系统,在新系统中执行我们的目的命令来完成相应操作;我们用WinXP的兼容性模式调整工具来运行早期Windows的非兼容程序;Lindows(现已更名为Linspire)也提供了折中的方案。
但是,这样只是委曲求全的方法,最根本的方法是:拿起电话,把那个程序员吼起床,然后告诉他“给我准备好XX平台上的程序”。当然,这显得不可理喻:一方面,没人有心情听你这样啰嚎;另一方面,构建跨平台的程序所需的技术又怎是一朝一夕完成的,应从基础库基准上按多平台需要进行开发。
“跨平台开发”绝对是每一个桌面开发者的美梦:有谁不想让自己的一份代码在多个平台跑起来?
wxWindows框架让纯编译的C++可以一码多平台,Delphi2005也可让代码分别编译为Windows和Linux的本地代码,这怎么不令人心动!.net Framework的开源实现mono以及JavaVM更令代码的多平台运行达到一个新的层次,让代码与操作系统相分离,并提供成千上万个类来提升开发生产力。
多平台是为了什么?简而言之,即提高市场适应力,更是提高竞争力。金山与IBM携手推出WPSOfficeStorm也可说明这一点。OpenOffice已成为昨日黄花,微软势必让其从Linux上绝迹,而Storm的推出压制了几乎所有Linux版中文字处理套件,市场反响很强烈。
这是从商业角度考虑的结果,如果从版本进化角度考虑,可以参见[二]。


二.无函数不定性
在NT技术刚......

阅读全文(4924) | 评论:0

Humane Programming——人性化编程(2005-03-26 09:53:00)

摘要:Humane Programming——人性化编程
    尽管现今各国均投入大量人力物力去研发所谓的真正的“人工智能”,但大家每日所对的计算机始终是个死物——一个让它做它才做的死物,甚至懂得罢工偷懒的死物。
    因此,支持库(Java VM,VB Runtime,.net Framework等)总是机械地吞吐着指令集中的动作。即使是那高智能的优化器,也只不过是将某句或多句汇编代码与优化库案例作对照,然后拟出相应的优化代码罢了(当然也并非如此简单)。
    那么,对于下面的案例,优化器又能做什么呢?
    小A为某网站的用户管理系统制作支持模块,具体来说,就是去写程序来管理用户信息。小A采用顺序文本文档为载体,亲自编写了针对顺序文本的繁琐的基本操作模块。但是运行之后,查找匹配速度极慢,I/O超出负荷,缓存文本大小呈几何级数增长。总而言之,该产品很不尽人意。
    然后,小A找来了优化器套件,优化器针对程序中所调用的函数库进行了部分更改后,带宽占用下来了、CPU占用率也下来了,但是最要命的速度与空间占用问题却得不到解决。这真是个耗时又不便利的豆腐渣工程。
    其实,我们早就发现,如果小A采用MySQL等专业数据库引擎作为后台支持,不仅有关代码的编写容易、维护方便,而且也不会出现速度滞后、空间利用差的问题。可是,优化器却不能为小A指出一条明路。
    尽管上面这个案例很愚蠢,但它也从一个方面向我们阐述:人对软件过程又绝对的作用。这就是Humane Programming的宗旨,要让每一句有效代码都人性化,让每一个开发阶段人性化,我们应当进行人性化编程。
    以下是我对Humane Programming的诠释。


一.不要总为简短的语句沾沾自喜
    似乎程序设计的进步总是伴随着编码量的减少。VB.......

阅读全文(4495) | 评论:0