几天后,小菜跑到大鸟处,说道:“大鸟哥,今天看到一个网站,叫妙句网,是用来收藏好句子用的,网站本身没什么太多希奇,但它用的技术却是最近非常火的Flex技术,作者说他也就学了不到两个月就做出了这个网站,你说会不会是真的?如果真的是这样,我也想学学,毕竟做出来的效果比一般的网站真的要酷很多哦。”

大鸟:“哦?让我来看看。”大鸟打开了浏览器,键入了小菜说的网站。

“嗯?怎么是flash的?”大鸟说。

小菜点头道:“Flex其实就是开发出可以在Flash Player插件上运行的编程工具!你看,它整个网站就是一个Flash,开始下载是慢了点,但下载好了,大部分操作都不用再访问网络了,局部的更新数据,也只是局部刷新而已。你点这个登录,哈,登录就从上框跳出来,还会抖动两下,再看,点这个‘Show’出来框后,点‘播放’,那个句子翻页的3D效果是不是很酷?还有……”

Stop停!”大鸟突然说道,“你是来给我做广告来了?这种纯粹为炫点效果而做的网站我见得多了,有什么希奇的。我虽然没做过Flash,但开发这些年,我还不知道?就象我没得过禽流感,但感冒啥滋味,我不会比鸡知道的少了。”

“可是听说这技术很容易学,用不了多久就可以上手,做出漂亮的东西。你之前不是还整天跟我说AJAX太他妈麻烦,Javascript调试极度困难,还要考虑跨浏览器等诸多问题,写Ajax网站吃力不讨好吗?”

“哈哈,小菜呀小菜,外行了吧。写这网站的人说是只学了Flex一个多月做出这东西,我也相信他说的是真的,但这里面有多少细节技术是你看不到的?我说几个细节给你听听,比如注册,Email如何验证?这用正则表达式判断最好,你得懂才行,哪怕上网查,至少你要知道如何用吧。再比如这网站上的分页,每页显示10条信息,如果把一千多条句子全下载不就傻了吗?可若每次换页只下载10条,这就得懂得如何写这样的Sql语句,当然最好是存储过程。至于整个网站包括了从注册、登录、增删改句子到句子列表,正文显示,搜索查询,这就是一整套的网站基本架构,这些都是要技术积累的。”

“啊,这倒是真的,正则表达式学过,但还是不会用,分页存储过程干脆就写不来,要独立写个网站,看来也的确是有难度的。”

“不过,这网站其实做了也没太大的用处。” 大鸟说道,“第一,Flash占的系统资源太大,你看,我才点击tag查询,我的CPU100%,我在放的MP3,声音都开始打抖了,这真的很不爽。第二,Flash是封装成swf文件下载的,也就是说搜索引擎是根本找不到里面的数据,里面的句子也就谈不上被搜索到。这样这些数据又如何能被大众用户查看到?”

“咦,我在家里好象感觉不到速度问题吗?哦,我明白了,因为我的笔记本是双核的,最多也就占用50%,看来硬件的提升也是促进软件的发展呀。不过搜索引擎好象是很难办,有没有什么解决方案?”

大鸟说:“搜索引擎对整站SWF的索引的问题,目前没有什么完美的解决方法,或许,我们可以生成一个sitemap,让搜索引擎的爬虫自己爬上来。

大鸟继续说道:“所以我说这种网站,没什么太大用处,Flex这种富客户端技术,不过是个噱头罢了。”

“唉,大鸟,我就不同意的你看法。”小菜有点激动,“现在有了DVD,你还会去小摊买SVCD看吗?现在有了Windows,你还会去整天对着黑屏用Dos敲打命令行吗?富客户端可以做到更加好的客户感受度,又不用安装和升级,这结合C/SB/S的优点于一身的好技术。”

“小菜,htmlInternet的主流,要客户感受度,还是好好研究javascriptAJAX技术吧。”大鸟语重声长的说。

“降龙十八掌固然强悍勇猛,那是因为没有发明***;赤兔固然是良驹,那是因为关老儿没有宝马大奔。谁说html今天是主流,就意味着未来是主流?我觉得AJAX有很大的局限性,是一种过渡技术。未来一定是富客户端的天下。”

“小菜别激动,你说得也有道理。我举个例子你就会明白,FlexFlash以前是Macromedia现在上Adobe的主推的产品吧,那我问你,他们的官方网站是什么写的?”大鸟慢条斯理道。

“这个……好象还是html”。小菜犹豫后答道。

“你有想过为什么?还有那些Flex的技术网站,比如博客呀论坛呀什么的,我敢肯定的说,一定不是用富客户端技术做的。”

“是不是因为不好搜索?”小菜疑问中。

“这是一方面吧,其实文字信息很大的网站,都不太适合这种技术的,因为它要的不是过渡效果,而是内容本身。如果内容不够好,网站再漂亮也是没有用的,而内容够好,却没有人能找得到这些内容,这内容也是价值不大的,这也正是为什么连Adobe公司自己在发布网站时也用的是传统的html模式。”

“是,我理解你的意思,就是说这种文字信息网站不适合,但有些网站,比如公司产品展示,动漫游戏等才更适合是吗?”

大鸟说:“当然,还不只是这些,Google推出一种理念,就是要弱化客户端,强化网络,也就是说,过去我们上网的习惯是下载,把好的东西都下载到本地来,现在要反过来。比如以前我们都是把Email收到本地,不然网络信箱就会满而收不了信,但这就带来了一个坏处,你要是没有在这台机器旁,你想看你以前的信就不可能了,甚至操作系统崩溃后可能这些信就没了,当然照片,文档也是如此。现在呢,最好的办法是把所有的信息,都放在网络上,比如Gmail里,比如163里,或者什么网站硬盘里(最好是大公司)。只要有网络你想在什么地方用它都行。”

“明白,同样道理,我现在看到的 在线Office在线Web OS在线图片处理等应用,都是Flex的应用,也就是说以后这些都不需要操作系统里安装什么软件了。”

“哈,小菜开窍了,这样操作系统的功能就下降了,以前要听音乐看电影都需下载,现在都是在线听,以前游戏都是在家独自玩,现在都网游,现在聊天都QQMSN,将来都WebIM,总有一天,客户端会只是一个类似浏览器的东东就行的,不只是电脑,手机,家电都能上Internet,那才是未来发展的方向。不过,你知道吗?真这样的话,谁最不开心?”

“嗯?谁会不开心?这不是大家都好吗?”

“哈,当然是微软最不开心,因为他们是卖操作系统的呀,操作系统功能越来越弱化了,他们的市场不就小了吗?所以同样是推出富客户端应用(WPFFlex),微软和Adobe的想法是不一样的,微软是希望和操作系统连接更紧密,而AdobeGoogle却是希望客户端越简单越好。”

“大鸟呀,你说话前后矛盾的,刚才还在和我说‘Flex这种富客户端技术,不过是个噱头罢了’,现在又在大谈富客户端的好,你倒底是什么意思?”

“咱们领袖毛老人家说过,看问题要用辩证法,事物都有两面性。富客户端有好的方面,当然也存在着不足,现在这技术还不够成熟,至少在以文字内容为主的网站,这种技术还是没太大的用处,所以妙句网只是一个噱头,不能成大气候。”

“我却觉得,新事物总会有人说不好的,妙句这个创意本身很好,用这个技术也感觉和一般网站不一样,只不过现在刚开始,还没有发挥Flex的特性吧,听说AJAXFlex可以直接通讯的,或许和html结合一下,句子能被搜索引擎找到,加上性能优化后让客户端CPU压力不太大,我相信它会越来越好起来。我决定了,我也要学Flex,做一个贼酷的富客户端网站。”

“得了吧你,”大鸟说道,“你还是好好打好基础,上会你写完计算器的程序,后面我留的作业你做了没有,就是做一个商场收银软件,营业员根据客户购买商品单价和数量,向客户收费。”

posted @ 2008-08-13 19:35 Ewin 阅读(57) | 评论 (0)编辑

多态就是一个对象的多种状态

在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型,就可以使用该对象

的某些方法,而这些方法通过一个抽象类或者接口来实现。

从下往上看的话,多态实际上是多个对象的抽象,对它们进行通用编码。
没有多态,工厂方法模式的效果就大打折扣,或者可以说不可能实现

posted @ 2008-08-12 22:42 Ewin 阅读(12) | 评论 (0)编辑

设计模式是规则吗?

地上本没有路,走得人多了也就成了路。设计模式如同此理,它是经验的传承,并非体系;是被前人发现,经过总结形成了一套某一类问题的一般性解决方案,而不是被设计出来的定性规则;它不像算法那样可以照搬照用。

设计模式,软件的永恒之道?

这个问题没有答案,有的只是讨论,看一下一位前辈结合建筑学得出的几点心得吧:

和建筑结构一样,软件中亦有诸多的“内力”。和建筑设计一样,软件设计也应该努力疏解系统中的内力,使系统趋于稳定、有生气。一切的软件设计都应该由此出发。

任何系统都需要有变化,任何系统都会走向死亡。作为设计者,应该拥抱变化、利用变化,而不是逃避变化。

好的软件只能“产生”而不能“创造”,我们所能做的只是用一个相对好的过程,尽量使软件朝向好的方向发展。

 

需要设计模式吗?

答案是肯定的,但你需要确定的是模式的应用是否过度?我得承认,世界上有很多天才的程序员,他可以在一段代码中包含6 种设计模式,也可以不用模式而把设计做得很好。但我们的目标是追求有效的设计,而设计模式可以为这个目标提供某种参考模型、设计方法。

我们不需要奉GOF的设计模式为圭臬,但合理的运用设计模式,才是正确的抉择。很多人看过GOF的《Design Patterns》,对这23 种模式也背得滚瓜烂熟。但重要的不是你熟记了多少个模式的名称,关键还在于付诸实践的运用。为了有效地设计,而去熟悉某种模式所花费的代价是值得的,因为很快你会在设计中发现这种模式真的很好,很多时候它令得你的设计更加简单了。

其实在软件设计人员中,唾弃设计模式的可能很少,盲目夸大设计模式功用的反而更多。言必谈“模式”,并不能使你成为优秀的架构师。真正出色的设计师,懂得判断运用模式的时机。还有一个问题是,很多才踏入软件设计领域的人员,往往对设计模式很困惑。对于他们来说,由于没有项目的实际经验,OO 的思想也还未曾建立,设计模式未免过于高深了。其实,即使是非常有经验的程序员,也不敢夸口对各种模式都能合理应用

 

posted @ 2008-08-12 12:43 Ewin 阅读(11) | 评论 (0)编辑

 

 1 (1) 返回指定(或活动)单元格所在区域中标题行的行数
 2 Worksheets("sheet1").Range("H2").Value = _
 3 Worksheets("sheet1").Range("A1").CurrentRegion.ListHeaderRows
 4 上述代码在示例工作表中运行后,将返回“1”,即单元格A1所在区域的标题行的行数为1。
 5 
 6 
 7 (2) 返回指定(或活动)单元格所在区域的行数
 8 Worksheets("sheet1").Range("H3").Value = _
 9 Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count
10 上述代码在示例工作表中运行后,将返回“11”,即单元格A1所在区域的行数为11。
11 
12 
13 (3) 返回指定(或活动)单元格所在区域的列数
14 Worksheets("sheet1").Range("H4").Value = _
15     Worksheets("sheet1").Range("A1").CurrentRegion.Columns.Count
16 上述代码在示例工作表中运行后,将返回“4”,即单元格A1所在区域的列数为4。
17 
18 
19 (4) 返回指定(或活动)单元格所在区域的单元格数
20 Worksheets("sheet1").Range("H5").Value = _
21     Worksheets("sheet1").Range("A1").CurrentRegion.Cells.Count
22 上述代码在示例工作表中运行后,将返回“44”,即单元格A1所在区域的单元格数为44。
23 
24 
25 (5) 在指定(或活动)单元格所在区域中选取除标题行以外的数据区域
26 Worksheets("sheet1").Range("A1").CurrentRegion.Resize( _
27    Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count - Worksheets("sheet1"). _
28    Range("A1").CurrentRegion.ListHeaderRows, Worksheets("sheet1").Range("A1").CurrentRegion. _
29    Columns.Count).Offset(10).Select
30 
posted @ 2008-08-06 22:40 Ewin 阅读(21) | 评论 (0)编辑

 

1.单元格取值赋值

Private Sub CommandButton1_Click()
Range(
"A1"= "111"
Range(
"A2").Value = "2222"
Range(
"A10"= Range("A1")
Range(
"A11"= Cells(21).Value
Range(
"A12"= Cells(21)

Range("A13").ClearContents         '清除内容

 

 

Range("a20").Formula = "=rand()"  '单无格公式

End Sub

 

2.单元格设置颜色

Cells(11).Interior.ColorIndex = 3 '单无格的颜色   

         

posted @ 2008-08-03 22:01 Ewin 阅读(27) | 评论 (0)编辑

 

Function test(aa As Range, bb As Range, cc As Range)
Dim str

If aa.Value > bb.Value Then
 str = aa.Value
    
If str > cc.Value Then
        test 
= str
    
Else
        test 
= cc.Value
    
End If

Else
 str = bb.Value
   
If str > cc.Value Then
       test 
= str
    
Else
       test 
= cc.Value
   
End If

End If

End Function

 

注意的是要放在模块里,然后做为函数来调用

 

posted @ 2008-07-31 20:35 Ewin 阅读(14) | 评论 (0)编辑

<html> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>新建网页 1</title> 
<style> 
<!-- 
.username { width:130px; background:#FFFFFF url("/article/upimages/ico_username.gif") 2px 2px no-repeat; padding-left:18px;BORDER-RIGHT: #E7AD01 1px solid; BORDER-TOP: #E7AD01 1px solid; FONT-SIZE: 13px; BORDER-LEFT: #E7AD01 1px solid; COLOR: #000000; BORDER-BOTTOM: #E7AD01 1px solid; HEIGHT: 20px } 
--> 
</style> 
</head> 

<body> 

<table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table1"> 
    <tr> 
        <form name="myform" method="post" action=""> 
            <td class="login_td">用户名:<input class="username" onmouseover="this.style.borderColor='#99E300'" onmouseout="this.style.borderColor='#A1BCA3'" maxLength="12" name="UserName"></td> 
        </form> 
    </tr> 
    </table> 

</body> 

</html>

posted @ 2008-07-27 19:01 Ewin 阅读(14) | 评论 (0)编辑
1.CSS ID 的命名
外 套:  wrap
主导航:  mainnav
子导航:  subnav
页 脚:  footet
整个页面: content
页 眉:  header
页 脚:  footer
商 标:  label
标 题:  title
主导航:  mainbav(globalnav)
顶导航:  topnav
边导航:  sidebar
左导航:  leftsidebar
右导航:  rightsidebar
旗 志:  logo
标 语:  banner
菜单内容1: menu1 content
菜单容量: menu container
子菜单:  submenu
边导航图标:sidebarIcon
注释:   note
面包屑:  breadcrumb(即页面所处位置导航提示)
容器:   container
内容:   content
搜索:   search
登陆:   Login
功能区:  shop(如购物车,收银台)
当前的   current
2.另外在编辑样式表时可用的注释可这样写:
<-- Footer -->
内容区
<-- End Footer -->
3.样式文件命名
主要的 master.css
布局,版面 layout.css
专栏 columns.css
文字 font.css
打印样式 print.css
主题 themes.css
posted @ 2008-07-27 18:58 Ewin 阅读(9) | 评论 (0)编辑

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>纵向导航菜单</title>
<style>
#nav { width:100px; border-color:#c5c6c4; border-style:solid; border-width:0px 1px 1px 1px;}
#nav h1 { margin:0px; padding:4px; font-size:12px; font-weight:bold; font-family:Verdana; border-top:1px solid #c5c6c4; background-color:#CCCCCC;}
#nav h2 { margin:0px; padding:4px; font-size:12px; font-family:Verdana; font-weight:normal;}
#nav h2 a { color:#666666; text-decoration:none;}
#nav h2 a:hover { color:#999999; text-decoration:underline;}

</style>
</head>

<body>
<div id="nav">
    <h1>CSS</h1>
        <h2><a href="#">css入门</a></h2>
        <h2><a href="#">css进阶</a></h2>
        <h2><a href="#">css高级</a></h2>
    <h1>webUI</h1>
        <h2><a href="#">理论知识</a></h2>
        <h2><a href="#">实战应用</a></h2>
        <h2><a href="#">高级技巧</a></h2>
    <h1>DOM</h1>
        <h2><a href="#">DOM入门</a></h2>
        <h2><a href="#">DOM应用</a></h2>
        <h2><a href="#">DOM与浏览器</a></h2>
    <h1>XHTML</h1>
        <h2><a href="#">参考手册</a></h2>
        <h2><a href="#">交流论坛</a></h2>
</div>
</body>
</html>

posted @ 2008-07-27 18:56 Ewin 阅读(32) | 评论 (0)编辑

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>二列左列固定,右列宽度自适应——AA25.CN</title>
<style type="text/css">
<!--
#left {
    background-color: #E8F5FE;
    border: 1px solid #A9C9E2;
    float: left;
    height: 300px;
    width: 200px;
}
#right {
    background-color: #F2FDDB;
    border: 1px solid #A5CF3D;
    height: 300px;
}
-->
</style>
</head>

<body>
<div id="left">左列——固定(AA25.CN)</div>
<div id="right">右列——宽度自适应(AA25.CN)</div>
</body>
</html>

posted @ 2008-07-27 18:47 Ewin 阅读(12) | 评论 (0)编辑