2016/11/11

The Division 1.4 版感想

上個月看到 Division 的 1.4 更新,針對不少平衡性做了調整,好奇便抓下來實際體驗一下有什麼差別。

我是 solo 玩家,以下僅是一個人玩的時候發現的改變:
  • 任務變的較為多變,除了主線任務可以跑以外,還有一些每日任務、掃蕩任務可以跑,但是任務的跑法還是一致。
  • 隨機事件變多,一般地圖上更容易遇到敵人,不像以前走了半小時只會被狗吠。
  • 裝備掉落的機率增加。以前打金閃閃才有機會掉裝備,現在連一般的敵人也會掉,偶爾也會掉落黃裝。
  • 套裝的設計,看起來刻意讓玩家的特質差異變大,但這些特性通常還是要多人連線才比較有機會顯現出優點,單人玩還是看運氣,或是花錢改裝備。
  • 世界等級制度,感覺是學暗黑,不過單人玩家應該比較吃香,可以挑和自己等級不會差太多的任務來解
至於暗區,還是老樣子,怪物等級高出太多,連從安全區域剛出去都會慘死。另外 Ubisoft 還是沒有去處理高等玩家問題,因此低等玩家最好還是不要玩暗區,進去沒被敵人打死,多半也是被高等玩家虐死搶裝備而已。

暗區等級 21,被四名 80 等的玩家虐

2016/11/05

ASUS AC88U 上線

ASUS AC88U 讓我覺得還蠻滿意的,天線的覆蓋率頗高 (功率可以從管理介面調整),特殊的功能設定起來也很輕鬆。

但覺得有一些比較不喜歡的功能:
  • 內建 Trend 的網路安全偵測 (我比較希望有 honey pot)
  • Game Boost (WTFast) - 要另外註冊帳號,看起來是偵測網路行為,再透過第三方服務走比較順的 route
  • 這台體積好大啊,最長邊有 30cm
  • 即使什麼服務都不啟動,在插電沒有使用的情況下,功率大約是 14w,機體溫度就有點高了

過一陣子有空,把機器全部接上去做個壓力測試,但現在從管理介面來看,我應該打不爆 XD

2016/10/31

封箱文 Netgear AC3200 R8000

家裡的 Asus RT-N16 的封包處理速度開始跟不上設備的擴增,現在網路流量高一點,無線網路就開始抽筋、甚至直接斷線。所以開始尋覓高一階的網路設備。


這次看上的是 Netgear AC3200 R8000,主要是有傳說中超大的覆蓋路,還有 smart connect 可以對 mobile 設備到 AP 這段做自動負載平衡。



這台應該是我看過最大台的 Wifi AP router,最長邊大約有 30cm,原本擺 RT-N16 的位置根本放不下。開機以後 2.5G + 5G x 2 全開,號店功率大約 12w。

在設定 R8000 時,可以同時開啟二個不同頻斷的 5G SSID,選擇所在地為「臺灣」時,第一個 5G chaneel 被限制在 40 附近,第二個 5G chennel 則是在 140 左右。

查過 NCC 5G 開放的頻率以後,就會知道 R8000 5G 第一組頻段在台灣很多無線設備根本不支援,開起來也沒有用。若選擇 smart connect 技術,將二個訊號發射器合併起來使用時,頻段又被現在在 channel 30 附近,台灣的無線網路設備根本之支援嘛,相當於 smart connect 完全派不上用場。

另外一個我有點在意的是無線訊號的覆蓋率,我用手機裝 inSSIDer 來觀察訊號強度,把二台 RT-N16 和 Netgear R8000 放在房間裡,隔了一道牆到客廳觀察訊號強度,二台的訊號強度幾乎一致。

雖然可以刷 DD-WRT 來繼續使用,但是訊號不強,其實對我來說也沒什麼留下來的說服力。於是就先退貨了。

網路上很多也 R8000 多好多好的文章,我這邊就只留下我個人不滿的幾個點。剩下交給各位客官自己判斷了。


Ref:

2016/10/23

PHP copy-on-write 特性

「copy on write」這個特性的意思是,在 variable 在沒有異動的時候,不會在記憶體中 re-allocate 一個新的區塊來存放資料,只有在被更新、修改或刪除資料時,才會另外將異動過的資料存放到記憶體其他區域。

剛看到時自己寫不知道這是什麼神奇的東西,看實例比較快。

先建立一個超級大的檔案 huge.log:
$content = file_get_contents('huge.log');

// 818.4 MB
echo sprintf("%.1f MB\n", memory_get_peak_usage() / 1024 / 1024);

建立一個 function,這個 function 什麼事都不做,直接回傳我們傳進去的 $content:
$content = file_get_contents('huge.log');

function reply($content)
{
    return $content;
}

reply($content);

// 818.4 MB
echo sprintf("%.1f MB\n", memory_get_peak_usage() / 1024 / 1024);

well ... 我以前原本以為 pass by value,會另外將 variable clone 一份供 function 內部使用,但上面的 script 中呼叫了 reply() 以後,記憶體用量並沒有增加,所以將變數傳進 function 時,並沒有 clone 一份新的出來。


將原本的 reply() 稍做調整,在 return 之前新增一點東西到 $content 中:
function reply($content)
{
    return $content . 'some more';
}

reply($content);

// 1636.6 MB
echo sprintf("%.1f MB\n", memory_get_peak_usage() / 1024 / 1024);

reply() 中對 $content 加了一些新的資料,這時候最大記憶體使用量就變為原來的 2 倍,很明顯 PHP 在記憶體 alloc 新的區塊來存放被修給過的 $content。所以「copy on write」的意思,就是這個資料被 write 時,PHP 才會要新的記憶體 (copy) 來存放有被修改過的資料。



處理大型資料時,可以利用這個特性來節省記憶體使用量。

例如:decorator() 這個 function 要對一個大型陣列的資料做處理:
function decorator($data)
{
    $sum = 0;
    foreach ($data as $item) {
        $sum += $item;
    }
    $data['average'] = $sum / count($data);
    $data['sum'] = $sum;

    return $data;
}

上面的 function 因為會修改 $data 的內容,所以 PHP 會 clone 一個 $data 再來做修改。

改成以下的寫法:
function decorator($data)
{
    $sum = 0;
    foreach ($data as $item) {
        $sum += $item;
    }

    $change = [
        'average' => $sum / count($data),
        'sum' => $sum,
    ];

    return $change;
}

foreach (decorator() as $key => $val) {
    $data[$key] = $val;
}

在 decorator() 並不會動到 $data 的內容,所以不需要 clone $data,而是在 function 執行結束以後,直接對 $data 做修改。這樣只需要多儲存 $change 陣列,和後續的處理動作,而不會讓使記憶體用量 double。

2016/10/20

WD 高雄服務中心地點更換

之前 WD 的特約服務中心是在 SET 復得科技那邊,但今天要送修硬碟時才發現 SET 已不再代為服務,地點改到雷德硬碟資料救援那邊去。

走路看到廣告招牌才知道這件事情,然而 WD 官方網站則完全找不到任何訊息,實在很不爽。

so ... 2016/07/01 以後,WD 的服務中心改至雷德硬碟資料救援

地址:高雄市三民區建國二路152號
營業時間:請參考公司網站說明