『TopCoder 组件开发指南』

codeforces & topcoder 指南 昨天晚上刷了这两个网站的两个比赛…… 稍微记一下新手入门吧。 codeforces & topcode 介绍 共同点 首先这两个网站比赛的操作应该都是通过测试样例,hack别人,然后系统数据测试。 我在猜测测试样例是不是就是测试数据…… 这个机制就很有趣(然后我hack的时候就看看别人家的代码……根本看不出问题) 所以就有: 在 Codeforces 等平台上 PP,最后 FST 了 3... 阅读详情
导读:










『TopCoder 组件开发指南』

Ⅰ. 简介
TopCoder 组件开发
TopCoder 组件开发使用的语言包括Java 和C#,尽管这两种语言有较大差别,但开发过
程却非常相似。本指南将由始至终涵盖整个开发过程。在两种语言差别较大的地方,会分别
给出相应的说明。
开发流程
总体上说,TopCoder 组件的开发流程比较简单。你的任务就是把设计者的设计转换成
功能组件;当然,这些设计已经通过设计评审团(Design Review Board)的审查。你提交的
作品会由开发评审团(Develop Review Board)进行审查。组件的获胜者根据评审团的要求
和建议对组件进行修正,通过终审(Final Review)就行了。
TopCoder 提供了很多关于设计和开发流程的文档,你需要仔细阅读TopCoder 软件的
开发文档。TopCoder 成员指南(Member Guide)、设计开发(Development Design)、审查记
分表(Review Scorecard)和Jalopy 配置文件等的文档都会是你感兴趣的内容。这些文档会
告诉你提交需要是什么样子,Jalopy 将提供有益帮助。

所需软件
你可以在任何环境下编写你的代码。但是,我们依靠特定的技术构建组件并对其打包;
另外,我们还需要每种语言的公共库。具体包的列表如下:
C#
工具URL 描述
Microsoft .NET Framework v1.1 MSDN SDKs 如果你喜欢用C#进行开发, 你可能已经
安装了此工具。它可以通过Windows 自
动更新, 或左边的链接得到。
你可以在任何平台,任何框架下编写代码,
但你提交的作品会在当前发布的
Microsoft .NET 框架下测试。
NAnt 主页主页NAnt 是一种执行可定制,可扩展构建脚
本的工具。你需要用它编译你的工程和向
TopCoder 提交代码。第III 节包含构建脚本的详细介绍。
NUnit 主页NUnit 是一个框架,用它可以快速简洁地
测试你的代码。第VI 节中包含单元测试
详细介绍。

Java
在TopCoder 中,程序设计语言都使用同一种UML 设计工具;它必须与最新版的Poseidon
兼容。有关Poseidon 更详细信息,请参考Gentleware 主页。
确保按[N]Ant 的要求配置你的系统环境,此外,留意你xUnit 的安装路径。在配置构建
脚本时会用到这个路径。
注册
参加开发竞赛之前,你必须在TopCoder 公司网站上注册。注册之后,你不仅可以提交
你的设计和开发作品, 而且可以参加TopCoder 算法竞赛。点击注册。
工具URL 描述
本的详细介绍。
NUnit 主页NUnit 是一个框架,用它可以快速简洁地
测试你的代码。第VI 节中包含单元测试
详细介绍。
工具URL 描述
Sun J2SE SDK 1.4.2 SDK下载页Java 开发通常在最新版的JDK 下进行,你应该从Sun
主页上实时更新最新版本。
Ant 主页Ant 是一种执行可定制,可扩展构建脚本的工具。你需
要用它去编译你的工程和向TopCoder 提交代码。第III
节中包含构建脚本详细介绍。
JUnit 主页JUnit 是一个框架,它可以快速简洁地测试你的代码。
第VI 节中包含单元测试的详细介绍。
Sun J2SE JRE 1.3 JRE1.3 下载页尽管我们的组件是针对最新版的J2SE 开发的,但是我
们也尽可能地支持一些老版本JRE。通常,你组件需
要在JRE1.3 下构建。许多Windows 系统已经将其包含
进去了,放在如C:/Program Files/JavaSoft/JRE 目录下。
查找rt.jar。
Sun J2EE SDK 1.4 SDK下载页只有很少的组件需要这个包。在安装前,请仔细阅读
需求说明书(Requirements Specification),确认你是否
需要此部分。
Jalopy 主页和TopCoder 配置文件(下载)一起使用时,Jalopy 可
以格式化你的源代码。这会节省你很多时间。
Checkstyle 主页Checkstyle 是一种格式检查工具。如果可能的话,你应
该在提交前使用Checkstyle 检查一下你的代码格式。

在TopCoder 中,程序设计语言都使用同一种UML 设计工具;它必须与最新版的Poseidon
兼容。有关Poseidon 更详细信息,请参考Gentleware 主页。
确保按[N]Ant 的要求配置你的系统环境,此外,留意你xUnit 的安装路径。在配置构建
脚本时会用到这个路径。
注册
参加开发竞赛之前,你必须在TopCoder 公司网站上注册。注册之后,你不仅可以提交
你的设计和开发作品, 而且可以参加TopCoder 算法竞赛。点击注册。




































2008-4-15 18:02:06

#2

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










II. 选题
项目选题是竞赛取胜的第一步,你可以在这里找到所有开放的程序开发竞赛。该页面中,
你可以看到哪些项目是开放的及其注册、提交的截止日期。这些日期非常重要,你必须在注
册截止日期前确定你对哪个组件感兴趣,并在提交截止日期前提交你的作品,包括测试文件
和文档。难度等级越高,项目难度越大。当然,在这方面个人感觉更为重要。

项目细节
点击项目名称,你将看到该项目的有关细节。包括对于项目具体的描述,项目文档的链
接、报酬信息和一个更为详尽的日期安排。

决定是否参加某项目
找到感兴趣的项目后,请先熟悉一下这个项目的设计文档。最简明的文档就是需求说明
书(Requirements Specification),它包含这个项目会用到的各种技术的信息(如SSL,LDAP,
ODBC 等)。如果你依然兴趣不减,可以继续阅读组件说明书( Component Specification),
它包含了实现这个组件的更多细节信息。当然,还有其它一些文档,但是这两个文档对决定
一个项目是否适合你是最重要的。
选择一个项目之前,请确保你有足够的时间完成它。项目期间,你是否有其他的安排和
工作要做?另外,项目可能会用到一些你并不熟悉的技术。你知道在C#中怎样使用数据库
连接吗?你知道怎样使用java.lang.ref 类库吗?你充分了解完成这个组件所需要的网络协议
吗?最好重新阅读一下组件说明书的1.2、1.3 节和第二节,确保你对所用到的技术比较了解。

项目注册
现在,你发现你可以胜任并有时间去完成某个项目,就可以注册了。点击项目细节页面
的注册链接进行注册。


































2008-4-15 18:04:48

#3

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










III. 项目启动-环境
完成注册后,你将有权限访问项目提交程序,并且可以参加组件的开发人员论坛。
项目提交和评审( Project Submit and Review)
项目提交和评审是你参加程序设计和开发竞赛的核心枢纽。通过这个应用程序,你可以
上传你的作品,查看评审得分。点计进入。登录之后,你将可以看到自己所有开放的项目及
其状态。
点击相应的项目名称可以查看该项目的时间表和其它细节信息。在页面底部,有一排对
应项目当前状态的按钮。另外,还有一个“Contact Product Manager”按钮,你可以随时点
击该按钮向项目经理(Project Manager,PM)发送问题、评论、投诉以及其他信息。
开发者论坛
项目细节页面上有一个指向其开发论坛的链接。绝大部分关于项目的交流、讨论将在此
处进行。你可以使用你的TopCoder 账户、密码登陆所参与项目的论坛。如果不能登录,请
及时与项目经理联系。

开发包
开发人员论坛主要包括四部分:设计阶段文档(Design Phase Documents)、设计阶段问
题(Design Phase Questions)、开发阶段文档(Development Phase Documents)和开发阶段问
题(Development Phase Questions)。你可以在开发阶段文档下找到开发包。开发包中包含所
有与项目开发相关的文档和文件。
通常,Java 开发包是jar 文件,.NET 开发包则是zip 文件,它们都可以用普通的解压工
具解压。
目录
/conf 此目录包含组件的配置文件,有时还会包含所依赖组件的配置文件,或组件设计
者写好的配置文件的例子。如果在设计阶段没有创建这些文件,开发包里面将没有这个目录。
如果你的组件用到了配置文件,你得自己生成这个目录。
/docs 此目录包含组件当前的所有文档。包括.zargo 或.zuml 格式的UML 设计说明,需
求说明书和组件说明书。有关设计文档地更详细信息将在第IV 节中介绍。
/lib 在这个目录下,你可以找到组件依赖的所有组件级别的库文件,不包括系统级别的
库文件(如ODBC 驱动,其他需要复杂安装过程才可以获得的库文件等)。项目依赖的所有
TCS 组件也在这个目录下。如果缺失,你需要和项目经理联系。
/src 当你完成这个项目的时候,此目录应该包含了所有源文件。开发包通常只包含一个
目录框架。开发者负责填充源文件,这将在第IV 节中详细介绍。
/test_files 此目录包括组件测试过程中用到的全部文件。包括测试所需的特殊配置文件、
输入/输出样例、数据库方案和其它任何非编译文件。开发包中一般会包含设计者创建的样
本测试数据。
Java
/METAINF这个目录由jar 打包程序生成,可以忽略。
/build.xml 这是一个缺省的,可能未加配置的构建脚本。构建脚本将在第III 节中详细介绍。
C#
/default.build
这是一个缺省的,可能未加配置的构建脚本。构建脚本将在第III 节中详细介绍。
搭建环境
首先,你需要设置一个工作目录。例如C:/working/、C:/proj/、~/projects/;任何你觉
得合适的地方。建议为TopCoder 项目建立一个新的目录,防止混乱,避免提交一些错误的
文件。在这里,我们假定工作目录为/proj/tc/。
确定了工程放置的目录,就可以解压开发包了。目录/proj/tc/projectname
将是你的工程
目录。这里,我们假定工程名字为tutorial_gen。
下一步是配置构建脚本。记住TCS 不会使用你的构建脚本,不要在它上面花太多时间。
按照下述说明修改路径和库文件引用即可。如果遇到很棘手的问题,你可以向项目经理核实。
Java 构建脚本build.
xml
工程缺省的构建脚本已经基本上可用了。你要做的就是修改JRE1.3 的路径,这在上面
所需软件一节已经提到过。在构建脚本中找到java_1_3_bootclasspath 并进行修改。脚本是
XML 文件,注意不要无意改动了其他内容。
如果你的JRE1.3 的路径是"C:/Program Files/JavaSoft/JRE/1.3.1_10/lib" , 那么
java_1_3_bootclasspath 需要修改为
value="C:/Program Files/JavaSoft/JRE/1.3.1_10/lib/rt.jar"/>。
大多情况下,这就是你需要做的全部配置工作。如果你不想把JUnit 的jar 包放入
classpath,那么就需要把它加入到构建脚本中。去掉下面的注释,并把${ext_libdir}/junit.jar
修改成正确的路径。

Party Dependencies >
property name="junit.jar" value="${ext_libdir}/junit.jar"/>
>
如果你的工程需要额外的库文件,你需要在构建和运行前通过配置构建脚本来解决这个
问题。在脚本中,应该有些注释掉的库文件的例子。




value="${tcs_libdir}/${spell_check.path}/${spell_check.jar.name}"/>
这样,稍作修改即可对库文件的不同版本进行配置,你可能已经注意到了对${tcs_libdir}
的引用。它应该在脚本文件的开始部分就已经做了如下定义:

配置将在/proj/tc/tutorial_gen/lib/tcs/spell_check/1.0/spell_check.jar 寻找拼写检查的库文件。开发包中可能已经包含了合适的库文件路径;否则,你就需要修改以上路径或文件名属
性。
配置了引用的jar 文件后,你需要把它们加到构建脚本的buildlibs 属性中。


other library references ....>


这里必须包含构建和运行你的组件需要的所有库文件。依赖classpath 是可行的,但是
在buildlibs 中包含需要的库文件才是一个好的习惯。
Java topcoder_
global.properties
或许你已经注意到,开发包中的build.xml 包含对文件"../../topcoder_global.properties"的
引用。通过这个文件,你可以设置一些不随组件而变化的属性,如JRE1.3 的路径。
格式很简单(适用于所有的Java 属性文件)
propertyname=value
首先,在工程目录下创建topcoder_global.properties文件(如果当前工程是/proj/tc/tutorialgen,
你的属性文件将放在/proj/tc 下面)。现在,你可以设置对所有构建脚本的通用属性。
对于JRE,你可以加入:
java_1_3_bootclasspath=C:/Program Files/JavaSoft/JRE/1.3.1_10/lib/rt.jar
你也可以在文件中添加注释。
#I need a comment to remember what this means.
java_1_3_bootclasspath=C:/Program Files/JavaSoft/JRE/1.3.1_10/lib/rt.jar
你也可以使用扩展属性。
java_home=C:/Program Files/JavaSoft/JRE/1.3.1_10
java_1_3_bootclasspath=${java_home}/lib/rt.jar
需要注意的是,topcoder_global.properties 引用在build.xml 的最起始部分。这意味着
build.xml 中的属性在你的属性文件中不会被扩展( 还没有定义)。另外,
topcoder_global.properties 中设置的属性会覆盖build.xml 中的属性。想了解更多相关信息,
请参考Ant 文档。

C# 构建脚本default.
build
NAnt 构建脚本和Ant 构建脚本非常相似。
主要需要修改的地方是NUnit 的安装路径。在你的构建脚本中找到如下内容,修改相应
的nunit.framework.dll 路径。

如果你的工程需要额外的库文件,就需要在构建和运行前通过配置构建脚本来解决这些
问题。虽然.NET 中二进制文件的位置更加灵活,但是最好还是直接放在/lib 目录下。

name="generic_parser.dll"/>


































2008-4-15 18:08:00

#4

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










IV.开发
环境已经搭建好,开发包也解压了,并且配置了构建脚本。接下来要做的一件事就是:
阅读设计文档。
设计文档-你最好的朋友
/doc 目录包含完成提交所需的全部信息。
.zuml /.zargo 在doc 目录下,应该有一份UML 文档。它包含了组件中所有类和接口的
定义。它将定义组件的所有、包括异常行为。
.pdf /.rtf 在doc 目录下,应该有一份组件说明书和需求说明书。组件说明书是UML 文
档的更具可读性的版本。它包含组件常规设计,所需的标准和算法。它非常简明的定义了异
常类和其它所需的信息。你应该用不着需求说明书。它定义了组件的需求,而所有这些需求
应该已经满足。
.gif /.png 这些文档都是由UML 文档生成的,可以不去管它们。其中所有信息都可以通
过UML 文档轻松得到。
开发流程
正如第一节所述,你在开发过程中的角色就是实现已经创建并通过审查的设计。你应该
严格遵循设计文档中给出的公共API。未经项目经理和/或设计者许可,你不得擅自修改组
件的公共API:包括增加或删除public 类、方法和接口。
这并不是说设计会毫无瑕疵;恰恰相反,所有的设计都有改进的空间。然而,对设计的
不同意见要在设计中修正,而不是开发。在开发实行的过程修正设计方案是不合适的,除非
其存在致命缺陷。TopCoder 会对设计的任何改动进行细致审核。

如果你对下个修订版有任何的改进意见和见解,请在论坛上指出。开发过程中遇到的问
题也请立即在论坛上提出来。设计上的任何冲突和问题越早明确,就能越早解决。如果可能,
可以阅读一下设计论坛中的相关讨论,可能这个问题已经提出并被解决了。再强调一次,如
果你发现任何没有解决的问题,请在论坛上提出来!
上面所说的一切,都是为了鼓励你们尽可能的做出改进。如果你能把public 类的行为分
解成私有辅助类,那就去做!如果你能提出一个更加有效的算法,这太棒了!设计中你不能
改变的只有公共API 及从用户角度来说组件的行为。对于一个组件,一般来说,你不可以
改变“是什么”,但是有一定程度上改进“怎样做”的自由。

创新
不同的设计允许不同程度的开发创新。其一方面是设计本身复杂度的原因,另一方面是
设计者的方法问题。或许有的设计方案对组件描述的如此彻底,以至于组件编码变成了将组
件说明书中的伪码翻译成合适的程序设计语言。或许有的设计方案仅仅给出了公共API 的
定义,而将实现细节留给了开发人员。大多数设计方案则是介于这两者之间。
方法体的具体实现一直是程序开发者表现他们手腕的地方。对某些设计方案,添加
private 或packageprivate
的方法、构造函数,甚至设计文档中没有明确说明的类都是可行的,
甚至是必要的。如果你真要这么做,请确保这些改动是必要而且适当的,因为这些地方可能
会引起评审团额外的注意。开发人员所添加的内容(和组件中的其他元素一样)应有最小作
用域,并且予以与其用途一致的最严格的访问控制权限。对于一个任务,确保采用最恰当的
对象或者基本数据类型。
生成站位程序(Stubs)
具体开发的第一步是生成站位程序。站位程序是可编译的代码框架。其中你可以找到函
数体;然而,这仅仅是一个站位程序。这些站位程序刻画了组件的全部API,但并没有实现
其内部逻辑。Poseidon 社区版可以生成Java 站位程序。更贵一些的Poseidon 也可以生成C#
代码。如果没有这些版本的软件,你就需要手工转换这些文件。当然,你也可以从项目经理
那里索要这些站位程序。
你获得的这些站位程序很可能无法成功编译,需要你对它们稍加整理。
站位程序的另一个问题是关联部分。UML 文档里面的一些关系(例如聚合、组合)可
能会被不适当的转化成了代码。程序开发人员负责维护API 文档(UML 文档和组件说明书)
和可编译代码的一致性。

工程结构
工程的源代码应该放在/src 目录下。你的工程应具以下结构( 所给示例是在
/proj/tc/tutorial_gen/目录下):
路径描述
conf/ 包含组件必需的配置文件。
docs/ 包含工程的所有文档。
lib/ 包含所有本地库文件。
src/ 所有的源代码都放在此目录下(包括测试代码)。
Java
组件代码放在/src/java/main/目录下。你需要根据包名来组织你的源代码。例如,如果组
件是com.topcoder.util.tutorial , 那么源代码路径应该是
/src/java/main/com/topcoder/util/tutorial/。下面是典型的Java 的路径:
C#
组件代码放在/src/csharp/main/目录下。你需要根据包名来组织你的源代码。例如,你的
组件是TopCoder.Util.Tutorial.dll , 你的源代码路径就是
/src/csharp/main/TopCoder/Util/Tutorial/。下面是典型C#路径。尽管C#的namespace 不要求
目录和包名完全一致,但是根据namespace 来安排的源文件是TopCoder 的惯例。
构建你的工程
生成并整理好站位程序后,你应该可以通过构建脚本来构建你的组件了。你只需从命令
行里运行构建工具即可。
以下是[N]Ant 的常用构建目标:
路径描述
test_files/ 所有测试中用到的不可编译文件。

Java
组件代码放在/src/java/main/目录下。你需要根据包名来组织你的源代码。例如,如果组
件是com.topcoder.util.tutorial , 那么源代码路径应该是
/src/java/main/com/topcoder/util/tutorial/。下面是典型的Java 的路径:

路径描述
lib/tcs/spell_check/1.0/spell_check.jar 这是一个Tutorial Generator 所依靠的组件的例子。你
的组件可能不依赖于任一组件,也可能依赖于很多
组件。
src/java/main/ 组件代码放在此目录下。
src/java/main/com/topcoder/util/tutorial/ 这是一个站位程序目录的例子。在你的工程里,这
个路径会有所不同。

C#
组件代码放在/src/csharp/main/目录下。你需要根据包名来组织你的源代码。例如,你的
组件是TopCoder.Util.Tutorial.dll , 你的源代码路径就是
/src/csharp/main/TopCoder/Util/Tutorial/。下面是典型C#路径。尽管C#的namespace 不要求
目录和包名完全一致,但是根据namespace 来安排的源文件是TopCoder 的惯例。

路径描述
lib/TopCoder.Util.SpellCheck.dll 这是一个Tutorial Generator 所依靠的组件的例子。你
的组件可能不依赖于任一组件,也可能依赖于很多组
件。
src/csharp/main/ 组件代码放在此目录下。
src/csharp/main/TopCoder/Util/Tutorial/ 这是一个站位程序目录的例子。在你的工程里,这个
路径会有所不同。

构建你的工程
生成并整理好站位程序后,你应该可以通过构建脚本来构建你的组件了。你只需从命令
行里运行构建工具即可。
以下是[N]Ant 的常用构建目标:

目标名描述
compile 把工程编译成功能完全的二进制单元(假设你的代码是正确的)。
compile_tests 编译测试代码,依赖于compile 的成功执行。
要执行构建目标,你只需到切换到构建脚本所在的目录(应该是工程的根目录),并执
行ant 或nant 。确保你已经配置好[N]Ant,否则,这一步将失败。
NAnt 的构建示例
Ant 的构建示例
你的组件站位程序应该总能完全干净的构建。如果它们不能成功编译,可能是API 的
问题,也可能是库文件的配置问题。在编写代码和测试前就修正这些问题会简单的多,如果
可能,你也应该这样。
可以休息一会了
到这里,你已经为工程的具体开发做好了准备。有关程序开发技术和策略方面的具体问
题已经超出了这份文档的范畴。在接下来的几节中,我们将介绍有关文档、单元测试和开发
过程中的一些常见问题。
V.文档
文档对一个组件的可用性,可维护性至关重要。如果在写的同时就对代码添加文档,你
或许根本就不会感觉到写文档的负担。评审团会评估文档质量。并且,文档越好,评审团就
越容易看懂和评估你的作品,得分也就越高。
API 文档
你需要对从UML 文档自动生成的API 文档进行修改,而不是把它当作最终版本。在Java
中,API 是通过Javadoc 来注释的,C#中则是通过XML 文档来注释。所有的类、接口、方
法和变量都必须具备文档。以下是分别是Java 和C#的文档例子。
Java
当键入如下内容,很多Java IDE(如Eclipse,IDEA 等)就可以自动生成API 文档。
目标名描述
compile_targets (仅适用于Java)使用配置的JRE1.3 编译你的组件。通常,你需要进行此
操作才可以通过screening。组件说明书的第二节会指明你是否需要此步骤。
test 执行测试,依赖于compile_tests.的成功执行。结束后,测试结果存放在/log
目录下。
clean 清空/build 目录,删除所有的编译代码和中间文件。
dev_submission 将工程打包,以便通过Project Submit and Review 上传。

要执行构建目标,你只需到切换到构建脚本所在的目录(应该是工程的根目录),并执
行ant 或nant 。确保你已经配置好[N]Ant,否则,这一步将失败。
NAnt 的构建示例
Ant 的构建示例
你的组件站位程序应该总能完全干净的构建。如果它们不能成功编译,可能是API 的
问题,也可能是库文件的配置问题。在编写代码和测试前就修正这些问题会简单的多,如果
可能,你也应该这样。
可以休息一会了
到这里,你已经为工程的具体开发做好了准备。有关程序开发技术和策略方面的具体问
题已经超出了这份文档的范畴。在接下来的几节中,我们将介绍有关文档、单元测试和开发
过程中的一些常见问题。


































2008-4-15 18:10:04

#5

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










V.文档
文档对一个组件的可用性,可维护性至关重要。如果在写的同时就对代码添加文档,你
或许根本就不会感觉到写文档的负担。评审团会评估文档质量。并且,文档越好,评审团就
越容易看懂和评估你的作品,得分也就越高。
API 文档
你需要对从UML 文档自动生成的API 文档进行修改,而不是把它当作最终版本。在Java
中,API 是通过Javadoc 来注释的,C#中则是通过XML 文档来注释。所有的类、接口、方
法和变量都必须具备文档。以下是分别是Java 和C#的文档例子。
Java
当键入如下内容,很多Java IDE(如Eclipse,IDEA 等)就可以自动生成API 文档。
目标名描述
compile_targets (仅适用于Java)使用配置的JRE1.3 编译你的组件。通常,你需要进行此
操作才可以通过screening。组件说明书的第二节会指明你是否需要此步骤。
test 执行测试,依赖于compile_tests.的成功执行。结束后,测试结果存放在/log
目录下。
clean 清空/build 目录,删除所有的编译代码和中间文件。
dev_submission 将工程打包,以便通过Project Submit and Review 上传。
/**
* Saves the file to permanent storage, on the path specified by configuration. The path
* must not begin with a backslash, and must not contain any special characters (see component
* specification). If the filename cannot be used, an exception will be * thrown.

*
* @param filename The filename to save to. May not be null or empty.
* @throws IllegalArgumentException If filename is null.
* @throws IllegalArgumentException If filename is not valid (zero length, invalid characters,
etc).
* @throws IOException If an error is encountered while saving the file.
*/
public void SaveAs(string filename)

有关Javadoc 的更详细信息,请参考
http://java.sun.com/j2se/javadoc/writingdoccomments/index.html。
C#
在写代码的同时,Visual Studio.NET 会自动生成大部分XML 文档,只需在声明前面键
入///即可。

///


/// Saves the file to permanent storage, on the path specified by configuration. The path
/// must not begin with a backslash, and must not contain any special characters (see component
/// specification). If the filename cannot be used, an exception will be thrown.
///

/// The filename to save to. May not be null or empty.
/// If filename is null.
/// If filename is not valid
/// (zero length, invalid characters, etc).
/// Ifan error is encountered while saving the file.
public override void SaveAs(string filename)

虽然C#中不会对throws 语句进行检查,但是在API 文档中注明该方法可能产生的异常
是个好习惯。有关XML 文档的更详细信息,请参考
http://msdn.microsoft.com/msdnmag/issues/02/06/XMLC/default.aspx。
文档的内容
解释组件的行为,非法输入及相应的异常行为。明确对象因为某种操作而发生的变化(对
List.add(object)而言,这可能显而易见;而对List.screenedAccept(object,bool)来说,可能就不
是那么明显了)。务必注明方法的返回值,可能抛出的异常和所有的参数。此外,每个类和
接口都需要有个概括性文档,以解释其作用。
请不要在组件中包含任何个人标识信息。任何需要用到你的TopCoder 账号(handle)的地
方(例如@author 标签),请用TCSDEVELOPER代替,保证客观、公平。组件的获胜者
将会在修正(Final Fix)阶段将handle 写入自己的组件。

文档的读者
API 文档的读者将是组件的使用者:TopCoder 软件的客户。在文档中请保持专业口吻;
使用主动语态;语言尽量具有描述性,要考虑到组件的使用者可能没有你对语言和组件这么
熟悉。
前面已经说过,从UML 直接产生的文档不是合适的最终版本。例如:SaveAs 函数可能
会有如下的文档:
这段文字描述了SaveAs 函数的功能;但是,它更多的是为程序开发者自己写的,而不
是其用户。你可能想删除其实现细节,而又清晰、准确的解释函数的行为。“funny character”
可能对内部人员适用,但是对用户来说是不行的。请将这些条目熟记于心,当你完成一个函
数的时候,请重写其API 文档。
内嵌式文档
内嵌式文档是一段代码中解释代码功能的文档。内嵌式文档是为组件使用者以及
TopCoder 改进所用的。和任何其他程序设计过程一样,你注释得越详细,代码就越容易维
护。x++,一个简单的自增语句,没有必要注释。但是loopIndex++, recordCount++可能更
合适。如果一段代码的意图不甚明显的话,你可能就需要添加一些注释了。
必备文档
关于API 文档和内嵌文档并没有硬性规定,对它们的评审将会比较主观。
然而,以下几项是基本要求:
 每个文件必须包含TopCoder 版权声明。
 所有的public API 元素必须有详细的文档注释(参数,返回值,异常),注意:包
括单元测试。
 任何复杂或比较大的程序段必须包含内嵌式文档以解释其目的和功能。
 文档必须具备专业的口吻和质量。
将这些指导原则牢记于心,你可以在文档方面得到高分了。
VI.单元测试
组件无论大小都需测试。测试的目的是保证组件对各种输入均有正确的行为。我们的单
元测试风格起源于极限编程。你不一定要以这种风格来编程,需要获取有关极限编程和单元
Pull the path info from the config file, then append the filename passed in. Attempts
to save the file to that location, throws exception otherwise.
Invalid Input: null, blank, funny characters, nonfs
safe
Valid Input: everything else
Throws: IOException on failure, InvalidArgumentException if it is

这段文字描述了SaveAs 函数的功能;但是,它更多的是为程序开发者自己写的,而不
是其用户。你可能想删除其实现细节,而又清晰、准确的解释函数的行为。“funny character”
可能对内部人员适用,但是对用户来说是不行的。请将这些条目熟记于心,当你完成一个函
数的时候,请重写其API 文档。
内嵌式文档
内嵌式文档是一段代码中解释代码功能的文档。内嵌式文档是为组件使用者以及
TopCoder 改进所用的。和任何其他程序设计过程一样,你注释得越详细,代码就越容易维
护。x++,一个简单的自增语句,没有必要注释。但是loopIndex++, recordCount++可能更
合适。如果一段代码的意图不甚明显的话,你可能就需要添加一些注释了。
必备文档
关于API 文档和内嵌文档并没有硬性规定,对它们的评审将会比较主观。
然而,以下几项是基本要求:
 每个文件必须包含TopCoder 版权声明。
 所有的public API 元素必须有详细的文档注释(参数,返回值,异常),注意:包
括单元测试。
 任何复杂或比较大的程序段必须包含内嵌式文档以解释其目的和功能。
 文档必须具备专业的口吻和质量。
将这些指导原则牢记于心,你可以在文档方面得到高分了。


































2008-4-15 18:11:06

#6

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










VI.单元测试
组件无论大小都需测试。测试的目的是保证组件对各种输入均有正确的行为。我们的单
元测试风格起源于极限编程。你不一定要以这种风格来编程,需要获取有关极限编程和单元
Pull the path info from the config file, then append the filename passed in. Attempts
to save the file to that location, throws exception otherwise.
Invalid Input: null, blank, funny characters, nonfs
safe
Valid Input: everything else
Throws: IOException on failure, InvalidArgumentException if it is
测试方法论的更详尽的信息, 请参考http://www.xprogramming.com 或者
http://junit.sourceforge.net/#Documentation。
在极限编程中,测试先行。当然,这不是必须的,但非常有效。程序API 很大程度上
是不变的, 这使得对照其写测试用例成为可能,而不需要管是否能通过。随着你的开发进度,
不断测试,你的组件将会通过越来越多的测试。

什么是单元测试
单元测试是程序功能模块最细微的测试(测试功能的每个单元)。通常,这意味着需要
单独测试所有非private 的方法和构造函数。单元测试既需要验证程序在合法状态和输入下
的行为(包括极限情况),也需要验证其在所有可测的出错情形下的异常行为。
测试范围
单元测试的范围可以尽可能的广。有时,单元测试的代码量甚至会超过被测试的代码量。
组件的所有public 函数都必须有相应的测试:包括准确性测试和异常测试(对应合法和
非法的输入)。测试面越广,组件的bugs 就越容易暴露。要想覆盖所有的输入情形是非常困
难的(有时甚至是不可能的)。但是,输入覆盖面越大,组件就越可靠。
除了这些小的、原子性测试,你也应该创建测试来查看你的组件是否始终提供了所期望
的功能。
创建你的单元测试
第一步是在src 文件夹下创建单元测试的目录。每种语言因测试目的而有细微不同。
创建C#单元测试
创建Java 单元测试

单元测试技巧
将所有的单元测试放在一个函数中听起来非常有诱惑力。但是,这样会极大地降低测试
的效果。在上面的例子中,我们可以简单的将三个测试函数组合成一个:testSaveAs()。现
在我们只有一个测试函数,而不是三个。如果三个当中任何一个失败的话,整个测试将失败。
在大规模测试中,这种组合测试的方法论将会导致失败条件的混乱,测试的调试将变得困难。
测试用例越小,功能越单一,错误点和可能的原因就越明显。
 总是实现组件说明书中的demo。
 总是在assert 和fail 调用中提供有意义的信息
 总是像注释组件代码一样注释测试用例
 把测试用例组织成TestCase 类, 如果一个TestCase 已经难于管理, 请拆成两个或者
更多的类
 将TestCase 类中的测试用例拆分成尽可能小的功能集;这样,组件的哪部分出现
了问题就一目了然。你也可以用测试用例通过和失败的情况作为组件完成与否的标
准。

 通过setUp()和tearDown()来减少重复代码,增加可靠性。
 时间允许的情况下,用尽可能多的合法,非法输入对每个public 函数进行测试
 测试组件期望的流程。比如:载入数据、处理数据、保存数据。
 不要忘记清空测试环境。单元测试后,系统应保持在测试前的状态,而不是产生了
持久的影响。此问题将会在评审过程中进行检查。
 除了对测试框架的特殊意义,测试类在各方面都是正常的类。这些类可以继承介于
它们自己和最终测试间的类,可以包含非测试用的方法,并且有状态。
 因为它们和被测试的组件类处于同一包或namespace 下,单元测试可以访问具备包
访问属性或者protected 访问属性的类及其成员。
 接口不能直接测试,但是可能存在以接口为参数的方法。这种技术使得验证组件是
否对于接口类型的域和参数有正确的行为以及组件是否正确处理了此类方法调用
时的抛出的异常潜力巨大。


































2008-4-15 18:11:22

#7

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










VII.问题
在开发过程中,你可能会遇到一些问题。或许你需要额外的组件,或许组件本身设计的
有瑕疵导致开发无法进行。你或许对设计者的意图感到疑惑,或许对组件使用的技术感到不
解。别担心,你并不孤单。
如果发现设计有任何不明确的地方,你都可以在组件论坛中进行提问(从Project Submit
& Review 进入)。你可能会遇到一些设计者没有考虑到的情况。你可能错读了组件,或者
没有注意到一些事项。任何情况下,组件本身相关的问题都应该在组件论坛中说明。
另一方面,如果你在写代码过程中遇到了困难,或对某种技术不甚了解,或者遇到了某
种程序bug,你可能就需要去TopCoder 自由讨论区(Round Tables)了,而不是开发论坛。自
由讨论区的URL 是 http://www.topcoder.com/rtables/index.jsp。其中一般讨论区或组件竞赛讨
论区是寻求帮助的合适地点。自由讨论区是一些经验丰富的TopCoder 成员和TopCoder 软件
职员经常光顾的地方。他们都会提供最大的帮助。
如果你遇到一些问题,使你不能继续你的组件,请立即给项目经理发Email。这些问题
包括文件缺失或者错误,访问或者应用程序问题,重大的设计问题等。你可以通过组件的
Project Submit & Review Details 页面给项目经理发Email。如果你不能访问上述页面,你可
以直接发邮件至 service@topcoder.com, 说明你所注册的组件和遇到的问题。
readme 文件不是一个好的交互方法。如果需要对组件做任何大的改动,你必须与组件
设计者和项目经理联系。

































2008-4-15 18:11:57

#8

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










VIII.提交
艰苦的工作已经结束,此时你的组件已经通过了所有150 个测试。可以准备提交了。
首先,你需要检查你的代码,确保尽可能符合评审条款(第IV 节)。一些细枝末节的问
题也会在稍后的评审过程中降低你的分数。确保你的目录结构符合要求。
其次,确保你的代码成功编译,如果你做的Java 组件,确保compile_targets 命令成功
编译了组件。
最后,执行dev_submission,生成文件的压缩归档。务必检查一下你写的所有文件是否
全部包含其中,需要的话加入缺失的文件。你的提交需要包含单元测试成功执行的日志文件,
conf/目录下的所有文件,test_files/目录下的文件及目录。如果有时间的话,你可以将归档文
件解压到另外一个目录下重新构建以确保成功。
如果你对自己将要提交的归档文件已经比较满意了,就可以通过Project Submit &
Review 上传!
使你的提交出类拔萃
想要在开发竞赛中胜出,你必须使你的提交出类拔萃。
对于简单、比较具体的组件来说,这是一个诀窍;即使对于较复杂、抽象一些的组件来
说,也应当给与足够的重视。有多种方法让你提交的作品脱颖而出,这里给出几点建议:
 写简洁、清晰而高效的代码。虽然这方面没有明确的评审条目,不过评审员总是喜
欢那些对他们来说易读易懂的代码。高效的代码可以使你的程序在压力测试和基准
测试中表现优异,从而得到一些额外的分数。
 单元测试务必全面。你可能会为测试不足付出高昂的代价,因为在评审条目中有好
几条是关于单元测试的。单元测试应该覆盖所有非私有方法,并且需要良好的文档
注释。在测试方面的良好表现会是赢得组件的重要砝码,因为单元测试是很容易被
忽略的部分。
 提供卓越的文档注释。类和方法的文档是由开发人员负责,但是似乎很少有人给它
应有的重视。良好的文档必须清晰,容易理解。了解并熟悉Javadoc 的文档。例如:
任何HTML 标签都可以插到文档注释中,适当的应用这种特性将会非常有效。试
着站在别的程序开发人员的角度问自己:你想要知道组件的什么信息,然后将其写
下来。了解并遵循Sun 或Microsoft 的文档注释指南,以及相关如何写API 规范的
文档。
 完全符合要求,提供所有要求的功能。或许,这是理所当然的;但是任何差错都会
减少你获胜的机会。小心特殊情况和非正常输入。
 注意任何设计者忽视的问题。比如:线程安全,可移植性(即使是Java 或者.NET
也存在移植性问题)。请在设计框架内仔细斟酌,使你的提交具备想要的特性。

































2008-4-15 18:12:55

#9

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










IX. 评审
评审团将根据以下要点对你提交的作品进行评判。你可以查看详细的分数卡信息。
程序提供了组件设计文档所述的全部功能。组件是不是提供了设计所规定的功能?它是
不是按照要求的方式完成?
程序正确的地运用了组件所要求的技术。你的组件适当运用了所有相关的技术吗?你有
没有合理的连接数据库?有没有合理的运用XML 配置?此条款也适用于设计元素如
singleton 设计模式和同步问题。
程序合理实现了组件说明书1.3 节所要求的算法。如果你的组件里有比较复杂的算法,
它们可能已经在设计中指明。如果你对算法做了改进,此栏你可以获得额外的分数。如果发
现1.3 节中的说明有什么问题,把它发到论坛上来,和设计者一起寻求解决办法。作为程序
开发人员,你应当对组件的行为负责,即使算法设计存在缺点。
所有类、方法以及变量的声明都和设计文档中的定义完全一致(可视性、类型、修饰词、
名字和异常)。你必须严格遵循设计的API。除非征得设计者或PM 的同意,不得删除、添
加或者修改任何公共API。
不得在设计中添加额外的public 或protected 实体。你只能在组件中添加private 实体。

包访问特性或者protected 的变量是不允许的。只要合适的融入design 中,包访问特性的方
法是允许的。如果只是用来提供辅助方法,包访问特性的类是允许的。private 变量、方法和
内部类都是允许的。所添加的实体必须遵循语言的命名规范,并且措辞得体。注意,当有多
个包时,辅助类可能需要是public 的。在这种情况下,关于添加公共类和方法的限制可以放
松。
程序实现合理的反映了类间关系。如果你按照设计要求来实现,这点通常已经满足。除
非确有必要,你不可以在类之间增加依赖或者关联。
程序中对象类型定义是最好的选择。作为程序开发人员,你必须在不同对象类型间做出
选择。比如:你可能决定用一个TreeMap 去存储一些键值对。然而,除非你需要保持键的
相对顺序,你应该使用HashMap 。在这里,“最好的选择”通常是与效率相关。
没有无用的代码。不要写臃肿的编码。C#和Java 库都可以复制数组,都可以将容器转
换成换成数组。不要重新实现标准库已经实现的功能。不要赋值给不用的变量。不要在组件
中遗留测试或者临时函数。
没有编码冗余。尽可能将代码分解成辅助函数和辅助类。运用重载减少重复代码。当然,
不要太极端。尽可能减少重复,而又不要写成50 个仅一行的函数。你要做出权衡。
代码简洁、高效。这项有些主观,但是也有客观参照。你一般不应该对三元选择运算符
进行套嵌(如good ? "great!" : ok ? "I suppose" : bad ? or_is_it ? "darn" : "phew" : "who
knows?" )。这非常不清晰。与此类似,大段的代码……如果某个函数超过了50 行,你可能
需要把它分解成多个函数。例如:如果你正在画一个图,你可以有一个drawAxes()函数,一
个drawData()函数,还有一个drawLegend()函数,而不是一个非常大的代码块。效率方面,
很小的改进也可以产生明显的效果。当你已经达到期望值的时候,从查找中跳出。智能设置
控制条件,运用短路求值法。不要把你的代码写的过于复杂,能简化的尽量简化。
抛出的异常提供了合适的错误信息和原因。和文档一样,异常应该简洁、详细、专业。
“IT SCREWED UP AGAIN”不是一个合适的异常信息,无论当时感觉多么合适。
所有代码,包括测试用例,都遵循TopCoder 编码规范。我们的编码规范是已发布的Java
和C#标准。你可以通过以下链接查看:
Java 编码规范
.NET 编码规范
程序实现包含关于类、方法和变量的文档,并以Java / C#编码标准所要求的Javadoc /
XML 风格编写。参考文档一节可以获取更多信息。文档应该详细、全面而专业。语法和拼
写错误也是我们的评价要素。
在产生Javadoc/XML 文档的时候没有错误和警告。文档必语法正确:没有不存在的元
素的文档,没有畸形的文档元素。
单元测试正确、彻底地测试了所有的方法和构造函数。单元测试非常重要,你必须彻底
的测试你的组件。参考单元测试一节。
单元测试包含一个演示组件如何使用的Demo。你应该模拟并演示如何使用组件;你应
该实现组件说明书关于的如何使用组件的例子。
单元测试合理配置了测试环境。请使用配置文件和setUp()、tearDown(),以得到高分。
在单元测试中用到的文件位于test_files 目录下。如果你的单元测试需要一些额外的文
件才得以执行,请将它们放在这里;否则,你将会被扣分。
单元测试完成后,没有在文件系统中残留临时文件,没有打开的网络或数据库连接,没
有打开的文件或流。测试可能会被TCS 或者客户频繁的运行。测试完毕后系统应该和测试
前处于同一状态,没有留下残骸。
单元测试包含详细的类、方法和变量的文档。像注释组件代码一样注释单元测试。
此外,三个程序开发评审员的都会写单元测试程序,以探察你的组件在精确性、适当的
异常行为以及压力测试下的表现。基于以上这些要点以及测试结果,你的组件将会得到一个
分数。


































2008-4-15 18:13:11

#10

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










X.申诉
评审结束后,你将有几天时间查看你的组件得分并进行申诉。你将看到分数卡上关于以
上每一条的评论,而且可以为分数进行争辩。需要注意的是,你的申诉必须理由充分,否则
将会被拒绝。如果评审员的陈述与设计相冲突,或者评审出现了差错,不要顾忌,申诉!另
外,观念性的问题一般不要申诉。如过你是组件的获胜者,在修正阶段你将有机会讨论评审
员的评判。

































2008-4-15 18:13:26

#11

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










XL.修正
祝贺你!你是组件的获胜者!
然而,仍然有一些工作需要你去做。你可以通过Project Submit & Review 看到评审分数
卡。在那里,你可以找到评审团提出的所有有关你的提交的问题。它包括对提交作品必需的
和推荐的修正。
必需项是必须解决的。其中任何一项没有完成,你的组件就不能结束。推荐项则是需要
你去尝试解决的。显然,它们的优先级次于必需项;时间允许的话,也应该完成。

交流
在修正阶段,交流比在其他任何时候都重要。
无论什么原因,如果你对评审有疑问或意见,及早提出来。如果问题严重,请立即致信
PM,并且发布于论坛上。PM 将会查看这些问题,并确保主评审员(Primary Reviewer)会来
解决这些问题。如果你觉得一些必需项是不可能做到的,请在论坛上提出来。绝对不要重复
提交没有修正的组件或者仅仅在readme 文件中声明这些问题。和评审员保持联系,以避免
发生上述情况。你反映得越及时,提供的资料越详细,这个过程就会越顺利。和评审团交流
的大门将一直对开发人员敞开;他们可能没有注意到设计或者你提交作品中的某些细节。不
要害怕对评审团提出质疑。质疑和评论表明你在关注这些问题,并在积极参与。没有交流,
评审团将无法阐明他们的要求,也无法得知你做了什么工作。

[Ryan.Bay 于 2008-4-15 18:13:46 编辑过]


































2008-4-15 18:14:01

#12

















Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










XII. 提交和终审
这仅仅是一次dev_submission 的构建过程。遵循同样的指导原则,保证上传了所有文件。
使你的提交尽可能完善。这样将节省所有人的时间,包括你自己。
如果你的提交已经满足了所有要求,通过了所有评审的测试,组件也就完成了,并将添
加到目录中。你的工作也就完成了。































2008-4-15 18:14:13

#13












Ryan.Bay











大菜

角  色:注册用户
发 帖 数:431
经 验 值:762
注册时间:2008-3-19










XIII. 结论
再次祝贺你!经过注册、开发、测试、提交、被审查、申诉、获胜、修正并再次提交,
你得到了报酬,并且还可以从你所做的工作中得到版税!有什么庆祝方式会比再注册一个新
的项目并且完成它更好呢?



本文转自

http://xy.scau.edu.cn/info/studentunion/bbsxp/ShowPost.asp?ThreadID=345
topcoder客户端及相关插件 topcoder arena,包含ContestAppletProd.jnlp,CodeProcessor.jar,FileEdit.jar,TZTester,运行需要jre环境 立即下载

相关推荐

TopCoder UML 建模软件 version1.2.4

实现了class diagram, sequence diagram,user case diagram, activity diagram,可以生成java,c#源码

【转】TopCoder入门教程 -- sqybi完善版

本文根据经典的TC教程完善和改编。TopCoder:http://www.topcoder.com/基本规则TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High School SRM,题目和SRM一样,仅限中学生参加,参赛者水平较低,据说涨rating很容易),马拉松(Marathon Matchs)

hjthss的专栏 1199

Keil v5.11给STM32烧录程序记录

1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ...

守望的距离 6281

Topcoder Greed 插件安装与使用指南

Topcoder Greed 插件安装与使用指南 项目介绍 Topcoder Greed 是一个专为 Topcoder Arena 设计的强大算法竞赛辅助插件,旨在提升参赛者的开发效率和比赛体验。该插件提供了对 Java、C++、C# 和 Python 等多语言的支持,并具备高度的可配置性,使得代码编辑更加简洁,管理更为方便,让参赛者可以更集中精力于算法解决方案本身。 项目快速启动 步骤一:获取插...

gitblog_00964的博客 548

Marvell 88E6390x交换芯片:从零构建No-CPU模式网络交换系统

本文详细介绍了如何为Marvell 88E6390x以太网交换芯片构建No-CPU模式网络交换系统。通过解析其核心价值与硬件准备,并手把手指导使用CodeBlocks、IMPGUI和SwitchGUI等软件工具进行配置代码编写、镜像生成与烧录,最终实现交换芯片脱离外部CPU独立工作,适用于成本敏感、空间受限的嵌入式网络设备设计。

plant的博客 483

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1674

TopCoder SRM(Arena) 一日游记

呃,其实我是个菜如一只jie

HDU_toraoh 1万+

OpenCV实例(一)人脸检测

计算机视觉使很多任务成为现实,其中两项任务就是人脸检测(在图像中定位人脸)和人脸识别(将人脸识别为特定的人)。OpenCV实现了一些人脸检测和识别的算法。从安全到娱乐,这些技术在现实环境中都有应用。介绍OpenCV的一些人脸检测和识别功能,并定义特定类型的可跟踪物体的数据文件。具体来说,将研究Haar级联分类器,通过分析相邻图像区域之间的对比度,确定给定图像或子图像是否与已知类型匹配。

小幽余生不加糖 5004

TopCoder Component Development Tutorial(组件开发说明书)

【写在前面】     想研究TopCoder整点小外快,翻来找去只找到 @Xviewee 在2008年翻译的文章,由于年代久远,我对TopCoder组件开发说明书更新到最新版,看他的原文点这里,首先对他的工作表示感谢!     TopCoder Component Development Tutorial 英文版原文看这里。     如果发现本文有任何错漏敬请告知,感激不尽。     本人

窗边的倒影 3277

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 382

【异常】Hermes Agent调用z.ai接口失败(余额不足)API call failed (attempt 1/3): RateLimitError [HTTP 429]

补充说明:同步尝试解析接口对应网页时,出现“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”提示,该提示不影响核心报错排查,仅作为辅助信息。

奶爸的编程之路,也就一周冷个三天 1194

TopCoder组件开发 C#

http://xy.scau.edu.cn/info/studentunion/bbsxp/ShowPost.asp?ThreadID=345 Ryan Bay翻译地很好,http://www.topcoder.com/wiki/display/tc/Component+Development+Tutorial 这是TopCoder源址。 这里,是我-iJuliet对Topcoder组件...

Juliet 383

从模糊到清晰:让AI教相机自动对焦的实战指南

AI自动对焦技术:让模糊照片成为过去式 深度学习驱动的自动对焦技术正颠覆传统摄影,使相机能在复杂场景下智能锁定焦点。相比传统对焦方法在弱光、低对比度环境下的失效,AI通过学习"清晰-模糊"规律,实现全场景精准对焦。本文详细解析了该技术的三大优势: 自适应各种光线条件; 毫秒级对焦速度; 突破物理限制的精度。 通过PyTorch搭建的CNN模型,展示了从数据采集到模型训练的全流程实战方案,包括使用拉普拉斯算子评估图像清晰度等关键技术。该技术已成功应用于手机摄影、工业检测、无人机航拍和安防监

LXY_LOVE36的博客 347

TopCoder Getting Started in Component Development Competitions(组件开发详细步骤)

【写在前面】     英文原版请看这里。     如果发现有任何错误及疏漏,敬请告知,感激不尽!     转载请注明出处,谢谢。 步骤1:阅读TopCoder组件开发指南     英文版的组件开发指南请看这里,翻译版可以看这里,它提供了在TopCoder进行组件开发的详细资料,该指南由评审委员会人员 AdamSelene 编写。 步骤2:安装所需要的软件     最重

窗边的倒影 1028

Java代码变更影响分析:从静态解析到动态调用图的实战全链路

本文介绍了Java代码提交影响分析的核心原理与实现方法。主要内容包括:1)静态分析技术,通过JavaParser解析AST构建调用图,记录类与方法间的调用关系;2)动态分析技术,使用ByteBuddy进行字节码增强,捕获运行时调用路径;3)JCCI工具实现,结合javalang、unidiff等技术分析代码改动影响,并将结果存储到SQLite数据库。文章提供了完整的代码示例,展示了从AST解析、动态调用跟踪到实际工具应用的完整技术栈,为代码变更影响分析提供了实用解决方案。

墨夶的博客 1252

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TC组件开发竞赛

导读:  第一步-阅读TopCoder组件开发指南  TopCoder组件开发指南可以提供你使用TopCoder软件方法开发组件的详细信息。该指南由评审委员AdamSelene编写。  第二步-安装必要的软件  你需要安装一个UML工具才能浏览设计。TopCoder会员目前使用Poseidon的免费版本。  第三步-浏览组件示范和文档。  下载并熟悉现有组件。  第四步-选择一个组件

Tisty的兵工厂--新Blog:http://www.UbuntuSky.cn 1406

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TopCoder组件开发流程视频

http://www.topcoder.com/flash/demos/devdemo1.html

Tisty的兵工厂--新Blog:http://www.UbuntuSky.cn 1052

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TopCoder兼职赚钱入门(Part. 1)

<br />原文地址:【原创】TopCoder兼职赚钱入门(Part. 1)作者:汪昊成  最近找我问TC的朋友越来越多,于是就想写一个入门教程放在这里。对我来说,TC目前是总收入的一个重要组成部分,虽然不如工资多,但是性价比极高。由于我基本只干Design/Development,因此本文只介绍这两种,对于有志于Architecture/Assembly乃至Studio的,我给予精神上支持。另外,我在软件工程方面的知识体系极其山寨,这篇文章应该会有不少错误,请海涵。最后,转载请注明。一,准备  虽然说TC

Skai_优快云的专栏 1万+

topcoder赚钱的方法

从topcoder赚钱的方法~<br />1. 算法<br />1.1  SRM<br /> 钱少($30左右),而且很难。<br />1.2  Tournament<br /> 钱多($1000~$10000),太难~2. 设计和开发<br />2.1  构件设计和开发<br /> 钱比较多($1000左右),而且机会很多,王道啊!<br />2.2  Digital Run<br /> 分季度,前5名有很多钱($1000~$10000),而且可以去米国接受荣誉~可以争取!<br />2.3  Rooki

lipps的专栏 2万+

topcoder使用介绍

本文根据经典的TC教程完善和改编。 TopCoder:http://www.topcoder.com/ 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High School SRM,题目和SRM一样,仅限中学生参加,参赛者水平较低,据说涨rating很容易),马拉松(Marathon Mat

liuzhushiqiang的专栏 2075

TopCoder介绍

From Wikipedia, the free encyclopediaTopCoder is a company which administers contests in computer programming. TopCoder hosts weekly online algorithm competitions — known as SRMs or "single round

touzani的专栏 5484

TopCoder竞赛介绍

<!--google_ad_client = "pub-7058131363132249";/* 468x15, 创建于 08-6-3 */google_ad_slot = "4187223796";google_ad_width = 468;google_ad_height = 15;//--> <script type="text/javascript"src=

Tisty的兵工厂--新Blog:http://www.UbuntuSky.cn 2733

TopCoder 介绍

<br />竞赛背景<br />       TopCoder成立于2001年,它的客户包括Google、MS、YAHOO、Intel、 Motorola和SUN等 世界上顶级的IT公司。每年TopCoder都会举办若干个编程竞赛和锦标赛,其总奖金金额高达几十万美元。她是你进入世界顶级的IT企业的捷 径,TopCoder排名(程序设计,开发,算法)靠前的选手基本都成了知名公司追逐的对象。 Google为了等待 Jon McAlister (jonmac,topcoder排名 50名)用了两年多的时间

zhangjingjiji的专栏 2404

[原创] TopCoder Arena 插件使用指南

导读:  经过观察牛人插件的使用统计,我配置成功了一组插件。  For C++  代码处理插件,所有的代码自动功能的框架,可以配置自定义处理方法的jar和编辑器组件的jar  Plugin Name: CodeProcessor  Description: Plugin that will allow you to write pre/post processing source cod

Tisty的兵工厂--新Blog:http://www.UbuntuSky.cn 5061

topcoder使用

呃,其实我是个菜如一只鸡的家伙了,想了那么久说要去打Topcoder 的srm,从配置好到实际打,中间间隔估计超过1个月. 当然第一次srm人品比较好,250和500水过,950的没想法也就认了,实力就没到那里,然后Challenge阶段hack 2/2,然后莫名的就给我定到了1411,缺个口的蓝名。 不过说老实话,Topcoder Arena这个客户端在默认配置下的使用难度真是让人觉得有...

qwq112345的博客 4231
上一篇: TC组件开发竞赛
下一篇: 小技巧:用FireFox保存Flash
Xviewee
博客等级 码龄20年 78粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值