PowerDesigner中的数据类型对照表

The following numeric data types are available:

Standard data type

DBMS-specific physical data type
Content
Length

Integer int / INTEGER 32-bit integer
Short Integer smallint / SMALLINT 16-bit integer
Long Integer int / INTEGER 32-bit integer
Byte tinyint / SMALLINT 256 values
Number numeric / NUMBER Numbers with a fixed decimal point Fixed
Decimal decimal / NUMBER Numbers with a fixed decimal point Fixed
Float float / FLOAT 32-bit floating point numbers Fixed
Short Float real / FLOAT Less than 32-bit point decimal number
Long Float double precision / BINARY DOUBLE 64-bit floating point numbers
Money money / NUMBER Numbers with a fixed decimal point Fixed
Serial numeric / NUMBER Automatically incremented numbers Fixed
Boolean bit / SMALLINT Two opposing values (true/false; yes/no; 1/0)

 

Character data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Characters char / CHAR Character strings Fixed
Variable Characters varchar / VARCHAR2 Character strings Maximum
Long Characters varchar / CLOB Character strings Maximum
Long Var Characters text / CLOB Character strings Maximum
Text text / CLOB Character strings Maximum
Multibyte nchar / NCHAR Multibyte character strings Fixed
Variable Multibyte nvarchar / NVARCHAR2 Multibyte character strings Maximum

 

Time data types:

 

Standard data type
DBMS-specific physical data type
Content
Length

Date date / DATE Day, month, year
Time time / DATE Hour, minute, and second
Date & Time datetime / DATE Date and time
Timestamp timestamp / TIMESTAMP System date and time

 

Other data types :

 

Standard data type
DBMS-specific physical data type
Content
Length

Binary binary / RAW Binary strings Maximum
Long Binary image / BLOB Binary strings Maximum
Bitmap image / BLOB Images in bitmap format (BMP) Maximum
Image image / BLOB Images Maximum
OLE image / BLOB OLE links Maximum
Other User-defined data type
Undefined undefined Undefined. Replaced by the default data type at generation.

C++ vector容器类型

vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件  :

#include <vector>

使用vector有两种不同的形式,即所谓的数组习惯STL习惯

一、数组习惯用法

1. 定义一个已知长度的 vector :

vector< int > ivec( 10 );  //类似数组定义int ia[ 10 ];

可以通过ivec[索引号] 来访问元素

使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。

 

2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如
vector< int > ivec( 10, -1 );
定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1 

对于内置数组 我们可以显式地把数组的元素初始化为一组常量值,例如 :
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };

我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:
// 把 ia 的 6 个元素拷贝到 ivec 中
vector< int > ivec( ia, ia+6 );


被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :

// 拷贝 3 个元素 ia[2], ia[3], ia[4]
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );


3. 与内置数组不同 vector 可以被另一个 vector 初始化 或被赋给另一个 vector 例如
vector< string > svec;
void init_and_assign()
{
// 用另一个 vector 初始化一个 vector
vector< string > user_names( svec );
// …

// 把一个 vector 拷贝给另一个 vector
svec = user_names;
}

 

二、STL习惯用法

在 STL9中对vector 的习惯用法完全不同。我们不是定义一个已知大小的 vector,而是定义一个空 vector
vector< string > text;


1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中
string word;
while ( cin >> word ) {
text.push_back( word );
// …
}

虽然我们仍可以用下标操作符来迭代访问元素
cout << “words read are: n”;

for ( int ix = 0; ix < text.size(); ++ix )
cout << text[ ix ] << ‘ ‘;

cout << endl;
但是 更典型的做法是使用 vector 操作集中的begin()和 end()所返回的迭代器 iterator
对 :
cout << “words read are: n”;

for ( vector<string>::iterator it = text.begin();
it != text.end(); ++it )
cout << *it << ‘ ‘;

cout << endl
iterator 是标准库中的类,它具有指针的功能 


*it;
对迭代器解引用,并访问其指向的实际对象
++it;

向前移动迭代器 it 使其指向下一个元素

2. 注意 不要混用这两种习惯用法, 例如,下面的定义
vector< int > ivec;
定义了一个空vector 再写这样的语句
ivec[ 0 ] = 1024;
就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数 。

3. 类似地 当我们用一个给定的大小定义一个 vector 时,例如  :
vector<int> ia( 10 );
任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是 下面的错误在初学者中并不少见 :
const int size = 7;
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };
vector< int > ivec( size );

for ( int ix = 0; ix < size; ++ix )
ivec.push_back( ia[ ix ]);
程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。

10个步骤让你成为高效的Web开发者

 

要成为高产、高效的 Web 开发者,这需要我们做很多工作,来提高我们的工作方式,以及改善我们的劳动成果。

下面是 10 个提高效率的步骤,虽然不能保证解决你在开发中的所有问题,但至少是非常实用的,可以简化你的 Web 开发流程,使开发的每一个环节快速、流畅。还可以帮助你节省大量的时间,以便开发更多、更好的项目。

1. 使用 Web 开发框架

一个良好的 Web 开发框架,可以帮助你:

  • 解决常见的 Web 开发问题,如标准的 Web 页面布局、Web 表单处理、浏览器兼容性解决等)。
  • 测试 Web 开发的 bug、安全和性能。
  • 使代码重用更容易,因为有一个统一的 API。
  • 社区开发的插件和工具,可以进一步增强开发(jQuery 有很多非常棒的插件,比如用户界面、图像和网页排版等)。
  • 遵循编码的最佳实践和伟大的编程设计模式,你甚至不用去思考。
  • 有开发社区和用户的支持,你可以获取帮助以及进行协作。
  • 初学者使用起来非常容易。

所有这些好处都可以节省你的时间以及提高项目的质量。

有很多 Web 开发框架你可以选择:

  • 完整的 Web 应用程序框架,如 Ruby on Rails 或 CakePHP。
  • JavaScript 框架,如 jQuery、MooTools 和其他许多鲜为人知但很优秀的用于处理用户界面、客户端逻辑和 Ajax 的 JavaScript 框架。
  • 如果你想加快视觉层设计,你可以使用一个 CSS 框架(如,Toast),或者网页布局框架(如,960 Grid System)。
  • 专门的框架,如用于内容管理系统开发的 WordPress 主题框架。
  • 现在还有移动 Web 应用程序开发框架。

  2. 建立一个代码片段库

IT 界的名言“不要重复发明轮子”。回收你的代码,创建一个你最喜欢和经常使用的代码片段集,并确保代码组织良好,可以被轻易搜索到。

最简单的方法是,你可以在硬盘中建立源代码目录。但这未必是最好的方式。

一种方法是使用允许保存代码片段的源代码编辑器或 IDE。例如,Notepad++的 SnippetPlus 插件和 Dreamweaver 内置的片段面板。


Adobe Dreamweaver 的片段面板

另一种方法就是使用专门的片段工具,如 Snippet 或 Snipplr.。

你甚至可以使用自己喜欢的代码库/版本控制系统,像 Git,来更好地管理你的源代码。

3. 使用正确的工具

这应该是显而易见的,确保你拥有一些优秀的、你知道如何更有效地使用的工具和装备。

如果你是一个网页设计师,你可能需要 Photoshop 和 Illustrator。如果你是一名开发人员,你需要一些优秀的 Web 开发应用程序,以帮助你完成工作。

当然,各领域之间、开发者之间的工具集是不同的。重要的是你的工具应该可以帮助你尽可能地高效完成工作。

4. 收集和整理免费设计资源

在网络上有许多网站放出免费设计资源。你可以将这些网站添加到你的 RSS 阅读器,它们每发布一个免费软件或资源,你就可能了解到。

对于一个设计师来说,这样可以得到大量的图标、PSD 模板、矢量插图、风景图像、按钮、GUI 元素、Photoshop 笔刷、字体库和各种其他的设计元素。

5. 冲刺式工作(短时间高效工作)

不要连续工作几个小时,这样你的效率可能会下降,随着时间的推移,你的工作品质也会下降。每次连续工作 10~20 分钟,可以保持你大脑活跃,可以更好地产生新的想法。

在短时间的工作,意味着你总是有一个新鲜的开始。

6. 休息

冲刺工作最重要的部分是休息。让你的头脑休息至关重要。利用这些休息时间将自己的工作区分开,干些其他工作或运动一下。

另外,除非有必要,否则不要计划你的时间。你不必每次都工作 15 分钟,然后休息 5 分钟。要选一个好的休息点,有一个舒适的休息。

你可以参考番茄工作法。

  7. 在学习上投入时间

短期内,不断学习、跟上行业形势并保持领先是很费时间的。

然而,通过在自我提高上投入时间,你可以在工作的其他方面节省时间,可以增加你的劳动成果并提高工作质量。

8. 不要过度规划

你不应该严格规划你的每一天。你的头脑需要有一定的灵活性,需要有时间去认真思考。

请一定要保持你的时间表灵活变化。我发现,超过规划的工作,我可能会一拖再拖。

9. 不要急于直接开始

这和过度规划是两个极端。虽然你不应该过度规划,但你需要计划下。

每当你开始一个项目的工作,确保知道你对这个项目的期望。做网页设计项目时,需要了解客户期望做的、首页内容、颜色设置等工作。

了解有关项目的某些内容,可能会使你工作在正确的方向,而不至于在黑暗中摸索。

在我开始客户的网站项目工作时,我需要先确定:

  • 颜色方案
  • 网站的目标
  • 他们能够提供的任何内容
  • 他们已经拥有的任何设计思路

10. 不要使事情复杂化

这可能是所有这些最重要的一条:不要使你的工作复杂化。不要做更多的工作,不要在给定的时间内为自己分配过多的工作。

我不主张给你的客户提供最少的交付时间,但你肯定也不能提供最长的时间。

要明白客户他们需要什么,不能多也不能少。

另外,不要制定过于复杂的开发战略。让事情简单一些。

来源:kuqin.com

GET方法和POST方法的区别

1、GET方法多用于不改变系统设置的情况;比如获取数据。但是也可以用来向服务器传递数据。方法是把参数义键值对的形式放到URL里面。数据量有限制。

POST方法用于改变服务器的设置,向服务器传递数据。方法是把数据放到传送体里面,不在URL里面显示。而且数据量没有限制。

Http 状态码一览表

Monday, March 20th, 2006

1**:请求收到,继续处理
2**:操作成功收到,分析、接受
3**:完成此请求必须进一步处理
4**:请求包含一个错误语法或不能完成
5**:服务器执行一个完全有效请求失败

100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除

400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求
也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下
一级服务器不能满足请求

500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本

 

==========================================================

英文版:

100:Continue
101:Switching Protocols
102:Processing

200:OK
201:Created
202:Accepted
203:Non-Authoriative Information
204:No Content
205:Reset Content
206:Partial Content
207:Multi-Status

300:Multiple Choices
301:Moved Permanently
302:Found
303:See Other
304:Not Modified
305:Use Proxy
306:(Unused)
307:Temporary Redirect

400:Bad Request
401:Unauthorized
402:Payment Granted
403:Forbidden
404:File Not Found
405:Method Not Allowed
406:Not Acceptable
407:Proxy Authentication Required
408:Request Time-out
409:Conflict
410:Gone
411:Length Required
412:Precondition Failed
413:Request Entity Too Large
414:Request-URI Too Large
415:Unsupported Media Type
416:Requested range not satisfiable
417:Expectation Failed
422:Unprocessable Entity
423:Locked
424:Failed Dependency

500:Internal Server Error
501:Not Implemented
502:Bad Gateway
503:Service Unavailable
504:Gateway Timeout
505:HTTP Version Not Supported
507:Insufficient Storage

关于一个点歌社交网络的构想

来源:Oneplus

在广播还比较流行的二十几年前,电台点歌是件非常时髦的事情。当时,人们可接触的文化媒介并不丰富,沟通方式也受到多方面的制约。点歌成了传达感情的一种浪漫而有效的方式。可惜这一美好的形式随着广播的没落而逐渐淡出人们的视线。

Web2.0时代,社交网络大面积兴起,Facebook、Twitter、豆瓣等等,成功的产品无一不是抓住了人与人之间的合理聚合点。“点歌”这一形式,虽然因为时间的推移而被人们遗忘,但是依旧具有强大的聚合力。首先,因为愈来愈大的社会、经济、生活压力,使得人们进行传统社交的时间愈来愈少。其次,文字图片类的社交网络,随着人们的广泛参与呈现出信息过载的趋势。在表达丰富复杂感情时,往往显得浅薄。点歌的形式,一方面,并不要求施事与受事者同时参与,保证了时空的相对自由;一方面,相对文字图片,要求参与者做出诸如选曲、赠言等等更多的工作,在表情达意方面有着先天的优势。

基于上述一些想法,我认为,一个以“点歌”聚合的社交网络,在当下是有需求的。

我在Google、百度等搜索引擎中查询“点歌”、“点歌网站”,反馈的结果都是提供手机点歌服务的网站,并没有与上述想法契合的网站。依此,我认为,一个以“点歌”聚合的社交网络,在当下是有生存空间的。

细化这一构想,我认为,可以提供下面一些服务:

  • 注册会员之间可以点歌赠言
  • 有一个公共广播,播出公开的点歌赠言,并且可以评论寄语
  • 系统进行音乐、好友、唱片电商等推荐

这一社交网络的学术价值,显而易见。可以收集大量用户行为数据,甚至可以将点歌视为一种人工标注,开展“推荐”、“情感分析”等多方面课题研究。

当然,作为一个信息提供商,特别是音乐这一版权敏感的信息服务,运营是一件非常具有挑战的工作。在这方面我并没有什么经验或者好的想法。但是觉得,可以通过在高校里推广这一服务规避版权问题。

这篇文章的主要目的是浅尝辄止地分析这样一种社交网络形式。由于自己并非从事产品与市场方面的工作,对于问题的看法难免片面。还希望有缘人多提宝贵意见。更重要的是,虽然,我觉得这个创意还好,但是没有时间与精力去实现它。所以更希望有时间精力的小同学们愿意在将来的软件工程课上把它变成现实。

随手山寨了一个效果图,避雷针自备了。