Flex组件外观定制(Skinning)

mikel阅读(886)

Flex 中的组件框架中包含了对组件外观进行定制的功能 (skinning), 通过 skinning 机制 , 可以在保留组件交互特性不变的情况下 , 将可视外观完全替换掉 . Skin 的替换主要是在 css 中为组件指定相应的 skin 图形资源来实现 ,skin 图形资源可以是以下几种类型 : 继承自 ProgrammaticSkin 的类 , 图形文件 , 存储在 swf 文件中的一个符号 (symbol). 根据需要可以仅为应用程序中用到的组件替换 skin, 也可以设计一套完整的 , 针对所有组件的 skin. 例如 yahoo 就制作了一套较完整的 skin, 可以免费下载使用
(http://developer.yahoo.com/flash/articles/assets/flex-skinning/yflexskin.html )
下面这幅图是我在实践这个 skinning 机制过程中的一个播放器 , 使用的组件都是标准的 flex 组件 :Button,HSlider,Label 等 . 播放进度部分为了能够同时显示播放进度和下载进度 , 对 HSlider 进行了扩展 . 附件里面是这个播放器的源码 .

源码下载

使用Northwind和Entity框架的ASP.NET MVC实例发布

mikel阅读(660)

近日,作为ASP.NET 3.5 Extensions预览版组成部分的微软ASP.NET MVC框架发布了CTP版本。自此,MVC框架就吸引了众多业界人士的眼球,并纷纷在博客以及各个开发者所关注的网站上进行了介绍。
微软CLR和.NET框架团队的成员Brad Abrams发布了一个非常优秀的实例,为开发者展示了如何有效地使用微软MVC框架中的某些最新工具。该实例源于Scott Guthrie的MVC实例,Scott将这些内容放在他的博客上,演示了在最初形式下的MVC框架是如何进行工作的。Scott的实例采用循序渐进的方式将其编写为四部分内容:
* ASP.NET MVC框架(第1部分)
*ASP.NET MVC框架(第2部分):URL路径选择
* ASP.NET MVC框架(第3部分):从控制器将ViewData传递到视图
* ASP.NET MVC框架(第4部分):处理表单编辑和提交场景

区域性名称和标识符

mikel阅读(1159)

CultureInfo 类基于 RFC 4646 为每个区域性指定唯一名称(Windows Vista 和更高版本)。名称是语言关联的 ISO 639 小写双字母区域性代码和国家/地区关联的 ISO 3166 大写双字母子区域性代码的组合。

区域性名称的格式为“<languagecode2>-<country/regioncode2>”,其中 <languagecode2> 为语言代码,<country/regioncode2> 为子区域性代码。例如“ja-JP”代表“日语(日本)”,“en-US”代表“英语(美国)”。在双字母语言代码不可用的情况中,将使用从 ISO 639-2 派生的三字母代码。

请注意,某些区域性名称还指定 ISO 15924 书写符号。例如,“-Cyrl”指定西里尔语书写符号,“-Latn”指定拉丁语书写符号。在 Windows Vista 和更高版本上,包含书写符号的区域性名称使用 <languagecode2>-<scripttag>-<country/regioncode2> 模式呈现。例如“uz-Cyrl-UZ”代表“乌兹别克语(乌兹别克斯坦,西里尔语)”。对于 Windows Vista 之前的操作系统,包含书写符号的区域性名称使用 <languagecode2>-<country/regioncode2>-<scripttag> 的模式来呈现,例如“uz-UZ-Cyrl”代表“乌兹别克语(乌兹别克斯坦,西里尔语)”。

非特定区域性只能由双字母小写语言代码指定,例如,“fr”指定“法语”的非特定区域性,“de”指定“德语”的非特定区域性。

 

区域性/语言名称 区域性标识符 区域性
""(空字符串) 0x007F 固定区域性
zh-CN 0x0804 中文(中国)
zh-Hans 0x0004 中文(简体)
zh-SG 0x1004 中文(新加坡)
zh-TW 0x0404 中文(台湾)
zh-Hant 0x7C04 中文(繁体)
en 0x0009 英语

Top 10 Mistakes when building Flex Applications

mikel阅读(701)

在InfoQ中看到的,创建Flex应用中10个容易忽略的问题,以后翻译,先转了
Posted by Jon Rose on Apr 17, 2008 01:06 AM
In this post, Adobe’s James Ward teams up with InfoQ.com to bring you another Flex Top 10 (our most recent Flex Top 10). Flex is an open source application development framework for building rich Internet applications that run in the web with Flash Player, or on the desktop with Adobe AIR. Overall, Flex is a powerful framework that is easy to use, but today let's focus on some of the common mistakes that are made when building Flex applications.
For those new to Flex, check out InfoQ’s recent Adobe Flex Basics to get a quick introduction to the framework. Here is the list:
1. Using an RIA framework to build Web 1.0 applications (aka. New technology same old stuff).
One of the largest challenges when moving from Web 1.0 applications to the RIA's development paradigm is learning to think differently. Flex gives developers an advanced component library that allows for doing things that simply weren’t possible only a few years ago. Often, the power of Flex is missed, and the framework is used to implement more traditional Web 1.0 applications.
Building Web 2.0 applications is more than partial page refresh and rounded corners. For example, Flex developers should be using vectors to provide users a visual understanding of data, and advanced controls for a rich application flow. Stephan Janssen discusses this struggle recently with InfoQ.com:
As a Java developer, learning Object oriented ActionScript and the UI markup language is really a walk in the park. The challenge however for (Java) developers is that we're not designers, and with RIA technologies these two skills are very much needed.
2. Breaking standard browser experiences.
While Flex does provide an excellent platform for improving the user experience, it still important to maintain familiarity of things like the back button, book marking, and auto complete.
Flex 3 includes new Deep Linking features for back button support and book marketing. You can learn more at labs.adobe.com. There are number of components out there for implementing auto-complete. From the Adobe Exchange, you can use the AutoComplete Input component.
3. Slowing the application down with the use of too many containers.
Flash Player uses a hieratical display object graph, similar to the HTML Document Object Model (DOM). The deeper containers are nested the longer the rendering takes. Adobe’s Flex Developer Center has an article that covers best practices related to Flex performance, including the use of containers in detail:
The biggest Flex performance danger is yielding to the temptation to use containers randomly. Deeply nesting too many containers hinders the performance of your application. This is the number one performance danger that Flex developers succumb to—and luckily it is 100 percent avoidable.
4. Slowing the application down by using XML for data transfer over optimized protocols.
Flex offers developers a number of options for data transfer between the Flex client application and the server, including AMF3, XML, SOAP, and straight HTTP requests. Ward demonstrates the use of these technologies and performance benchmarks in his Census application.
BlazeDS should be considered for Greenfield projects using Java on the backend. BlazeDS is Adobe’s recently open sourced Data Services product that uses the AMF3 protocol. AMF is a binary transfer protocol that is easy to integrate with Java, and offer significant performance benefits over XML. There are open source implementations of AMF for every major backend technology.
If BlazeDS is not an option, Hessian could be an option. Hessian offers ActionScript/Flex support for their binary web services protocol.
5. Trying to hire Flex developers.
Experienced Flex developers are very hard to find right now. Flex is at the point in the adoption curve which Java was at in the late nineties. The demand for Flex developers is exceeding the supply. This makes finding experienced Flex developers difficult. This, however, creates a huge opportunity for Java developers to expand their skill sets and work with a fun emerging technology. Many companies looking for Flex developers have great success training Java or other web application developers for only a few weeks on Flex. Flex’s language and APIs are easily learnable by developers who are familiar with Web and GUI programming.
6. Over use of animations
Using Flash as the runtime enables developers to easily add animations and effects. However, developers should make sure that the animations have meaning and provide context. Otherwise, they will annoy users. The timing of animations is also important. Interaction designers can help make recommendations on when animations should and should not be used. Interaction designers can also recommend the best type of animations, the duration, and the best easing function.
There is good a post on the use of animations at laair.org:
Most animations are simply TOO LONG. They are long, and slow, and boring, and excessive. Tone it down. If there is one thing I have found, its that I hate waiting for stupid animations to finish so I can do something else.
Don’t get me wrong I am not bashing animations. I am simply bashing animations that are simply too long or too extravagant for their purpose. Every animation can be broken down to having a purpose. Figure out the purpose of your animation and apply accordingly.
7. Not setting up an enterprise ecosystem.
As with other software projects, it is important to setup an enterprise ecosystem for your Flex applications.
Test Driven Development (TDD) is a staple of most any enterprise project in this day-and-age. For Flex, the FlexUnit framework is available for coding unit tests. On Adobe’s Developer Connection, Neil Webb discusses TDD for Flex developers and using FlexUnit. In addition, Flexcover is available for code coverage reporting.
Continuous Integration (CI) is a proven practice for building cohesive applications when multiple developers are contributing. Similar to Java applications, both Ant and Maven plug-ins are available for CI builds of your Flex applications.
8. Not using the entire framework.
There are a number of optional features available in Adobe Flex that you should consider using in your applications. For example, Runtime Shared Libraries (RSL) is available for reducing the size of your applications:
You can shrink the size of your application's resulting SWF file by externalizing shared assets into standalone files that you can separately download and cache on the client. Multiple Flex applications can load these shared assets at runtime, but each client need only to download them once. These shared files are called Runtime Shared Libraries.
Another under used feature of the framework is the built in accessibility features. You can read more about the accessibility features of Flex in Adobe’s livedocs. In addition to built in accessibility, the framework provides built in features for localization. For the latest Flex 3 framework features, checkout Adobe’s Getting Started introduction page.
9. Slowing the DataGrid down with complex renderers.
The out-of-the-box itemRenderer for the DataGrid is very optimized. Mistake #3 discussed the performance impacts of deeply nested containers. One of the places in Flex where containers can easily get deeply nested is in the DataGrid’s item renderers. The number of item renderers which are rendered by the DataGrid is the number of visible rows times the number of visible columns. Custom DataGrid and List item renderers should be very optimized. When complex layout logic is needed in an item renderer, it is best to use UIComponent (or other more low-level classes) and position the contents for that cell manually.
10. Not Preparing for Offline Applications.
The traditional model for RIAs is in the browser. However technologies like Adobe AIR and Google Gears is allowing those applications to run offline. By not preparing for a potential offline architecture when users demand it, changing your applications to support offline features may be very difficult. Typically, in web applications business logic lives on the server. In offline RIAs, business logic must transition to the client. This makes it nessecary to architect ahead of time where certain business logic will need to live in order for applications to work both offline and online.

ASP.NET实现本地化

mikel阅读(803)

转载自MSDN,发现MSDN比什么视频教程要实用的多,看来还要继续深入研究,内容如下:
创建本地化网页的一种有效方式,是根据用户的语言和区域性选择用于网页文本和控件的资源。通过使用资源对象中的属性,ASP.NET 可在运行时根据用户的语言和区域性选择正确的属性。此过程比较直接:
资源文件 (.resx) 存储值。
在页中,您可以指示控件应将资源用于控件的属性值。
在运行时,控件的属性值派生自资源文件。
注意:
实际上,您可以将值存储在自定义资源对象中,如数据库。不过在此演练中,您将使用一个 .resx 文件存储值。
Visual Web Developer 允许在不编写任何代码的情况下为控件、控件属性和控件的 HTML 生成资源。
本演练中阐释的任务包括:
启用 ASP.NET 页的本地化。
生成一个资源文件,并将其值与应用程序中的控件隐式关联。
创建本地化资源文件,并通过使用声明性表达式在页中显式引用这些文件。
先决条件
若要完成本演练,您需要:
Visual Web Developer (Visual Studio)。
.NET Framework。
创建网站
如果已经在 Visual Web Developer 中创建了网站(参见演练:在 Visual Web Developer 中创建基本网页),则可以使用该网站并转到下一部分“通过 ASP.NET 进行隐式本地化”。否则,请按照下面过程中介绍的步骤创建新的网站和网页。
创建文件系统网站
打开 Visual Web Developer。
在“文件”菜单上单击“新建网站”。
出现“新建网站”对话框。
在“Visual Studio 已安装的模板”之下单击“ASP.NET 网站”。
在“位置”框中输入要保存网站页面的文件夹的名称。
例如,键入文件夹名“C:\WebSites”。
在“语言”列表中,单击您想使用的编程语言。
单击“确定”。
Visual Web Developer 创建该文件夹和一个名为 Default.aspx 的新页。
通过 ASP.NET 进行隐式本地化
在本部分中,您将使用隐式本地化。在隐式本地化中,指定应从资源文件中自动读取控件属性,但无需显式指定本地化哪些属性。接着,需创建为特定属性提供本地化值的资源文件。运行时,ASP.NET 会检查页上的控件。如果控件被标记为使用隐式本地化,则 ASP.NET 会为页在资源文件中进行查找。如果找到已标记控件的属性设置,则 ASP.NET 会使用资源文件中的值替换控件中的值。
在本隐式本地化示例中,将结合使用设计器和资源编辑器生成一个默认资源文件,您可以将该文件用作涉及两种语言的本地化的起点。Visual Web Developer 将仅根据页上的控件生成资源文件。因此,建议您在完成页的控件布局(包括按钮、标签和文本框等简单控件)之后再生成资源文件。
在页上放置控件
在解决方案资源管理器中,右击 Default.aspx,再单击“重命名”,然后键入 Sample.aspx。
这样做可帮助避免在演练的其他部分因默认资源文件而产生混淆,因为隐式资源文件的名称使用页的名称。
打开 Sample.aspx,然后切换到“设计”视图。
在“工具箱”中,从“标准”区域中将一个 Button、一个 Label 和一个 TextBox 控件拖动到页上。
将上述控件的“Text”分别设置为 English Button、English Label 和 English TextBox。
创建页并添加控件后,可使用 Visual Web Developer 命令为此页生成本地资源文件。该本地资源文件将包含页上各个控件的资源字符串。Visual Web Developer 为在控件内部指定为可本地化的每个属性生成一个资源字符串。为每个控件指定的可本地化的属性可能不同,但大多数基于文本的属性已标记为可本地化。
自动生成资源文件
单击设计器图面或控件。
在“工具”菜单中单击“生成本地资源”。
Visual Web Developer 创建一个名为 App_LocalResources 的新文件夹,并在文件夹 App_LocalResources 中创建一个名为 Sample.aspx.resx 的新文件。如果将页命名为 Sample.aspx 之外的其他名称,.resx 文件将会反映您选择的任何名称。使用隐式本地化时,资源文件名取决于各个页的名称。
切换到“源”视图以查看对控件声明的更改。
Visual Web Developer 已向控件添加了一个属性,以从新创建的资源文件检索其值。例如,Button 控件的标记具有新的 meta:resourcekey 属性。
复制代码

当浏览器向 Web 服务器发送请求时,该请求可包含有关当前语言和区域性的信息。例如,一个浏览器可能会发送字符串 “en-us” 以指示它已设置为使用美国英语;而另一个浏览器可能发送字符串 “en-gb” 以指示它已设置为使用英国英语。
注意:
浏览器请求中的语言和区域性设置并不是检测用户首选语言的完全可靠的方式。这些设置只是指示已将浏览器设置为发送何种内容,或者浏览器已从基础操作系统继承何种内容。在本演练中,您可以依赖语言和区域性设置,但在成品应用程序中,还应该为用户提供一种手动选择语言和区域性的方式。
该资源文件用作所有请求的默认资源文件。(它是回退区域性的资源文件。)如果浏览器未指定任何区域性,或者浏览器请求包含不支持的语言或区域性,则会从此默认文件提取资源值。
现在已创建了资源文件,您可以使用资源编辑器将本地化后的文本放入该文件中。
使用资源编辑器编辑资源文件
在解决方案资源管理器中打开 Sample.aspx.resx。
在资源编辑器的“值”下,列出了页中放置的每个控件的“Text”属性。在此处更改值会导致更改默认区域性的值。
将“ButtonResource1.Text”设置为 Edited English Text。
保存该文件。
现在可以测试该页。
对页进行测试
按 Ctrl+F5 运行该页。
在资源编辑器中提供的文本显示为 Button1 的标签。使用隐式本地化时,资源文件中的语法属性会自行重写在页中指定的属性。
添加其他区域性
每种语言和区域性的组合均需要有唯一的资源文件。若要添加其他区域性,可以使用默认文件作为起点。可以为不同的区域性和区域设置创建资源文件,方法是创建新的资源文件,并在文件名中包含 ISO 语言代码(如 en-us、fr-ca 和 en-gb)。这些 ISO 代码位于页名和 .resx 文件扩展名之间,如 Sample.aspx.en-us.resx。若要指定非区域性特定的语言,则应删除国家/地区代码,例如指定法语时应使用文件名 Sample.aspx.fr.resx。
注意:
使用隐式本地化语法时,必须为每个页创建一系列单独的资源文件。
创建非区域性特定的法语文件
在解决方案资源管理器中,右击 Sample.aspx.resx 文件,并单击“复制”。
右击 App_LocalResources 文件夹,然后单击“粘贴”。
Visual Web Developer 创建一个名为“副本 Sample.aspx.resx”的文件。
右击“副本 Sample.aspx.resx”文件,单击“重命名”,然后键入“Sample.aspx.fr.resx”。
Sample.aspx.fr.resx 指示用于非区域性特定的法语文本的文件。
打开 Sample.aspx.fr.resx。
将 Button、Label 和 TextBox 控件的“Text”分别设置为 French Button、French Label 和 French TextBox。
保存该文件。
用备用语言设置进行测试
若要查看 ASP.NET 是否在使用这个新的资源文件,必须先将浏览器设置更改为请求所需的区域性。
更改浏览器的语言设置
在 Microsoft Internet Explorer 中,单击“工具”菜单上的“Internet 选项”。
单击“语言”。
在“语言首选项”对话框中单击“添加”。
在“添加语言”对话框的“语言”下,单击“法语(法国)[fr]”,然后单击“确定”。
单击“添加”,然后将“西班牙语(墨西哥)[es-mx]”添加到语言列表中。
单击“添加”,然后将“阿拉伯语(埃及)[ar-eg]”添加到语言列表中。
在本演练的后面部分,您将使用西班牙语和阿拉伯语进行测试。
在“语言首选项”对话框的“语言”下,单击“法语(法国)[fr]”,单击“上移”,再单击“确定”。
Internet Explorer 现在设置为将 fr 作为所有请求的语言设置传递。在 Sample.aspx 页中将区域性设置为 auto 时,ASP.NET 会试图根据语言和区域性首选项定位资源文件及其相应值以生成页。
对页进行测试
在 Visual Web Developer 中,按 Ctrl+F5 运行页。
该页使用本地化后的法语文件而不是英语版本中的值进行刷新。
注意:
在 Internet Explorer 中,通过返回到“语言首选项”对话框并在列表中上移所选语言,可重置语言设置。
通过 ASP.NET 进行显式本地化
在此演练的第一部分,您已通过使用 ASP.NET 隐式本地化让控件显示本地化的文本。您生成了一个包含属性 (Property) 值的资源文件,并且在该过程中为每个控件添加了一个属性 (Attribute),该属性 (Attribute) 指示控件从资源文件填充其属性 (Property) 值(如果有)。隐式本地化自动工作,也就是说,您不需要逐个指定每个属性从资源文件读取信息的方式。
但是,有时可能需要对属性的设置方式进行更直接的控制。要达到这个目的,不应使用隐式本地化,而应使用显式本地化。通过显式本地化,可以使用指向资源文件的表达式设置属性值。运行页时,会对表达式进行计算,从指定的资源文件中读取该值,然后使用该值设置属性。
如果除了控件和标签外还需要本地化大量的文本或自定义消息,则显式本地化十分有用。例如,您可以为电子商务网站开发一系列本地化的欢迎消息和感谢消息,然后使用显式声明性表达式将此文本放置在页上。此外,显式本地化允许维护一个本地化的资源文件集,而不是为每个页单独维护一个文件集。
在本部分中,您将手动创建资源文件,然后使用 ASP.NET 声明性表达式语法引用这些文件。您将为一个简单的感谢消息创建一个资源文件。与使用设计器时不同,此时不需要为每个 ASP.NET 页创建一个单独的资源文件。
资源文件的基名称为 LocalizedText。对于要本地化的每种语言,都将另外创建一个文件,并在文件名中包含相应的语言代码(有时可能还有区域性代码)。例如,对于美国英语,将创建名为 LocalizedText.resx 的文件。对于加拿大法语,将创建名为 LocalizedText.fr-ca.resx 的文件。这两个文件都将放在 Web 应用程序的 Resources 目录下。与前面介绍的隐式示例不同,您无需为每个 .aspx 页维护一个资源文件;相反,您可为支持的每种语言或区域性维护一系列文件。
创建资源文件
在解决方案资源管理器中,右击网站的根目录,单击“添加 ASP.NET 文件夹”,然后单击“App_GlobalResources”。
右击“App_GlobalResources”文件夹,然后单击“添加新项”。
在“Visual Studio 已安装的模板”之下单击“资源文件”。
在“名称”框中,键入 LocalizedText.resx,然后单击“添加”。
LocalizedText.resx 文件将充当回退区域性的资源。
再创建一个 .resx 文件,并将其命名为 LocalizedText.fr.resx。
字符串 “fr” 将文件标识为浏览器的语言设置为法语(无论区域性如何)时使用的资源。
创建第三个 .resx 文件,并将其命名为 LocalizedText.es-mx.resx。
字符串 “es-mx” 将文件标识为浏览器的语言设置为西班牙语(墨西哥)时使用的资源文件。
打开 LocalizedText.resx 文件。
在“名称”列的第一行中键入 Msg1。
在“值”列的第一行中,键入 Hello。
保存文件并将其关闭。
打开 LocalizedText.fr.resx,创建名为 Msg1 的资源字符串,并为其分配值 Bon jour。完成之后,保存并关闭文件。
打开 LocalizedText.es-mx.resx,创建名为 Msg1 的资源字符串,并为其分配值 Buenos días。完成之后,保存并关闭文件。
注意:
若要插入带锐音符(如 í)的字母,请在打开数字锁定的同时使用数字键盘键入 Alt+0237。
现在已经为名为 Msg1 的资源创建了三个值。ASP.NET 将根据浏览器设置的语言从相应的资源文件中读取值。
现在已创建资源文件,您可以返回到页,并添加引用该资源的控件。
向页添加 Label 控件
切换到 Sample.aspx,然后切换到“设计”视图。
将另一个 Label 控件拖动到页上。
右击该 Label 控件,单击“属性”,然后单击“表达式”框中的省略号 (…) 按钮。
出现“表达式”对话框。
在“可绑定属性”列表中单击“文本”。
在“表达式类型”列表中选择“资源”。
在“表达式属性”下,将“ClassKey”设置为 LocalizedText,并将“ResourceKey”设置为 Msg1。
单击“确定”。
切换到“源”视图。
标签的文本属性现在具有一个显式表达式,说明将从其中检索要选择的资源和键的基文件。
复制代码

如何管理ERP项目

mikel阅读(873)

在大型 ERP 项目开发时,有多个子团队,每个子团队有多位工程师。昨日和某个子团队的项目经理聊天时,我强调专人负责各层开发的重要,也就是 DB、Business、UI 各有不同工程师负责,横向分割工作,而不是一个工程师负责一个功能,DB、Business 和 UI 通通一个人包了,变成直向分割,其要点如下:
* · 每个工程师熟悉的技术不同,UI 需要 Ajax、Web、ASP.NET,中间层熟 Web Service、Domain Know How、DB 层熟 T-SQL 与数据库对象撰写。让每个人专精自己的技术,但不必学其他用不到的技术。
* · 一层由一个人或一群人负责,可避免重复开发。因为若我写 UI,call 我写的 Business service,再 call 自己写的预存程序,其间一定会藏有许多自己开发上便宜行事的作法,但不利于别人呼叫。因此两个人有功能近似的需求时,会自己写自己用的 Service 或 Stored Procedure,而不去尝试重复使用别人已经开发的。因为找别人开发过的近似功能很麻烦,且若不合用,对方也不见得会帮我改。到最后,DB 内一大堆近似的预存程序、检视、函数,中间层服务有一大堆近似的类别、方法。若商业逻辑层或数据库层都是专人写,则该人可以防止重复开发。
* · 各团队模块间,其商业逻辑或开发技术的交流较为单纯,比较能有跨团队的横向沟通,而不会彼此功能抵触却不知道。
* · 每一层呼叫另一层时,就在建立标准与除错,因为某甲呼叫某乙写的服务时,就会要求标准化,并替商业逻辑除错,而非某乙任意写作。以后在模块间互相呼叫时才有可能。
若个人开发各自功能,好像找一群人来建房子,甲负责厨房、乙负责浴室、丙负责客厅、丁负责卧室…结果每个人都砌了墙、开了门…但彼此的门对不太上,从客厅要进卧室时,一开门就撞墙了,因为两个门没有标准。我们应该要甲负责整地、乙负责砌砖、丙负责水电、丁负责装潢…等等。
该项目经理反问,这样不好管,团队的默契也难以养成。以往哪项功能没写出来,盯那个人即可,现在某甲说某乙没写,某乙说某丙没写。我建议是应该形成团队压力,让大家知道团队进度是卡在哪层的服务,在等哪个人。
而团队开发默契本来就是需要时间培养,分层负责开发初期的确较为混乱,不容易立刻让高手一下子就做好单支从头到尾可测试的功能,但长期而言,分工才能培养专精人才,有了合作默契与惯例后就不会混乱。
项目经理也强调组织的配置是工程师 Pool,所以随时调配任一工程师可独立完成整个功能。我的建议是变成多个专业人才 Pool,就这个例子而言,是划分成 UI、AP Service、DB Pro 三个 Pool,若哪个子团队缺哪层的工程师,就由专业 Pool 调配。
最后,他虽然没有接受我的建议,但有沟通总是好的。开发模式与文化的转变比导入新产品和技术还难。

C#获得swf文件地址

mikel阅读(856)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
namespace Saver
{
class Program
{
static void Main(string[] args)
{
try
{
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于对向Internet资源的请求进行身份验证的网络凭据。
Byte[] pageData = MyWebClient.DownloadData(“http://flash.ent.tom.com/flash_show.php?user=yangsir1111&id=70813”);//从指定网站下载数据
string pageHtml = Encoding.Default.GetString(pageData); //如果获取网站页面采用的是GB2312,则使用这句
//string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
// Console.WriteLine(pageHtml);//在控制台输入获取的内容
/** using (StreamWriter sw = new StreamWriter(“c:\\test\\ouput.html”))//将获取的内容写入文本
{
sw.Write(pageHtml);
}
**/
//((http:)|[\w/=]|\.)+[\w-]+(/[\w./?%&=]*)*.swf 读取swf文件的正则表达式
Regex rex;
rex = new Regex(“((http:)|[\\w/=]|\\.)+[\\w-]+(/[\\w./?%&=]*)*\\.swf”);
MatchCollection mc;
mc = rex.Matches(pageHtml);
for (int i = 0; i < mc.Count; i++) { Console.WriteLine(mc[i].Value); } Console.ReadLine(); //让控制台暂停,否则一闪而过了 } catch (WebException webEx) { Console.WriteLine(webEx.Message.ToString()); } } } } [/code]

ASP利用Jmail发送邮件代码

mikel阅读(713)

Set Jmail=server.cr&#101;ateobject("Jmail.Message")
Jmail.Silent=true
Jmail.Charset="gb2312"
Jmail.Priority=3     &#39;优先级
Jmail.MailServerUserName="xxxx@xxxx.com"
Jmail.MailServerPassword="123456"
Jmail.From="xxxx@xxxx.com"
Jmail.FromName="xxxx@xxxx.com"
Jmail.Subject=name
Jmail.AddRecipient rs("mail")
JMail.HTMLBody=body
Jmail.Send("mail.xxxx.com")
send_jmail="ok"
if err then
err.clear
send_jmail="no"
end if
Jmail.close()
Set Jmail=nothing

VS2008快捷键大全

mikel阅读(729)

Ctrl+m+Crtr+o折叠所有大纲
Ctrl+M+Crtr+P: 停止大纲显示
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容
Ctrl+J : 列出成员 智能感知
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
代码快捷键
Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息
Ctrl+K,I: 快速信息
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容
Ctrl+K,M: 生成方法存根
Ctrl+K,X: 插入代码段
Ctrl+K,S: 插入外侧代码
F12: 转到所调用过程或变量的定义
窗口快捷键
Ctrl+W,W: 浏览器窗口
Ctrl+W,S: 解决方案管理器
Ctrl+W,C: 类视图
Ctrl+W,E: 错误列表
Ctrl+W,O: 输出视图
trl+W,P: 属性窗口
Ctrl+W,T: 任务列表
Ctrl+W,X: 工具箱
Ctrl+W,B: 书签窗口
Ctrl+W,U: 文档大纲
Ctrl+D,B: 断点窗口
Ctrl+D,I: 即时窗口
Ctrl+Tab: 活动窗体切换
Ctrl+Shift+N: 新建项目
Ctrl+Shift+O: 打开项目
Ctrl+Shift+S: 全部保存
Shift+Alt+C: 新建类
Ctrl+Shift+A: 新建项
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
Ctrl+M,P: 停止大纲显示
Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写

WAP2.0知识分享PPT

mikel阅读(744)


对于手机WAP的开发,大家也许很陌生,有些人甚至不知道如何入手。
其实只要有HTML和CSS的基础,加上熟识WAP2.0规范,就可以制作WAP2.0页面。
而现在国内关于WAP2.0规范的资料和教程很少,在结合自己多次项目开发的经验,并翻阅熟读WAP2.0英文规范的基础上,为大家做一个简单扼要的WAP2.0知识分享,分享内容主要为WAP2.0规范中的XHTML MP和WAP CSS。
怿飞期望大家看完PPT,都可以轻松打造属于自己的WAP2.0站点。
下载文件 点击下载此文件