James Gosling上周参加了纽约的Sun 全球教育研讨会(World Wide Education & Research Conference),在会上这位Java 之父进行了演讲,并就提问进行了回答。
  有些人问道当前Java 所面临的威胁时,Gosling给予了这样的回答,“PHP 和Ruby 是非常好的系统,但是它们作为脚本语言来发挥力量,只局限于网页这一领域内。”

  当Gosling谈到Microsoft 的C# 时,“曾经一度我们很担心他们会做出创造性的东西——现在看他们要专注于一个平台是希望渺茫。”

  “PHP 能够简化产品因为它是100%瞄准网页的,”然而对于Java,他说,“我们拥有平衡的艺术——简化与力量的双赢。”

  最后James Gosling 说:“任何关于Java 相对PHP、Ruby还是其他语言的讨论都是没有意义的,我们同样在使用其他语言,你可以应用PHP 或者Python,以及其他语言与Java一起工作。许多人这样做。”

<HTML>
<HEAD>
<TITLE>俄罗斯方块</TITLE>
<style>
body {margin:0;background:black;}
td {height:20;width:20;}
#block_div {position:absolute;z-index:1;width:80;}
#table_div {position:absolute;z-index:0;width:320;}
#nblock_div {position:absolute;z-index:2;font:48 system;color:red;}
#title_div {position:absolute;left:326;top:7;font-size:22px;color:white}
#infobar_div {position:absolute;left:396;top:416;}
#infobar2_div {position:absolute;left:396;top:480;font-size:14px;color:white}
#infobar2_div a{color:99ccff;font:system;text-decoration:none}
</style>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
if (document.all){
var n_width = 800;
var n_height = 600;
var n_left = Math.round( screen.width/2 ) - n_width/2;
var n_top = Math.round( screen.height/2 ) - n_height/2;
var n_IncStep = 20;
var curBlcok,nextBlock;
var arr_curBlock = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var curX,curY;
var speed=1;
var maxspeed=9;
var clr_per_line=18;
var pause=0;
var gameover=0;
var colors = new Array("#999999","#0000FF","#80FFFF","#80FF80","#FFFF00","#FF8000","#FF00FF","#FF0000"
);
var cid;
var ncid;
var blocks = new Array("tt_O1","tt_T2","tt_Z1","tt_S1","tt_L1","tt_J1","tt_I2");
var bid;
var killedlines=0;

var tt_O1 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O2 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O3 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);
var tt_O4 = new Array(0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0);

var tt_T1 = new Array(0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0);
var tt_T2 = new Array(0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0);
var tt_T3 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,1,0,0);
var tt_T4 = new Array(0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0);

var tt_Z1 = new Array(0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0);
var tt_Z2 = new Array(0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0);
var tt_Z3 = new Array(0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0);
var tt_Z4 = new Array(0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0);

var tt_S1 = new Array(0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0);
var tt_S2 = new Array(0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0);
var tt_S3 = new Array(0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0);
var tt_S4 = new Array(0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0);

var tt_L1 = new Array(0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0);
var tt_L2 = new Array(0,0,0,0,0,0,1,0,1,1,1,0,0,0,0,0);
var tt_L3 = new Array(0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0);
var tt_L4 = new Array(0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0);

var tt_J1 = new Array(0,0,1,0,0,0,1,0,0,1,1,0,0,0,0,0);
var tt_J2 = new Array(0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0);
var tt_J3 = new Array(0,0,0,0,0,1,1,0,0,1,0,0,0,1,0,0);
var tt_J4 = new Array(0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0);

var tt_I1 = new Array(0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0);
var tt_I2 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);
var tt_I3 = new Array(0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0);
var tt_I4 = new Array(0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1);

var table = new Array(
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
       1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
               1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

}
else
alert("You need IE4+ to play Tetris!")

function dimension2(row,col,num){
   var i = row * num + col;
   return (this[i]);
}
Array.prototype.getd = dimension2;

function ShowBlock(x,y,block_type,color){
   for (var i=0;i<block_tbl.rows.length;i++){
       for (var j=0;j<block_tbl.rows(i).cells.length;j++){        
           var d2 = i * 4 + j;
           if (block_type[d2]==1){
               block_tbl.rows(i).cells(j).style.background = color;
           }
           else{
               block_tbl.rows(i).cells(j).style.background = "";
           }
       }
   }
   block_div.style.pixelLeft=x;
   block_div.style.pixelTop=y;
}

function ShowBlock1(x,y,block_type,color,obj_tabID,obj_divID){
   for (var i=0;i<obj_tabID.rows.length;i++){
       for (var j=0;j<obj_tabID.rows(i).cells.length;j++){        
           var d2 = i * 4 + j;
           if (block_type[d2]==1){
               obj_tabID.rows(i).cells(j).style.background = color;
           }
           else{
               obj_tabID.rows(i).cells(j).style.background = "";
           }
       }
   }
   obj_divID.style.pixelLeft=x;
   obj_divID.style.pixelTop=y;
}

function Change(inc){
   var type = curBlock.substr(0,4);
   var num = curBlock.substr(curBlock.length-1);
   num = parseInt(num) + inc;
   if (num>4&#124;&#124;num<1) num -= 4*inc;
   type += num;
   eval("arr_tmp = " + type + ";");
   if (CanMove(curX,curY,arr_tmp)){
       curBlock = type;
       eval("arr_curBlock = " + curBlock + ";");
       eval("ShowBlock(block_div.style.pixelLeft,block_div.style.pixelTop," + curBlock + ",colors[" + cid + "]);");
   }
}

function CanMove(x,y,block){
   for (i=0;i<4;i++){
       for (j=0;j<4;j++){
           if (block.getd(i,j,4)&table.getd(y/n_IncStep+i,x/n_IncStep+j,16)) return false;
       }
   }
   return true;
}

function NewBlock(){
   curBlock = nextBlock;
   cid = ncid;
   bid = Math.round(Math.random()*(blocks.length-1));
   ncid = Math.round(Math.random()*(colors.length-1));
   nextBlock = blocks[bid];
   eval("arr_curBlock = " + curBlock + ";");
   eval("ShowBlock(120,0," + curBlock + ",colors[" + cid + "]);");
   eval("arr_curBlock = " + curBlock + ";");
   eval("ShowBlock1(466,116," + nextBlock + ",colors[" + ncid + "],nblock_tbl,nblock_div);");
}

function SaveBlock(){
   for (i=0;i<4;i++){
       for (j=0;j<4;j++){
           table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]&#124;=arr_curBlock[i*4+j];
           if (arr_curBlock[i*4+j]==1)
               if ((curY/n_IncStep+i<21)&&(curX/n_IncStep+j>1)&&(curX/n_IncStep+j<14))
                   table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = colors[cid];
           if (table[(curY/n_IncStep+i)*16+curX/n_IncStep+j]!=1)
                   table_tbl.rows(curY/n_IncStep+i).cells(curX/n_IncStep+j).style.background = "black";
       }
   }
}

function DelLine(line){
   for(i=line;i>0;i--){
       for(j=2;j<14;j++){
           table[i*16+j]=table[(i-1)*16+j];
       }
   }
   table_tbl.deleteRow(line);
   table_tbl.insertRow(0);
   for (i=0;i<16;i++){
       table_tbl.rows(0).insertCell();
       if (i<2&#124;&#124;i>13) table_tbl.rows(0).cells(i).style.background="navy";        
   }
   killedlines++;
   cll.innerText=parseInt(cll.innerText)+1;
}

function DelLines(){
   var c,d,i,j;
   d=0;
   curY=block_div.style.pixelTop;
   for(i=(curY/20+3);i>curY/20-1;i--){
       c=0;
       for(j=2;j<14;j++){
           if (isNaN(table[i*16+j])&#124;&#124;i==21) break;
           c+=table[i*16+j];
       }
       if(c==12){
           DelLine(i);
           i++;
           d++;
       }
   }
   if (d>0)
       sco.innerText=parseInt(sco.innerText)+d*d*36;
}

function Lucifer(){
   for(var i=2;i<14;i++){
       if (table[16+i]==1) return true;
   }
   return false;
}

function GameOver(){
   gameover=1;
   clearInterval(gameInterval);
   block_div.innerHTML="";
   for (i=0;i<21;i++){
       for (j=2;j<14;j++){
           setTimeout("table_tbl.rows(" + i + ").cells(" + j + ").style.background = colors[Math.round(Math.random()*7)];",16*i*j);
       }
   }
   nblock_div.innerHTML = "Game Over";
}



function document_onkeydown() {
   if (gameover==1) return;
   with (block_div.style){
   curX = pixelLeft;
   curY = pixelTop;
   switch (event.keyCode){
       case 37:
           if (CanMove(curX-n_IncStep,curY,arr_curBlock))
               pixelLeft-=n_IncStep;
           break;
       case 38:
           Change(1);
           break;
       case 39:
           if (CanMove(curX+n_IncStep,curY,arr_curBlock))
               pixelLeft+=n_IncStep;
           break;
       case 40:
           if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
               pixelTop+=n_IncStep;
           }
           else{
               SaveBlock();
               DelLines();
               if (Lucifer()){
                   GameOver();
                   return;
               }
               sco.innerText=parseInt(sco.innerText)+2;
               NewBlock();
           }
           break;
       case 32:
           if (pause==0){
               clearInterval(gameInterval);
               pause=1;
           }
           else{
               gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
               pause=0;
           }
           break;
       case 90:        
           Change(1);
           break;
       case 88:    
           Change(-1);
           break;
       default:
   }
   }
}

function Handle_Interval(){
   curX = block_div.style.pixelLeft;
   curY = block_div.style.pixelTop;
   if (CanMove(curX,curY+n_IncStep,arr_curBlock)){
       block_div.style.pixelTop+=n_IncStep;
   }
   else{
       SaveBlock();
       DelLines();
       if (Lucifer()){
           GameOver();
           return;
       }
       sco.innerText=parseInt(sco.innerText)+2
       NewBlock();
   }
   if (killedlines>=clr_per_line){
       killedlines-=clr_per_line;
       if (speed<maxspeed)
           speed++;
       else
           speed=maxspeed;
       spd.innerText=speed;
       clearInterval(gameInterval);
       gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
   }
}
//-->
</SCRIPT>

<SCRIPT LANGUAGE=javascript FOR=document EVENT=onkeydown>
<!--
if (document.all)
document_onkeydown()
//-->
</SCRIPT>

</HEAD>

<BODY LANGUAGE=javascript>

<div id=block_div style="left:60;top:0">
<table id=block_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<4;i++){
   document.write("<tr>");
   for (var j=0;j<4;j++){
       document.write("<td style=\"border:1 solid black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=nblock_div>
<table id=nblock_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<4;i++){
   document.write("<tr>");
   for (var j=0;j<4;j++){
       document.write("<td style=\"height:40;width:40;border:1 outset black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=table_div>
<table id=table_tbl border=0 cellspacing=0 cellpadding=0>
<script>
if (document.all){
for (var i=0;i<22;i++){
   document.write("<tr>");
   for (var j=0;j<16;j++){
       var d2 = i * 16 + j;
       if (table[d2]==1)
       document.write("<td bgcolor=navy></td>");
       else
       document.write("<td style=\"background:black;\"></td>");
   }
   document.write("</tr>");
}
}
</script>
</table>
</div>

<div id=title_div nowrap>
<font size="3">请在文本框输入(1-9)并按开始键开始游戏: <input type="text" size=8 id="speedin"> <button onClick="begintet()" id="but">开始</button>
<br>
游戏结束后,按"新游戏"键重新开始游戏!<input type="button" value="新游戏" onclick="javascript:window.location.href='eluosi1.htm'">
<input type="button" value="不玩了" onclick="self.close()">
</font>
</div>


<div id=infobar_div>
<table border=1 bordercolor=navy cellspacing=0 cellpadding=0>
<tr align=center>
<td style="color:99ccff;font:12 system;width:56;">速度:</td>
<td style="color:red;font:12 system;" id=spd>1</td>
<td style="color:99ccff;font:12 system;width:86;">总成绩:</td>
<td style="color:red;font:12 system;" id=sco>0</td>
<td style="color:99ccff;font:12 system;width:96;">消减排数:</td>
<td style="color:red;font:12 system;" id=cll>0</td>
</tr>
</table>
</div>

<SCRIPT ID=MainSection LANGUAGE=javascript>
<!--
if (document.all){
ncid = Math.round(Math.random()*(colors.length-1));
bid = Math.round(Math.random()*(blocks.length-1));
nextBlock = blocks[bid];
NewBlock();
}
function begintet(){
document.all.speedin.disabled=true
document.all.but.disabled=true
speed=parseInt(document.all.speedin.value);
if (isNaN(speed)&#124;&#124;speed==null&#124;&#124;speed>maxspeed&#124;&#124;speed<1) speed=1;
spd.innerText=speed;
gameInterval=window.setInterval("Handle_Interval()",(maxspeed-speed+1)*60);
}
//-->
</SCRIPT>
<P>
</BODY>
</HTML>

#include
#include
#include
#include
#include
#include

#define LEFT 0x4b
#define RIGHT 0x4d
#define DOWN 0x50
#define CHANGE 0x20
#define ESC 0x1b
#define INTR 0x1C
#define DefaultX 5
#define DefaultY 1
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

static unsigned counter=0;
static unsigned shape[7][4][4][4]={
{
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,1,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},
},
{
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}},
{{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0}},
},
{
{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0}},
{{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,1,0,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,1,1,0},{1,1,0,0},{0,0,0,0}},
},
{
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}},
},
{
{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{1,0,0,0},{0,0,0,0}},
{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0}},
{{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}},
},
{
{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0}},
{{0,0,0,0},{1,0,0,0},{1,1,1,0},{0,0,0,0}},
{{1,1,0,0},{1,0,0,0},{1,0,0,0},{0,0,0,0}},
{{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}},
},
};

unsigned back[22][14]={{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

char ShapeColor[7]={8,10,11,12,13,14,15};
char DigitalShape[10]={128+119,3,62,31,128+75,128+93,128+125,19,128+127,128+95};
char ZodiacBack[11]={4,6,12,13,11,10,2,3,9,1,8};
char ZodiacSoft[18][14]={{0,0,0,0,96,0,0,0,0,0,0,0,60,0},
{255,248,0,0,96,0,0,0,0,248,0,0,124,0},
{255,248,0,0,97,128,0,0,3,248,0,0,192,0},
{0,112,0,0,97,128,0,0,7,0,0,1,128,48},
{0,224,0,0,96,0,0,0,14,0,0,1,128,48},
{1,192,0,0,96,0,0,0,12,0,0,1,128,48},
{3,128,120,15,97,128,240,60,12,0,15,15,249,255},
{7,0,252,31,225,131,248,127,14,0,31,143,249,255},
{7,1,142,48,225,135,24,227,7,240,49,193,128,48},
{14,3,134,96,97,142,24,192,3,252,112,193,128,48},
{28,3,6,96,97,140,25,192,0,28,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{56,3,6,96,97,140,25,128,0,6,96,193,128,48},
{120,3,6,96,97,140,25,128,0,6,96,193,128,48},
{224,1,140,48,225,142,25,195,24,14,49,129,128,48},
{255,249,252,63,225,135,252,255,28,28,63,129,128,48},
{255,248,240,15,97,131,236,60,15,248,30,1,128,48},
{0,0,0,0,0,0,0,0,7,224,0,1,128,0}};

unsigned long TotalMark=0;
unsigned int Erasered=0,ETimes=0;
int Speed=0;
int CEr=0;
int NumOfLev[5]={0,0,0,0,0};
int TimeDelay[10]={21,18,17,15,13,11,9,7,5,3};
char NewShape[2];
unsigned PerOnce[4];

void interrupt ( *oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS)
{
++counter;
oldhandler();
}

void DrawBackground()
{
//setlinestyle
}
void DrawDigital(int x,int y,int a)
{
int i=7;
setcolor(((DigitalShape[a]>>i)&1)*7+4);
//printf("%d",(DigitalShape[a]>>i)&1);
i--;
line(x,y+1,x,y+15);
line(x+1,y+2,x+1,y+14);
line(x+2,y+3,x+2,y+13);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x,y+17,x,y+31);
line(x+1,y+18,x+1,y+30);
line(x+2,y+19,x+2,y+29);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+1,y,x+16,y);
line(x+2,y+1,x+15,y+1);
line(x+3,y+2,x+14,y+2);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+2,y+15,x+15,y+15);
line(x+1,y+16,x+16,y+16);
line(x+2,y+17,x+15,y+17);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+3,y+30,x+14,y+30);
line(x+2,y+31,x+15,y+31);
line(x+1,y+32,x+16,y+32);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
i--;
line(x+15,y+3,x+15,y+13);
line(x+16,y+2,x+16,y+14);
line(x+17,y+1,x+17,y+15);
setcolor(((DigitalShape[a]>>i)&1)*7+4);
line(x+15,y+19,x+15,y+29);
line(x+16,y+18,x+16,y+30);
line(x+17,y+17,x+17,y+31);
}

void ArtClear()
{
for(int i=480;i>=0;i-=2)
{
setcolor(3);
line(0,i-6,639,i-6);
setcolor(9);
line(0,i-4,639,i-4);
setcolor(1);
line(0,i-2,639,i-2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
for(i=1;i<480;i+=2)
{
setcolor(3);
line(0,i+6,639,i+6);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i+2,639,i+2);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
}

void end()
{
for(int j=0;j<4;j++)
{
for(int i=j;i<480;i+=4)
{
setcolor(3);
line(0,i+8,639,i+8);
setcolor(9);
line(0,i+4,639,i+4);
setcolor(1);
line(0,i,639,i);
setcolor(getbkcolor());
line(0,i,639,i);
delay(1);
}
delay(5);
}
setcolor(YELLOW);
outtextxy(260,200,"[ Game Over ]");
gotoxy(14,16);
printf("This freeware is written by Daniel.Qu ZodiacSoft 2000");
gotoxy(12,17);
printf("Please e-mail to swami@yeah.net or visit my homepage at");
gotoxy(12,18);
printf("http://grocery.2699.com if you have question.");
gotoxy(14,20);
printf("I will soon provide something new,please wait...");
gotoxy(14,22);
printf("We hold these truths to be self-evident,that all codes");
gotoxy(12,23);
printf("are created FREE.");
getch();
clrscr();
closegraph();
exit(0);
}

void ShowTitle()
{
int gdriver=DETECT,gmode,errorcode,i,j,k;
initgraph(&gdriver,&gmode,"");
errorcode=graphresult();
if (errorcode!=grOk)
{
printf("Graphics error: %s\n\007",grapherrormsg(errorcode));
exit(1);
}
setbkcolor(9);//This line needs to be changed
for(i=0;i<11;i++)
{
setcolor(ZodiacBack[i]);
line(200,i*8+100,440,i*8+100);
}
delay(1000);
for(j=0;j<17;j++)
for(i=0;i<11;i++)
{
setcolor(ZodiacBack[(i+j)%16]);
line(200,i*8+100,440,i*8+100);
delay(4);
}
for(j=0;j<18;j++)
{
for(i=0;i<14;i++)
{
for(k=7;k>=0;k--)
if((ZodiacSoft[j][i]>>k)&1)
{
putpixel(i*8-k+271,j+122,14);
}
}
delay(10);
}
for(j=17;j>=0;j--)
{
for(i=0;i<14;i++)
for(k=7;k>=0;k--)
{
if((ZodiacSoft[j][i]>>k)&1)
putpixel(i*8-k+271,158-j,5);
}
delay(10);
}
setcolor(15);
outtextxy(295,171,"Present");
getch();
ArtClear();
}

void DrawShape(int x,int y,int color)
{
//if(x<2||x>12||y>19)
// return;
setcolor(color);
/*line(x<<4,y<<4,x<<4,(y<<4)+14);
line(x<<4,(y<<4)+14,(x<<4)+14,(y<<4)+14);
line((x<<4)+14,(y<<4)+14,(x<<4)+14,y*16);
line((x<<4)+14,y<<4,x<<4,y*16);
line((x<<4)+1,y<<4,(x<<4)+1,(y<<4)+14);
line((x<<4)+1,(y<<4)+13,(x<<4)+14,(y<<4)+13);
line((x<<4)+13,(y<<4)+13,(x<<4)+13,(y<<4)+1);
line((x<<4)+13,(y<<4)+1,x<<4,(y<<4)+1); */
for(int i=0;i<15;i++)
line(x<<4,(y<<4)+i,(x<<4)+14,(y<<4)+i);
setcolor(8);
line((x<<4)+15,(y<<4)+1,(x<<4)+15,(y<<4)+15);
line((x<<4)+1,(y<<4)+15,(x<<4)+15,(y<<4)+15);
setcolor(color-8);
line((x<<4)+2,(y<<4)+2,(x<<4)+12,(y<<4)+2);
line((x<<4)+2,(y<<4)+2,(x<<4)+2,(y<<4)+12);
}

void DrawNull(int x,int y)
{
setcolor(getbkcolor());
for(int i=0;i<16;i++)
line(x<<4,(y<<4)+i,(x<<4)+15,(y<<4)+i);
}

void show(int x,int y,int CurrentShape,int Status)
{
int temp;
for(int i=0;i<20;i++)
for(int j=2;j<12;j++)
{
if(back[i][j]==1)
DrawShape(6+j,4+i,8);
else
DrawNull(6+j,4+i);
} //no matter what the status be,I will draw the background
for(int l=0;l<4;l++)
for(int p=0;p<4;p++)
{
if(l+x<2||x+l>11||p+y>19)
continue;
//if(shape[CurrentShape][Status][p][l]+back[y+p][x+l]==1)
// DrawShape(3+l+x,3+p+y,8+CurrentShape);
//else
//cout<<'O';
// DrawNull(3+j,3+i);
if(shape[CurrentShape][Status][p][l]==1)
DrawShape(6+l+x,4+p+y,ShapeColor[CurrentShape]);
if(back[y+p][x+l]==1)
DrawShape(6+l+x,4+p+y,8);
}
}
void DrawScore()
{
int temp=TotalMark;
for(int i=0;i<7;i++)
{
DrawDigital(477-i*20,65,temp%10);
temp/=10;
}
temp=Erasered;
for(i=0;i<4;i++)
{
DrawDigital(491-i*20,111,temp%10);
temp/=10;
}
if(Erasered==0)
return;
for(i=1;i<5;i++)
{
setfillstyle(1,8);
bar(378,163+i*14,508,170+i*14);
setfillstyle(1,5);
bar(378,163+i*14,378+130*NumOfLev[i]/ETimes,170+i*14);
}
DrawDigital(466,293,Speed);
return;
}

int CreateNewShape()
{
NewShape[1]=NewShape[0];
NewShape[0]=rand()%7;
setfillstyle(1,0);
bar(447,240,514,288);
for(int l=0;l<4;l++)
for(int p=0;p<4;p++)
if(shape[NewShape[0]][0][p][l]==1)
DrawShape(28+l,15+p,ShapeColor[7]);
return NewShape[1];
}

int Possible(int x,int y,int CurrentShape,int Status)
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(shape[CurrentShape][Status][i][j]+back[y+i][x+j]==2)
//this line can also write as the following type:
//if(shape[CurrentShape][Status][i][j]&&back[y+i][x+j])
return 0;
}
}
return 1;
}

void GoLeft(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x-1,y,CurrentShape,Status))
x--;
show(x,y,CurrentShape,Status);
}

void GoRight(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x+1,y,CurrentShape,Status))
x++;
show(x,y,CurrentShape,Status);
}

void GoDown(int&x,int&y,int&CurrentShape,int&Status)
{
int AllAreOne=1,temp=0;
if(Possible(x,y+1,CurrentShape,Status))
{
y++;
show(x,y,CurrentShape,Status);
return;
}
TotalMark+=3*CurrentShape;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
back[i+y][j+x]+=shape[CurrentShape][Status][i][j];
for(int r=1;r<20;r++)
{
for(int l=2;l<13;l++)
{
if(back[r][l]==0)
AllAreOne=0;
}
if(AllAreOne==1)
{
for(int rr=r;rr>0;rr--)
for(int ll=2;ll<13;ll++)
back[rr][ll]=back[rr-1][ll];
Erasered++;
CEr++;
temp++;
}
AllAreOne=1;
}
CurrentShape=CreateNewShape();
x=DefaultX;y=DefaultY;Status=0;
NumOfLev[temp]++;
TotalMark+=5*temp;
show(x,y,CurrentShape,Status);
counter=0;
if(!Possible(x,y,CurrentShape,Status))
{
getch();
end();
}
if(CEr>=30)
{
Speed=(Speed+1)%10;
CEr/=30;
}
if(temp)
ETimes++;
DrawScore();
return;
}

void ChageShape(int&x,int&y,int&CurrentShape,int&Status)
{
if(Possible(x,y,CurrentShape,(Status+1)%4))
Status=(Status+1)%4;
show(x,y,CurrentShape,Status);
}

void DrawFace()
{
int temp;
setcolor(15);
line(351,59,519,59);
line(351,60,518,60);
line(351,59,351,156);
line(352,59,352,155);
setcolor(7);
line(518,61,518,154);
line(519,60,519,154);
line(353,155,519,155);
line(352,156,519,156);
setcolor(8);
for(int i=61;i<155;i++)
line(353,i,517,i);
setcolor(7);
line(427,106,512,106);
line(428,107,511,107);
line(427,106,427,147);
line(428,106,428,146);
setcolor(15);
line(512,106,512,147);
line(511,107,511,146);
line(428,146,511,146);
line(427,147,512,147);
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
setcolor(14);
outtextxy(357,119,"Erasered");
outtextxy(370,130,"Level:");
setcolor(15);
line(352,167,519,167);
line(352,168,518,168);
line(352,169,352,407);
line(353,169,353,406);
setcolor(7);
line(519,167,519,407);
line(518,168,518,406);
line(352,407,519,407);
line(353,406,519,406);
line(524,55,89,55); //outter border 1st
line(524,55,524,411);
line(89,411,524,411);
line(89,55,89,411);
line(524,56,89,56); //outter border 2nd
line(525,55,525,411);
line(89,410,524,410);
line(88,55,88,411);
setfillstyle(8,7);
bar(94,59,336,406);
//setfillstyle(1,3);
//bar(128,78,296,386);
for(i=0;i<8;i++)
DrawDigital(357+i*20,65,0);
for(i=0;i<4;i++)
DrawDigital(431+i*20,111,0);
setfillstyle(1,8);
setcolor(12);
for(i=0;i<4;i++)
{
temp=i+'1';
outtextxy(364,177+14*i,(char*)&temp);
bar(378,177+i*14,508,184+i*14);
}
setcolor(14);
outtextxy(366,250,"Next Shape");
setcolor(10);
outtextxy(366,294,"Current");
outtextxy(382,309,"Level");
setcolor(6);
outtextxy(366,334,"Message:");
bar(362,348,509,398);
DrawDigital(466,293,Speed);
}

void WannaQuit()
{
int choise=0,temp;
setfillstyle(1,8);
bar(362,348,509,398);
setcolor(15);
outtextxy(378,355,"Are you sure to");
outtextxy(368,368,"quit game?");
outtextxy(410,388,"Yes");
outtextxy(470,388,"No");
setcolor(14);
circle(399,392,4);
while((temp=bioskey(0))!=7181)
{
if(temp==19200)
{
setcolor(8);
circle(459,392,4);
choise=0;
setcolor(14);
circle(399,392,4);
}
if(temp==19712)
{
setcolor(8);
circle(399,392,4);
choise=1;
setcolor(14);
circle(459,392,4);
}
}
if(choise==0)
{
end();
}
setfillstyle(1,8);
bar(362,348,509,398);
return;
}

void main()
{
ShowTitle();
unsigned c;
int CurrentShape,x=6,y=0,Status=0;
oldhandler=getvect(INTR);
setvect(INTR,handler);
randomize();
NewShape[0]=rand()%7;
DrawFace();
CurrentShape=CreateNewShape();
show(x,y,CurrentShape,Status);
while(1)
{
if(kbhit())
{
c=getch();
if(c==0)
c=getch();
switch(c)
{
case 's' :Speed=(Speed+1)%10;DrawDigital(466,293,Speed);break;
case DOWN :GoDown(x,y,CurrentShape,Status);break;
case LEFT :GoLeft(x,y,CurrentShape,Status);break;
case RIGHT :GoRight(x,y,CurrentShape,Status);break;
case CHANGE :ChageShape(x,y,CurrentShape,Status);break;
case ESC :WannaQuit();
}
}
if((counter%=TimeDelay[Speed])==(TimeDelay[Speed]-1))
{
GoDown(x,y,CurrentShape,Status);
counter=0;
}
}
}

[p align=center]一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@localhost:1521:orcl";

//orcl为你的数据库的SID

String user="scott";

String password="tiger";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement

(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>





阅读全文

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();

String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1";

//testDB为你的数据库名

Connection conn= DriverManager.getConnection(url);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>



一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@localhost:1521:orcl";

//orcl为你的数据库的SID

String user="scott";

String password="tiger";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement

(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>







二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";

//pubs为你的数据库的

String user="sa";

String password="";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>






三、jsp连接DB2数据库
testdb2.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();

String url="jdbc:db2://localhost:5000/sample";

//sample为你的数据库名

String user="admin";

String password="";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>







四、jsp连接Informix数据库
testinformix.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();

String url = "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;

user=testuser;password=testpassword";

//testDB为你的数据库名

Connection conn= DriverManager.getConnection(url);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>







五、jsp连接Sybase数据库
testmysql.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();

String url =" jdbc:sybase:Tds:localhost:5007/tsdata";

//tsdata为你的数据库名

Properties sysProps = System.getProperties();

SysProps.put("user","userid");

SysProps.put("password","user_password");

Connection conn= DriverManager.getConnection(url, SysProps);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>







六、jsp连接MySQL数据库
testmysql.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();

String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1";

//testDB为你的数据库名

Connection conn= DriverManager.getConnection(url);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>







七、jsp连接PostgreSQL数据库
testmysql.jsp如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>





<%Class.forName("org.postgresql.Driver").newInstance();

String url ="jdbc:postgresql://localhost/soft";

//soft为你的数据库名

String user="myuser";

String password="mypassword";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from test";

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>

您的第一个字段内容为:<%=rs.getString(1)%>

您的第二个字段内容为:<%=rs.getString(2)%>

<%}%>

<%out.print("数据库操作成功,恭喜你");%>

<%rs.close();

stmt.close();

conn.close();

%>





 八、jsp连接Access数据库


<%@page import="java.sql.*"
import ="java.util.*"
import ="java.io.*"
import="java.text.*"
contentType="text/html; charset=gb2312"
buffer="20kb"
%><%! int all,i,m_count;
String odbcQuery;
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String username,title,content,work,email,url,time,date;
String datetime;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch (ClassNotFoundException e)
{ out.print ("驱动程序不存在");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:db1");
odbcstmt = odbcconn.createStatement();
odbcQuery="Select * From book where datetime>2001-4-26 Order By datetime DESC";
odbcrs=odbcstmt.executeQuery(odbcQuery);
int i=0;
while (i<130) odbcrs.next();
while (odbcrs.next())
{
//*/////////////////////////显示数据库的内容用于调试程序是用//
int ii;
try{
try{
for (ii=1;;ii++)
out.print ("<br>Cloumn "+ii+" is: "+odbcrs.getString(ii));
}catch (NullPointerException e) {
out.print ("有空的指针");
}
}catch (SQLException e){
}
}
odbcrs.close();
odbcstmt.close();
odbcconn.close();
}catch (SQLException e)
{ out.print (e);
}
%>

本人前些天感冒了,到积水潭去看病偶尔看到他们的计算机系统用的是csp,以前听说过,现在终于找到了相关文章,好象也就是asp$php$jsp  一样的,但不同在他原理上可能导致它要快一些:
这个CSP不是CSP(Commercial Service Provider)即商业服务提供商,CSP不是Client/Server Program,也不是Chinese Super Programer,更不是CS Player,那么什么是CSP呢?在说明什么是CSP之前,先说明什么是“骇人听闻”,一说到“骇人听闻”,你可能就想到了是什么坏事吧,其实不一定,应该说就是前所未闻的事说严重一点就是“骇人听闻”了。在每一本关于asp, php, jsp, asp.net书上都告诉你,做网站不可能使用C++,真的吗?这个CSP偏偏就是C++ Server Pages的简称,和asp、jsp类似,属于一种Web应用扩充的脚本语言,可以用来编写网页代码。其对应的文件名是".CSP"。

(下面的文字部分来源于《CSP开发者手册》)

   CSP使用C++语言作为脚本的语言,和asp、jsp、php等不同的是,CSP不是解释执行的脚本,而是真正编译后执行的脚本。因此和其它脚本语言相比较,CSP执行速度和效率都要高一些,由于使用标准的动态连接思想,因此CSP可以被用户非常方便的扩充,对于复杂的或者保密要求高的应用,完全可以通过CSP扩展来完全隐藏实现的细节。
   CSP是经过编译执行的代码,用户需要作的是维护CSP的源码,而编译过程是由CSP内置的编译器来完成,称为现场编译(Field Compile)。CSP脚本的缺点是需要保存编译后的二进制代码,以提高再次执行的速度,因此CSP作的网站需要比其它脚本语言占用更多的磁盘空间。
   CSP实际上就是一种CGISpawn,关于CGISpawn的详细介绍可以参考MSDN的相关内容。

---------------------------------------------------------------------------

antigloss 插嘴说:
   再往下看之前,请您先了解一下如何配置 CSP 服务器。先安装 IIS(5.0 以上版本)或者 Apache(1.3.x 以上版本),然后安装 C++ Server Pages (CSP) Engine。至此,一台 CSP 服务器就配置成功了。

CSP Engine 下载地址:http://stdcpp.cn/html/8/17/0512/98.htm

---------------------------------------------------------------------------

   好了,回到主题上来。现在的首要任务是:如何使用CSP写页面呢?

   在场的各位会写ASP页面的有多少人呢?

   嗯,好,还挺多的嘛~~~~那我就继续了。

   大家都知道在ASP中写代码是要在 <% 与 %> 之间的部分写的,CSP也是如此。不过少许的差别还是有的。这个差别体现在:

   1.CSP对大小写敏感。因为这是C++啊,会C/C++语言的人都知道。

   2.在CSP的体系中,有一个特殊的代码段标志:<%! %>。

   仔细看,没错,就是写在 <%! %> 之间,在第一个%后面有一个!,这是作为全局变量和自定义函数代码块的标志,声明结构体也要在这里。在一个CSP页面中,所有的自定义函数的实现一定要放在<%! %>之间。而其它的代码则可以像ASP代码一样在页面的各处随意穿插安放。只要在<% %>中就行。

在了解这些细节之后,我们就可以开始写页面了。

我先给出一个简单的例子,然后再仔细给大家分析一下:


<%
   int i=0;
   char s[50];
   for ( i = 0; i < 10; ++i )
   {
       sprintf(s,"
%d : 欢迎来到CSP的世界!",i);
       Response.Write(s);
   }
%>

It is over!




访问这个CSP页面,你会得到一个显示如下内容的页面:

0 : 欢迎来到CSP的世界!
1 : 欢迎来到CSP的世界!
2 : 欢迎来到CSP的世界!
3 : 欢迎来到CSP的世界!
4 : 欢迎来到CSP的世界!
5 : 欢迎来到CSP的世界!
6 : 欢迎来到CSP的世界!
7 : 欢迎来到CSP的世界!
8 : 欢迎来到CSP的世界!
9 : 欢迎来到CSP的世界!

It is over!

   大家都学过C语言吧,看看上面的语句(不是吧?你C语言挂了?!)。变量声明与循环我就不多讲了,有两句得说一下:

   1.sprintf(s,"
%d : 欢迎来到CSP的世界!",i);

这句是把我们要显示的字符串复制到缓冲区 s 中去。实现这个功能的函数是:sprintf 。是不是觉得和C语言中的 printf 很像呢?没错,它实际上与printf就是同一族的(其它的还有wsprintf , fprintf 等等。这里先不做讨论。)printf的任务是把字符串输出到屏幕,而sprintf则是把字符串输出到内存中的一块区域,以供别的代码使用。它的的用法和printf类似,都是要通过%d等一些占位符来实现格式化输出。当页面执行完这一句之后,就把“0 : 欢迎来到CSP的世界!”这样的字符串放到数组 s 中了。

   2.Response.Write(s);

这一句对于经常进行ASP编程的同学应该相当熟悉吧。它的主要任务就是把刚才我们得到的字符串从内存中取出来,再写入服务器的响应,进而显示在你的浏览器上。如果你已经能够正确地显示出结果,那么恭喜你,你已经入门了!

下面介绍一下在CSP中可以使用的数据类型以及可以直接使用的基本类,还有很实用的功能类。

char
wchar_t
std::string
std::wstring
int
unsigned int
__int64
unsigned __int64
long
unsigned long
short
unsigned short
char
unsigned char
bool
double
float

以上类型支持 const 关键字。

以下是基本类:
CSPDate
CSPTime
CSPDateTime
CSPVariant
CSPBuffer
CSPDate
CSPException
CSPFile
CSPString
CSPVarArray
CSPWString

这三个类是对数据库操作的封装:
CSPODBCConnection
CSPODBCField
CSPODBCRecordset

以下是功能类:
CSPImpersonation
CSPMail
CSPMime
CSPMimePart
CSPTemplate
CSPThread
CSPThreadLock
CSPThreadLockHandler
CSPTimer
CSPTxContext
CSPTxObject

下面这几个是模板类(这确实让我很惊奇):
CSPPool
CSPPool::ObjectPtr
CSPArray
CSPPtr

写了这么多,好累啊。也不知道有人看没???对于那个为什么会有关于<%! %>的规定的原因,我改天会仔细阐述的。但愿这个“改天”不会太长,呵呵。

2005年3月24日         晴          于 北京交通大学16号宿舍楼

现在读大二下学期了,从大一下学期开始学习java,旁听java课程,到现在正式地上了必修的课程,一年多以来,感觉上对J2SE大概有了一个理解。不敢说钻研得很深刻,但是也能解决许多问题了。

一年来,在学习的过程中,遇到了许多问题和困难,解决问题之余也渐渐积累了不少经验。现在,同学之间讨论或者许多询问的问题中,我觉得许多都非常有代表性。从初学者的角度看,我觉得我可以提供一些经验,使现在的初学者可以少走一些弯路,或者在郁闷的时候或者坚持不下去的时候,能够看到一点希望。

这学期学校开java的必修了,很多同学在选择课本的时候,都问道我这样的问题:怎样的书合适?真的不好回答这个问题,其实要看看你的底子了。如果对在学习java之前你对Cpp很熟悉的话,那么你可以直接选择类似于《Thinking in java》这样的书籍,虽然很多人都说TIJ不太适合初学者,不过有面向对象的基础的话,这本书还是很好理解的。如果你是一个真正的初学者,那还是先看一些简单的吧,比如《The Java Tutorial》,如果你连C语言都没有碰过,那么我建议你先学一下C语言吧,因为你连基本的语法都不懂,不要太急躁了,你对java的追求只能体现出你的浮躁。

说到浮躁,这也是一个很值得我们深思的问题。说实话,我觉得我自己也有这样的倾向,不仅是我,估计大多数的人都有这个毛病。总是喜欢讨论什么语言最好,什么语言功能强大。这种讨论倒没有错,不过真正学习的时候,浮躁会使你失去很多。在学习过程中,我很努力地使自己保持心理的平静,从基础学起,甚至是一些看上去完全没有必要的基础。我可以很坦诚地说,《Thinking in java》原版第三版的前15章我至少仔细看过两次以上,书里面多处有详细的读书笔记。里面的代码60%以上的运行过,包括可能你认为很简单的switch语句,包括一些简单的类的继承。对老师上课说的代码,起码也是读过2次以上。这一年来,我读过的Java代码超过两万行,但是最复杂的每一个程序也只是一些套接字网络编程的程序,而大多数的都是代码的优化和程序的设计思想。正因为有这些经历,我才敢在这里写下这段话,才敢说我有一个勉强扎实的基础。

。。。(待续)

宿舍要熄灯了,明天继续写。
 看了张孝祥地java基础篇,然后看了孙鑫--Java无了事,呵呵,初步觉得还成,推荐观看临摹,呵呵。

PHP比ASP优秀的七个理由
ASP是微软公司实现动态网页的一种技术。ASP支持一些脚本语言,主要以VBScripp为主。与ASP相比较,你还可以选择另一中开放源代码编程语言——PHP,PHP可以运行在多种操作系统下,其中包括Linux和windows。

虽然ASP是一种不错的技术,但从长远考虑我相信PHP在将来的技术领域里会有不凡的表现。

我认为有七个理由可以说明PHP比ASP更优秀:

1、速度、速度、速度
当我第一次运行PHP脚本程序时,我不禁对自己说:“太快了”,当时我是在仪态166MHZ的机器上运行我的程序的,但运行的速度仍然很快。
ASP是永远也不会象PHP这样快的,因为ASP是建立在COM体系结构之上的。当用VBScript写ASP脚本时,实际上实在使用COM的对象,当向用户浏览器发送信息时,它用的是Response对象的write方法,当它访问数据库和文件系统的时候,它用的是其他的COM对象。这些COM对象的使用使运行速度下降。
   在PHP代码中,所有的工作都运行在PHP的内存空间中,也就是说PHP不是基于COM对象的,所以的他的运行速度会快一些。
   下面是我们在MSSQL7 40次运行一个查询语句的执行时间统计:
   PHP Querying MSSQL7 时间(秒)
   用 MSSQL extension 01.88
用 ODBC extension 09.54
用 ODBC via COM (ADO) 17.28
用OLEDB via COM 06.19
当我们使用PHP.ODBC,访问数据库用了9.54秒,而用COM接口去连接数据库需要比PHP所用的时间高80%。
   OLEDB是微软的一种高速访问数据库的技术,他比ODBC要快。但当我们所PHP和OLEDB的效率实验时,结果是PHP的整体性能比OLEDB高200%,如此的出一个结论,如果不采用COM可以获得较快的执行速度。
   当然PHP的执行速度还不是最快的,但我们才刚刚开始起步,我们会逐步的完善他,而且PHP是一种开放源代码编程语言,世界上许多程序员在不断的完善他的技术,相信他一定会比非开放源代码系统获得更高的执行速度的。

2、高级内存管理
   在IIS4下,一个ASP脚本header.asp,如果被20个页面所包含,那么运行的时候,在内存当中会保留这20个header.asp的编译副本,IIS5解决了这个问题,但只有windows2000才支持IIS5,由于这种IIS5的不能向下兼容的原因,许多服务器仍然要使用IIS4下的低级的内存管理。
   而在PHP中,不会存在这种问题,只有当require时,才会调用某个include文件。

3、没有后顾之忧
   我非常憎恨的一件事情就是会买到一件不放心的产品,比如当你买了一辆汽车,但由于发动机是坏的,你需要更换他;当你买了一栋房子的时候,你要去修补漏雨的屋顶。
   那么ASP旧乡这些产品一样,当你买了ASP之后,如果你需要加密技术,你就要买ASPEncrypt;当你需要Email管理时,你就要买ServerObjets Qmail;当你需要文件上传时,你还要买Artisans SA-FileUp.

4、MySQL使PHP更精彩
   PHP与MySQL的组合既简单又精彩。PHP有许多管理和维护MySQL的工具,对MySQk的支持是最全面的。许多有用的函数如mysql_insert_id和mysql_affected_rows等,其他的数据库则没有。
   ASP和PHP都是中型网站的较理想的解决方案,但PHP与MySQL的紧密结合使PHP更加优越。
   MySQL的虚度比Microsoft Access速度快,Mssql和Oracle速度比MySQL要快,可是费用较高。
  
5、Java和C++的变成风格
   这个优点只是一个看法。 
   我知道你不会相信一个Visual Basic程序员会因为PHP有Java和C++的编程风格而转向使用PHP,但你会相信有许多人还是喜欢Java和C++的,PHP是一种具有这两种语言的编程风格的较容易学习的语言。
   PHP支持结构化编程,在VB因为他的继承性使用类还是较少的。而PHP的象Java和C++一样的继承性使一个大型的程序中到处都充满了类的影子。
 
6、Bug的处理。
   你是否曾经要求Microsoft修改ASP的一些Bug呢?如果你不是一个象Boeing一样的组织,你无法获得迅速而恰当的修改,把么当你遇到Bug而停止工作时,如果这个Bug不修改,你将无法继续你的工作的。
   PHP,当你发现Bug时,你可以修改他,如果你没有专家的水平,你可以请专家修改,并且你的修改会得到开放代码组织的接受和认可。
 
7、移植性
   Microsoft经常修改ASP,下一版本叫ASP+,现在已经开始测试。我相信他们会修改许多我曾经提到过的问题。但也无庸质疑的,Microsoft会将你限制在他们的产品范围之内的。
   我曾经是一个苹果机的程序员,当windows95问世后,我开始转变,但许多原来的代码都无法在windows95下运行,这些代码现在被放在一边,我非常的遗憾。所以我不希望在windows下再出现这样的悲剧。
   不要忘记Novell曾经也象Microsoft的网络操作系统一样热及一时,但现在已经没有许多人用了,那么Microsoft也会这样的。
   我找到了PHP,我仍旧在windows下工作,但我知道PHP代码可以运行在Solaris、Linux和许多其他的操作系统中,我的心里感到安慰。

简单的类定义

class SimpleClass
{
   // 成员声明
   public $var = 'a default value';

   // 方法声明
   public function displayVar() {
       echo $this->var;
   }
}
?>  
new
要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。(很像java,呵呵)
创建一个实例e

$instance = new SimpleClass()
?>  
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

对象赋值

$assigned   =  $instance;
$reference  =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>  

上例将输出:

NULL
NULL
object(SimpleClass)#1 (1) {
  ["var"]=>
    string(30) "$assigned will have this value"
}

extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。

例子 19-4. 简单的类继承

class ExtendClass extends SimpleClass
{
   // Redefine the parent method
   function displayVar()
   {
       echo "Extending class\n";
       parent::displayVar();
   }
}

$extended = new ExtendClass();
$extended->displayVar();
?>  

上例将输出:

Extending class
a default value


看后觉得如果有Java基础是不是感觉这个问题很是简单了呢。。。。呵呵

ajax可以说的上当今很火的技术啦.
在村子里经常看到有人问xajax的技术,说实话,我觉得那东西太麻烦,用起来太费事.

ajax本身实现的机制不是很难,难的应该是在后期的javascript处理返回的responseText,responseXml

ajax本身的操作过程无外是:

1.构建一个xmlHTTP对像
2.通过xmlHTTP的同步或是异步方式发送数据(大部分都是异步方式)
3.如果是异步方式检查xmlHttp的状态变化
4.当状态变到readyState==4,而且status==200说明发送数据成功
5.这时候再通过javascript处理xmlHTTP的responseText或是responseXml(这两者是同时存在的)

下面来实现这个过程
1.构建一个xmlHTTP的对像


CODE:function createRequest(){
       if(typeof XMLHttpRequest!="undefined")        {
               return new XMLHttpRequest();
       }else if(typeof ActiveXObject!="undefined"){
               var xmlHttp_ver  = false;
               var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
               if(!xmlHttp_ver){
                       for(var i=0;i<xmlHttp_vers.length;i++){
                               try{
                                       new ActiveXObject(xmlHttp_vers[i]);
                                       xmlHttp_ver = xmlHttp_vers[i];
                                       break;
                               }catch(oError){;}
                       }
               }
               if(xmlHttp_ver){
                       return new ActiveXObject(xmlHttp_ver);
               }else{
                       throw new Error("Could not create XML HTTP Request.");
               }
       }else{
               throw new Error("Your browser doesn't support an XML HTTP Request.");
       }
}
注意:xmlHttp_vers 应该从版本高的往版本低的写,这样建立对像的数据调用的是你机子上安装过的最高版本的MSXML2.XmlHttp


第二步发送数据
这里主要是调用xmlHttp的open方法和send方法来处理
xmlHTTP的方法可以到www.xmlhttp.cn查看(我以前发过一个chm的,但因为版权被村长删除啦,谁要是想要,回信,我发一下)
下面是用post的方法发送数据


CODE:var xmlHttp;
xmlHttp = createRequest();
function sendPostRequest()
{    
       var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
       var url = "show.php";//要发送到的URL
       var queryString = "shownum" + "=" + shownum;
       //向服务端发送请求
       xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
       xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
       xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
       xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
第三步

当状态改变时会调用onreadystatechange属性指定的回调函数showData,来来检查状态变化

xmlHTTP.readyState 和xmlHTTP.status 可以去查手册,看一下就知道


CODE:function showData()
{
       var msg=document.getElementById("status");
                    //第4步
       if(xmlHttp.readyState==4)
       {
               if(xmlHttp.status==200)
               {
                //只有当readyState为4并且status为200时,才表示符合要求
                                                              //下面这一句话,就相当于上面说的第5步,处理返回的结果
                       msg.innerHTML =  xmlHttp.responseText;
               }
       }
       else
       {
               switch(xmlHttp.readyState)
               {
               case 0:
                       msg.innerHTML="未初始化...";
                       break;
               case 1:
                       msg.innerHTML="加载中...";
                       break;
               case 2:
                       msg.innerHTML="连接完成...";
                       break;
               case 3:
                       msg.innerHTML="交换数据...";
                       break;
               default:
                       break;
               }
       }
}
到这里就一次xmlhttp发送异步调用数据也就算完成啦
完整的代码是


CODE:<html>
<head>
<title>
ajax
</title>
<script language="javascript">
function createRequest(){
       if(typeof XMLHttpRequest!="undefined")        {
               return new XMLHttpRequest();
       }else if(typeof ActiveXObject!="undefined"){
               var xmlHttp_ver  = false;
               var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
               if(!xmlHttp_ver){
                       for(var i=0;i<xmlHttp_vers.length;i++){
                               try{
                                       new ActiveXObject(xmlHttp_vers[i]);
                                       xmlHttp_ver = xmlHttp_vers[i];
                                       break;
                               }catch(oError){;}
                       }
               }
               if(xmlHttp_ver){
                       return new ActiveXObject(xmlHttp_ver);
               }else{
                       throw new Error("Could not create XML HTTP Request.");
               }
       }else{
               throw new Error("Your browser doesn't support an XML HTTP Request.");
       }
}

var xmlHttp;

function sendPostRequest()
{    
                    xmlHttp = createRequest();
       var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
       var url = "show.php";//要发送到的URL
       var queryString = "shownum" + "=" + shownum;
       //向服务端发送请求
       xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
       xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
       xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
       xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
function showData()
{
       var msg=document.getElementById("status");
                    //第4步
       if(xmlHttp.readyState==4)
       {
               if(xmlHttp.status==200)
               {
                //只有当readyState为4并且status为200时,才表示符合要求
                                                              //下面这一句话,就相当于上面说的第5步,处理返回的结果
                       msg.innerHTML =  xmlHttp.responseText;
               }
       }
       else
       {
               switch(xmlHttp.readyState)
               {
               case 0:
                       msg.innerHTML="未初始化...";
                       break;
               case 1:
                       msg.innerHTML="加载中...";
                       break;
               case 2:
                       msg.innerHTML="连接完成...";
                       break;
               case 3:
                       msg.innerHTML="交换数据...";
                       break;
               default:
                       break;
               }
       }
}

</script>
</head>
<body>
<div>要发送的数据:<input name="shownum" id="shownum" type="text"><input type="button" name="search" value="发送" onClick="sendPostRequest()"></div>
<div id="status"></div>
</body>
</html>
同一目录下要有一个show.php
内容为


CODE:<?php
$shownum = $_POST["shownum"];
echo $shownum;
?>
3D到底有什么好,感觉就是好玩,呵呵。。。。
Linux:每一个虚拟桌面都是一个独立的立体
http://desk3d.sourceforge.net/screenshots.php

Apple公司:把每一个虚拟桌面贴在四方体的每一个面上
http://www.apple.com/macosx/features/fastuserswitching/

SUN公司:每一个窗口都是一个独立的立体
http://wwws.sun.com/software/looking_glass/details.html

--------------------------------------------------------------------------------


3d桌面,有用吗?我觉得很无聊阿
老师是这样回答的:

quote:
--------------------------------------------------------------------------------
借用法拉第的名言回答你的问题:小伙子,请问新生的婴儿有什么用呢?
关于法拉第的那句名言历史老师或物理老师都会提到:
法拉第发现电磁感应现象后,发明了世界上第一台最原始的感应发电机。这年圣诞节他为朋友们进行了表演,只见他转动摇柄,铜盘旋转起来,电流计的指针开始偏转,铜盘转得越快,电流表指针的读数就越大,在场的人都交口称誉,惟独一位贵妇人不以为然,她以不屑一顾的口吻发问:“请问先生,你发明的这玩艺儿有什么用?”法拉第不气不恼,反问道:“夫人,请问新生的婴儿有什么用呢?”
是的,一项刚被人发现的科学原理正像刚出生的婴儿一样,有谁能预料它们的未来呢?
--------------------------------------------------------------------------------

我所知sun的3d桌面用是到java+OpenGL引擎来做,是真正的3D。并且直接接手桌面系统与显卡3d显示的操作,从原理上来说是会比现在的2d桌面更加快速的。因为现在的2d系统只是把数据传给显卡并没用到3d显卡的功能的,是一种最大的浪费。其实3d桌面系统并不是像3d游戏一样占用系统资源的。因为3D运算及显示部分是交给3D桌面引擎跟显卡GPU来直接处理的,所以占资源会很少的!这种情况的理想状态就像你现在用打印机打印一样有效而少占资源!!!

3D桌面实用化还远着呢!一是大家需要时间习惯,而且现在鼠标还是平面上操作的。
本人体验过SUse10的企业版,呵呵。。。。本人还有张solaris10g的企业盘可惜没有时间安装。。。。玩玩应该很好的。


 你说软件打败了硬件了还是硬件打败了软件了呢,理论上应该是硬件打败软件,应为软件要在硬件上跑,但是现目前的事实是软件打败了硬件,你的硬件得适合我这个软件,尤其是像windows等的操作系统,这个神话让比尔盖茨创造了。
 你说开源于商业谁打败了,是不是商业的就很好了呢?常规说应该是商业能打败开源,但是现在地开源是否好像在说,呵呵,我们的技术你还得学者点,微软是商业吧,他也得学习linux系统的一些东西。可惜他又不开源,广进不出。
 呵呵,世界就是这么有趣,都在想向对方证明点什么,那就是他有存在地价值,而且他会很NB。。。。这才是他的核心。。
什么是黑客?

Jargon File中对“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的。(态度和技术)

长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它作了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。

黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的哪个共享文化传统之上。 阅读全文
分页: 266/272 第一页 上页 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 下页 最后页 [ 显示模式: 摘要 | 列表 ]