真是讓人嘆為觀止無言以對的設計…

One Meow Show’ & 21 Black Sheep這個網誌站台上,有一個讓人嘆為觀止的設計,那就是這個站台為了能夠讓網頁顯示時將站台的說明部分,動態出現隨機文字,所以設計者在MT裡頭,將站台的敘述(description)的部分,定義成下面這一大段JavaScript,定義了一個有二十五個項目的陣列,以亂數挑選。

<SCRIPT Language="JavaScript">
tips = new Array(25);
tips[0] = "Only the Paranoid Survive….";
tips[1] = "或許應該大概是;不過也許有可能。";
tips[2] = "藝術是深刻的叛逆。不好的藝術家高談造反,真正的藝術家在實踐中顛覆現狀。";
tips[3] = "La vie est belle. 生命,就該浪費在美好的事物上。";
tips[4] = "好吧,我承認,我就是一匹貓。雖然張楚一直唱著[孤獨的人是可恥的],但是我還是忝不知恥地在這兒,唱我的歌、做我的秀…";
tips[5] = "早知道、早知道…千金難買早知道,萬般無奈想不到。";
tips[6] = "妳這小豬八戒,少用妳那笨腦子打量我!";
tips[7] = "不調情,男人就真的跟狗差不了多少了;更何況,大多數男人在性方面的天賦也從來沒贏過狗。";
tips[8] = "春風不留我庭中 我心自有留春蹤";
tips[9] = "「理論永遠不能了解,它所不了解的,到底是個什麼樣的世界。」";
tips[10] = "「我堅決反對你的觀點,但我誓死捍衛你說這種話的權利」";
tips[11] = "所謂罪惡感不過就是中產階級的狗屁,藝術家是自創道德規範的。";
tips[12] = "煮豆燃豆萁,萁在釜下泣。我燼你熟了,正好辦教席!";
tips[13] = "答案永遠是在你身後延伸的那條路,只有問題才能指引你眼前的道路。";
tips[14] = "神說,你想要勇敢,所以就賜你阻礙;妳想變得聰明,必須解開難題。妳想快樂,於是必須自己停止悲哀。";
tips[15] = "我們可以接受高雅的裸體素材,但是拒絕不當的色情圖樣。";
tips[16] = "資訊要方便分享才能顯現出它的價值。";
tips[17] = "沒有被觸碰的身體,都很寂寞。";
tips[18] = "文字的功能,在於溝通之中隱去大部分的事實。";
tips[19] = "No good, and then try again.";
tips[20] = "哭不得,所以衹得笑也。";
tips[21] = "技術解決了,藝術就出來了。…順利的話。";
tips[22] = "「寂寞的時候,每個人都一樣」";
tips[23] = "Love is forever. Sometimes.";
tips[24] = ",「即使別人看起來覺得你身陷不幸處境,你也要無視於那片無情的處境跟自以為同情的眼光,如此一來,不幸便會無法寄宿在你身上,終而逐漸遠去。」";
index = Math.floor(Math.random() * tips.length);
document.write("<LEFT>" + tips[index] + "</LEFT><P>");
</SCRIPT>

好的,將敘述定義成這樣,用瀏覽器開啟網站瀏覽,似乎是沒有什麼問題,但是,這一大串的網站敘述的定義不僅只是會出現在HTML裡頭,在RSS等用來做網站新聞交換當中的檔案,也是使用同樣的定義。所以,如果你是用FeedDemon或SharpReader閱讀這個網誌的時候,在顯示這個網誌的站台敘述時,因為是直接從資料庫Select字串,也不會做JavaScript的解譯,所以顯示的就不會是隨機出現的文字,而是上面這一大串JavaScript的原始程式碼。

而如果你用FOF這些網頁介面的伺服器端RSS閱讀程式顯示這麼個網誌,效果更糟,因為程式的設計者絕對不會想到怎麼會有人把網誌敘述定義得這麼長,所以設計的資料庫欄位會塞不下,也就是說,在讀到這個網誌時,往往顯示了最前面定義的<SCRIPT Language="JavaScript">
,但是因為欄位不夠大,所以不會讀到最後面的</SCRIPT>終止javaScript,而造成顯示時整個爛掉…。

不知道該說什麼,無言以對。

18 thoughts on “真是讓人嘆為觀止無言以對的設計…

  1. 這需要這樣「稱讚」嗎?

    我也用了fof同步Meow的站。你說的那個敘述問題,並不會佔去使用者的頁面空間,因為只出現在alt=後面。而且就是整段碼沒顯示完罷了。

    這樣講,那躲同學的敘述也很長,也顯示不完,不是嗎?

  2. 先說明一下,我用的FOF後來自己改過,會將每個訂閱站台的敘述列出,而不是放在alt裡頭,所以應該將原來的內容修正成:「在我改過的FOF裡頭看是會爛掉的。」用Mozilla是沒問題啦,在IE裡頭則會是在JS開頭之後的所有部分都無法顯示,當然你也可以說把IE丟了就算了,但是在現在來說,還是會有人用IE。同學的敘述也很長又是另外一回事,問題在於這是一段JS,很長的敘述與塞一段程式碼在裡頭遇到的困擾是不一樣的,不能這樣類比。

    而我所理解的設計是這樣:要達到同樣的效果,如果你可以用更好的方案,為什麼要用這種會造成使用者瀏覽時麻煩的方案呢?這麼一串JS的目的就是為了在頁面上產生隨機文字,那麼可以將這段JS寫在MT模版裡頭,將站台敘述用明確的文字定義,畢竟這段JS是給瀏覽器看的,在RSS或其他的檔案當中,提供站台敘述的目的並不是為了呈現動態文字而使用。

    而其實要在頁面上出現動態文字,用JS在瀏覽器端作,我覺得不如在伺服器端做好就好了,有些瀏覽器對JS支援不佳,有些則是不支援JS,其實不如直接用PHP產生,據我所見,台灣部落格主機也提供PHP的支援。

  3. TWBlog的主機的確支援PHP沒錯,我就是用PHP的。

    但是會寫隨機句子這段程式碼的人不多,PHP還是要有入門門檻。

    順帶一提,我的網站也有用隨機句子,但不是用在站台描述裡頭。

  4. 所以呢?這是在稱讚人家不會「設計」,還是不懂或不會寫php或其他語言?

    就算不會寫,又怎麼樣呢?我也不會寫任何語言。但是會寫並不代表就有批評人家「設計」的正當性。很多bloggers都在嘗試與學習,從不會學到會,這本來是個值得鼓勵而非批評的過程。難道人家這樣嘗試,是很丟臉的事嗎?如果zonble這篇文章出於好意的建議,應該直接去跟當事人說,不是比較尊重人些嗎?

    隨機句子,我也改過,也是用JS。總之,人家自己高興就好。不是嗎?況且他沒有規定你要用你改過的FOF或什麼瀏覽器看呀。你這麼厲害,把FOF的敘述改成可以顯示JS或是瀏覽器也可以看不就得了。

  5. “設計是這樣:要達到同樣的效果,如果可以用更好的方案,為什麼要用這種會造成使用者瀏覽時麻煩的方案呢?”

    最簡單的回答是,我沒技術,完全不會PHP,就連這段JS都是copy來的,「連設計也不是。」

    貼段會造成問題的JS就是我最好的(同時也是造成使用者瀏覽時麻煩的方案)解決方案了。

    FOF程式的設計者沒想到有人會這麼搞,那是倒是他考慮不夠周詳。如果他看到這篇,倒是可以改進改進。就好像如果我會PHP,我也會改進改進。:)

    謝謝指教,如果光光這樣就能讓你嘆為觀止兼復無言以對,那多看一些你豈不啞啦?如果你想征服世界,或是毀滅世界。那未免太缺乏這方面的體質了。不過我想那倒不會,無言以對不也巧巧來了一段?哈哈。:)
    Bro.BrookMeow010112222003

  6. 所謂選擇性的閱讀、選擇性的暴露大概就像是這樣,我明明有寫一個不需要用到多少語言能力的方法:

    「這麼一串JS的目的就是為了在頁面上產生隨機文字,那麼可以將這段JS寫在MT模版裡頭,將站台敘述用明確的文字定義,畢竟這段JS是給瀏覽器看的,在RSS或其他的檔案當中,提供站台敘述的目的並不是為了呈現動態文字而使用。」

    還是我寫的不夠清楚?有可能,重看一下,似乎文意不是很流暢,重寫。

    「這麼一串JS的用意,在於可以在網站首頁上出現隨機文字,既然是用在首頁上的效果,那麼將這段JS加在MT的索引模版裡頭不就好了,因為這段JS只會在瀏覽器瀏覽首頁時使用,所以應該避免在RSS等提供做並非直接供瀏覽器瀏覽的檔案中出現,在RSS格式中的站台敘述這一個欄位,用意在提供一個清楚的說明,而不在於製作特效。」

    我先講了一個最簡單的方法,然後進一步講一些更好的處理方法,可能會用到一些其他的語言或如何如何,試問:有什麼不妥?所以呢?所以是我不知道閣下是這麼會斷章取義。

  7. 所謂「文字的功能,在於溝通之中隱去大部分的事實。」大概就像是這樣,我明明也有寫一個不需要用到多少語言能力的回答:

    「最簡單的回答是,我沒技術,完全不會PHP,就連這段JS都是copy來的,『連設計也不是。』

    貼段會造成問題的JS就是我最好的(同時也是造成使用者瀏覽時麻煩的方案)解決方案了。」

    還是我寫的不夠清楚?有可能,重看一下,似乎文意不是很流暢,重寫。

    「最簡單的回答是,我沒有像zonble爺一樣的技術,我既完全不會PHP,就連這段令zonble爺感到嘆為觀止兼復無言以對的JS都是copy來的,簡單的說,『那連設計也不是。』

    『我就是希望站台敘述是會以動態文字特效呈現』因為明確的文字定義太難(我還想弄到100個項目說。不過還是只能用這段JS),當然我也在索引模版裡頭加了這麼一段JS,希望它有我個人所預期、兩相比對的趣味產生,至於啥RSS的,我完全沒考慮到,因為我想我的觀眾群應該沒人會用啥FOF的伺服器端RSS閱讀程式來看我的網誌的(95%我所知道的觀眾群,還是用IE),所以我的網誌也沒啥RSS認證的貼紙。同時因為我並不像zonble爺會其他的語言或如何如何,所以在所謂的站台敘述欄位貼段會造成問題的JS就是我最好的(同時也是造成使用者瀏覽時麻煩的方案)解決方案了。」

    我回答了一個最簡單(同時也是最笨拙)的方法,然後說我同意zonble爺進一步講一些更好的處理方法,不過因為可能會用到一些其他我不會的PHP語言或如何如何,所以我用了這個最笨拙的解決方法。也問:有什麼不妥?所以呢?所以是我不知道閣下在選擇性的閱讀、選擇性的暴露的斷章取義這方面也絲毫不差。
    Bro.BrookMeow055412222003

  8. 我想不是很多blogger都會寫程式的
    如果版主覺得礙眼,是不是可以線上教學應該怎樣寫效能會更好
    也提供程式碼讓大家用
    如果沒辦法,那請不要這樣批評
    大家喜好不同各有所愛
    喵的網頁有其他好處是吸引別人去看的
    這些小障礙是他個人喜好,而喜歡去看的人也可以忍受
    又何必去傷人

  9. 喔,我楊某在線上都不寫教學文件的,我都只會惡意傷人的,對,對極了。原來叫人不要吃餿水浮油的前提就是要先先請人吃大餐(我怎麼又突然想到那篇猴子的故事),今天是冬至,要不要順道吃個湯圓?

    PHP 可以這樣寫:

    <?php
    function blah():{
    $n = $rand() % 某數字(看你有多少選項);
    switch($n){
    case 0:
    echo “Only the Paranoid Survive….”;
    break;
    case 1:
    echo “blah…”;
    break;
    ……………….
    }
    }
    ?>

    然後找適當地方呼叫這個function即可。當然也可以用原來在那串JS的語法,用array來寫。

  10. 不會寫程式不是什麼壞事,很多程式設計師也只會像這樣貼來貼去,一點都不知道會有什麼後果。
    我實在不喜歡很多人對寫程式一知半解,然後拿到一些東西就很快樂的用,用出問題又哭著說我又不會寫程式……..
    真是諷刺,學校老師只教如何剪貼嗎?

  11. 挖,剛沒看見這篇,一時有人聊就忘了注意週遭環境。

    如果知道有湯圓吃,那我晚上就不吃日式燒肉跟火鍋了,我可好幾年沒吃湯圓了呢,算算的話,應該只有一年有吃過,而且也不是冬至,ㄎ。是某年夏天早上忽然想到,然後就讓女人去買回來讓她煮著我吃的。…至於餿水…現代人真是浪費啊。那些餿水本來都是該吃的,不過都吃完的話,那可愛的豬們就都沒得吃了,這樣會造成食物鏈毀壞,還有社會動盪與不安。(也許這是一個征服非回教世界的好方法?)

    嗯…這串PHPphp大概要讓我看一個寒假了…:( 要先問問會PHP的學妹們,真好,ㄏㄏ。

    另外回水榭訪客的是,我就說我根本就沒想到用這段JS會有啥問題,我用得很快樂是沒錯,不過到被zonble指出來有問題時我也沒哭著說我不會寫程式,我說的是我本來就不會寫,我可不是程式設計師,我只是個扛瓦斯的渾人而已,聽說學校老師連如何剪貼都不教呢,哈哈。

    我實在不喜歡很多匿名的好心人對事件過程跟當事人一知半解,然後看到一些東西就很快樂的回應,回應之後又用啥there.com的鬼domain.

    真是諷刺,學校老師只教如何斷章取義跟匿名裝好心嗎?
    Bro.BrookMeow103512222003

  12. 連老師也會鼓勵學生去嘗試,做了才知道哪裡有錯
    還故意有對照組來實驗對照
    人家在自己的版上面試驗有礙到別人嘛?
    對別人的指正他說對,他答案可能不甚正確(也不是不正確,只是不完美)
    老師如果不能說出正確答案,只是說別人錯,那有什麼證據可以支持老師說學生錯

    版主對於大家的建議有回應真的是很優秀也很令人感激
    只是對於水榭訪客的說法覺得不是很公平

  13. 現在用這個應該不算是鬼 domain 吧? :p 充其量只是白爛 domain。
    我回的那篇倒不是針對誰,而是看了四五年以來,所有號稱自己不會寫程式的人,通常都會這樣講…
    就像是聽到你是念資訊的,就會想要你幫忙修電腦….這種一知半解,又不想要努力求知的人是不太好的 :p
    還有,我的回應純粹是以這篇 blog 的接續回應的感想,要在那裡試驗是他家的事,我只是在這篇 blog 看到有感 😀

  14. 聽到你是唸資訊的,就會想要你幫忙修電腦….>”””< 同感
    不過就算一樣是唸資訊的,還是會要人幫忙修電腦。自己不會又不學。
    了解,哈哈。

  15. 很多「程式」,如同這些那些教人家怎麼用blogging tool的文章,都是會寫的人放出來吸引顧客的,轉貼倒也不見得只是不會寫程式的問題。

    話說回來,我認識很多念資訊的人,寫出來的東西也不見得比非本科系的人寫的來的好用。所以那種刻板印象大概也不是所有人的通病。

  16. 回應迴響9:
    那段程式碼實在看不懂哩,剛看的時候就看到一些問題了,像是function blah():的這個「:」好像會造成錯誤,然後因為我還是PHP菜鳥的關係所以「%」這個東西我也不知道怎麼一回事,再來,叫出函數的時候會出現”call to underfind function”這個情形,不知道是怎麼回事。
    我自己寫了一個:

    然後在需要顯示隨機句子的時候用上這個:

    就可以了。

    對了,zonble大大麻煩線上教學一下那個%是做什麼的吧,謝謝啦。

  17. ㄜ,忘記轉換符號了,再來一次:
    先在頁面上隨便貼上這一段
    <?php
    $arr = array("第一個句子","第一個句子","第一個句子","第一個句子");
    $num = rand(0,count($arr)-1);
    ?>

    然後在需要顯示隨機句子的地方貼上:
    ><?php echo $arr[$num];?>

    還有最重要的是:副檔名要存成php才能動(廢話)。

  18. 我教程式語言喔…。(真汗顏)

    %的意思就是餘數,比方說,阿喵有二十五的選項,就可以用$n = rand() %25,代表就是以一個亂數除以25的餘數代表$n,所以$n就有可能是0到24之間的其中一個數字。

    這樣看起來用array好像比較直觀?@_@

Comments are closed.