BingBlog 鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。

BingBlog Pro1.2更新完成

06.26.2007 · Posted in Diary · with No Comments

最近有点不知道该干什么,然后很不自觉的就更新这个Blog,没想到每次都能发现许多需要更改和改善的地方,然后一改就是很久。慢慢发现“哇,原来代码也可以放在这!”,“哈哈,这样做不是效率更高?以前怎么没想到呢?”……嗯,相对于Pro1.1版本,这次的更新有以下一些改进:

  • 界面在一些细微的地方进行了进一步的改进,字体也要变的更有个性。
  • 优化代码,提高了运行效率。
  • 将功能进一步模块化,增强了松散耦合度。
  • 分页上增加了每页数据量的显示。
  • 增加了当天访问量的统计功能。
  • 增强了状态保留功能。现在无论在哪个模块刷新,都可以使状态准确无误的停留在当前页面。
  • 实现个性化配置,将显示数据量放置到了Web配置文件里面,以后可以方便设定每页显示的数据量。
  • 修正了WediaAjaxPro1.1的一些Bug,并最终能支持FF2.0的前进和后退功能。

这次的改版,对WediaAjax做了很多的修正,并最终可以使得WediaAjaxPro1.1在未来几天内将其发布。由于一些应用的需要,我可能会考虑将TabNavigator和Accrodian这两个控件集成到WediaAjax里面。

PS:暑假将近,原本想找一份IT的实习的,苦于现实无奈,投的简历一点反应都没有,唉~~~。算了,正好我现在对水泥、混凝土之流有了不少兴趣(我的专业是建筑材料),暑假还是去看看怎么搞水泥吧!IT方面,在实习结束后,我将着手分析SharpDevelop的源码,以增强自己在Winform方面开发的实力,并希望能自己开发出能编辑MXML和ActionScript3.0的IDE。另外我将着手研究CommunityServer2007的源码,前两天小看了一下它的开发源码,让我吃惊不少,“代码居然可以这样写?”,我想在开发思想上,我应该可以再上升一个档次,到时候让微软来找我!(靠,上次我的处女面试——微软面试,在第一轮笔试就被淘汰,郁闷。感觉只有一个,中国微软真的很傻……)

Flex图片上传——ColdFusion篇

06.13.2007 · Posted in Flex · with 1 Comment

前段时间做了不少关于Flex方面的开发,其中涉及到Flex电子签名的图片上传问题还有DataGrid的高级渲染,今天先讲解一下Flex的图片上传功能,以后有机会再讲解如何在DataGrid里渲染任何你想要控件。

现在,假设你在一个名为“canvas”的Canvas控件,你在上面画了一幅画,然后想将这个Canvas里面的画上传到服务器端,考虑到后台使用ColdFusion的比较多,我这这里也就使用ColdFusion作为WebService了,该WebService的名为:http://localhost/ColdFusion/UploadImage.cfc?WSDL 。如果谁需要ASP.NET的,可以在下面留言。具体解决方法如下:

ActionScript代码:

protected function SaveImage():void
{
    var imageData:BitmapData = new BitmapData(this.canvas.width, this.canvas.height);

    imageData.draw(this.canvas);

    // Add digital signature
    var now:Date = new Date();
    var text:TextField = new TextField();
    text.text = now.toString();
    imageData.draw(text,new Matrix(1, 0, 0 ,1 ,160, 120), new ColorTransform(1,1,1,0.6,0.4));

    // Get bytes stream
    var bytes:ByteArray = new ByteArray();
    bytes = PNGEncoder.encode(imageData);  			

    var imageName:String = "Canvas.png";

    // Upload as png format image
    this._ws = new WebService();
    this._ws.wsdl = "http://localhost/ColdFusion/UploadImage.cfc?WSDL";
    var saveImage:AbstractOperation = this._ws.getOperation("SaveImage");
    saveImage.send(imageName, bytes);
}

注意上面代码中的“PNGEncoder”函数,该函数是Adobe提供的,如果您将其上传为JPG格式的图片,还请去其官方网站下载相关解码代码。下载:PNGEncoder

ColdFusion端代码:

<cfcomponent hint="Save a image uploaded from flash" output="false">
    <cffunction name="SaveImage" returntype="string" output="false" access="remote">

    <cfargument name="imageName" type="string" required="yes">
    <cfargument name="imageData" type="binary" required="yes">
    <cfobject name="stream" action="create" type="java" class="java.io.FileOutputStream">
    <cfset stream.init(expandPath(arguments.imageName))>
    <cfset stream.write(imageData)>
    <cfset stream.close()>
    <cfreturn arguments.imageName>

    </cffunction>
</cfcomponent>

OK,可以测试了。如果还有什么问题,请留言。

BingBlog Pro1.1更新完成

06.11.2007 · Posted in Diary · with 1 Comment

此次改版终于完成了此Blog系统的后台管理程序设计,后台开发使用Winform开发完成,对所有的后台数据库操作进行可视化界面的管理。相对于BingBlog Pro1.0,此次改版有如下改进:

  • 界面进行了细微的调整和改进。
  • 纠正了目前已知的所有Bug。
  • 进一步规范了数据库。
  • 进一步规范了代码编写方式。
  • 进一步完善了WediaAjax Pro1.1。
  • 完成了Winform版的后台管理程序,具体功能如下:
    • 实现数据库的重新生成。
    • 实现数据从服务器到客户端、从客户端到服务器的转移。
    • 实现文章、产品、留言……模块的管理。

关于Flex获取浏览器URL及其参数的方法

06.02.2007 · Posted in Flex · with No Comments

最近有些烦躁,因而Blog写的很少了。也许这段烦躁的时期是必不可少的吧,总感觉自己需要些成长了。又开始庸人自扰了,进入正题。

前些日子做项目的时候,出现了这样一个问题,Flex里面需要根据浏览器的URL获得其参数,找了好久居然都没有发现ActionScript3.0里有获得浏览器URL的值的函数,郁闷之余,也只能想到ActionScript和Javascript的通信了,基本思路是使用Javascript获得浏览器URL,然后得出参数值,然后使用ActionScript调用该Javascript函数,获得值。首先假设浏览器URL如下:http://www.bingblog.net/a.aspx?id=99 ,目的是获得id的值。以下是Javascript代码:

function GetQueryStringValue(queryStr)
{
    var url = window.top.location.toString();
    var index = url.indexOf("?");

    if(index == -1) return null;
    else
    {
         var queryString = url.substr(index+1);
         var arr = queryString.split("&");
         for(var i=0; i < arr.length; i++)
         {
               var arr1 = arr[i].split("=");
               if(arr1[0].toLocaleLowerCase() == queryStr)
               {
                    return arr1[1];
               }
	 }
          return null;
    }
}

Flex端代码:

function GetQueryStringValue(queryStr:String):uint
{
     return uint(flash.external.ExternalInterface.call("GetPatientID", ["id"]));
}

注意:上述Javascript代码只能在Flex里生成的html文件里面写入,并且只能在该默认的文件配置(即Flex生成的文件)下才能被调用。

OK,果然是烦躁了,写Blog都写的有点不耐烦了。今天睡觉去,明天再好好工作。另外,今天是六一儿童节,是儿童的,“节日快乐”!

关于Apollo

05.15.2007 · Posted in Flash · with 1 Comment

前些日子在和朋友讨论关于Apollo、Flash、Flex,还有Blend、SliverLight这些让人非常痴迷的技术,似乎对于桌面开发,Adobe和Microsoft这两家公司现在正搞得如火如荼,甚至有人提出来SliverLight将扼杀Flash这样的言论。在这我不想讨论这两家公司到底谁会胜,谁会负,处于对Flash的热爱,我想对Apollo的发展提出我自己的一些想法。

Apollo在上个月的Alpha1.0 版本可以提供下载,兴奋至极,很快就将其SDK还有对Flex2.01的扩展下载下来,然后好好玩弄了一番,结果并没有给我什么惊奇,反而却有点失望,有人给我说人家毕竟在Alpha1.0版本嘛,不要要求太高,但实际上我的感觉是Apollo的走向不对。Apollo的思想是融合已有的技术,比如Flex、Flash、Ajax、Css等,然后将其运行到Apollo的Runtime里,这个想法不错,但是个人觉得这一做法却是一个大累赘。Apollo想提供对Html、Css和Ajax的全部支持,其具体做法是提供一个能渲染Html代码的控件,然而可以想象,如果要支持的好,Apollo无疑要提供一个和现在IE和FF类似的浏览器,并将其集成到Apollo当中,这样一种野心虽然并不是不可行,但是开发难度之大,想想也让人够受的。如果要坚持不懈的开发下去,那么这样一种思想势必会给MXML和ActionScript3.0的发展带来一定的阻拦,而这种情况就是我最最不想看到的结果。那么我先说说基于FlashPlayer的这一系列技术,如Flash、Flex,都一些什么独特的优势。

对多媒体几近完美的支持。可以看到用Flash和Flex开发的东西,我们能用一个字来形容,“酷”。在Flash里面,对图片、音频、动画的控制和开发要比以往任何一样技术都容易的多、快的多,并且出现了一大批基于Flash的动画制作者,这样一种独特的魅力不仅仅吸引了开发者的注意,同时还吸引了纵多动画爱好者。还有像基于FLV流媒体格式的视频网站也如雨后春笋般多了起来,我们所能感觉到的是Flash强悍的生命力。Adobe很聪明地认识到了这一点,于是不惜耗费巨资将其收购,并很快将FlashPlayer提升到FlashPlayer9.0,执行效率提高了近十倍,并引入面向对象的ActionScript3.0,同时Flex发展到2.01,对于这一系列举动,除了震撼之外,让开发者也欣喜不少。那么在有Flash的时候,为什么还要出现Flex,同时为什么Adobe还要进一步搞Apollo?答案是文本渲染。

Flash虽然对多媒体的有着几近完美的支持,但是最大的问题业就是对文本的渲染。在传统的Web开发当中,通过对CSS+HTML很好的掌握,我们可以构建出任何布局的页面,它的强悍之处就是对文本的渲染功能,所有的HTML标签都能对文本提供自动扩展和伸缩。然而这样一项最基本的特征到了Flash当中就变成开发者最为头痛的事了,Flash并没有自动扩展文本的功能。在HTML+CSS当中,我们可以通过Color、FontSize、BackgroundColor、BackgroundImage等等属性制作出各种特性的文字,然而在Flash当中却变成了一种似乎不太可能的事情。对文本的渲染能力之差,于是便有了Flex,Flex摒弃了Flash的动画方面的优势,取而代之的提供一系列类似桌面开发的组件,利用MXML和其对CSS的支持,对文本渲染的能力得到了大幅度的提升,但是想将转移网络开发转移到桌面网络的开发,这样一种支持还是相当的欠缺,FlashPlayer还是没有办法融合现有的HTML,于是Apollo本着这样一种思想诞生了,想彻底解决这样一个问题,并将现有的搞得如火朝天的Ajax融入其中。这样一种思想虽然好,却并不是我想看到的发展。个人认为Apollo可以做如下的发展:

  • 扩展MXML。虽然现在的MXML的功能已经比较强悍,但是还不够强悍,比起XAML,MXML还有着很多许多可以扩展的地方。对文本的渲染上不一定要回归到HTML上,而是应该针对MXML进行相应的文本扩充,使其拥有像HTML里面Div、Span、A等等这样的标签的功能,同时使其Container控件具有自动扩充、自动扩展和收缩等功能,还有对滚动条的自适应功能。
  • 扩展CSS。在MXML里面有提供对CSS的支持,这是一个非常棒的功能。但是如果做过类似的开发,您也会发现CSS的功能还存在许多局限,没有margin、backgroundImage、lineHeight、zIndex等等这样的功能标签。
  • Adobe其他产品的MXML化。Adobe在多媒体方面的能力非常强,但是像Premiere、AfterEffects、Illustrator、Photoshop…开发出来的产品各自为政,并没有统一的格式。在这一点上,微软提出的地XAML化,就做的非常棒。实际上Adobe大可以在MXML上下更多功夫,将Flash动画导出成MXML,将Illustrator、Photoshop提供到处MXML的功能,使其图像、动画做到更完美的融合,而Preiere、AfterEffects可以直接导出生成Flv格式的视频文件。
  • ActionScript发展。ActionScript3.0到现在为止非常的招人喜爱,小巧而异常的灵活,以致我使用AS之后再也没有想使用JS的任何欲望。然而ActionScript目前的局限性也还很多,比如线程控制、反射、泛型、索引等等。当然ActionScript的发展潜力也绝不仅仅局限于此,甚至可以想象将其移植到服务器端,替代ColdFusion,而提供一种更加灵活,更加强大的后台开发,甚至将客户端和服务器端的代码给统一起来,避免在服务器端使用C#客户端不得不使用Javascript这样不爽的事情发生。

好了,不多说了,脑子有点不好使了,有点昏昏欲睡的感觉,上面的话语连我都觉得有点语无伦次了,先睡一觉去了。。。。

WediaAjax Pro1.0

05.07.2007 · Posted in Ajax, ASP.NET, Products · with 1 Comment

关于WediaAjax

WediaAjax是一个专门针对ASP.NET2.0的一个小型Ajax 框架,其目的是在尽量不改变传统开发模式的基础上,提供一种灵活、快捷、高效的桌面应用开发,避免不必要的资源浪费。其最终运行在客户端的JS代码不到14K,服务器端代码约10000行。其有以下特点:

  • 高效。WediaAjax其最初的设计目标就是提供一个访问高效、开发便捷、资源低损耗的Ajax框架,能兼容所有的ASP.NET2.0控件,并提供一组继承自ASP.NET2.0的控件,使其能够更加高效的渲染。同时我对整个的渲染过程进行了我力所能及的最大优化,很高兴,我们的渲染过程很快,并且消耗资源很低。我们在客户端和服务器端使用我们自己的一套编码方式来编码和解码,而不是使用XML,这样使得整个个回传当中的字节数大大减小,并且速度很快。
  • 灵活。在我后来使用WediaAjax进行桌面论坛和桌面Blog的开发中,我意识到:当将所有的页面合并到一个页面上的时候,要想不改变我以前的设计模式,并非常高效的渲染,这需要使WediaAjax能非常精准的控制页面当中需要加载和需要渲染的控件,这并不容易。于是WediaAjax对灵活性的要求高了起来,在实际的开发当中,WediaAjax的灵活性得到了很大的飞跃。
  • 简便。没有什么东西比让人一看就明白怎么是怎么回事要重要的多,而事实上,WediaAjax并没有提供多少新的控件,大部分是扩展了已有的控件,因而开发人员一看就能明白该怎么使用,而其中复杂的渲染过程就留给WediaAjax去处理了。
  • 和宿主完美的结合。WediaAjax的任何控件都能和宿主VS2005非常好的结合起来,图片显示正常, 并且具有智能选择功能。
  • 封装了常遇的开发难点。在实际的开发中我遇到了许多问题和难点,如验证码、动态图片验证、数据分页,在线编辑器等等,为了能够重用这样一些功能,我将它们全部都封装了起来,并作为WediaAjax的插件而使用。
  • 简洁的后台控制器。当您在开发应用程序的时候,我们开发的控制器可以让您跟踪您的回传,了解回传当中的所有字符串,并测试回传时间,这样有利于您开发出速度更快,效率更高的应用程序。
  • 支持IE和以IE为核心的浏览器的前进和后退功能。当我完成这样一个功能的时候,我感到无比的高兴,因为目前为止还没有哪一个框架能提供浏览器的前进和后退功能。正如您将看到的这个Demo,当您点击浏览器上的前进和后退的时候,甚至都感受不到停滞,因为根本没有连接到服务器!

早在今年年初,我就打算将其作为开源项目而发布的,可是一直迟迟没有开始,时间和精力都相当的有限。然而这以后的这段日子里,却给了我充裕的时间进一步测试WediaAjax,使其逐步完善,进而能将其Pro1.0 的版本发布。昨天,伴随着BingBlog Pro1.0 的完成,WediaAjax升级到Pro1.1,修订了许多Bug,并引进了许多新功能,然而由于这些Demo在Pro1.1完成之前就开始写了,因而还不能及时将这个Demo相应地升级到Pro1.1,还请大家原谅。^_^

WediaAjax问题和不足

  • 不支持Response.Redirect()。由于WediaAjax彻头彻尾是来搞高效桌面应用的,因而一般情况下不存在有多个页面的情况,因而不支持Response.Redirect()方法。这意味着您也没有办法使用ASP.NET提供的一组登录组件,解决的办法是自己写代码验证。这样虽然开发速度低了点,但是却可以使您的应用程序生成的代码更简洁,执行效率也更高。
  • 不支持WebParts。由于我还没有使用过WebParts进行开发,因而不太清楚它是怎么运行的,因而也没有添加对其的支持,在以后的改版中会考虑到这个的。
  • 不支持例如拖拉、编辑等操作。由于我个人认为Ajax虽然强大,但是并不适合用来模仿软件、桌面,因而并没提供相应功能,在以后也不会提供能该功能,但是开发者可以在WediaAjax的基础上进行开发,提供此类功能。
  • 不支持FireFox的前进和后退功能。这个问题也让我很火大,具体原因是我没有权限从一个Iframe里调用父Iframe的函数,查了N久也没找到一个解决的方法,虽然有关资料提供了解决办法,但是我的尝试告诉我并没有效果

WediaAjax相关资源

WediaAjax Code Project: http://code.google.com/p/aspnet-wedia-ajax/

BingBlog Pro1.0 开发完成

05.04.2007 · Posted in Diary · with 1 Comment

经历这次改版,此Blog系统正式命名为“BingBlog”,版本号:Pro 1.0,同时域名也将改成:http://www.bingblog.net。这次改版花费了我不少心血,相对于以前的版,发生了许多大的变化,并增加了许多的功能。具体改变如下:

  1. 全新的界面。这次网站的颜色是我参考自然界中花草的颜色而配出来的,虽然最初是想弄得大气一点的,结果却由于其中的紫色实在难以调和,最终被粉红色搞得有点女人味了。对这次的设计,个人稍微有点满意,只是稍微觉得有点花,什么时候有空再好好整整吧。
  2. 全新的设计。这次丢掉了最开始被我称之为“无组件开发”的最高效开发模式,取而代之的是使用“动态加载组件”的方式,使得效率保持高运行的情况下,扩展性和维护性都有了质的提高。同时将DataRules,DataAccess层并到DataExecute下,最终成为DataExecute,DataInstance,Framework和View四个开发层次。
  3. 优化了OnlineEditor,修正了在FireFox下无法正常工作的Bug。
  4. 重新整了整WediaAjax。修正了回传方式和视图渲染方式,再次优化客户端和服务器端代码,增加了渲染灵活程度,增加了页面位置控制功能,版本号修订为Pro1.1,并提供精简版WediaAjax,使其Dll文件大小从190K减少到115K,提升其执行效率。
  5. 优化了数据库查询功能,提升连接速度,优化了所有逻辑代码,使代码看上去更规整,含义更明了,效率更高。
  6. 全面优化网站。对全站的CSS文件、JS文件、页面文件进行压缩,使得页面字节数减少近25%,再次提升效率。去掉所有Table标签,使其更符合Web 2.0标准,提升了浏览器对页面的重绘速度。
  7. 增加了页面状态保留功能。现在可以保留大部分具体页面的状态,使得页面能够在用户在刷新的时候能够保持不变。
  8. 再次针对搜索引擎进行优化。这次改版中很重要的一点就是增加多个单独链接,使用ASP.NET2.0 的RewritePath()实现,例如,您现在可以其相应的单独URL访问AboutMeQuickViewGuestBookProducts我一年的计算机学习生涯WediaRss。并且在页面都增加了相对应的单独URL,使其看上去是不同的页面,使得搜索引擎能够进行更大范围的搜索。

呵呵,又啰嗦了一大堆了,这算是我给我Blog即将来临的一周岁生日的第一份礼物吧。“BingBlog”会继续做下去,并将以这个为起点,打造高效高扩展性维护性强界面友好功能强悍用户体验棒的新一代Blog系统。至于此Blog会不会最为开源项目而公布,我目前还不知道,再等上一段时间吧。WediaAjaxDemo在最后的谱写中了,在五月七号前应该会在我的Blog上发布的,同时WediaForum上也会专门提供一个版块供大家讨论。
 
好了,好久没有更新了,还有很多要说的,这些留到着段日子忙完后再说吧,今天还得去写WediaAjax的最后Demo啊。郁闷并高兴着 ^_^