第337章 網(wǎng)站出爐
不得不說,張達(dá)的思路比較跳脫,看到這些照片,他居然想到做一個(gè)網(wǎng)站對(duì)這些照片進(jìn)行打分,雖然他不懂技術(shù),但是卻直覺上認(rèn)為這是可行的。
林鴻思考了一下這件事的意義,實(shí)際上,投票的過程可以算是一種算法,通過大范圍的統(tǒng)計(jì),將優(yōu)質(zhì)的結(jié)果給篩選出來,不說這個(gè)算法的外在表現(xiàn),其背后所隱含的意義卻非常有意思。
這實(shí)際上也是一種對(duì)集體智慧的駕馭過程,通過集體的智慧尋找最佳答案。
林鴻最終同意了下來,他將這件事當(dāng)成一次實(shí)驗(yàn),很想看看最終是否真的能夠像預(yù)料的那樣,找出最優(yōu)質(zhì)的結(jié)果。
林鴻說道:“可是可以做,只是不知道會(huì)有多少人參與到這個(gè)過程中來。”
“這個(gè)你放心,我負(fù)責(zé)來宣傳!”李奇自告奮勇地說道。
他對(duì)自己的交際能力還是很自信的,基本上這么兩天下來,班級(jí)里面的所有男生他都認(rèn)識(shí)了,并且在同一層的其他班級(jí)的男生他也認(rèn)識(shí)了不少。
張達(dá)建議道:“我們最好是能夠趕在軍訓(xùn)之前將其做出來,不然就要等三個(gè)星期之后了。”
“嗯,應(yīng)該費(fèi)不了多少時(shí)間。”
說做就做,林鴻立刻開始動(dòng)手。
他打算直接使用自己的筆記本當(dāng)服務(wù)器,在上面建立一個(gè)這樣的網(wǎng)站。
其他三人根本不懂這方面的技術(shù),只能站在林鴻背后圍觀。
制作網(wǎng)站在這個(gè)時(shí)期,也是一種非常高端的工作,一般人連網(wǎng)站的基本運(yùn)行原理都不知道,更別說制作網(wǎng)頁了。
林鴻有意給他們普及這方面的知識(shí),開拓眼界,所以他一邊開始部署服務(wù)器和開發(fā)環(huán)境,一邊給他們解說:
“我現(xiàn)在做的這個(gè)網(wǎng)站,是需要通過瀏覽器訪問的,因?yàn)檫@樣更直觀,還可以直接瀏覽圖片。瀏覽器是一種能夠訪問萬維網(wǎng)服務(wù)器的軟件,它能夠從服務(wù)器中讀取特定格式的文件,然后以另外一種格式將其展示出來。”
林鴻停頓了一下,覺得這樣可能有些抽象,打了個(gè)比方:“它就好像是一個(gè)翻譯,將網(wǎng)頁編程語言翻譯成為我們能夠看懂的文本語言。瀏覽器和服務(wù)器之間所使用的協(xié)議是一種叫做http的協(xié)議,全稱就是超文本傳送協(xié)議,它允許將超文本標(biāo)記語言,也就是使用html編寫的文檔從l語言,并且編寫了一個(gè)簡單的“helloond"程序給他們示范。
這種語言非常簡單,并且很多標(biāo)簽都是成對(duì)出現(xiàn)的,所以吳東他們都聽懂了。
“利用html語言,我們可以做出內(nèi)容非常豐富的網(wǎng)頁。”林鴻繼續(xù)說道,“但是這些網(wǎng)頁都是靜態(tài)的,如果想要讓其中的內(nèi)容發(fā)生變化,例如張達(dá)所說的,給他們打分,然后實(shí)時(shí)顯示出來,這就涉及到動(dòng)態(tài)語言方面的內(nèi)容了,并且還需要保存數(shù)據(jù),利用到數(shù)據(jù)庫。”
林鴻也不指望一次性就直接將他們?nèi)拷潭皇亲屗麄冇幸粋€(gè)比較直觀的認(rèn)識(shí),如果以后自己有興趣,可以進(jìn)一步進(jìn)行研究。所以他的講解基本上都是一遍過,不管他們能聽懂還是沒聽懂。
他打算使用的動(dòng)態(tài)編程語言還是他比較擅長的c語言,通過一種“通用網(wǎng)關(guān)接口(cgi)”的技術(shù)來和用戶進(jìn)行交互,記錄用戶對(duì)照片的評(píng)分。
cgi語言是由美國國家超級(jí)電腦應(yīng)用中心開發(fā)的一種技術(shù),1993年就出現(xiàn)了,后來很快便在互聯(lián)網(wǎng)上流行起來,成為比較主流的動(dòng)態(tài)eb編程技術(shù),它的編程語言可以有多種,比較常見的有per語言,當(dāng)然其他諸如unix的shell命令,pythonc以及c++都可以用來開發(fā)cgi程序。
林鴻對(duì)這一塊非常熟悉,所以他很快就將服務(wù)器的環(huán)境給部署完畢,將cgi的模塊掛載上去,然后編寫了一個(gè)簡單的加法交互程序,讓用戶可以在上面輸入兩個(gè)數(shù)字然后點(diǎn)確認(rèn),就可以將其結(jié)果給計(jì)算出來。
“老二,你去你的電腦上訪問看看。”林鴻說道。
“這就可以了?怎么訪問?”張達(dá)還有些迷糊。
“直接輸入我的ip地址就行了。”
張達(dá)將自己的電腦打開,啟動(dòng)瀏覽器程序,然后在地址欄上輸入了林鴻的ip地址,確認(rèn)之后,他看到瀏覽器中出現(xiàn)了一個(gè)加法計(jì)算器界面。
他嘗試著輸入了一個(gè)“1+2,,點(diǎn)擊“提交”之后,界面上立刻顯示了一個(gè)“3。
雖然只是一個(gè)簡單的功能,但是他們都覺得這非常神奇。
“老大,這個(gè)就是你剛剛編寫的程序?”吳東饒有興致地問道。
“是的,這只是最簡單的程序,但是也實(shí)現(xiàn)了動(dòng)態(tài)的交互,不單單只是靜態(tài)網(wǎng)頁了。”
剛剛那個(gè)過程,實(shí)際上張達(dá)提交之后,會(huì)在林鴻的這臺(tái)筆記本上運(yùn)行一個(gè)名為addcgi的程序,這是一個(gè)用c語言編寫之后再編譯過后的可執(zhí)行程序,功能就是接受從網(wǎng)頁前端提交過來的數(shù)據(jù),然后再進(jìn)行處理。
在此之前,他們?nèi)硕加X得網(wǎng)站制作和編程都非常簡單,可是今天看到林鴻這樣示范一下,這塊神秘面紗終于被揭開,他們發(fā)現(xiàn)也不過如此。
當(dāng)然,這個(gè)過程如果不是親眼去看,他們可能還需要很長一段時(shí)間才能夠了解到這其中的基本原理。這就是有師父或者導(dǎo)師的好處所在了,可以節(jié)省自己很多時(shí)間和精力,少走很多彎路。
接下來便是設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),林鴻所使用的數(shù)據(jù)庫是mysql雖然創(chuàng)辦這個(gè)數(shù)據(jù)軟件的公司去年才開始創(chuàng)辦,但是他們發(fā)布出來的這個(gè)數(shù)據(jù)庫卻是開源的,并且非常好用,很快就在網(wǎng)絡(luò)上流行起來。
由于功能比較簡單,涉及到的數(shù)據(jù)保存只有評(píng)分?jǐn)?shù)值,所以林鴻只設(shè)計(jì)了一張表,用來保存這個(gè)數(shù)值。至于以后的統(tǒng)計(jì)結(jié)果,則只要在這個(gè)基礎(chǔ)上進(jìn)行相應(yīng)的計(jì)算就行了。
雖然照片不少,但是林鴻靈活使用命令行直接自動(dòng)化處理,將這些照片進(jìn)行重命名并且導(dǎo)入到了數(shù)據(jù)庫中,姓名和簡單的文字內(nèi)容也一起導(dǎo)入。
僅僅花了不到半個(gè)小時(shí)的時(shí)間,林鴻就將這個(gè)創(chuàng)意的原型給實(shí)現(xiàn)出來了。
吳東他們?nèi)苏驹诹著櫟纳砗螅喼笨吹媚坎幌窘樱瑒傞_始的時(shí)候林鴻還解釋幾句,到了后面,由于設(shè)計(jì)到的知識(shí)點(diǎn)比較多,一兩句話也說不清楚,他便直接給省略了,這樣一來,他的速度便瞬間快了起來。
“已經(jīng)編好了。”林鴻調(diào)出一個(gè)圖形化的瀏覽器,直接輸入docalhost,一個(gè)比較簡單的界面便顯示了出來,上面顯示著一排排的照片,可以按照院系進(jìn)行分類瀏覽。
張達(dá):“牛逼啊!”
李奇:“好快啊!”
吳東:“我怎么才能夠達(dá)到這種程度呢?”
他們?nèi)藢?shí)在是無法形容自己此刻的心情,雖然他們并不懂技術(shù),可是也知道之前林鴻那一番行云流水般的表演,并不是隨便什么人都能夠做到的。
“可能還有些bug,你們來測(cè)試一下,等沒什么大問題之后,再對(duì)外公布。”林鴻將座位讓了出來。
程序員由于清楚自己所編寫的軟件一切細(xì)節(jié),所以他們自己測(cè)試的時(shí)候,往往都會(huì)按照自己的理解去使用軟件,這樣的結(jié)果就是沒有任何bug。
故而一般負(fù)責(zé)軟件測(cè)試的都是另外的人負(fù)責(zé),這樣才能找到一些意想不到的bug。
李奇立刻坐在了林鴻的位置上。
而張達(dá)則連忙跑到自己的電腦上,刷新了自己的頁面,也同樣看到了效果。
他點(diǎn)進(jìn)去第一章照片,然后看到了有評(píng)分的選項(xiàng),輸入評(píng)分之后,照片下面立刻出現(xiàn)了評(píng)分記錄。而排行榜那兒,這個(gè)同學(xué)立刻排在了第一位,這是因?yàn)闀簳r(shí)還只有她一個(gè)人有評(píng)分記錄。
他們開始對(duì)照片進(jìn)行打分。
吳東雖然沒有搶到位置,不過他也不在意,站在李奇身后不停喊著“5分、3分、4分……”
幾分鐘之后,張達(dá)提除了第一個(gè)bug:“我輸入的時(shí)候,不是數(shù)字也能夠接受,例如直接輸入a……”
林鴻點(diǎn)頭道:“的確是個(gè)問題,我忘記對(duì)輸入進(jìn)行判斷了,應(yīng)該限制一下,只能輸入1到10的數(shù)字,或者我干脆直接將其做為按鈕形式,不讓他們進(jìn)行輸入。”
接著,李奇也提出一個(gè)問題:“好像評(píng)分沒有限制啊?一個(gè)人可以一直重復(fù)評(píng)分,這樣一來很容易刷分?jǐn)?shù)吧?”
林鴻:“這個(gè)可以通過限制ip來實(shí)現(xiàn),同一個(gè)ip同一個(gè)照片最多允許四票好了。”
吳東:“我覺得排名算法還得進(jìn)行優(yōu)化一下,直接這樣相加再相除的算法有點(diǎn)過于簡單了,應(yīng)該將最高分和最低分過濾掉,排除這些異常數(shù)據(jù)的干擾。”
林鴻:“有道理。”
經(jīng)過他們不斷地提出各種問題,林鴻也持續(xù)地對(duì)這個(gè)程序進(jìn)行完善,剛開始有些簡單的原型,漸漸變得復(fù)雜起來。在這個(gè)過程中,他自己也受到了不啟發(fā)而產(chǎn)生了一些靈感,例如碰到分?jǐn)?shù)一樣的兩個(gè)人的時(shí)候,就會(huì)觸發(fā)另外一個(gè)機(jī)制,兩張照片會(huì)同時(shí)顯示,然后讓人判斷哪一張更好看,于是會(huì)加上一個(gè)很小的數(shù)值來進(jìn)行區(qū)分。
在四點(diǎn)多的時(shí)候,整個(gè)網(wǎng)站基本上都差不多了,他們都覺得再也找不到任何可以改進(jìn)的地方。
于是,李奇跑到學(xué)校商店買來紅紙以及筆墨,直接設(shè)計(jì)了一張宣傳海報(bào),然后在去食堂的必經(jīng)之地——宣傳欄上面貼了出來。
海報(bào)的標(biāo)題為“96界美女排行榜評(píng)比互動(dòng)進(jìn)行時(shí)!”,正文的內(nèi)容也寫得極具煽動(dòng)性,一時(shí)間引起了許多水木學(xué)生的圍觀。(未完待續(xù))
,