[转] http://www.cnblogs.com/hanguoji/archive/2007/01/19/413997.html
--删除约束
ALTER TABLE CustomData DROP CONSTRAINT FK_CustomData_CustomFormatInfo
GO
--关闭递增插入属性
SET IDENTITY_INSERT OFF
--打开递增插入属性
SET IDENTITY_INSERT ON
--修改增加约束
ALTER TABLE [CustomFormatInfo] WITH NOCHECK ADD
CONSTRAINT [PK_CustomFormatInfo] PRIMARY KEY CLUSTERED
(
[CustomFormatID]
) ON [PRIMARY]
GO
--修改表增加外键约束
ALTER TABLE [CustomData] ADD
CONSTRAINT [FK_CustomData_CustomFormatInfo] FOREIGN KEY
(
[CustomFormatID]
) REFERENCES [CustomFormatInfo] (
[CustomFormatID]
)
GO
今天从数据库中读记录,不知道怎么回事,总是出现换行,在网上找了很多方法,大体上就是用Replace替换chr(10),chr(13)之类的,结果还是没有解决问题,即使在数据库中把换行处的空格删掉仍然显示有换行,真的是无语了。最后在从数据库中读取记录的时候就进行替换:
(LTRIM(replace(replace(photo_title,char(10),''),char(13),''))) as photo_title
这样问题解决了,我看网上有很多这个问题,最终虽然都给分了,大部分都没有解决问题。不管怎么样还是先记下吧,作为一个小小的积累....
今天又用到这个东西,发现仍然有不足的地方 ,就是在数据库为sqlserver 类型为Text时候不能使用 replace,经过查资料,可以用
(LTRIM(replace(replace(cast(article_content as nvarchar(200)),char(10),''),char(13),''))) as article_content
这个就是先将字段的类型进行转化,这里需要注意的是转化的类型,现在这种情况,即使内容长度为 10000,也只会显示出来200,这就是转化类型的问题,不过我只要用100多就够了,至于如果要很长怎么办,还是等遇到问题的时候再想解决方法吧,懒死了....
1.求字持串的长度LENGTH
您可用LENGTH函数求字符串的长度。LENGTH返回一个数值。该值等于参数中的字符个数。
例:使用LENGTH函数
SQL>select Last_Name, length(Last_Name) from customer order by LastName;
2.使用SUBSTR函数从字符串中提取子串
语法:
SUBSTR函数的语法如下:
SUBSTR(string, string charcter, number of charcters)
变量定义如下:
string为字符列或字符串表达式
string charcter为子串的起始位置
number of charcters为返回字符的个数c
例:说明了怎样使用SUBSTR函数取得教师的姓的前四个字符
SQL>select last_Name, substr(Last_Name, 1, 4) from instector order by Last_Name
例:在SUBSTR函数中使用LENGTH函数(取后三个字符)
5Qt.>select last_Name, substr(Last_Name, Length(Last_Name) - 2, 3) from instector order by Last_Name
3.在字符串中查找模式
例:使用LIKE运算符
SQL>column description format a40 word_wrapped
SQL>column title format a35
SQL>select Title, Description from Course where Description like '%thory%' or Description like '%theories%';
4.替换字符串的一部分
经常遇到的数据操纵任务是在特定的列中将数据由一种模式转换成另一种模式。
假设您希望在Course表中改变课程说明,将说明中的字seminar用字discussion替代.那么您可用oracle提供的函数REPLACE,该函数使得某列的字符串能被另一字符串代替。
语法:
REPLACE函数的语法如下:
REPLACE(string, existion_string, [replacement_string])
变量定义如下:
string为字符表达式c
existion_string为已存在的字符串。
replacement_string为用来替代的可选字符串。
例:使用REPLACE函数
显示了在Course表中如何使用REPLACE来改变课程名称(title):首先使用查询显示当前课程名称,UPDATE语句中使用REPLACE函数将SEMINAR改变成DISCUSSION,另一查询显示了UPDATE语句的效果。
SQL>update Course set Title = replace(Title, 'SEMINAR', "DISCUSSION');
注:如果在REPLACE函数中您没有指明用什么字符串去替代,则列中的原字符串将被删除。
5.删除字符串的空格
如果字符串列中包含前导或尾部空格,按某指定值对列进行查询,很可能返回错误结果。
LTRIM和RTRIM。
6.LPAD左填充函数
使用LPAD对字符串进行左填充。
语法:
LPAD(string, n, pad_string);
变量定义如下:
string为需左填充的字符串直接值或字符申列。
n为LPAD返回的字符串长度。
pad_string为左填充到string的字符串。
SQL>select lpad(my_col, 20) from test_trim;
使用LENGTH函数人微言轻LPAD函数的参数:
SQL>select lpad(my_col, length(my_col) + 8, 'you say') from test_trim;
7.改变字符串的大小写
oracle提供了三个改变字符串大小写的函数:
INITCAP转换每个字的第一个字符为大写
LOWER转换所有字符为小写
UPPER转换所有字符为人写
8.使用DECODE函数(值转换函数)转换字符串
语法
DECODE的语法是:
DECODE(expression, value1, returned_value1, ... valueN, returned_valueN, [default_returned_value]
变量定义如下:
Dexpression为合法的oracle表达式。
valueN为此expression可能取的值:
returned_valueN为expression等于valueN时DECODE的返回值。
default_returned_value为可选项,它是expression不等于任何valueN时DECODE的返回值。
SQL>select Schedult_id, Day, decode(Day, 1, 'sun', 2, 'mon', 3, 'tue', 4, 'wed', 5, 'thu', 6, 'fri', 7, 'sat')
from Schedult_Type_Details order by Schedult_id, Day;
9.转换字符串为ASCII值
SQL>select Last_Name, SCAII(Last_Name) from Instructor order by Last_Name;
10.当前日期和时间:SYSDATE
11.转换日期为字符串
语法:
T0_CHAR函数的格式如下:
TO_CHAR(date_value,format)
SQL>select Last_Name, First_Name, to_char(Hire_Date, "MONTH DD, YYYY') H_DATE from Employee order by Hire_Date;
在SUBSTR函数中嵌入to_char函数
SQL>select Last_Name, First_Name, substr(to_char(Hire_date, 'MON), 1, 1) the_fist_letter_of_the_month from Employee;
12.转换字符串为日期
语法:
to_date(string_value, date_format);
SQL>select SYSDATE, to_date('07-04-1976', 'MM-DD-YYYY') from dual;
13.日期和时间
在to_char函数中使用时间格式:
SQL>select Employee_id, (to_char(time, clocked_in, 'HH:MM:SS') Time_Clocked_In from Time_Clock;
14.计算两个日期的差值
SQL>select sysdate + 7 from dual;
15.在Insert\Update等操作时,数字会自动转换为字符串。数字字段可以用to_char转换为串。
16.格式化数值字段
select to_char(Additional_Fees, '9,999.99') from Course;
货币符号:
select to_char(Additional_Fees, '¥9,999.99') from Course;
科学计数法:
select to_char(Additional_Fees, '9.9999EEEE') from Course;
17.将字符串转换成数字
to_number是to_char的逆运算。
update Security_Price set Last_Qtr_EPS = to_number('$2.81', '$999.99');
18.内部统计函数
AVG(value):计算平均值,它的参数来自于它所作用的若干行。
STDDEV(value):返回它所作用的若干行作为参数的标准差。
VARIANCE(value):返回它所作用的若干行作为参数的。
19.四舍五入函数和截取函数
四舍五入ROUND(value, [scale]) ROUND(101.8) = 102 Round(123.37, 1) = 123.4
截取TRUNC(value, [scale]) Trunc(123.33) = 123 Trunc(123.567, 2) = 123.56
求最大整数FLOOR(value) Floor(128.3)=128 Floor(129.8) = 129 除了不能截取小数部分外,Floor几乎等同于Trunc函数。
求最小整数CELL(value) Cell(128.3)=129 Cell(129.8) = 130
20.求最大或最小值
MAX和MIN。
21.替换NULL
NVL(column, value)。
select nvl(Additional, 0) from Course;
22.内部聚合函数
COUNT函数:
查找相异的行:DISTINCT
分组:GROUP BY: select Department_id, count(*) from curse group by Department_id;
group by 和having: select Department_id, count(*) from Course group by Department_id having count(*) = 4; --哪些部门开设了4门课。
avg和group by: select Department_id, avg(Additional_Fees) from Course group by Department_id;
23.EXISTS
select Last_Name, Fist_Name from Instructor I where exists(select * from Class C where I.Instruetor_id = C.Instructor_id);
24.SELECT语句的集合操作
INTERSECE(交)
UNION(并): select Epicenter_Latitude, Epicenter_Longtitude from UNSD_Event UNION select Location_Lat, Location_Lon, Richter_Number from RIND_Event order by 1;
MINUS(差): select Last_Name, First_Name from Instructor minus select Last_Name, First_Name from Hoover_Instructor;
25.用子查询建立一个表
create table Anthor as select * from instructor where 1 = 2;
26.创建一个简单的视图
create view Stueent_No_Personal
as
select Student_ID, Last_Name, First_Name from Student;
27.PL/SQL块的结构
说明部分
执行部分
例外处理部分
例:
DECLARE
max_records CONSTANT int := 100;
i int := 1;
BEGIN
FOR i in 1..max_records LOOP
INSERT INTO test_table(record_number, current_date) values(i, sysdate);
END LOOP;
COMMIT;
END;
/
28.用%TYPE声明一个变量
例:为了说明一个用来储存修理仓库技师名字的变量,可这样 Tech_Name Dept_Esimate.Techican %TYPE;
29.用%ROWTYPE声明一个变量
例:用一个复合变量存储Depot_Estimate表的一行。 Depot_Est_Row Depot_Esimate %ROWTYPE;
Depot_Est_Row的元素可以用以下方法使用:Depot_Est_Row.Techniciam := 'yujj';
30.一些常见的控制结构
IF语句:
if MOD(i, 5) = 0 then
rec_number := 5;
elseif MOD(i, 7) = 0 then
rec_number := 7;
else
rec_number := i;
end if;
简单的LOOP/EXIT语句:
LOOP
EXIT WHEN...;
ENDLOOP;
WHILE_LOOP语句:
WHILE i <100 loop>
i := i + 1;
END LOOP;
FOR_LOOP语句:
for i in 1..max loop
i := i + 1;
dbms_output.put_line('j:'||to_char(j));
end loop;
GOTO语句:
goto more_processing;
...
<>
...
end;
NULL语句:
if (mod(i, 10) = 0 ) then
i := i + 1;
else
NULL;
end if;
赋值语句:
pl/sql中使用:=进行赋值。
31.在PL/SQL中使用SQL语句
PL/SQL和SELECT语句:
set serveroutput on
declare
Average_Body_Temp Patient.Body_Temp.Deg_F%TYPE;
begin
dbms_output.enable;
select avg(Body_Temp_Deg_F) into Average_Body_Temp from Patient;
dbms_putput.put_line('Average body temp is Deg.F:' || to_char(Average_Body_Temp.'999.99'));
end;
子块的应用:
一个匿名块,它包含另一个子块
declare
max_i constrant int := 100;
i int := 1;
rec_number int;
begin
for i in 1..max_i loop
if mod(i, 5) = 0 then
rec_number := 5;
else
rec_number := i;
end if;
insert into test_table(record_number, current_date) values(record_number, sysdate);
-- Here is a sub block;
declare
max_j constrant int := 20;
j int := 1;
begin
for j in 1..max_j loop;
rec_number := rec_number * j;
insert into test_table(record_number, current_date) values(record_number, sysdate);
end loop;
end;
end loop;
一个过程的示例:
declare
New_Patient_ID Patient.Patient_ID%TYPE;
High_Fever constant real := 42.0;
procedure Record_Patient_Temp_Deg_C(Patient_ID varchar2, Body_Temp_Deg_C real) is
Temp_Deg_F real;
begin
Temp_Deg_F := (9.0/5.0)*Body_Temp_Deg_C + 32.0;
insert into Patient(Patient_ID, Body_Temp_Deg_F) values(Patient_ID, TempDeg_F);
commit;
end;
begin
New_Patient_ID := 'GG9999';
Record_Patient_Temp_Deg_C(New_Patient_ID, High_Fever);
end;
/
--一个过程内声明的变量在过程体外不能被使用。
一个函数的示例:
function Max_Additional_Fees(Dept_ID IN varchar2)
return varchar2 is
Additional_Fees Course.Additional.Fees%TYPE;
begin
...
return something;
end;
过程和函数的参数类型:IN/OUT/IN OUT
32.关于dbms_output包的调用:先输入set serveroutput on;
33.系统视图USER_SOURCE,保存有过程、函数、包等。它有以下四列:
NAME 包括过程、函数、包或包体的名字
TYPE 批出源代码是属于过程、函数包还是包体
TEXT 包含源代码中的一行
LINE 包含在TEXT中源代码所包含的行数
例:select line, text from user_source where name = 'DROP_CLASS' order by line;
34.SELECT和存储函数:
在SELECT中可以使用存在的存储函数
create or replac function DegF_add10(Deg_F IN number)
return number is
Deg_C number;
begin
deg_c := deg_f + 10;
return deg_c;
end DegF_add10;
select body_temp, DegF_add10(body_temp) from patient;
35.附加PL/SQL数据类型
boolean binary_integer, natural, positive %type %rowtype pl/sql表或数组 用户自定义记录
36.ORACLE预定义例外
DUP_VAL_ON_INDEX:当SQL语句要在存在唯一索引的列中建立重复数据时发生。
INVALID_NUMBER:当SQL语句指定无效数字时发生。
NO_DATTE_FOUND:当SELECT语句没有返回任何行时发生。
TOO_MANY_ROWS:在PL/SQL环境中,一条SELECT语句检索多行数据时发生。为了从一个查询检索任意数目的行,可使用游标,可将游标看成是查询返回结果的窗口。
在pl/sql中,一条SELECT语句返回多个数据行时就会发生这个例外。
VALUE_ERROR:多数情况与截断和转换误差有关。如给一个varchar2(5)的字段赋值长度超过5的字符串。
37.SQLCODE和SQLERRM
SQLCODE包括当前执行oracle pl/sql语句的错误状态。如果SQL语句没有错误,则SQLCODE为0;
SQLERRM包括与SQLCODE相关的错误信息。如果SQL语句执行成功,则SQLCODE为0,SQLERRM为一个字符串:ORA_0000:normal,successful completion.
38.使用游标的步骤
1.说明(declare)游标,给游标起个名字,并且与SELECT语句在语法上相关联。
2.打开(open)游标,Oracle RDBMS执行与游标相关的查询,并确定所限定的行(活动集)。
3.用游标提取数据行:将每一行的值返回到PL/SQL子程序环境中,一次返回一行。
4.关闭(close)游标,释放相关资源。
39.说明游标
CURSOR cursor_name
[(parameter1 parameter1_datetype[ := default1],
..
[parameterN parameterN_datetype[ := derfaultN])]
IS select_stmt;
40.打开游标
Open cursor_name;
说明:如果在定义游标时,没有声明参数的类型,在OPEN游标时,必须给相关的参数指定变量或是直接值。如open tempcur(20,30);
41.从游标中取出行
loop
fetch tmpcur into field1, field2;
exit when tmpcur%notfound;
dbms_output.put_line(field1);
end loop;
42.关闭游标
close tmpcur;
43.取游标返回的行数
dbms_output.put_line(tmpcur%rowcount);
44.在oracle数据库中查询结果的行号使用伪列ROWNUM表示(从1开始)。!!!数据库分页可以使用它!!!
例如select * from employee where rownum<10>
select * from (
select my_table.*, rownum as my_rownum from (select name, birthday from employee order by birthday
) my_table where rownum <120>
)where my_rownum>=100
例:给多表查询的结果加上序列号
select rownum as "SerialNo", b."pName", a."compName" from "fundCompAccount" a, "fundPersonAccount" b
where a."compAccount" = b."compAccount";
--以上已经打印20040511
Oracle选定前20条数据
select * from "fundDuty" where rownum < 20;
Oracle选定21至40条数据
select * from "fundDuty" where rownum <=40
minus
select * from "fundDuty" where rownum <=21
包括自增主键,varchar,float类型...
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].
[task_value]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
CREATE TABLE [dbo].[task_value] (
[task_id] Int IDENTITY primary key NOT NULL ,
[task_name] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[task_value] [float] NULL
) ON [PRIMARY]
GO
很多情况下我们都会遇到需的东西在表的几个字段中存储,而我们要把它们放到一起,作为一个整体判断,如果是字符类型,我们可以直接 select a+b+c from d ,这样我们就可以一次将 d 表中的abc三个字段放到一起,但是这又一个前提,就是相加的任何一个字段都不能为NULL,NULL加上任何一个字段最终的结果都为NULL!
今天做一个输入框的时候需要用到在光标处插入问题,觉的这样设计比较人性化,代码如下:
function Insert(str,name)
{
document.getElementById(name).focus();
var r = document.selection.createRange();
document.selection.empty();
r.text = str;
}
感觉javascript确实很强大,还有很多地方要学习!
努力努力!!
今天从网上下载了一个chm文档,结果打开的时候总是提示“已经取消到该网页的导航”,不知道到底是怎么回事,只好上网搜索,找到了答案!
解决方法如下:
为最终用户提供的解决方案
警告:如果提示从网站打开或保存 .chm 文件,应仅在需要此文件且信任提供此文件的网站的情况下进行此操作。
在“文件下载”对话框中,单击“保存”,然后选择要保存此 .chm 文件的位置。然后,使用下面的方法之一:
方法 1
双击此 .chm 文件。
在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框。
单击“打开”。
方法 2
右键单击该 CHM 文件,然后单击“属性”。
单击“取消阻止”。
双击此 .chm 文件以打开此文件。
为系统管理员提供的解决方案
要解决此问题,请使用下列方法之一。
使用 UNC 文件路径和文件共享以链接到 .chm 文件
如果 Intranet 网页使用 HTTP URL 方案链接到 .chm 文件,安全更新 896358 可能阻止用户查看 .chm 文件的主题。使用 UNC 文件路径替换 HTTP 文件路径可以重新从网页打开 .chm 文件。
要使用 UNC 文件路径替换 HTTP URL,请按照下列步骤操作:
将 .chm 文件放在可以使用 UNC 文件路径访问的文件共享服务器上。
UNC 文件路径类似于下面的路径:
\\productmanuals\helpfiles
使用 ItssRestrictions\UrlAllowList 值使 Intranet 中的系统能够从该文件共享访问 .chm 文件。
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
896054 (http://support.microsoft.com/kb/896054/ ) 无法在安装安全更新 896358、安全更新 840315 或 Windows Server 2003 Service Pack 1 后使用 InfoTech 协议打开远程内容
更新 Intranet 网页上的链接,以便在链接到 .chm 文件的 URL 中使用 UNC 文件路径。
注意:此方法仅对来自 Intranet 区域的页面有效。对于来自 Internet 区域的页面,此方法无效。
微软关于这个问题的说明:http://support.microsoft.com/kb/902225/zh-cn
[转] http://www.cnblogs.com/zyh-nhy/archive/2007/08/08/847876.html
1判断select选项中 是否存在Value="paraValue"的Item
2向select选项中 加入一个Item
3从select选项中 删除一个Item
4删除select中选中的项
5修改select选项中 value="paraValue"的text为"paraText"
6设置select中text="paraText"的第一个Item为选中
7设置select中value="paraValue"的Item为选中
8得到select的当前选中项的value
9得到select的当前选中项的text
10得到select的当前选中项的Index
11清空select的项
js 代码
// 1.判断select选项中 是否存在Value="paraValue"的Item
function jsSelectIsExitItem(objSelect, objItemValue) {
var isExit = false;
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
isExit = true;
break;
}
}
return isExit;
}
// 2.向select选项中 加入一个Item
function jsAddItemToSelect(objSelect, objItemText, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
alert("该Item的Value值已经存在");
} else {
var varItem = new Option(objItemText, objItemValue);
objSelect.options.add(varItem);
alert("成功加入");
}
}
// 3.从select选项中 删除一个Item
function jsRemoveItemFromSelect(objSelect, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
objSelect.options.remove(i);
break;
}
}
alert("成功删除");
} else {
alert("该select中 不存在该项");
}
}
// 4.删除select中选中的项
function jsRemoveSelectedItemFromSelect(objSelect) {
var length = objSelect.options.length - 1;
for(var i = length; i >= 0; i--){
if(objSelect[i].selected == true){
objSelect.options[i] = null;
}
}
}
// 5.修改select选项中 value="paraValue"的text为"paraText"
function jsUpdateItemToSelect(objSelect, objItemText, objItemValue) {
//判断是否存在
if (jsSelectIsExitItem(objSelect, objItemValue)) {
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].value == objItemValue) {
objSelect.options[i].text = objItemText;
break;
}
}
alert("成功修改");
} else {
alert("该select中 不存在该项");
}
}
// 6.设置select中text="paraText"的第一个Item为选中
function jsSelectItemByValue(objSelect, objItemText) {
//判断是否存在
var isExit = false;
for (var i = 0; i < objSelect.options.length; i++) {
if (objSelect.options[i].text == objItemText) {
objSelect.options[i].selected = true;
isExit = true;
break;
}
}
//Show出结果
if (isExit) {
alert("成功选中");
} else {
alert("该select中 不存在该项");
}
}
// 7.设置select中value="paraValue"的Item为选中
document.all.objSelect.value = objItemValue;
// 8.得到select的当前选中项的value
var currSelectValue = document.all.objSelect.value;
// 9.得到select的当前选中项的text
var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;
// 10.得到select的当前选中项的Index
var currSelectIndex = document.all.objSelect.selectedIndex;
// 11.清空select的项
document.all.objSelect.options.length = 0;
作者:传说中的ShelleyZhang[张学来],哈哈...
[初识DreamTech]
初识DreamTech是在大一的时候,那时候在学校的论坛上看见技术支持写着DreamTech,点进去是一个网站,里面介绍了一些工作组的作品,和运行的模式。因为自己是数学系,数学属于应用性的学科,哪个专业都会用到,但是光靠数学估计是没有饭吃的。记得当时自己的成绩在班上刚好是中间,所以自己不想考研,希望那个毕业后就参加工作。所以在那个时候自己便暗下决心,希望能到工作组学习。我们班上还有一个同学和我一样志同道合,就是高照华,感觉是一个厉害的角色!当时我们觉得自己才大一,什么都不了解,所以希望过一段时间再看!
[导火索]
加入DreamTech的导火索是学校的一个报纸写了一个关于陈睿的报道,写了他的经历,写了他进了腾讯!这无疑让我更加崇拜这个组织。直道有一天看见论坛上公布了一些参加面试的人名,里面有我们班的同学,我也下定决心,管他三七二十一,直接找到了教八的工作组(当时工作组还是在教八),这也是第一次和工作组接触。
[接触工作组]
第一次到工作组,希望能加入这个组织,给我面试的是陈深龙,这也是一个大牛。后来让我先做一个人网站看看,后来每天早上早起一点,用宿舍同学的电脑做那个东西,不过其实后来才明白自己做的不过是几个静态的网页,根本不能称之为网站,不过那段时间宿舍的同学也是受了不少苦,总是被我吵到。
[小意外]
当我完成了自己的东西,再到工作组时,忘记了当初是谁给自己布置得任务,结果差点成了“无头案”,不过后来遇见了我的老师,不过还是叫兄弟比较亲一点--王泽晶,他给我最大的感觉就是为人随和,而且学东西比较快,同样是没有接触过的东西,在他的键盘上很快就能有答案。虽然完成了第一个作品,这才让我有机会进入“学习期”,因为每个人都会有工作组里面的人带着,当时组长就让我跟了王泽晶,那也是我第一次见组长,记得是在教十的门口,他好像还在吃鸡蛋灌饼,他问我想跟谁一起,其实我里面的人都不认识,就跟了王泽晶,就这样开始了在工作组的学习。在学习的过程中其实有很多狠多的困难,尤其是自己看那些原来都不曾接触过的代码,有一点非常值得庆幸,那就是我的同学高照华也和我一样开始学习,这样我们两个就是一个伴,而且自己没有电脑,所以我想,之所以能走到今天是建立在高照华的帮助的基础上的。
[修成正果]
按照工作组的老规矩,一般都要有三个月的实习期,跟我一起学习的几个人都是大一的,真的压力也蛮大的,有些水平确实很厉害,不管怎么样,我告诉自己不能后退,自己总是到图书馆借关于.net的书籍,即使看不懂也要死死的看,我想看的多了就应该有感觉吧。经过不断的学习,最主要的就是总是“烦”我的那个兄弟,终于知道大概的流程。连接,数据源...一切的概念都不断的装进我的大脑。让我进步最大的就是第一次和他一起做一个教务处的网站,这个网站,让我从开始到结束熟悉了整个的流程,真正的进入工作组,投入到了计算机的学习...
未完,待续...
作者:传说中的fn123
我们辛苦得来的第一间办公室学五社502刚刚获得了不到一年,学五社就变成了女生宿舍,其他社团都已经搬走了,我们也不得不离开那蓝色的家园。可是我们去哪呢。我又硬着头皮找到了米老师,说实话老是给米老师添麻烦我真的很郁闷,不过米老师虽然很忙但是还是承诺一定会给我们找到一间屋子,在教务处的帮助下我们终于找到了新的家:教八楼409,那时候教八楼刚刚盖起来,非常的新,墙白的那么美丽,而且在一个非常清静的角落,虽然只有12平米,但是那毕竟是我们的家,至少我们不用再四处漂泊了,或者去看210那隔壁认为全世界学生都欠他的老头的脸色了。
因为屋子很干净不需要用布把墙包起来了,我们去印刷公司买来了标语,还是颂暄题的词,“昨日之起步,原今日之梦,Dreamtech你我共行动!”我总觉得颂暄是诗人和工程师的结合体,总是那么棒。当然我始终认为自己是个干装修的好材料,充分发挥了我的空间利用天赋愣是在12平米的空间摆下了十多张桌子。还把502时候制作的桌牌拿了过来,虽然被弃用了,但是真的很别致,也是被弃用的根本原因是掉到地上后拣起来太费劲了。。。
新的办公室新的气象,陈睿从那以后就坐在了门口当起了门神,那时候他几乎就是办公室最早来的,最晚走的。我们大家基本上都不需要钥匙。409的生活是温暖的,特别是夏天,让你温暖的全身湿透,但是大家却是那么热爱那个IT的小窝,弟兄们真的很IT记得弟兄们出去打水,多要多开几个进程,让旁边的同学百思不得其解。直到有一天小安说服了教务处给改造了电路,我们终于安上了空调。王其乐当然是主动地坐到了空调的下面,要知道那可是离空调最近的地方,当然一星期后王其乐重病不起了,409er们相当长一段时间议题王其乐的名字就捧腹大笑。不过终于想起来了,王其乐喜欢有凳子不做非要搞个马扎,后来小坏蛋也被传染的有凳子不做非要蹲着吃放,就连看书都是要蹲到地上。。。所以以后要劝告后来的弟兄们,导师的不良做法要坚决抵制。
409的应该是02、03、04三代人梦开始的地方吧,那应该是第二批02的弟兄进来的地方、而那时候的赵志锦和温竹已经忙于BBS的事务了,很少来409,不过大家的嫂子柴君是那里的常客,李子乾、陈锐和王其乐是被虐待的主要对象吧,不过也许是碍于黎总的威严,大家都是大气不敢出一下的。我都得管柴君尊称暄嫂,决不敢造次。记忆最深的就是暄嫂老是批评我交友不慎。不过未来发生的事情证明了暄嫂得眼观很准。409的角落里我们面试了王其乐,发现了曲华。曲华是个非常令我敬佩的人,他的意志力非常强,面试了好几次,也学习了好久但是他从来没有放弃过,大三下学期才加入的他却成了工作组最重要的栋梁之一,不过感觉时间太短了,曲华用它不懈的努力为自己的就业创造了机会,别的同学玩了四年到工作的时候四处奔波而受辱,区华却是在宿舍里等电话面试公司。最后被我诱导去了中软,真担心自己做错了,不过我想时间会把正确的结果告诉我吧。
新年来了,互联网上风靡起了SHOWGOOD的大话三国Flash短篇,很滑稽特别是三英战吕布那段,真的很搞笑。没有看过的弟兄们一定要到网上找一下。正在大家位flash的制作而折服的时候,我接到了陈睿的电话,“快来,来了个强人”,“哪方面的”,“美工,3d和flash做得特别棒”。我马上过去了,这时候人已经走了,我看着他留下的作品,真的,那是我们华电的学生做得,真的不敢想象,那时候我忘记了Dreamtech就是为了创造别人不敢想想的事情的。林云东,他的名字叫林云东,做出了根大话三国一个水准的作品,当即我找到林云东,我们谈了好多好多。后来的事情大家就知道了,在上文中提到的“林云东精神”。是的“林云东精神”就成为了Dreamtech团队文化的一部分。后来小林设计了好多网站,它和王其乐塑造了工作组的两个不同的风格界面体系,你们可以看到华电的部门网站被这两种风格彻底占领了。林云东的才华很快被外面的公司发现,在大四下学期他奔走于北京和保定之间,很多公司请他做美工,薪水不错。不过毕业了他最后还是放弃了所有的工作,决定创业,有一次他回来看弟兄们,表达了他的想法,我和辛锐真的都特别佩服这个倔强的云南小伙子,如果在其他的Dreamtecher眼里是激情的火焰,那么在小林的眼睛里你看到的则是激情燃烧后的执著。记得一位导演评价刘德华的一段话,“如果任何一个艺人能够像华仔一样执著努力的话,它不成功才怪”。我坚信不久的将来,小林绝对会是我们Dreamtech出来的了不起的英雄。“林云东精神”也会成为Dreamtech最大的动力之一。
12平米的空间同样孕育了03的兄弟们,03级在大学前被打开计算机智商的人应该有两位吧,邱文坚和刘童亮。其实邱文坚那时候最让我上火,他坚决坚持他的VB,拒绝潮流的.net。于是我就让他的试用期整整延长了一年。直到有一天我终于明白了作为一个团队的负责人应该去懂得如何发挥成员们的长处,知人而善用。我这样的做法只会伤了弟兄的心,然后我就向他道歉了,但是但现在我也不知道他是懒还是别的什么,知道工作组搬到508后他才回到办公室。也许是他的执拗吧,就像他一定要回广东一样,不过这位兄弟在04年的时候接受了.net思想并将.net思想和硬件设备接口结合了起来,并完成了第二代硬件组由纯单片机到写硬件访问层实现接口应用的重要阶段。换句话说是邱文坚把硬件组变得更实际了,而且邱文坚回来后,我们接连完成了电子设备厂的好几个项目,才凑够了钱买了508的空调。我想弟兄们在炎热的夏季享受3匹空调送来的凉爽的时候,请祝福一下我们的开心果有理后生阿丘,有情人终成眷属,生活幸福、美满。此外邱文坚虽然执拗,不过我想只有我会第一个这么认为吧,别人第一印象一定是他这个人是多么的乐于助人。我想现在的弟兄们和阿丘之间有许多感人的故事,在你们的回忆录中一定要写出来,因为,这是属于我们大家的一份感动。
作者:传说中的fn123
在这一年的10月12号,我们在双胜街附近的一家火锅城包下了2楼大厅,办了一次俎庆,那时候我特别鼓励大家把女朋友带去,因为我觉得这样才算是个家。其实在这样的家庭聚会中是我的一种享受,我很愿意做这各家的兄长,因为这个家族的成员都是未来的计算机精英。当然作为负责人我同样要为成员做得不好的事情负责。记忆最深刻的就是小秋了,其实这个名字大家应该不陌生,小秋是个非常能干、激情四射而且号招力极强的人。他在加入工作组后创办了VOD和让我下载系统。后来VOD直接交给了一个叫做林锐的人,而让我下载则忙坏了龙跃。
在02级的弟兄们中必须要提到的一位就是陈深龙,大家都习惯管他叫龙哥,他在大二的时候加入工作组,由于具备了非常扎实的数学和英语基础,在加上百分之百的努力,很快赶上了其他的成员,而且陈深龙做事情非常严谨,交给她的事情绝对全身心地投入完成。也许他是上大学后自学成材的人中成就最高的一位了。也是陈睿毕业后唯一一位有足够的威信做软件组组长的人。我们已企合作了很多项目,记得和他一起开发澧县裘皮加工厂管理系统的时候,再去澧县的路上龙吐了一路,特别惨,当时我问他,“你为什么不告诉我你晕车”,他说“汪建朋不在,王泽晶有事,我要是不来这项目就泡汤了!”。。。此外陈深龙一直在团队中具有极高的威信因为无论是谁的问题他都会非常耐心的解答,其中大家熟知的王泽晶、钟超、曲华、李子乾、廖井超、蔡建强甚至还有王其乐,都是龙带出来的。其实在面试了蔡建强后,龙找到了我,说这小伙子很有希望,因为他给人的感觉很踏实。我想龙跟到家最深刻的交流就是cms1.0的开发吧,很难想想龙在最后的岁月里带领03一代在11天里完成了第一个cms版本。那时候龙真的是累坏了。我代表全体工作组成员向你致敬,也希望有一天能再次和你共事。
汪建朋是个相当帅气的小伙子,据说在医院里住过没几天就把所有的女护士都给摆平了,还通了好多天信。这让王其乐、林云东还有我好好的数落了他好久。汪建朋是物理系的一号人物,是男生效仿的楷模更是女生追捧的偶像,那时候他受物理系领导委托开发物理系的主页,遇到了一些困难于是就由李琦老师推荐到工作组学习,本来还有另外一个人,嘴虽然很甜但是。。。汪建朋则不同,很扎实,后来我告诉他“你如果学计算机的话一定能成功”,后来他跟从陈深龙学习了,果然汪建鹏成为工作组02级的栋梁,特别是在乐凯项目中后期干翠一人担负了整BS部分的开发,随然他马上就要考研了,但是还是坚持到乐凯项目的完成才进入考研状态,那时候已经11月了,而他要考的是中科院光学实验室。但是老天总是会眷恋那些努力的人,汪建朋最终以第二名的成绩考入了中国科学院光学实验室。记得他跟我说过,他的理想就是要将物理坚持到底,至少他现在做到了。作为华电最差的专业之一他去了中科院后却将自己的qq用了这个签名:“也许我会记不得我是华北电力大学毕业的!但我永远忘不掉我是华电应用物理系人!!”这是一个男人战斗的宣言,一个勇士要挺起胸来向强大的势力对抗的出师表。我相信他一定能成为一个非常出色的物理学家,更将是我们华电物理系的骄傲,作为Dreamtecher我更将为你而自豪。小溪石子加油!
勋萍和章斌是老乡更是一对好朋友,记不清了他们是不是一起来的,说实话我一开始更加欣赏的是章斌的社团组织能力,但是接触多了之后才先县其实他的学习也非常扎实,他和勋萍成绩都是名列前茅,他们两位也都在大赛中获得了非常出色的成绩,因为他们在数学建模竞赛中的优异成绩,数学系在选拔竞赛选手的时候工作组的人肯定会优先考虑。最终章斌也被保送研究生了,而勋萍则走上了他的电力之路。
王其乐是美工作组的第三任组长,他和林云东的出现将工作组的美工彻底的推上了一非常专业的高度。王其乐本身自己就是学工业设计专业的,他的口头禅就是“扯”他上来总是会先把别人的理论否定一下,不过有的时候我总是在怀疑他是不是上来不经大脑就要把别人先否定一下,王其乐的面试是由陈睿完成的,其实我当时就在旁边,印象最最深刻的就是他眼睛直视着前方,滔滔不绝的发表着自己的想法,感觉他根本不在乎身边到底是谁,其实在与王其乐共事的岁月里我从他那理学到了非常多的美术专业知识,也正是他和林云东彻底地将我们的表示曾设计思想创造了出来,并且在身体力行的实践中取得了很大的成效,王其乐在网管的日子里很少见他很早就休息,因为他还身兼着很多很多的网站设计工作,也许我给他的任务他永远也做不完,特别是教务处的。它也是直到11月份才开始考研的,但是我想有些原因让他无法平静下来。林云东则是一个自学成才的后起美工之秀,最大的特点就是勤奋执着,当他选择了美工这挑路后就义无反顾地走了下去,其实我特别喜欢听他叫我老大,因为总是感觉像回到了过去。他是学经管的,缺乏美术的基础之势,他硬是零补起,搬着小板凳去青少年宫跟着小孩子一起学画画,为了塑造人物骨骼的绘画,他就抱着骷髅头睡了好久,后来我还把这个精神叫做林云东精神。
02的黄金一代是辉煌的也正是因为他们这一代的努力把工作组推上了华电的神坛,陈申龙和黄梅还有我被请去为新生作报告,引起了不小的反响,会后好多人还要我的签名,记得那时候有人问我你和比尔技术上还差多少,我得记得我的回答是“其实我们跟比尔相差的并不是技术实力,他的技术水平照着大师来说很一般,但是它之所以可以创造一个帝国,比我们强的地方就是对市场敏锐的洞察力和执着的创业精神,这是我们所大大欠缺的”。这也就是为什么那天有位弟兄问我,“我们的导师是不是不是很尽责任的带学生”,我告诉他,其实工作组成员的面试考察的就是个人的意志力,学习要靠自己,成功要靠努力。等大家步入了社会根本不会再有人手把手的教你。引用陈睿的一句话,“人成才不在于他在哪里学,关键看自己”。其实学息期的题目并不难,而难得是如何控制自己在别人玩的时钻研技术,与其说完成了任物就可以通过学习期不如说如果具备了这个意志力就可以加入工作组。
其实创业的问题是我一直愧疚于02的弟兄们的,也有人因此认为我欺骗了大家的感情,我曾经许下过诺言一定要代领工作组创造出一片天地。用华电土生土长的计算机人来创造一个帝国。这样我才可以无愧于培养了我这么多年的华电。但是最后再没有定下免试研究生之前,还是去了上海面试并已经基本上拿到了10万年薪的合约。最后我特批免试研究生成功了。其实我创业的目标从来没有放弃过,只是在那个时候我们不具备创业的条件,产品和市场我们缺一不可。如果一股脑的去创业只会去做炮灰,损失最惨的是弟兄们,我可以靠我的三寸不烂之舌再找一个很好的公司给人家打工,可是弟兄没有工作经验又不是毕业生如何去吸引大企业的眼球呢。但是大家请记住我是不会放弃的。我会不断地积蓄力量和产品,希望有一天能和Dreamtecher们能够创造中国计算机世界的另一个奇迹!当然,我想那是一定的
作者:传说中的fn123
由于出现了人才的多元化,我受到项目管理和软件公司的启发,决定将公司项目聘任制引入工作组。即在一般的情况下每个成员按兴趣和技能分属于各个职能部门,当接到项目够从项目管理组选择一位项目经理,再由项目经理根据项目的需要从各个组中选取合适的开发人员并由该成员同意后成立新的项目小组,而项目组的生存周期已项目的生存周期为准。在这个团队中项目经理有绝对的权威,甚至组长们都无权干涉项目经理的决定。这时候就出现了网管组、软件组、美工组(隶属软件组)、硬件组和项目管理小组。那时候网管组最强,邱松当之无愧的成为了网管组的组长,焦阳是副组长,我们三个一起合作完成了望督火车站无线网络方案、保定市规划院的网络建设等。我想这是我最愿意做的工作类型。因为那时候虽然很累,但是我特别开心,异常的开心,也许我永远都不会忘记我曾是一名合格的系统工程师。软件组组长更没有争议了,陈睿一当就是到现在,后来只是副组长变成了陈深龙,和刘童亮,在陈睿毕业的第一年里也是陈深龙代理的组长。以后我想我也会一直留给陈睿,直到他回来,因为对华电学生软件开发的发展来说,他的名字就像一面旗帜,没有人能够再超过它了,就像工作组副组长永远都属于黎颂暄这个名字一样。美工组第一任组长是赵志锦,后来就是王丽君,第三任还是02的他的名字叫王其乐,他很幽默,我总是说王其乐很快乐,特别怀念和王其乐在网管住的日子。王丽君可以说是一个女中豪杰,她是第一个凭实力加入工作组的女生,很有胆识,更有干劲,要知道我从没有给她放宽通过的标准但是她却付出了一个男孩子达到标准所需的几倍的努力,是的,她做到了。王丽君的成功影响了很多计算机专业的女生,后来有几个女生要求学习并进入工作组,我当时告诉她们学美工很难并劝她们改学软件比较现实,她们却说“君姐是做美工的,我们以后也也要像她一样。”,在我看来她也是这些年来在计算机行业中第一个靠个人能力到了大四不愁找不到工作的女生了。她后来还担任了计算机系学生会的副主席,时间处理得越来越好,不过,她刚来的时候我却认为她不该参加那么多组织,当时我让她退掉自律会,但是自律会退出要写检查(真是个变态的组织),我硬是把96级的自律会主任挖了出来出面强行把王丽君给解放了出来,其实到现在我也不知道我这个举动是正确的还是错误的。他和赵志锦合作给程老师做flash短篇的岁月,那几个月可把这个女孩子累得够呛了,其实王丽君在毕业生晚会上制作的工作组节目是我这些年看过最感动的短篇,也许这是她用自己的汗水在工作组中筑起的一段永远无法忘记的回忆吧。硬件组的第一任组长当然是万华旭了,第二任就是现在的辛锐和邱文坚了,这是两个时代的划分,第一代的人的精力主要是电子设计大赛和挑战杯,他们在这些赛事中都给学校和工作组挣足了面子。而第二代辛锐和邱文坚则是在应用领域取得了相当的成功,后来我们与电子设备厂保持了良好的开发关系和上个月刚刚被评为国内领先的远超终端都是他们用无数个通宵换来的成果,特别是新锐,为了完成电子厂的项目几乎把昼夜的时差给忘记了,辛锐,真是个汉子,你这个兄弟我没白交。邱文家则是执拗的小伙子,我整整晾了他一年,不过他的故事我会在下一部分详细地写出来。项目管理组的第一任组长是阎蕾,后来的组长就由我直接担任了,因为在初期我对项目管理的认识非常肤浅,也许是被国内工商管理硕士热给影响了,所以把仅仅很有组织能力的人放到了这一组,由于他们度项目开发所使用的技术知识较为欠缺,所以在管理的过程中和设计人员发生了很大的分歧,导致项目不得不更换负责人。而阎蕾则是我最坚实的战友之一,我们在一起干成了很多事情,可以说如果没有阎蕾就没有工作组的今天,因为阎蕾的激情一直感染着我,我们两个就像是一个翘翘板上的两个人,我的激情将燃尽的时候他会用他的热心来感染我,反之亦然。我想我能坚持到今天有很大的原因是因为阎蕾吧,后来他跟我一起被校长特批为免试研究生,很快就变成了阎老师了:)不得不提的是阎蕾还是一个感染力很强的人,他很善于辩论演讲,英语也很好。其实在初期我需要人手帮忙的时候只要阎蕾一四处游说,人?多的都用不完。。。
提到吴曦霖,熟知他的人都会想起她的拼劲和责任心,当然还有那埋藏在骨子里的倔强。他上大一下学期的时候,那是一个晚上他打电话约我出来谈谈,我欣然地答应了,说实话我当时觉得他应该很有闯劲,突然感觉根小涛有点像,也许都是江西人的原因吧。他说他的哥哥是南昌大学的,因为他哥哥一手为南昌大学创建了学校的网络就直接让他哥哥毕业了。虽然我没见过,但是后来他哥哥帮吴曦霖作的计算机系那个flash banner把在场的人全都给震了。他和温竹是一个班的,所以我就让他跟着温竹学习.net,其实我都分不清到底是他太聪明还是他太努力,或者两者皆有,他在后来的能力几乎接近了温竹。也许是因为既聪明又努力吧,他和陈睿一起在ACM中杀入决赛圈。但是由于我在ACM组织工作上的失误深深了伤害了他。我想我应该在这次事件中负最大的责任,如果不这样的话我想陈睿带领的ACM军团必将攻城拔寨取得更耀眼的成绩,陈睿的能力也在后来的MCM得到了证实他是最出色的华人选手之一。但是记得陈睿描述无曦霖离开时的情景,“他不出声响的走进办公室,坐在电脑前很安静地写着程序,几个小时后他走到陈睿身边,我的任务完成了,我也该走了。”吴曦霖一直是我创业的强力支持者,他的离开让我很遗憾,我一直在计算机系中希望能够为他做一些事情,但是那一点永远无法抹去我心中的愧疚,吴曦霖,对不起。
02一代人被我称为是黄金一代,因为这一代是我第一次引入了成员培养机制,结果也证明我成功了,在我们这些年的规则中每一届都会出现一个从小就被打开计算机智商的天才加入,00是颂暄、01是陈睿、02则是温竹,然而我深刻的理解到仅靠这样几个人是远远不够的,我必须找到一条途径让他们充分发挥他们的技术感染力,来培养更多的人才,做到这些才能无愧于这个学校,无愧于工作组,更无愧于每一个天才。就这样出现了工作组的第一代招新制度。那时候招新需要面试,面试卡人很多,面试的组织由各组组长来完成,他们会带着他的作品来面试,组长面试的最基本要求就是要有基础,但是绝大多数都是没有基础的,所以很多人在面试那一关就被淘汰了,而他们从大一要面试到大三,我记得区华就是面试了好几次。后来我改进了面试标准只要数学和外语好,尽管没有基础也可以。但是颂暄深知我好哥们意气,他要求我能因为私人关系而随便让人加入,必须保证工作组的技术性。其实颂暄非常令我尊敬,因为他懂得如何尊敬别人,跟他在一起你总是会感觉到非常的舒服,他知道我好面子,所以他从来都不在别人面前批评我,但是只有我们两个人的时候他会把脸琫起来,非常严厉的训斥我,但是我对颂暄绝对是言听计从,他的每一句话我都会记在心里,可以说也正是他给我定下的很多不准才造就了全新的工作组。
作者:传说中的fn123
02级的弟兄么让工作组的进行曲进入了新的乐章,那时候我们都为02及弟兄们所体现出的才华所为之震撼,也许是因为开创了新的局面,也许是工作组真正从02即开始从一个到处瞎逛的无组织的小团体变成了一个真正的团队,这是一群激情四射的青年,他们用自己的汗水和努力书写了属于Dreamtech更属于他们的青春,他们是cloud、wiseman、challenger、水底沙、小溪石子、小秋、猪亲过、piner、行云流水、萍姐、丁一、LISA、飞天、无为、洋葱、mandy、布波族、生当作人杰。
如果说00和01的弟兄们用自己的激情创造了一个开始,而02级的伙伴们则是用自己的汗水将Dreamtech推上了一个更加专业的台阶。这个阶段的我因为了弟兄们的支持已经大胆走出学校的想法,虽然大规模的项目开发强度到来时,正是兄弟们的考试接踵而至时候,但是总是有02级的兄弟们在我身陷囹圄的时候挺身而出,也就是在02级弟兄们的支持下,Dreamtech在所接项目超越其开发能力的情况下,硬是用自己的血和汗保证Dreamtech的全胜纪录。也为后来的发展奠定了坚实的基础。
在02年的夏天,我回到了石家庄,网上一则关于Microsoft MCSE的考试吸引了我。上面说需要至少三年的Windows server的维护经验才可以考过,算了算自己玩计算机也有10多年了,而且在学校的网管也搞了一年服务器,所以想去试试。我报了个班,希望能再上大四前搞定这个认证。那时我非常的认真,没有逃过一堂课,也是我第一次被累得晕倒。其实在实验中真的学到了很多东西,不过可能是因为在课堂上我教同学们的东西比老师还多,老师鼓励我可以马上就考,可是我才上了不到一半的课程。于是我做了,我成功了。
这个时候我的班主任陈曦老师与学校关系破裂,离开了学校。崔老师成为了我的班主任,我给他看了比尔签发的MCSE证书,他非常的高兴。又该评优了,我还是在大二的时候把电路基础挂了,而且还重修一次未遂。但是崔老师和陈老师的太度截然不同,他说特殊人才应该特殊对待,真正的人才不能够被条条框框所限制死, 那时候我眼睁睁地看着崔老师为我四处游说,最后在校领导中引起了激烈的讨论。学校由安校长主持招开了一次特别的会议,陈武老师在会上陈述了我的情况,最后我并特批为校级三好学生标兵。从那以后我拿到了一个大学生所有能获得的奖项。也正是这次激烈的讨论让Dreamtech名声大震,未来几年的新生入学报告中校领导总会把工作组题作先进的典型。
我们第一间办公室应该是算我从网管中心那里借来的吧,那是教六楼的210房间, 朱有产老师和李春祥老师以网络维护为由为我们争取了教六的一间网络间。但是隔壁的二校区机房老师对我们总是非人的对待,那是一天下午,网管中心的所有教研室老师到隔壁工作,突然潘为华老师感觉身体不适,机房老师让潘老师到210休息一下,可是他们过来的时候对我们大声吼叫:“你们都给我出去!”潘老师赶紧拦住“不用,不用,我躺会儿就行了,不用让人家出去”。那粒老师继续吼道:“出去,叫你们出去就赶紧出去”。我当时就火了“我在这里妨碍潘老师了么”,“叫你们出去,你们哪那么多废话。”我瞪大了眼睛大声说“我们为什么要出去!我们还要在这里值班!”“值什么班!你还横,你叫什么?!”,我这时候挺直胸,等着他大声地吼道:“你他妈的听清楚了,我叫梅华威,梅花的梅,中华的华,威力的威!”他看我要动手的架式,扭头就走,还边走边说“有种你别走!”,一会他叫了个比较壮实的小伙子过来,这回看来他心理有点底了,跟我理论起来,就在这时候潘老师实在看不下去了“你们别吵了,我不休息了,我走!”。这样他们都出去了。可是后来我才知道,网管中心的所有领导都在隔壁。而且我吼那么大声他们都应该听到了。很担心会给朱老师带来麻烦,所以晚上我就去了网管中心的总主任王振齐老师家,给王老师作了一次深刻的检讨。王老师没有再追究下去,还说他们老师说话也不是很注意方法。后来我不知道王老师怎样处理的这件事情,但是隔壁的大叔们(温竹的叫法)变得客气了很多。
这一年我被推荐到教务处给教务处做主页,那时候米增强老师还是教务处的处长,一次偶然的机会与米老师进行了交谈。米老师了解到了我们团队的情况,此后米老师一直关心着我们团队的发展。当他知道我们还没有活动空间的时候,马上帮我们寻找可以用的房子,费了好大力气才从学生处那里要来了原来校自律会的房子,但是校自律会却要求我们跟一个叫****心协会的组织共同使用学五社的502,因为我们要往里面放电脑,所以坚决不同意共用,为此我执意不搬,直到米老师知道情况后马上联系学生处,让爱心协会搬了出去。记得那一天,自律会的主任找到我,冷笑说“不要那么得意,你们也就是仗着米老师是校长助理,要我们学生处长才不会给你们让步。”他这句话让我更加鄙视学生社团了,难道在你们心中校领导是那样龌龊的人么。其实在跟校领导的交流过程中,我发现无论是哪里的领导他们对学生都是无私的,他们特别希望学生能够多干出一些事情来,多学一些东西,如果学生出息了,就是为学校争了光,也是他们的骄傲。米老师这些年来对我们十分关心从502到409一直到现在的508,都给米老师带来了许多的麻烦,每次去感谢他的时候都能从他的眼中看出对我们殷切的希望。
学五社502我们都深情的管它叫502,虽然现在应该教学八设了,那时候是一半男生宿舍,一半的女生宿舍,502er门经常站到阳台上向远处的田野望去,鱼塘和菜地都变成了现在的民房,但是那时候他真的好美。那时候最夸张的就是王丽君了,她一个女孩子跑到了男生楼的502去通宵,其实我也记不清为什么了,得知他通宵后我一晚上都没睡着,满脑子都是辛苦得来的办公室因为违纪而被没收,不想再次看着米老师失望的表情。所以我早上6点宿舍门一开就跑到了502,还好王丽君没被发现。。。
502的隔壁是厕所,因为很潮湿所以墙上的墙皮都起皮了,我再次发挥了我的创造性艺术思维,去买了一大堆蓝布,于是我们的蓝色502诞生了,有的同学从门口路过“哇,摄影棚”,听到这话最得意就是我了,因为他却认为是搞艺术的,当然其实计算机就是一门艺术。梁鑫是个很有爱心的人,他总是爱养些小动物,502养了只鹦鹉,我承认他在我桌子上拉屎,是我打断了它的腿,但是那只在210的兔子之死我保证肯定跟我无关,虽然调查结果未果,但是在陈睿的诱导县我们一致认为是大侠干的。不过那只鹦鹉到底怎样了,我想梁鑫一定不会把它吃掉的:)。
02年还是一个值得庆祝的一年,因为我无意间发现了《程序员》这本杂志,也正是这本专业杂志的出现把我领入了现代it世界,其中最吸引我的板块就是程序人生和项目管理。此外我还加入了csdn社区,因为我应用服务器的管理上有一定的能力,所以很快就当上了该板块的版主,2003年我由于在社区中表现出色被邀请参加了中国首届软件技术大会,这次大会上我认识了陈蓉老师、潘家宇还有李彦宏。我几乎被洗了脑,也就在这时坚定了我创业的决心。
其实《程序员》对工作组还有一个重大的意义那就是让我找到了web应用程序的最佳解决方案:asp.net。虽然陈睿坚决鄙视,不过最后他还是基于.net开发了程序,还大肆向我炫耀,小样的,我学.net可比你早多了:)。
02年开学了迎来了新生,我再招心中招到了温竹,跟我、陈睿、颂暄一样也是从小就开始玩计算机开发的,而且他是继颂暄和陈睿后的又一个被打开了计算机智商的天才。与他们不同的是,他很早就介入了web应用程序设计。所以与其实我和温竹一起学习.net不如说是在温竹的帮助下学习.net。几乎开始那段时间每个项目都是我和温竹合作的。赵志仅和温竹是老乡,他胖乎乎的很可爱,而且性格特别好,面试的时候赵志锦做了个flash,非常棒,后来就成为了工作组的第一个专业美工,后来美工组创建后他成为了第一任美工组组长。我们三个人在一起做了很多东西,最成功的就是安归学习系统,那起初是寒枫老师给邢台共电局做的,后来又推广到了乌兰察布供电局。该系统后来被晓涛和廖景超重写,界面也是陆鑫东重新设了的。此外学校第二版蓝色的校主业也是我们三个完成的,那是我们真正意义上的向主页,因为这次界面是完全由赵志锦设计的,而上一版则是我绞尽脑汁后剽窃了清华大学的(不许用鸡蛋打我)。后来美工组越来越强大,赵志锦受工作组委派专职管理BBS就辞去了美工组组长。赵志锦就是论坛的工作组第三代管理员丁一。后来温竹和赵志锦一起重改了论坛。起初论坛是颂暄用freebsd写的cgi。后来赵桐把它移植到了linux上,最后赵志锦和温竹一起把论坛用弄回了现在的windows平台。而变革最大最成功的就是赵志锦和温竹的这一版,甚至可以说论坛的制度都是由他们二人一同完善的。
作者:传说中的fn123
2001年到2002这个学年队对我来说是残忍的,但Dreamtech却真正的诞生了。今年我有了新的一批Dreamtecer加入,他们的加入加速了工作组走上正路,也为后来工作组的发展奠定了决定性基础。他们是:Ray、大侠、无尾雄、黑马、911tg、听雨轩轩主、木子、shallop、间断电源、fallix。
大一到大二时候这个阶段,我最多担任六个社团的负责人。其实这个阶段工作组并不是我最主要的团队。在我心中作为班长,我更加关心每一个同学,那时候我不愿意看到任何一个同学掉队,此外我还热心于整个电子系十个班的同学们,他们果有困难我一定会管的 。在其中也确实获得一定的认可,大侠就是这个时候来找我的,那时候他在班里的人际关系上遇到了些问题,当然也许很严重的事情。记得那时候他已熄灯就会来找我谈心,一连整整有一个星期。我知道他的数学非常的棒,就把它带进了工作组。我想那时他真的非常信任我,我也把它当成自己最好的兄弟。开始的时候我告诉他做一个后勤集团的flash,我把设计思路都告诉他了,我给了他一个星期的时间。而且我要求她不能把学习落下。其实起初我对他并没有抱什么希望,已经开始自己去做了。白天我们在一个课堂上课,他没缺过(至少我在的时候他都在。。。)。每天晚上还是可以看见他去上自习。但一天半夜我起床去上厕所,走到楼道里的时候居然发现大侠在看书,是一本flash的教程。我一看时间,两点了。。。周五了大侠按时把东西给我了,强调一下,他上高中时后没有碰过电脑。后来的大侠在电子设计大赛和挑战杯都获了奖,成为了硬件组的决定性成员之一。他本来是没有网名的,我印象中应该是ray给他起的。陈睿,我想这个名字即使是在现在06级的同学中也依然保持着相当的知名度。华旭、田广和他一起招新进来的,是的,我不得不承认他是继颂暄之后又一个天才,他也是从几岁就开始玩电脑的,也是被打开了计算机智商的人,从小非常注意数学和英语的学习,而又大规模的参加计算机程序开发,所以从软件开发的能力上确实没有后来的人可以与其匹敌。当然也许你会提到水底沙赵明,但是从代码的设计能力上我还是认为陈睿更胜一筹。陈睿在后来获得取得了MCM的华电历史最好成绩,带领工作组第一次参加ACM就进入了决赛圈。我想这也是其他人无法与其匹敌的最好证据。然而起初我确实没有好好的发挥陈睿的能力,整整浪费了他一年的时间,作为团队核心我认为这是我无可容忍的失误,不过这时候我们雄伟老师和袁和金老师的委托开始有陈睿主要翻阅了一本c#教科书,不过大家在翻译的时候谁都不懂,但是这本书却在北京希望出版社出版了,后来还有一本平凡的猫组织的《网虫日记》,华旭是陈睿一个宿舍的,它是硬件组的第一任组长,也是他让我领略到了计算机软件和网络外的另一片空间。后来在电子设计大赛中她带领工作组取得了非常优秀的成绩。当然其实我对某地域的人有着十分严重的偏见,但是华旭是我第一次对该地域的人产生了尊敬。辛锐的到来是我弟弟久保送来的,那时候他说辛锐特别讲义气,而且学习很努力,肯定是个人才。起初我有些担心,但是辛锐却成为了我后来最可以信赖的兄弟。在工作组遇到危机的时候,几乎我第一个会想起的人就是辛锐,其实每次看到他为了完成项目而一次一次的累倒的时候真是感觉欠他很多,但是他再苦也没有说过一句怨言。这是辛锐,我的好兄弟。Fallix赵桐是颂暄在管理论坛的时候带来的人,也是大名鼎鼎的dodoo,由于他耳朵上挂着耳环染着头发,而且穿着也十分夸张,所以我有些顾虑,并告诉了颂暄。但是颂暄还是希望给他些机会,后来赵桐成为了网管组的第三任组长,现在想起来真的很幸运没有以貌取人。
2001到2002的学年是多事的,开学来第一件事情当然是评优,然后由于我的社会工作太多导致大一的高等数学和线性代数都没有过,在那个年代如果有一颗不过是很少见的。所以虽然我在很都方面都做了很多事情但是评优依然跟我没有缘分。我心理很难受,这时候我把篮协主席逼下了台,自己当上了主席后又解散了全部原来的人。我所负责的所有社团规模都远远大于大一的规模,也都需要我付出更多的精力,然而人的精力是有限的,各个社团都开始出现了危机,特别是我大一创办的大地勇士篮球俱乐部内部矛盾激化严重。就在这个时候我们又以工作组为基础创办了华电第一份也是目前仅存在过的一份计算机普及知识的报纸,这时候我的恩师崔振国老师调来了计算机系,他大力支持了这份报纸并连同宋雨老师一起为这份报纸题了词,我们找到了保定市日报社的排版专业人员为报纸排了版并取名为IT家园报,第一期就印发了6000份,免费发放到了河大、农大华电三校,在未来一年里依然有读者与我们联系。我和朱志峰绞尽脑汁去拉赞助,好不容易拉到了第二期的赞助却被学校告知我们因为没有刊号没有办法再办下去了,而且负责人不能是个学生。然而就在这个时候我与班主任陈曦老的矛盾已经激化到了极点,再一次去和大调研的路上,陈曦老师硬把我叫了回来,我替吴峰请假的时候他却当着下面五个班的同学大声地说:“我不能容忍的就是学生骗我,特别是某些班干部”这句话深深的伤了我。说实话我从来都是很真诚地对待陈老师,陈老师对我也一直很好。其实在班级中的努力由于学习不能在评优中得到认可,也许被师兄忌妒而逼出学生,自己最看重的社团分崩离析,自己最富与希望的报社被查封,这些都可以让我理智得去重新再来,而自己尊敬的老师却在这个时候当众误解我羞辱我,让我确实不能再忍受下去了。班会开完后我胸口发热一口鲜血喷了出来,我已经好久没有睡过完整的觉了,好久没有吃过一天超过两顿饭了。
我找崔老师深刻地谈了一次,崔老师帮我分析了所有的问题。我在那几个小时的交谈中茅塞顿开。决定辞去大地勇士俱乐部主席和辛苦得来的篮协主席,并彻底离开学生会。将所有的精力全部投入到班级和工作组中。然而我是从社团中混出来的人,依然用社团的路线来带工作组,我想00和01的弟兄们记忆在最深刻的也就是搬桌子搞活动给电脑公司做宣传了,这时候颂暄及时制止了我,说到这里作为工作组的另一位组长,我欠颂暄太多了,这也是我无论遇到多少困难都会将颂暄的话记到心里。工作组那时候是个民间小组织,最大的敌人就是号称拥有近千人会员的计算机协会,计算机协会是由广东人办的,社团领导都是广东人,而他们多次邀请颂暄去计算机协会。此时颂暄非常为难,因为广东老乡会很团结,未来的两年直到计算机协会彻底被击垮,颂暄离开了工作组三次,每次他走的时候,我都会给他写一封长长的信,告诉他作为一个男人我一定会把工作组坚持到底的。最终他还是回来了。大二中期我们做的校主页得到了学校的广泛认可,被邀请去开发许多部门的网站,我和颂暄一起创办了BBS。颂暄给他起了个名字叫“缘路有你”,那时候我也用尽心思搞来一台pc机作服务器。那时候记忆最深刻的是自己背着笔记本飞车于一校而校之间,屈指算了一下仅大二一个学年自己就完成了近30多个网站的开发。这时候会想起陈武老师一次调侃找我做计算机系主页的情景:“那时候学校要计算机系做自己的网站,找了很多学生会的人都说要做一个多月,可是一个星期内学校就要,没办法了才把梅华威叫过来,他说‘做这网站需要些时间,我两天后做好行么’,当时在场的领导全都笑了”。记得那次计算机系的主页我足足两天没睡觉,后来我设计的计算机系的cs标志被很多老师的课件应用了。正在工作组慢慢得到认可的时候,崔老师提出:“你们都已经取得了很大的成绩了,不能老叫起步工作组了,换个名字吧”,于是我招集所有的工作组弟兄们开会,最后还是颂暄提出了Dreamtech的名字,就这样Dreamtech诞生了。
作者:传说中的fn123
昨天一位工作组的弟兄跟我一直谈到了半夜2点,他很想知道工作组是怎么诞生的,因为我是唯一一个贯穿了工作组六年多的人,所以他要求我写一篇工作组的历史。我想这是我责无旁贷的事情,所以从今天起我会抽出所有能抽出的时间,分章节把它写出来。希望能把这份激情岁月分享给大家。
昨日之起步,圆今日之梦
那是一段激情燃烧的岁月,有时候你问我当时为什么会那么做,我却回答不出,只会傻傻得告诉你,“我那时候确实做了”。我想很多在大学中走过的人都会有这样的回忆,我们旷课,我们不写作业,我们不去睡觉,我们四处奔波,在别人看来最后我们却什么也没得到。这是什么:年轻的激情。然后我们会去后悔,因为我们挂了科,我们累垮的身体,我们做了很多却没了评优。是的,我们也曾后悔过,但是却执拗的将激情燃烧了下来,现在的我们告诉大家我们一点也不后悔了。我们是:fn123、yanleio、windforce、wilson、Draculux、Eatdeity、亮、绯村剑鑫。。。
2000年的8月是我的生日的月份,标志着我18岁的开始,那一个月让我永远难以忘记,我兴奋得收到了华北电力大学的录取的通知书,却极度悲伤的来到学校。但是我想18岁时候的我已经懂得:“人只能向前看,过去的东西将永远是回忆 ”。然而,这样的打击再次让我成为了一个疯子。为了忘记过去我拼命的投入到新的生活中去,那些年我一直没有回头看过,直到我第一次倒下。那时候我顺利当上了班长,创办了大地勇士篮球俱乐部,十一日放假回来了以后我被着班主任的禁令强行买了一台电脑。自那以后邱松、焦阳、贾亮便成了我们宿舍的常客。他们几个跟我一样都是小时候痴迷于计算机应用的,当然也包括游戏。。。但是刚上大学的我们总是对未来充满了美好的憧憬,并没有陷入到游戏的泥潭中去。有一天大家提议我们应该到以一起干点什么吧,于是我记得那天是10月12号的晚上,在学七社118,工作组成立了,它的名字叫做起步工作组(很土吧,但是那确实是我起的名字)。那天晚上开了一个小聚会,确定了我们地一个任务就是要弄一个网站,根本没有去考虑什么可行性报告,需求分析什么的,我们就是想在163的提供的免费空间上弄上去无数多的资源,有文学的、音乐的、新闻的还有下载的,那时候我们不还会用asp,做出的页面全都是html的,美工自然是我的强项了,不过憋了一天没憋出来,还是干脆把网易的皮给改了。我们给她起了个温暖的名字—《家园》我们的家园就这么诞生了,后来经电子2班长丁江伟的介绍,颂暄加入我们,他是我所见过的所有计算机爱好者中最天才的一个,这也是一个从几岁就开始玩计算机的人,每当我想压住他的时候,结果肯定是心里想:靠,他到底不知道什么。其时候到后来在我看来,几乎很少有Dreamtecer能够超越wilson,当然我们看他的qq号是556630就知道了(不是靓号)。这个严谨的广东小伙子后来成为了工作组的领航员。我想再后来总结工作组发展起来的三大原因中,黎颂暄的到来是非常重要的一个。不久后电子的一班长梁鑫也加入我们,然后就是阎蕾。我们00级团队就此产生了,我们开始了自己家园的建设,贾亮分的是音乐下载、我分的是新闻、界面设计还有系统整合、阎蕾负责的文学天地,吴峰弄的是图片下载,当梁鑫也是文学部分,听他的网名就知道。。。贾亮是个非常令我钦佩的人,他得到任务后整整在网吧住了一个月,搞到了海量的mp3。后来他们宿舍的建波来找我,让我把贾亮找回来,因为他们都一个月没有见到他了,非常想念他。整整几个月里我的118宿舍成了卫生最差的方便面世界。。。
其实这时候还不得不提我的另一位好朋友就是梁鑫,认识他是在一开学,因为那个时候我们都是电子系的,计算机还没有从电子系分出来,我们电子系三个专业的十个班都是一个辅导员,梁鑫是电子001班的班长,也不知道怎么搞得,梁鑫说话特别直白,很容易得罪人不过我偏偏就是跟他很投缘,记得那时候得知他在班级竞选的时候失利,我当时抄起凳子就想上去做了那个新班长刘杰强,不过还是被梁鑫拦住了。他是个很有激情的小伙子,也很有女人缘。其实说实话我也忘了是怎么把他弄进工作组的了,总之在后来的日子里梁鑫总是在非常关键的时刻提出非常重要的建议。在此之前他也不会做网站,也是在工作后学的,记得那时候应该是他做的MMD的主页,最爽的一次就是我和梁鑫用了一个下午的时间就搞定了法政系的主页,记得那个好像是把西安交大的主页给改了。。。在成立项目管理组的时候梁鑫被调到了项目管组并伙同阎蕾、吕琪以前完成《保险在电力系统中的应用》的论文,并获得了全国挑战杯大赛三等奖。因为梁鑫是电子专业的,它的电子设计也自然不在话下,在他支援硬件组的岁月里,他和自强及华旭设计的电话控制家电系统在全国挑战杯大赛中获得了三等奖。现在想想她有点像真正的共产党员—组织哪里需要就出现在哪里:),在最后的岁月里梁鑫去英国深造了,我想他马上该毕业了吧。哥们,回家的时候来记得回保定看看兄弟。
我的班主任是96级的刚刚毕业就留校了,他是一个非常有能力的人,后来他耿直的性格让他选择了离开学校。因为是大学刚毕业所以陈老师也是一个充满了激情的人,但是它带了十个班的辅导员和5个班的班主任让他难以分身,但是我想他确实很努力。过去几个月了宿舍的电脑越来越多,陈老师提议我们组建一个计算机2000的局域网。那时候学校没有校园网,我们上网要通过电话线来实现的很慢也很花钱。这个任务交给了我们,我们经过了一个多星期的努力,一个星形加环形的网络产生了。两个月过去了正当大家融入到整个局域网带来的无限欢乐的时候,学校开始建设局域网了,三个月后我们的网络被拆除了。
那时候我们大一不归各个系管,所有的freshmen都被一年学生工作部这个机构来管理。。我从小就在电脑公司打工,所以养成了一副维修电脑的好手艺,我想这也是我唯一可以在颂暄面前骄傲一下的地方。一年级学生工作部的老师每晚上要来学七社值班室来值班,几位一年级学生工作部的老师经常找我去给他们修电脑,后来付延春老师和刘健夫老师就成了我最投缘的两位老师,他们每当晚上值班的时候都会来叫我去他们那里陪他们聊天。那段日子让我学到了很多东西。我想是他们教会了我如何在学校中获得一席之地。学校的局域网建立以后,要求每个系都要建立自己的网站,傅老师找到了我,于是我们工作组又有了一个新的任物就是建立一年级工作部的网站,那事后我设计了一个红色的网站,现在能想起来的就记得,那个网站真的好红。由于这个网站的制作得到了领导的好评,我们被推荐到了网管中心,那时候运行室的主任还是朱有产老师,至此网管中心成了我们除了宿舍去了最多的家,经过我和颂暄几个星期的奋战,学校的主页诞生了,你是个仿造清华的橙色网站,只有一个新闻系统,还有几个页面。那时候很多热心的部门提出了很多意见,我们第一次被这么多人批评,不过朱老师还是站在了我们的前面把所有非议都挡住了。
转帖
自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。
那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没有差距,差距有多大。
当然,对于如何划分程序员的技术层级,不同公司或不同人会有不同的划分标准,下面的划分仅代表个人的观点,如有不当之处,还请砸板砖予以纠正。
第1层 菜鸟
第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者JavaScript,...,均可入门迈进这层。
在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通信、自动化、数学等相关专业的人士进入这一行,此外还有众多的其他专业转行的人士,人数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。
没有多少人愿意一辈子做菜鸟,因为做"菜鸟"的滋味实在是不咋的,整天被老大们吆喝着去装装机器,搭建一下测试环境,或者对照着别人写好的测试用例做一些黑盒测试,好一点的可以被安排去写一点测试代码。当然如果运气"好"的话,碰到了国内的一些作坊式的公司,也有机会去写一些正式的代码。
所以,菜鸟们总是在努力学习,希望爬更高的一层楼去。
第2层 大虾
从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语言,掌握C标准库和常用的各种数据结构算法,掌握STL的基本实现和使用方法,掌握多线程编程基础知识,掌握一种开发环境,再对各种操作系统的API都去使用一下,搞网络编程的当然对socket编程要好好掌握一下,然后再学习一些面向对象的设计知识和设计模式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都可以爬到第2层,晋升为"大虾"。
中国的"大虾"数量和"菜鸟"数量估计不会少多少,所以这层上仍然远领先于西方。
大虾们通常还是有些自知之明,知道自己只能实现一些简单的功能,做不了大的东西,有时候还会遇到一些疑难问题给卡住,所以他们对那些大牛级的人物通常是非常崇拜的,国外的如Robert C. Martin、Linus Torvalds,国内的如求伯君、王志东等通常是他们崇拜的对象。其中的有些人希望有一天也能达到这些大牛级人物的水平,所以他们继续往楼上爬去。
第3层 牛人
由于"大虾"们经常被一些疑难问题给卡住,所以有了"大虾"们只好继续学习,他们需要将原来所学的知识进一步熟练掌握,比如以熟练掌握C++编程语言为例,除了学一些基础性的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存管理、进程和线程的管理机制,了解处理器的基础知识和代码优化的方法,此外还需要更深入地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对各种设计方法有更好的理解等。
学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来说,光懂结构化设计、面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、情感化设计等,否则是很难进到这个楼层的。
当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们,现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种专业论坛里泡一泡,把这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下,菜鸟和大虾们会觉得你很"牛",你也就爬到了第3层,晋升为"牛人"了。
看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你"牛"呢?
需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接:http://www.threadingbuildingblocks.org/),然后上Intel的博客(http://softwareblogs-zho.intel.com/)和多核论坛(http://forum.csdn.net/Intel/IntelMulti-core/)去看看相关文章,再买上几本相关的书籍学习一下。
在国内,一旦成为"牛人",通常可以到许多知名的公司里去,运气好者可以挂上一个架构师的头衔,甚至挂上一个"首席架构师"或者"首席xx学家"的头衔也不足为奇。有不少爬到这层的人就以为到了楼顶了,可以眼睛往天上看了,开始目空一切起来,以为自己什么都可以做了,什么都懂了,经常在网络上乱砸板砖是这个群体的最好写照。由此也看出,国内的牛人数量仍然众多,远多于西方的牛人数量,在这层上仍然是领先的。
也有不少谦虚的"牛人",知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴子上树一样,往下看是笑脸,往上看是屁股。为了多看笑脸,少看屁股,他们并没有在此停步不前,而是继续寻找到更上一层的楼梯,以便继续往上爬。
第4层 大牛
从第3层爬到第4层可不像上面说过的那几层一样容易,要成为大牛的话,你必须要能做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统,不会写编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得象模象样的话,那么你就从牛人升级为"大牛"了。
当然,由于各个专业领域的差别,这里举操作系统、编译器、TCP/IP协议只是作为例子,并不代表成为"大牛"一定需要掌握这些知识,以时下热门的多核编程来说,如果你能比牛人们更深入地掌握其中的各种思想原理,能更加自如的运用,并有能力去实现一个象开源项目TBB库一样的东西,也可以成为"大牛",又或者你能写出一个类似Apache一样的服务器,或者写出一个数据库,都可以成为"大牛"。
要成为"大牛"并不是一件简单的事情,需要付出比牛人们多得多的努力,一般来说,至少要看过200~400本左右的专业书籍并好好掌握它,除此之外,还得经常关注网络和期刊杂志上的各种最新信息。
当"牛人"晋升为"大牛",让"牛人们"发现有比他们更牛的人时,对"牛人"们的心灵的震撼是可想而知的。由于牛人们的数量庞大,并且牛人对大虾和菜鸟阶层有言传身教的影响,所以大牛们通常能获得非常高的社会知名度,几乎可以用"引无数菜鸟、大虾、牛人竞折腰"来形容,看看前面提过的Linus Torvalds等大牛,应该知道此言不虚。
虽然成为"大牛"的条件看起来似乎很高似的,但是这层楼并不是很难爬的一层,只要通过一定的努力,素质不是很差,还是有许多"牛人"可以爬到这一层的。由此可知,"大牛"这个楼层的人数其实并不像想像的那么少,例如比尔·盖茨之类的人好像也是属于这一层的。
由于"大牛"这层的人数不少,所以也很难统计除到底是中国的"大牛"数量多还是西方的大牛数量多?我估计应该是个旗鼓相当的数量,或者中国的"大牛"们会更多一些。
看到这里,可能会有很多人会以为我在这里说瞎话,Linus Torvalds写出了著名的Linux操作系统,我国并没有人写出过类似的东西啊,我国的"大牛"怎么能和西方的比呢? 不知大家注意到没有,Linus Torvalds只是写出了一个"象模象样"的操作系统雏形,Linux后来真正发展成闻名全球的开源操作系统期间,完全是因为许多支持开源的商业公司如 IBM等,派出了许多比Linus Torvalds更高楼层的幕后英雄在里面把它开发出来的。
可能有些菜鸟认为Linus Torvalds是程序员中的上帝,不妨说个小故事:
Linus,Richard Stallman和Don Knuth(高德纳)一同参加一个会议。
Linus 说:"上帝说我创造了世界上最优秀的操作系统。"
Richard Stallman自然不甘示弱地说:"上帝说我创造了世界上最好用的编译器。"
Don Knuth一脸疑惑的说:"等等,等等,我什么时候说过这些话?"
由此可以看出,Linus Torvalds的技术水平并不像想像中那么高,只是"牛人"和"大虾"觉得"大牛"比他们更牛吧了。在我国,有一些当时还处于"大虾"层的人物,也能写出介绍如何写操作系统的书,并且书写得非常出色,而且写出了一个有那么一点点象模象样的操作系统来。我想中国的"大牛"们是不会比西方差的,之所以没有人写出类似的商业产品来,完全是社会环境的原因,并不是技术能力达不到的原因。
"大牛"们之所以成为大牛,主要的原因是因为把"牛人"给盖了下去,并不是他们自己觉得如何牛。也许有很多菜鸟、大虾甚至牛人觉得"大牛"这层已经到顶了,但大多数"大牛"估计应该是有自知之明的,他们知道自己现在还没有爬到半山腰,也就勉强能算个半桶水的水平,其中有些爬到这层没有累趴下,仍然能量充沛,并且又有志者,还是会继续往更上一层楼爬的。
看到这里,也许有些菜鸟、大虾、牛人想不明白了,还有比"大牛"们更高的楼层,那会是什么样的楼层?下面就来看看第5层楼的奥妙。
第5层 专家
当大牛们真正动手做一个操作系统或者类似的其他软件时,他们就会发现自己的基本功仍然有很多的不足。以内存管理为例,如果直接抄袭Linux或者其他开源操作系统的内存管理算法,会被人看不起的,如果自动动手实现一个内存管理算法,他会发现现在有关内存管理方法的算法数量众多,自己并没有全部学过和实践过,不知道到底该用那种内存管理算法。
看到这里,可能有些人已经明白第5层楼的奥妙了,那就是需要做基础研究,当然在计算机里,最重要的就是"计算"二字,程序员要做基础研究,主要的内容就是研究非数值"计算"。
非数值计算可是一个非常庞大的领域,不仅时下热门的"多核计算"与"云计算"属于非数值计算范畴,就是软件需求、设计、测试、调试、评估、质量控制、软件工程等本质上也属于非数值计算的范畴,甚至芯片硬件设计也同样牵涉到非数值计算。如果你还没有真正领悟"计算"二字的含义,那么你就没有机会进到这层楼来。
可能有人仍然没有明白为什么比尔·盖茨被划在了大牛层,没有进到这层来。虽然比尔·盖茨大学未毕业,学历不够,但是家有藏书2万余册,进入软件这个行业比绝大部分人都早,撇开他的商业才能不谈,即使只看他的技术水平,也可以算得上是学富五车,顶上几个普通的计算机软件博士之和是没有问题的,比起 Linus Torvalds之类的"大牛"们应该技高一筹才对,怎么还进不了这层楼呢?
非常遗憾的是,从Windows操作系统的实现来看,其对计算的理解是很肤浅的,如果把Google对计算方面的理解比做大学生,比尔·盖茨只能算做一个初中生,所以比尔·盖茨永远只能做个大牛人,成不了"专家"。
看到这里,也许国内的大牛们要高兴起来了,原来比尔·盖茨也只和我等在同一个层次,只要再升一层就可以超越比尔·盖茨了。不过爬到这层可没有从"牛人"升为"大牛"那么简单,人家比尔·盖茨都家有2万多册书,让你看个500~1000本以上的专业书籍并掌握好它应该要求不高吧。当然,这并不是主要的条件,更重要的是,需要到专业的学术站点去学习了,到ACM,IEEE,Elsevier,SpringerLink,SIAM等地方去下载论文应该成为你的定期功课,使用Google搜索引擎中的学术搜索更是应该成为你的日常必修课。此外,你还得经常关注是否有与你研究相关的开源项目冒出来,例如当听到有TBB这样针对多核的开源项目时,你应该第一时间到Google里输入"TBB"搜索一下,将其源代码下载下来好好研究一番,这样也许你的一只脚已经快迈进了这层楼的门槛。
当你象我上面说的那样去做了以后,随着时间的推移,总会有某天,你发现,在很多小的领域里,你已经学不到什么新东西了,所有最新出来的研究成果你几乎都知道。此时你会发现你比在做"牛人"和"大牛"时的水平不知高出了多少,但是你一点也"牛"不起来,因为你学的知识和思想都是别人提出来的,你自己并没有多少自己的知识和思想分享给别人,所以你还得继续往楼上爬才行。
我不知道国内的"专家"到底有多少,不过有一点可以肯定的是,如果把那些专门蒙大家的"砖家"也算上的话,我们的砖家比西方的要多得多。
第6层 学者
当"专家"们想继续往上一层楼爬时,他们几乎一眼就可以看到楼梯的入口,不过令他们吃惊的是,楼梯入口处竖了一道高高的门槛,上面写着"创新"二字。不幸的是,大多数人在爬到第5层楼时已经体能消耗过度,无力翻过这道门槛。
有少数体能充足者,可以轻易翻越这道门槛,但是并不意味着体力消耗过度者就无法翻越,因为你只是暂时还没有掌握恢复体能的方法而已,当掌握了恢复体能的方法,将体能恢复后,你就可以轻易地翻越这道门槛了。
怎么才能将体能恢复呢?我们的老祖宗"孔子"早就教导过我们"温故而知新",在英文里,研究的单词是"research",其前缀"re" 和"search"分别是什么意思不用我解释吧。或许有些人觉得"温故而知新"和"research"有些抽象,不好理解,我再给打个简单的比方,比如你在爬一座高山,爬了半天,中途体力不支,怎么恢复体力呢?自然是休息一下,重新进食一些食物,体力很快就可以得到恢复。
由此可知,对体能消耗过度者,休息+重新进食通常是恢复体能的最佳选择。可惜的是,国内的老板们并不懂得这点,他们的公司里不仅连正常国家规定的休息时间都不给足,有些公司甚至有员工"过劳死"出现。所以国内能翻越"创新"这道门槛的人是"少之又少",和西方比起来估计是数量级的差别。
再说说重新进食的问题,这个重新进食是有讲究的,需要进食一些基础性易消化的简单食物,不能进食山珍海味级的复杂食物,否则很难快速吸收。以查找为例,并不是去天天盯着那些复杂的查找结构和算法进行研究,你需要做的是将二分查找、哈希查找、普通二叉树查找等基础性的知识好好地复习几遍。
以哈希查找为例,首先你需要去将各种冲突解决方法如链式结构、二次哈希等编写一遍,再试试不同种类的哈希函数,然后还需要试试在硬盘中如何实现哈希查找,并考虑数据从硬盘读到内存后,如何组织硬盘中的数据才能快速地在内存中构建出哈希表来,...,这样你可能需要将一个哈希表写上十几个不同的版本,并比较各个版本的性能、功能方面的区别和适用范围。
总之,对任何一种简单的东西,你需要考虑各种各样的需求,以需求来驱动研究。最后你将各种最基础性的查找结构和算法都了然于胸后,或许某天你再看其他更复杂的查找算法,或者你在散步时,脑袋里灵光一现,突然间就发现了更好的方法,也就从专家晋升为"学者"了。
学者所做的事情,通常都是在前人的基础上,进行一些小的优化和改进,例如别人发明了链式基数排序的方法,你第1个发现使用一定的方法,可以用数组替代链表进行基数排序,性能还能得到进一步提高。
由于学者需要的只是一些小的优化改进,因此中国还是有一定数量的学者。不过和国外的数量比起来,估计少了一个数量级而已。
也许有人会觉得现在中国许多公司申请专利的数量达到甚至超过西方发达国家了,我们的学者数量应该不会比他们少多少。因此,有必要把专利和这里说的创新的区别解释一下。
所谓专利者,只要是以前没有的,新的东西,都可以申请专利;甚至是以前有的东西,你把他用到了一个新的领域的产品里去,也可以申请专利。比如你在房子里造一个水泥柱子,只要以前没有人就这件事申请专利,那么你就可以申请专利,并且下次你把水泥柱子挪一个位置,又可以申请一个新的专利;或者你在一个柜子上打上几个孔,下次又把孔的位置改一改,...,均可申请专利。
这层楼里所说的创新,是指学术层面的创新,是基础研究方面的创新,和专利的概念是完全不同的,难度也是完全不同的。你即使申请了一万个象那种打孔一类的专利,加起来也够不到这层楼里的一个创新。
当你爬到第6层楼时,你也许会有一种突破极限的快感,因为你终于把那道高高的写着"创新"二字的门槛给翻过去了,实现了"0"的突破。这时,你也许有一种"独上高楼,欲望尽天涯路"的感觉,但是很快你会发现看到的都是比较近的路,远处的路根本看不清楚。如果你还有足够的体力的话,你会想爬到更高一层的楼层去。
第7层 大师
从第6层楼爬到第7层楼,并没有多少捷径可走,主要看你有没有足够的能量。你如果能象Hoare一样设计出一个快速排序的算法;或者象Eugene W. Myers一样设计出了一个用编辑图的最短路径模型来解决diff问题的算法;或者象M.J.D. Powell一样提出了一个能够处理非线性规划问题的SQP方法;或者你发现基于比较的排序算法,它的复杂度下界为O(NLogN);或者你发现用栈可以将递归的算法变成非递归的;或者你设计出一个红黑树或者AVL树之类的查找结构;或者你设计出一个象C++或Java一样的语言;或者你发明了 UML;...,你就爬到了第7层,晋升为"大师"了。
上面举的这些例子中,其中有些人站的楼层比这层高,这里只是为了形象说明而举例他们的某个成就。从上面列出的一些大师的贡献可以看出,成为大师必须要有较大的贡献。首先解决问题必须是比较重要的,其次你要比前辈们在某方面有一个较大的提高,或者你解决的是一个全新的以前没有解决过的问题;最重要的是,主要的思路和方法必须是你自己提供的,不再是在别人的思路基础上进行的优化和改进。
看了上面这些要求,如果能量不够的话,你也许会觉得有些困难,所以不是每个人都能成为"大师"的。中国软件业里能称得上是"大师"的人,用屈指可数来形容,估计是绰绰有余。值得一提得是,国外的"大师"就象我们的"大牛"一样满天飞的多。
我把我猜测本国有可能进到这层楼的大师列一下,以起个抛砖引玉的作用。汉王的"手写识别"技术由于是完全保密的,不知道它里面用了什么思想,原创思想占的比重有多少,因此不知道该把它划到这层楼还是更高一层楼去。原山东大学王小云教授破解DES和MD5算法时,用到的方法不知道是不是完全原创的,如果是的话也可进到这层楼来。
陈景润虽然没有彻底解决哥德巴赫猜想,但他在解决问题时所用的方法是创新的,因此也可以进到这层楼来。当然,如果能彻底解决哥德巴赫猜想,那么可以算到更高的楼层去。
求伯君和王志东等大牛们,他们在做WPS和表格处理之类的软件时,不知是否有较大的原创算法在里面,如果有的话就算我错把他们划到了大牛层。由于所学有限,不知道国内还有那些人能够得上"大师"的级别,或许有少量做研究的教授、院士们,可以达到这个级别,有知道的不妨回个帖子晾一晾。
鉴于"大师"这个称号的光环效应,相信有不少人梦想着成为"大师"。或许你看了前面举的一些大师的例子,你会觉得要成为大师非常困难。不妨说一下,现在有一条通往"大师"之路的捷径打开了,那就是多核计算领域,有大量的处女地等待大家去挖掘。
以前在单核时代开发的各种算法,现在都需要改写成并行的。数据结构与算法、图像处理、数值计算、操作系统、编译器、测试调试等各个领域,都存在大量的机会,可以让你进到这层楼来,甚至有可能让你进到更高一层楼去。
第8层 科学家
科学家向来都是一个神圣的称号,因此我把他放在了“大师”之上。要成为科学家,你的贡献必须超越大师,不妨随便举一些例子。
如果你象Dijkstra一样设计了ALGOL语言,提出了程序设计的三种基本结构:顺序、选择、循环,那么你可以爬到第8层楼来。顺便说一下,即使抛开这个成果,Dijkstra凭他的PV操作和信号量概念的提出,同样可以进到这层楼。
如果你象Don Knuth一样,是数据结构与算法这门学科的重要奠基者,你也可以进到这层楼来。当然,数据结构和算法这门学科不是某个人开创的,是许多大师和科学家集体开创的。
如果你象巴科斯一样发明了Fortran语言,并提出了巴科斯范式,对高级程序语言的发展起了重要作用,你也可以进到这层楼来。
或者你象Ken Thompson、Dennis Ritchie一样发明了Unix操作系统和功能强大、高效、灵活、表达力强的C语言,对操作系统理论和高级编程语言均作出重大贡献,那么你也可以进到这层楼来。
或者你有Frederick P. Brooks一样机会,可以去领导开发IBM的大型计算机System/360和OS/360操作系统,并在失败后反思总结,写出《人月神话》,对软件工程作出里程碑式的贡献,你也可以进到这层来。
或者你提出了面向对象设计的基本思想,或者你设计了互联网的TCP/IP协议,或者你象Steven A.Cook一样奠定NP完全性的理论基础,或者你象Frances Allen一样专注于并行计算来实现编译技术,在编译优化理论和技术取得基础性的成就,…,均可进入这层。
当然,如果你发明了C++语言或者Java语言,你进不到这层来,因为你用到的主要思想都是这层楼中的科学家提出的,你自己并没有没有多少原创思想在里面。
看了上面列出的科学家的成就,你会发现,要成为“科学家”,通常要开创一门分支学科,或者是这个分支学科的奠基者,或者在某个分支学科里作出里程碑式的重大贡献。如果做不到这些的话,那么你能象Andrew C. Yao(姚期智)一样在对计算理论的多个方向如伪随机数生成,密码学与通信复杂度等各个方向上作出重要贡献,成为集大成者,也可以进入这层楼。
成为“科学家”后,如果你有幸象Dijkstra一样,出现在一个非常重视科学的国度。当你去世时,你家乡满城的人都会自动地去为你送葬。不过如果不幸生错地方的话,能不挨“板砖”估计就算万幸了。
从上面随便举的一些例子中,你可能能猜到,西方科学家的数量是非常多的,于是你会想中国应该也有少量的科学家吧?我可以很负责任地告诉你一个不幸的结果,中国本土产生的科学家的数量为0。目前在国内,软件领域的唯一的科学家就是上面提过的姚期智,还是国外请回来的,并不是本土产生的。
可能你不同意我说的本土科学家数量为0的结论,因为你经常看到有许多公司里都有所谓“首席XX科学家”的头衔。我想说的是,这些所谓的“首席XX科学家”都是远远够不到这层楼的级别的,有些人的水平估计也就是一个“牛人”或“大牛”的级别,好一点的最多也就一个“学者”的级别。尤其是那些被称作“首席经X学家”的,基本上可以把称号改为“首席坑大家”。
虽然我国没有人能爬到这层楼上来,但是西方国家仍然有许多人爬到了比这层更高的楼上。如果要问我们比西方落后多少?那么可以简单地回答为:“落后了三层楼”。下面就来看看我们做梦都没有到过的更高一层楼的秘密。
第9层 大科学家
进入这层楼的门槛通常需要一些运气,比如某天有个苹果砸到你头上时,你碰巧发现了万有引力,那么你可以进到这层楼来。当然,万有引力几百年前就被人发现了,如果你现在到处嚷嚷着说你发现了万有引力,恐怕马上会有人打110,然后警察会把你送到不正常人类的聚集地去。因此,这里举万有引力的例子,只是说你要有类似的成就才能进到这层楼来。
牛顿发现万有引力定律开创了经典物理运动力学这门学科,如果你也能开创一门大的学科,那么你就从科学家晋升为“大科学家”。比如爱因斯坦创建了相对论,从一个小职员变成了大科学家。当然大科学家可远不止这两人,数学界里比物理学界更是多得多,如欧几里得创建了平面几何,笛卡尔开创解析几何,还有欧拉、高斯、莱布尼茨等数不清的人物,跟计算相关的大科学家则有图灵等人。
从上面列出的一些大科学家可以发现,他们的成就不仅是开创了一个大的学科,更重要的是他们的成就上升到了“公理”的层面。发现公理通常是需要一点运气的,如果你的运气不够好的话,另外还有一个笨办法也可以进到这层楼来,那就是成为集大成者。例如冯·诺伊曼,对数学的所有分支都非常了解,许多领域都有较大的贡献,即使撇开他对计算机的开创贡献,成为大科学家照样绰绰有余。
当然,程序员们最关心的是自己有没有机会变成大科学家。既然计算机这门大学科的开创性成果早就被冯·诺伊曼、图灵等人摘走了,那么程序员们是不是没有机会变成大科学家了呢?我们的古人说得好:“江山代有才人出,各领风骚数百年”,现在在计算机这门学科下面诞生了许多非常重要的大的分支,所以你还是有足够的机会进到这层楼的。
如果你能够彻底解决自然语言理解(机器翻译)这门学科中的核心问题, 或者你在人工智能或者机器视觉(图像识别)方面有突破性的发现,那么你同样可以轻易地晋升为“大科学家”。这样当某天你老了去世时,或许那天国人已经觉醒,你也能享受到如Dijkstra一样的待遇,有满城甚至全国的人去为你送葬。
现在还剩下另外一个大家感兴趣的问题没有讨论,那就是这层中已经出现了牛顿、爱因斯坦、高斯等我们平常人都认为是顶级的科学家,是不是这层已经是楼顶了呢?相信还记得本文标题的人应该知道现在仅仅是第9层,还有第10层没有到达呢。可能不少人现在要感到困惑了,难道还有人站在比牛顿、爱因斯坦、高斯等人更高的楼层上?
这个世界上确实存在可以用一只手的手指数得清的那么几个人,他们爬到了第10层楼上。因此,第10层楼不是虚构的,而是确实存在的。如果对此有疑惑或者认为我在胡诌一番的话,那么不妨继续往下看下去,窥一下第10层楼的秘密。
[转] http://www.cnblogs.com/yeagen/archive/2008/12/18/1357379.html 前些天做vc的时候,截字符串,在网页中显示的时候总是出现半个字符,在网上搜索的时候找到了这个c#的,还是先收藏起来吧!
public string getStr(string strInput, int intLen)
{
strInput = strInput.Trim();
byte[] myByte = System.Text.Encoding.Default.GetBytes(strInput);
Response.Write("getStr Function is::" + myByte.Length.ToString());
if (myByte.Length > intLen)
{
//截取操作
string resultStr = "";
for (int i = 0; i < strInput.Length; i++)
{
byte[] tempByte = System.Text.Encoding.Default.GetBytes(resultStr);
if (tempByte.Length < intLen)
{
resultStr += strInput.Substring(i, 1);
}
else
{
break;
}
}
return resultStr + "...";
}
else
{
return strInput;
}
}
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"
MSN今天登录的时候360询问是否阻止,结果一不小心点了阻止,就不能登录上去了,也找不到再次允许的地方,无奈只能重启电脑,仍然不能登录,显示80072745 错误,测试一下网络,在发送验证数据的时候就发生错误,在网上搜索360并没有自己的防火墙,再下一次运行msn的时候其实就是允许了的,无奈只能又到网上搜索,解决方法的有很多种,不过都没有真的解决问题,最终找到了下面的方法:
打开Nod32的主窗口,“设置”—> “高级设置”—>“防病毒和反间谍保护”—>“协议过滤”,默认的重定数据过滤检查选的是第三项:端口和应用程序被标志着作为Internet浏览器或电子邮件客户端。我把它修改成选择第一项,即:HTTP和POP3协议端口,然后点“确定”按钮。重新启动MSN,用户名,密码,登录…哈哈,登录成功!
其实我还是很奇怪,Nod32也不是第一天装上去,不明白前些天是怎么用的,无所谓了,只要能用就好了,哈哈...