译者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我个个觉得这文章写得一般,代码也不是非常专业,但是它比较短,而且一时间也找不到好一点的文章,就把这个译过来了。其实PHP手册里也有一节是说多文件上传的,大家可以对比对比。文章内有的字句译出来不太顺眼,所以按照原意作了一定量的修改。本人水平有限,还望各位高手多指点。阅读全文
主题:ASP中Split函数的实例
大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。
我先介绍一下Split函数的用法:
返回值数组 = Split("字符串","分割符")
假设变量strURL保存着URL值,如strURL = "ftp://username:password@server",这是我们在IE中登录到FTP上时的URL形式,如果我们想把其中的 username和password取出来的话,该怎么办呢?当然解决的方法有许多,在这里我们只介绍用Split来解决的方法。首先,我们找出分割符。我们发现在这个字符串中,username和password之间有个冒号把它们隔开了,所以我们就把这个冒号作为Split函数的"分割符"来分割整个字符串,最后达到取username和password的目的。代码如下:
strURL = "ftp://username:password@server"
aryReturn = Split(strURL,":")
这样我们就把字符串用冒号分割开了,分割后的结果保存在aryReturn中(aryReturn是一个数组)。
下面我们就来看看这个最终的结果吧,因为Split函数最终返回的是一个数组,所以我们主要就是显示数组中的元素了,就要涉及到一些跟数组有关的函数:IsArray()判断是否数组的函数,LBound()取数组的下标,UBound()取数组的上标。
Response.Write("返回值是否为数组:" & IsArray(aryReturn) & "
")
For i = LBound(aryReturn) To UBound(aryReturn)
Response.Write("返回值数组中的元素[" & i & "]:" & Right(aryReturn(i),Len(aryReturn(i))-2) & "
")
Next
通过上面的代码,我们看到字符串被分割成三个部分,即:"ftp"、"//username"、"password@server"。我们要取username和password需要进一步的处理,我就不多说了,直接给出代码。
取username的代码:
strUsername = Right(aryReturn(1),Len(aryReturn(1))-2)
取password的代码:
'取password我们又用到Split函数了,不过这回的分割符是"@"
aryTemp = Split(aryReturn(2),"@")
strPassword = aryTemp(0)
'我们可以顺便取出server
strServer = aryTemp(1)
分割符可以是一个字符,也可以是一个字符串。如:
aryReturn = Split("ftp://username:password@server,"//")
注意:
1.一般来说,ASP中可以不声明变量,使用Split函数时,如果要声明返回值的变量的话,只能用Dim,而不能用Redim。虽然说其返回是一个数组,应该是用Redim也可以,但在实际使用过程中是不行。不知是怎么回事?
2. 如果用Split函数来分割一个字符串中并不存在的分割符时,将返回整个字符串,其结果是只有一个元素的数组。
后话,对于要取一字符串中的某些字符或部分,只要抓住规律,再加上用split就可以很好做成各种效果。写此文,希望对大家的学习有所帮助,同时也希望各路高手能够指点一二!
大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。
我先介绍一下Split函数的用法:
返回值数组 = Split("字符串","分割符")
假设变量strURL保存着URL值,如strURL = "ftp://username:password@server",这是我们在IE中登录到FTP上时的URL形式,如果我们想把其中的 username和password取出来的话,该怎么办呢?当然解决的方法有许多,在这里我们只介绍用Split来解决的方法。首先,我们找出分割符。我们发现在这个字符串中,username和password之间有个冒号把它们隔开了,所以我们就把这个冒号作为Split函数的"分割符"来分割整个字符串,最后达到取username和password的目的。代码如下:
strURL = "ftp://username:password@server"
aryReturn = Split(strURL,":")
这样我们就把字符串用冒号分割开了,分割后的结果保存在aryReturn中(aryReturn是一个数组)。
下面我们就来看看这个最终的结果吧,因为Split函数最终返回的是一个数组,所以我们主要就是显示数组中的元素了,就要涉及到一些跟数组有关的函数:IsArray()判断是否数组的函数,LBound()取数组的下标,UBound()取数组的上标。
Response.Write("返回值是否为数组:" & IsArray(aryReturn) & "
")
For i = LBound(aryReturn) To UBound(aryReturn)
Response.Write("返回值数组中的元素[" & i & "]:" & Right(aryReturn(i),Len(aryReturn(i))-2) & "
")
Next
通过上面的代码,我们看到字符串被分割成三个部分,即:"ftp"、"//username"、"password@server"。我们要取username和password需要进一步的处理,我就不多说了,直接给出代码。
取username的代码:
strUsername = Right(aryReturn(1),Len(aryReturn(1))-2)
取password的代码:
'取password我们又用到Split函数了,不过这回的分割符是"@"
aryTemp = Split(aryReturn(2),"@")
strPassword = aryTemp(0)
'我们可以顺便取出server
strServer = aryTemp(1)
分割符可以是一个字符,也可以是一个字符串。如:
aryReturn = Split("ftp://username:password@server,"//")
注意:
1.一般来说,ASP中可以不声明变量,使用Split函数时,如果要声明返回值的变量的话,只能用Dim,而不能用Redim。虽然说其返回是一个数组,应该是用Redim也可以,但在实际使用过程中是不行。不知是怎么回事?
2. 如果用Split函数来分割一个字符串中并不存在的分割符时,将返回整个字符串,其结果是只有一个元素的数组。
后话,对于要取一字符串中的某些字符或部分,只要抓住规律,再加上用split就可以很好做成各种效果。写此文,希望对大家的学习有所帮助,同时也希望各路高手能够指点一二!
[p align=center]OICQ技术的分析和实现攻略
2005-10-26 作者:向东 来源:中央民大
文章关键字:Web,数据库技术 模仿QQ的实现
一、引言
OICQ目前中国最大的计算机通讯软件,它的使用遍及几乎所有的中国地区。它极大地推动了网络的发展,已经成为Internet中最流行、最主要的信息聊天服务方式。它把各种类型的信息资源,如静态图象、文本、数据、视频和音频有机地结合起来,使用户能够在电脑上浏览、查询和共享以及建立在WWW服务器所有站点上的超媒体信息,渐渐成为通讯行业的QQ帝国。目前QQ使用的通讯技术与数据库管理(DBMS)相互融合的研究领域已成为热点方向之一,数据库厂家和相关的公司也纷纷推出各自的软件产品和中间件支持OICQ技术和相关服务技术的融合,将两者取长补短,发挥各自的优势,使用户可以在OICQ平台上方便地检索数据库的内容。所谓OICQ系统是指基于INTERNET客户端和服务器模式信息服务,充分发挥DBMS高效的数据存储和管理能力,以Web浏览器 /服务器(B/S)和客户端/服务器(C/S)混合模式为平台,将客户端
统一的超大服务平台,为用户提供使用简便、内容丰富的服务。
二、分析Oicq的协议报文
我个人认为在此基础上大型数据库管理系统必将成为Internet和Intranet提供的核心服务,为Internet上的软件开发提供技术支持。在此,本人将对OICQ的相关通讯协议作分析和自己个人见解和有关的实现方式作一定的介绍,重点是介绍他的服务器技术和本人的的一点见解!
它的数据传送没有经过加密,于是对OICQ服务器系统网络捕包分析及其通讯协议分析研究成为可能,如下:
协议:协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。
OICQ用户到OICQ服务器的通讯协议引导符(0x81+0x0A+0x01)报文类型报文内容报文说明
0x01昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许
0x02服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身
0x03服务号(L)+对方服务号(L)+内容(S)发送信息到某人
0x04服务号(L)+组号(L)+内容(S)广播信息,组号=0为全体阅读全文
2005-10-26 作者:向东 来源:中央民大
文章关键字:Web,数据库技术 模仿QQ的实现
一、引言
OICQ目前中国最大的计算机通讯软件,它的使用遍及几乎所有的中国地区。它极大地推动了网络的发展,已经成为Internet中最流行、最主要的信息聊天服务方式。它把各种类型的信息资源,如静态图象、文本、数据、视频和音频有机地结合起来,使用户能够在电脑上浏览、查询和共享以及建立在WWW服务器所有站点上的超媒体信息,渐渐成为通讯行业的QQ帝国。目前QQ使用的通讯技术与数据库管理(DBMS)相互融合的研究领域已成为热点方向之一,数据库厂家和相关的公司也纷纷推出各自的软件产品和中间件支持OICQ技术和相关服务技术的融合,将两者取长补短,发挥各自的优势,使用户可以在OICQ平台上方便地检索数据库的内容。所谓OICQ系统是指基于INTERNET客户端和服务器模式信息服务,充分发挥DBMS高效的数据存储和管理能力,以Web浏览器 /服务器(B/S)和客户端/服务器(C/S)混合模式为平台,将客户端
统一的超大服务平台,为用户提供使用简便、内容丰富的服务。
二、分析Oicq的协议报文
我个人认为在此基础上大型数据库管理系统必将成为Internet和Intranet提供的核心服务,为Internet上的软件开发提供技术支持。在此,本人将对OICQ的相关通讯协议作分析和自己个人见解和有关的实现方式作一定的介绍,重点是介绍他的服务器技术和本人的的一点见解!
它的数据传送没有经过加密,于是对OICQ服务器系统网络捕包分析及其通讯协议分析研究成为可能,如下:
协议:协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。
OICQ用户到OICQ服务器的通讯协议引导符(0x81+0x0A+0x01)报文类型报文内容报文说明
0x01昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许
0x02服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身
0x03服务号(L)+对方服务号(L)+内容(S)发送信息到某人
0x04服务号(L)+组号(L)+内容(S)广播信息,组号=0为全体阅读全文
/*
** 打印必要的说明文字
*/
print("距离星期一还有几天?\n");
print("
- \n");
- " . date("l", $currentDate) . "\n");
}
print("
for($currentDate = date("U"); //定义$currentDate时间格式
date("l", $currentDate) != "Monday"; //判断是不是当前系统时间是Monday
$currentDate += (60 * 60 * 24))//当前时间加上1天
{
/*
** 打印时间名称
*/
print("
?>
对于WAP开发者来说,非常实用的代码.
可以判断访问者是使用手机还是使用电脑访问
从而进入不同目录.
<%
if instr(request.ServerVariables("HTTP_USER_AGENT"),"Mozilla")=0 then
response.redirect "/wap" '如果客户端为手机访问,则进入/wap目录
else
response.redirect "http://siyizhu.com/" '如果客户端不是手机访问,则进入指定地址
end if
%>
其实,上面的asp代码中,response.redirect并不是在所有地区所有手机上都可以成功的。例如,response.redirect "http://xxx.xxx.com/xxx.dll?xxx",客户可以直接进去“”中的地址,但是通过asp文件再redirect是不行的。各位有没有更好的解决办法?
这个是不对的吧,搜索引擎的蜘蛛也没有Mozilla,我印象中是这样的啊
我站上用的是:
<%
Response.Buffer = TRUE
Dim IsWap
httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
if Instr(httpAccept,"wap") then
IsWap=1
Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
可以判断访问者是使用手机还是使用电脑访问
从而进入不同目录.
<%
if instr(request.ServerVariables("HTTP_USER_AGENT"),"Mozilla")=0 then
response.redirect "/wap" '如果客户端为手机访问,则进入/wap目录
else
response.redirect "http://siyizhu.com/" '如果客户端不是手机访问,则进入指定地址
end if
%>
其实,上面的asp代码中,response.redirect并不是在所有地区所有手机上都可以成功的。例如,response.redirect "http://xxx.xxx.com/xxx.dll?xxx",客户可以直接进去“”中的地址,但是通过asp文件再redirect是不行的。各位有没有更好的解决办法?
这个是不对的吧,搜索引擎的蜘蛛也没有Mozilla,我印象中是这样的啊
我站上用的是:
<%
Response.Buffer = TRUE
Dim IsWap
httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
if Instr(httpAccept,"wap") then
IsWap=1
Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
code:
HelloWorld.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class HelloWorld extends MIDlet implements CommandListener {
private Command exitCommand;
private TextBox tb;
public HelloWorld() {
exitCommand = new Command("Exit", Command.EXIT, 1);
tb = new TextBox("Hello 向东", "Hello,World!", 15, 0);阅读全文
HelloWorld.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class HelloWorld extends MIDlet implements CommandListener {
private Command exitCommand;
private TextBox tb;
public HelloWorld() {
exitCommand = new Command("Exit", Command.EXIT, 1);
tb = new TextBox("Hello 向东", "Hello,World!", 15, 0);阅读全文
以前觉得asp&php的书上写的是网络编程,其实本人认为socket才是的,比如java c # perl等才有的,本人用eclips随便调写了一个程序如下:
1.Clent端code:
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String s=null;
Socket mysocket;
DataInputStream in=null;
DataOutputStream out=null;
try
{
mysocket=new Socket("localhost",4331);
in=new DataInputStream(mysocket.getInputStream());
out=new DataOutputStream(mysocket.getOutputStream());
out.writeUTF("你好·");//
while(true){
s=in.readUTF();
out.writeUTF(":"+Math.random());
Thread.sleep(500);
}
}
catch(IOException e)
{
System.out.print("无法联接!");
}
catch(InterruptedException e){}
}
}
2.server端程序:
阅读全文
1.Clent端code:
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String s=null;
Socket mysocket;
DataInputStream in=null;
DataOutputStream out=null;
try
{
mysocket=new Socket("localhost",4331);
in=new DataInputStream(mysocket.getInputStream());
out=new DataOutputStream(mysocket.getOutputStream());
out.writeUTF("你好·");//
while(true){
s=in.readUTF();
out.writeUTF(":"+Math.random());
Thread.sleep(500);
}
}
catch(IOException e)
{
System.out.print("无法联接!");
}
catch(InterruptedException e){}
}
}
2.server端程序:
阅读全文
他只是换了一份工作,却引发了一场惊动全球的职场地震。有人拍手称快,有人恼羞成怒,甚至有人怀疑这是一条假消息,然而,更多的人最关注的是他的跳槽会给整个互联网的发展格局带来什么样的影响......
这本是一个平平常常的夏季。然而,李开复的一个决定却让这个夏季变得极富传奇色彩。这是一个让世界首富微软董事长比尔·盖茨寝食难安的决定。在作这个决定之前,李开复的头衔是微软全球副总裁。而这之后,他的头衔是Google中国区总裁。
消息传出后,Google股价当即上涨3.46%,报收309.9美元,单日最高成交价为310.35美元,再次创下Google股价新高。
猎头费1.3亿美元? 阅读全文
这本是一个平平常常的夏季。然而,李开复的一个决定却让这个夏季变得极富传奇色彩。这是一个让世界首富微软董事长比尔·盖茨寝食难安的决定。在作这个决定之前,李开复的头衔是微软全球副总裁。而这之后,他的头衔是Google中国区总裁。
消息传出后,Google股价当即上涨3.46%,报收309.9美元,单日最高成交价为310.35美元,再次创下Google股价新高。
猎头费1.3亿美元? 阅读全文
http://www.cnsafer.com/wenxue/Novel/200605/818_2.htm
我想讲一些关于程序员对自身认识的故事,这些故事都和灯下黑有关。只要正确认识自己,道理非常简单,但是,到处都可以看到灯下黑的故事。
某程序员,有一天接到一个任务:公司的有一个产品的文件太大了,要求采用压缩算法,减少尺寸,最好能压缩20%。
程序员兴高采烈地接受了任务:以前没玩过压缩算法,这下可以学习新东西了!研究了几个月后,他觉得差不多了,就交给了项目经理。项目经理正等着呢,高兴坏了,拿着演示文件就去找产品经理。产品经理开始挺高兴,看完脸就拉下来了。打开文件,把所有的文件尺寸一算,很淡淡的说:“才压缩了10%,有什么用啊!”
程序员愣住了,“不会吧!我看过的,压缩了 20%!”
产品经理指着文件列表说:“你看,某文件是压缩了20%,可你的压缩算法增加了一个动态库文件,尺寸还不小,总共加起来,不就只减少了10%吗?”
各位看官,这是不是软件公司里经常发生的情形?
这种失败的成因当然是复杂的,有沟通管理方面的问题,也有程序员能力的问题。我今天想要说的是程序员认识方面的问题。
继续故事:
项目经理很没面子,回去就和程序员找原因。项目经理是老程序员了,直话直说;终于弄清楚的事情的本质:
第一,这位程序员一个月的时间读了很多关于压缩算法的书,会了不少算法。可是从来没比较过算法的优劣。这老兄觉得研究算法很有趣,乐此不彼,写了好几个实现。 第二,这位老兄在最后几天才想起来20%的目标,也没太放在心上,看看差不多就拿出来了。
这是典型的程序员的认识问题,重知识而轻技术。
先从是么是知识,什么是技术说起。
知识就是知道,你知道了某件事是怎么回事,就是有了知识。
技术就是你能做出来,做得好叫技术好,做的不好叫技术差。
怎么写操作系统?看完操作系统原理,再苦读完源代码,这叫有知识了。如果有本事把任务调度、内存管理、IO什么的都写出来,还能写得稳定,快速,可扩展,那是有技术。有知识和有技术可差远了。早年我在工厂实习,要挫一个圆孔,拿着内锉刀干了一天,只挫了一个椭圆;师父来了,三分钟,比冲床冲出来还圆!我是个好学徒,使用锉刀的知识全记住的,可以写一篇内圆挫使用大全。知识是有了,可没这个技术。 程序员也一样。什么C++,Java,.net,什么STL,Struts,Spring,就是门门都满分,这也就是有知识。算不算技术好呢?差远了。软件工程师界就专门出这种不会写程序的“高手”。我遇到一位老兄,精通Java知识,从虚拟机到各类框架,概念,无所不同,谈起Java来,没人说的过他。可是他的代码永远Bug最多,而且都是最简单的Bug,什么逻辑不对啊,功能没实现啊,UI不对啊。他的领导只有又好气又好笑。问下去,发现这老兄写了几个程序文件以后,就不感兴趣了,因为所用的技术没什么不知道的了。所以马马虎虎交差。
说到底,写程序是个手艺活,就和古代的匠人一样,是要讲工艺的。比如一个玉匠,能打造栩栩如生的玉孔雀,那得打的好!要是一个玉匠说,这些手艺我都知道了,重复做东西没劲,将就着给客人做出来吧!那他还不吃西北风!
可是,十几年来,程序员界有的是这样的人,还引发大规模争论。象什么C++和Java之争啦,J2EE和.Net之争啦。你看里边的帖子,不停有人赌这个阵营那个阵营,有发誓一辈子做C++的,有发誓打倒.Net。我还奇怪了,专门没人效忠机器码的,那不是最难最有“学问”吗?这都是在争论什么知识最重要。可是啊,很少有人谈谈怎么做好产品的。
现在程序员最大的问题就是太看重知识,拼命追逐新玩意,而忽略了身边的够得着东西。好,什么C++,Window API都知道了,东西也弄出来了,可是三天两头崩溃,还找不到原因?为什么?有没有看看代码,看看是不是某函数写了2000行,自己都看不懂?是不是全局变量乱用?是不是没考虑前后兼容性?没考虑冗余和故障恢复?
末了再回到开头的故事:
项目经理回去和程序员再重新设计,又多花了一个月,终于达到了目标。但因为这个部分是一个大项目的一部分,整个项目不得不延迟了一个月。
年底考评的时候,项目经理给程序员打了一个及格;程序员不服,告到总经理那里。总经理说:“你知足吧,给你打及格已经看在你干的很辛苦的份上了,因为你没有按时完成,整个项目延迟了一个月,这帐都没找你算呢。”程序员颓然。
我想讲一些关于程序员对自身认识的故事,这些故事都和灯下黑有关。只要正确认识自己,道理非常简单,但是,到处都可以看到灯下黑的故事。
某程序员,有一天接到一个任务:公司的有一个产品的文件太大了,要求采用压缩算法,减少尺寸,最好能压缩20%。
程序员兴高采烈地接受了任务:以前没玩过压缩算法,这下可以学习新东西了!研究了几个月后,他觉得差不多了,就交给了项目经理。项目经理正等着呢,高兴坏了,拿着演示文件就去找产品经理。产品经理开始挺高兴,看完脸就拉下来了。打开文件,把所有的文件尺寸一算,很淡淡的说:“才压缩了10%,有什么用啊!”
程序员愣住了,“不会吧!我看过的,压缩了 20%!”
产品经理指着文件列表说:“你看,某文件是压缩了20%,可你的压缩算法增加了一个动态库文件,尺寸还不小,总共加起来,不就只减少了10%吗?”
各位看官,这是不是软件公司里经常发生的情形?
这种失败的成因当然是复杂的,有沟通管理方面的问题,也有程序员能力的问题。我今天想要说的是程序员认识方面的问题。
继续故事:
项目经理很没面子,回去就和程序员找原因。项目经理是老程序员了,直话直说;终于弄清楚的事情的本质:
第一,这位程序员一个月的时间读了很多关于压缩算法的书,会了不少算法。可是从来没比较过算法的优劣。这老兄觉得研究算法很有趣,乐此不彼,写了好几个实现。 第二,这位老兄在最后几天才想起来20%的目标,也没太放在心上,看看差不多就拿出来了。
这是典型的程序员的认识问题,重知识而轻技术。
先从是么是知识,什么是技术说起。
知识就是知道,你知道了某件事是怎么回事,就是有了知识。
技术就是你能做出来,做得好叫技术好,做的不好叫技术差。
怎么写操作系统?看完操作系统原理,再苦读完源代码,这叫有知识了。如果有本事把任务调度、内存管理、IO什么的都写出来,还能写得稳定,快速,可扩展,那是有技术。有知识和有技术可差远了。早年我在工厂实习,要挫一个圆孔,拿着内锉刀干了一天,只挫了一个椭圆;师父来了,三分钟,比冲床冲出来还圆!我是个好学徒,使用锉刀的知识全记住的,可以写一篇内圆挫使用大全。知识是有了,可没这个技术。 程序员也一样。什么C++,Java,.net,什么STL,Struts,Spring,就是门门都满分,这也就是有知识。算不算技术好呢?差远了。软件工程师界就专门出这种不会写程序的“高手”。我遇到一位老兄,精通Java知识,从虚拟机到各类框架,概念,无所不同,谈起Java来,没人说的过他。可是他的代码永远Bug最多,而且都是最简单的Bug,什么逻辑不对啊,功能没实现啊,UI不对啊。他的领导只有又好气又好笑。问下去,发现这老兄写了几个程序文件以后,就不感兴趣了,因为所用的技术没什么不知道的了。所以马马虎虎交差。
说到底,写程序是个手艺活,就和古代的匠人一样,是要讲工艺的。比如一个玉匠,能打造栩栩如生的玉孔雀,那得打的好!要是一个玉匠说,这些手艺我都知道了,重复做东西没劲,将就着给客人做出来吧!那他还不吃西北风!
可是,十几年来,程序员界有的是这样的人,还引发大规模争论。象什么C++和Java之争啦,J2EE和.Net之争啦。你看里边的帖子,不停有人赌这个阵营那个阵营,有发誓一辈子做C++的,有发誓打倒.Net。我还奇怪了,专门没人效忠机器码的,那不是最难最有“学问”吗?这都是在争论什么知识最重要。可是啊,很少有人谈谈怎么做好产品的。
现在程序员最大的问题就是太看重知识,拼命追逐新玩意,而忽略了身边的够得着东西。好,什么C++,Window API都知道了,东西也弄出来了,可是三天两头崩溃,还找不到原因?为什么?有没有看看代码,看看是不是某函数写了2000行,自己都看不懂?是不是全局变量乱用?是不是没考虑前后兼容性?没考虑冗余和故障恢复?
末了再回到开头的故事:
项目经理回去和程序员再重新设计,又多花了一个月,终于达到了目标。但因为这个部分是一个大项目的一部分,整个项目不得不延迟了一个月。
年底考评的时候,项目经理给程序员打了一个及格;程序员不服,告到总经理那里。总经理说:“你知足吧,给你打及格已经看在你干的很辛苦的份上了,因为你没有按时完成,整个项目延迟了一个月,这帐都没找你算呢。”程序员颓然。
作者:佚名 文章来源:网络 点击数:440 更新时间:2006-5-1
庞勇,曾经是位黑客,如今是IT安全世界网CEO。重庆信息安全工程师俱乐部秘书长、重庆网络安全学会理事、重庆网站联盟理事。对信息安全标准、体系有深入的见解,曾担任多家大型企业的信息安全顾问,具有5年信息安全工程项目实施经验。2004年劳动和社会保障部“全国计算机技能大赛”网络安全模块决赛命题组组长。获得CIW(中国)颁发的2004年度CIW网络安全业界精英称号。
曾经是位黑客
原野:曾经你是一位黑客,首先请你给我们简单讲一下你的黑客生涯吧。
庞勇:2000年,中美黑客大战加入红客联盟,成为一名小菜。开始学习黑客技术,刚开始都是工具黑客,简单的使用一些黑客工具,比如DOS攻击、漏洞扫描等,当时的流光非常的好用。2001年前后,成为中国黑客联盟的信息安全斑竹,成为技术核心成员之一,针对黑客攻击研究对应方法。2003年毕业之后,退出黑客行业,从事信息安全工作。
原野:作为曾经的一个黑客,你认为黑客带给你的最大的帮助有那些?具体说明一下。
庞勇:最大的帮助应该是深入的学习了一门计算机技术,在网络上交到不少的知心朋友。毕业之后,轻松的就业。
原野:很多网友都对黑客充满了好奇,特别是对他们的事迹,讲讲你在这段生活中你最难忘的一件事吧。
庞勇:2001年,通过简单的工具扫描找到一台有系统漏洞的山西服务器,缓冲区溢出之后,进入系统,获得最高权限。通过对服务器的全面分析,确认是山西某移动通信单位的OA服务器。通过服务器上的连接IP,入侵到内网用户系统,无意之间查到这家单位全公司人员的联系方式以及银行帐号。由于学校夜间断电,来不及删除入侵痕迹,第二天一大早就去网吧重新登录远程服务器删除相关的日志。阅读全文
1.最基本,最常用的,测试物理网络的
ping 192.168.10.59 -t ,参数-t是等待用户去中断测试
2.查看DNS(对猫用户),还是比较有用处的
A.Win98:winipcfg
B.Win2000以上:Ipconfig/all
C.WinNt:CMD,然后NSLOOKUP
3.网络信使
Net send 计算机名/IP 传送内容,注意不能跨网段
net stop messenger 停止信使服务,也可以在面板-服务修改
net start messenger 开始信使服务
4.探测对方对方计算机名,所在的组、域及当前用户名
ping -a IP地址 -t ,只显示NetBios名
nbtstat -a 192.168.10.146 比较全的
5.netstat -a 显示出你的计算机当前所开放的所有端口
netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等
6.探测谁连接了我的计算机
arp -a
7.捆绑IP和MAC解决局域网内盗用IP的问题
ARP -s 192.168.10.59 00-50-ff-6c-08-75
8.在网络邻居上隐藏你的计算机
net config server /hidden:yes
net config server /hidden:no 则为开
9.几个net命令
A.显示当前工作组服务器列表 net view,当不带选项使用本命令时,它就会显示当前域或网络上的计算机上的列表。
比如:查看这个IP上的共享资源,就可以
C:\>net view 192.168.10.8
在 192.168.10.8 的共享资源
资源共享名 类型 用途 注释
--------------------------------------
网站服务 Disk
命令成功完成。
B.查看计算机上的用户帐号列表 net user
C.查看网络链接 net use
例如:net use z: \\192.168.10.8\movie 将这个IP的movie共享目录映射为本地的Z盘
D.记录链接 net session
例如:
C:\>net session
计算机 用户名 客户类型 打开空闲时间
-------------------------------------------------------------------------------
\\192.168.10.110 ROME Windows 2000 2195 0 00:03:12
\\192.168.10.51 ROME Windows 2000 2195 0 00:00:39
命令成功完成。
10.路由跟踪命令
回复可见全部
A.tracert pop.pcpop.com
B.pathping pop.pcpop.com 除了显示路由外,还提供325S的分析,计算丢失包的%
11.关于共享安全的几个命令
A.查看你机器的共享资源 net share
B.手工删除共享
net share c$ /d
net share d$ /d
net share ipc$ /d
net share admin$ /d
注意$后有空格。
C.增加一个共享:
c:\net share mymovie=e:\downloads\movie /users:1
mymovie 共享成功。
同时限制链接用户数为1人。
12.在DOS行下设置静态IP
A.设置静态IP
CMD
netsh
netsh>int
interface>ip
interface ip>set add "本地链接" static IP地址 mask gateway
B.查看IP设置
interface ip>show address
ping 192.168.10.59 -t ,参数-t是等待用户去中断测试
2.查看DNS(对猫用户),还是比较有用处的
A.Win98:winipcfg
B.Win2000以上:Ipconfig/all
C.WinNt:CMD,然后NSLOOKUP
3.网络信使
Net send 计算机名/IP 传送内容,注意不能跨网段
net stop messenger 停止信使服务,也可以在面板-服务修改
net start messenger 开始信使服务
4.探测对方对方计算机名,所在的组、域及当前用户名
ping -a IP地址 -t ,只显示NetBios名
nbtstat -a 192.168.10.146 比较全的
5.netstat -a 显示出你的计算机当前所开放的所有端口
netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等
6.探测谁连接了我的计算机
arp -a
7.捆绑IP和MAC解决局域网内盗用IP的问题
ARP -s 192.168.10.59 00-50-ff-6c-08-75
8.在网络邻居上隐藏你的计算机
net config server /hidden:yes
net config server /hidden:no 则为开
9.几个net命令
A.显示当前工作组服务器列表 net view,当不带选项使用本命令时,它就会显示当前域或网络上的计算机上的列表。
比如:查看这个IP上的共享资源,就可以
C:\>net view 192.168.10.8
在 192.168.10.8 的共享资源
资源共享名 类型 用途 注释
--------------------------------------
网站服务 Disk
命令成功完成。
B.查看计算机上的用户帐号列表 net user
C.查看网络链接 net use
例如:net use z: \\192.168.10.8\movie 将这个IP的movie共享目录映射为本地的Z盘
D.记录链接 net session
例如:
C:\>net session
计算机 用户名 客户类型 打开空闲时间
-------------------------------------------------------------------------------
\\192.168.10.110 ROME Windows 2000 2195 0 00:03:12
\\192.168.10.51 ROME Windows 2000 2195 0 00:00:39
命令成功完成。
10.路由跟踪命令
回复可见全部
A.tracert pop.pcpop.com
B.pathping pop.pcpop.com 除了显示路由外,还提供325S的分析,计算丢失包的%
11.关于共享安全的几个命令
A.查看你机器的共享资源 net share
B.手工删除共享
net share c$ /d
net share d$ /d
net share ipc$ /d
net share admin$ /d
注意$后有空格。
C.增加一个共享:
c:\net share mymovie=e:\downloads\movie /users:1
mymovie 共享成功。
同时限制链接用户数为1人。
12.在DOS行下设置静态IP
A.设置静态IP
CMD
netsh
netsh>int
interface>ip
interface ip>set add "本地链接" static IP地址 mask gateway
B.查看IP设置
interface ip>show address
由C#风潮想起的-给初学编程者的忠告
作者: 刘巍
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追
赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部
头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可
以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨
花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了
。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间
多花一点在基础的课程上应该是可以走得更远的。 阅读全文
作者: 刘巍
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追
赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部
头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可
以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨
花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了
。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间
多花一点在基础的课程上应该是可以走得更远的。 阅读全文
我常感到疲惫不堪,
为此我的解释是睡眠不足。
可最近,
看了一组数据之后才知道,
我不是缺乏睡眠,
而是工作过度。
中国一共有 12亿人口,
其中有 三亿退休,
那就只剩下9亿人工作了;
8亿人在农村,
那 就只剩下一亿人在工作;
二千万是学生,
那只剩下八千万人在工作;
这八千万当中有四千万是政府工作人员,
其中一千万在打牌 ,
一千万在看报,
七百万在厕所,
一千万在聊天,
三百万在打毛衣。阅读全文
为此我的解释是睡眠不足。
可最近,
看了一组数据之后才知道,
我不是缺乏睡眠,
而是工作过度。
中国一共有 12亿人口,
其中有 三亿退休,
那就只剩下9亿人工作了;
8亿人在农村,
那 就只剩下一亿人在工作;
二千万是学生,
那只剩下八千万人在工作;
这八千万当中有四千万是政府工作人员,
其中一千万在打牌 ,
一千万在看报,
七百万在厕所,
一千万在聊天,
三百万在打毛衣。阅读全文
COUNT(expr)
返回由一个SELECT语句检索出来的行的非NULL值的数目。
mysql> select student.student_name,COUNT(*)
from student,course
where student.student_id=course.student_id
GROUP BY student_name;阅读全文
返回由一个SELECT语句检索出来的行的非NULL值的数目。
mysql> select student.student_name,COUNT(*)
from student,course
where student.student_id=course.student_id
GROUP BY student_name;阅读全文
自从计算机问世以来,程序设计就成了令人羡慕的职业,程序员在受人宠爱之后容易发展成为毛病特多却常能自我臭美的群体。
如今在Internet上流传的“真正”的程序员据说是这样的:
(1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让领导提心吊胆。
(2) 真正的程序员不写使用说明书,用户应当自己去猜想程序的功能。
(3) 真正的程序员几乎不写代码的注释,如果注释很难写,它理所当然也很难读。
(4) 真正的程序员不画流程图,原始人和文盲才会干这事。
(5) 真正的程序员不看参考手册,新手和胆小鬼才会看。
(6) 真正的程序员不写文档也不需要文档,只有看不懂程序的笨蛋才用文档。
(7) 真正的程序员认为自己比用户更明白用户需要什么。
(8) 真正的程序员不接受团队开发的理念,除非他自己是头头。阅读全文
如今在Internet上流传的“真正”的程序员据说是这样的:
(1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让领导提心吊胆。
(2) 真正的程序员不写使用说明书,用户应当自己去猜想程序的功能。
(3) 真正的程序员几乎不写代码的注释,如果注释很难写,它理所当然也很难读。
(4) 真正的程序员不画流程图,原始人和文盲才会干这事。
(5) 真正的程序员不看参考手册,新手和胆小鬼才会看。
(6) 真正的程序员不写文档也不需要文档,只有看不懂程序的笨蛋才用文档。
(7) 真正的程序员认为自己比用户更明白用户需要什么。
(8) 真正的程序员不接受团队开发的理念,除非他自己是头头。阅读全文