1 月 7 2010
[Javascript] 從 array 裡隨機挑出不重複的值
Javascript 提供了 For … In … ,我用的還蠻高興的(雖然我很少撰寫 Javascript)。
今天遇到某種特殊需求,我才發現這個迴圈語法並非萬能。
從 array 裡隨機挑出不重複的值有兩種情況,一種很單純,For … In … 迴圈可以處理的很好:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; var x; while(fruits.length > 0) { var r = Math.floor( Math.random() * fruits.length ); var n = fruits[r]; document.write("Choosen[" + r + "]: " + n + "<br />"); document.write("Array: " + fruits + "<br />"); for(x in fruits) { if (fruits[x] == n) { fruits.splice(x, 1); } } }
若是 array 裡面已經存在重複的值,而且 array 的資料的來源不方便控制(例如是 HTML 裡面的 li 物件),For … In … 這種方便的迴圈語法就必須放棄,改用傳統的 for 迴圈:
var fruits = [ "Banana", "Banana", "Orange", "Orange", "Banana", "Apple", "Apple", "Orange", "Mango" ]; var i=0; while(fruits.length > 0) { var r = Math.floor( Math.random() * fruits.length ); var n = fruits[r]; document.write("Choosen[" + r + "]: " + n + "<br />"); document.write("Array: " + fruits + "<br />"); for(i=0; i<fruits.length; i++) { if (fruits[i] == n) { fruits.splice(i, 1); i--; } } }
1 月 8 2010
FreeBSD-SA-10:02.ntpd
昨天,FreeBSD 官方發布了三個 Security Advisories:
根據 Advisories 內容,我原本打算透過以下的步驟作 patch:
但是,進行到第 4 個步驟(FreeBSD-SA-10:02.ntpd 的編譯階段),就出現了如下的 message:
找了一些討論後,我在這個討論串裡看到好幾種作法。
幾經嘗試,我最終在 FreeBSD 8.0-RELEASE-p1 amd64 用以下這個作法順利編譯成功:
有相同問題(狀況)的人可以參考看看。
By Joe Horn • FreeBSD 0 • Tags: FreeBSD, patch, Security Advisories