實測 QNO QVF8034 雙 WAN VPN 防火牆 NAT 效能測試

測試 NAT 效能,就是此產品能連接 ADSL 或 光纖 的最大頻寬。

假如 NAT 只有 50Mbps 當你申請 100Mbps 光纖,最高也只能跑到 50Mbps。

 
使用PPPoE上網:

平均維持在 58 ~ 61 Mbps 左右,所以適用在 PPPoE 的光纖 60Mbps,但無法使用在光纖 100Mbps。


  2013-09-11      ez      開箱
開箱 EZLINK Achilles SX 120GB SSD 固態硬碟 五年保固

剛買的兩顆 EZLINK Achilles SX 120GB SSD,保固五年非常的不錯,並且壞掉直接換新的,比起一般廠商只有三年,而且是送修不是換新。

從保固來看整整多出了兩年,不過耐用度還需要時間的考驗了,不過算是 CP 值非常的高產品。

 
本篇的主角,兩顆 SSD 盒裝照片,看起來是公版的盒子,可以適用於任何容量的 SSD。

不過這個盒裝設計,跟一般大廠華麗的外觀比起來,真是差了一截。對於我這個看 CP 值的,就不這麼重視外觀了。


  2013-08-28      ez      開箱
網樂通 sh4twbox 安裝 ftp

此篇是讓 網樂通 sh4twbox 開啟 FTP 功能,這樣就等於是一台小型的 FTP 站台了!

※ 此 FTP 功能非常的基本,不需帳號密碼也能登入,並且擁有修改權限,如果要對外開放請自行評估安全性。

首先必須準備一支隨身碟



  2013-08-27      ez      網樂通
.Net C# JSON 效能測試 JavaScriptSerializer、Json.NET、fastJSON

本篇測試 JSON TO String 及 String TO JSON,使用以下三種方式 JavaScriptSerializer、Json.NET、fastJSON 進行效能測試 。

測試原始碼下載:fastJsonDemo

原始碼如下:

using System;
using System.Diagnostics;
using System.Web.Script.Serialization;
using fastJSON;
using Newtonsoft.Json;
namespace fastJsonDemo
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            testSpeed();
            Write("<BR>");
            testConvertDatetime();
        }
        protected void testSpeed() {
            int i_testCount = 30000;
            User[] l_users = new User[i_testCount];
            for (int i = 0; i < i_testCount; i++) l_users[i] = new User { ID = i, Name = "TEST", Age = 20 + i, Address = "100 臺北市..." + i.ToString() + "號" };
            /* 使用 JavaScriptSerializer */
            testJavaScriptSerializer(l_users);
            /* 使用 Json.NET  */
            testJsonDotNET(l_users);
            /* 使用 fastJSON  */
            testfastJSON(l_users);
        }
        protected void testJavaScriptSerializer(User[] l_users)
        {            
            string s_jsonstr = string.Empty;
            Stopwatch sw = new Stopwatch();
            Write("<BR>使用 JavaScriptSerializer 物件 to JSON<BR>", "#524CE4", true);            
            sw.Reset();
            sw.Start();
            s_jsonstr = ConvertObject2JSON(l_users);
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write("使用 JavaScriptSerializer JSON to 物件<BR>", "#524CE4", true);
            sw.Reset();
            sw.Start();
            User[] l_tempusers = (User[])ConvertJSON2Object(s_jsonstr, typeof(User[]));
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write(ConvertObject2JSON(new User[] { l_users[0], l_users[1], l_users[2] }) + "<BR>", "#F74B14", false);        
        }
        protected void testJsonDotNET(User[] l_users)
        {
            string jsonstr = string.Empty;
            Stopwatch sw = new Stopwatch();
            Write("<BR>使用 Json.NET 物件 to JSON<BR>", "#524CE4", true);
            sw.Reset();
            sw.Start();
            jsonstr = JsonConvert.SerializeObject(l_users);
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write("使用 Json.NET JSON to 物件<BR>", "#524CE4", true);
            sw.Reset();
            sw.Start();
            User[] l_tempusers = JsonConvert.DeserializeObject<User[]>(jsonstr);
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write(JsonConvert.SerializeObject(new User[] { l_users[0], l_users[1], l_users[2] }) + "<BR>", "#F74B14", false);
        }
        protected void testfastJSON(User[] l_users)
        {
            string s_jsonstr = string.Empty;
            Stopwatch sw = new Stopwatch();
            Write("<BR>使用 fastJSON 物件 to JSON<BR>", "#524CE4", true);
            sw.Reset();
            sw.Start();
            s_jsonstr = JSON.Instance.ToJSON(l_users);
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write("使用 fastJSON JSON to 物件<BR>", "#524CE4", true);
            sw.Reset();
            sw.Start();
            User[] l_tempusers = fastJSON.JSON.Instance.ToObject(s_jsonstr) as User[];
            sw.Stop();
            Write(sw.Elapsed.Milliseconds.ToString() + " ms<BR>", "#666", true);
            Write(JSON.Instance.ToJSON(new User[] { l_users[0], l_users[1], l_users[2] }) + "<BR>", "#F74B14", false);
        }
        protected void testConvertDatetime() {
            string s_js = string.Empty;
            DateTime dt = DateTime.Now;
            Write("<BR>使用  JavaScriptSerializer <BR>", "#8F3535", true);
            s_js = ConvertObject2JSON(dt);
            Write(s_js + " <BR>", "#666", true);
            Write(((DateTime)ConvertJSON2Object(s_js, typeof(DateTime))).ToString() + " <BR>", "#666", true);
            Write("<BR>使用 Json.NET <BR>", "#8F3535", true);
            s_js = JsonConvert.SerializeObject(dt);
            Write(s_js +"<BR>", "#666", true);
            Write(JsonConvert.DeserializeObject<DateTime>(s_js).ToString() + "<BR>", "#666", true);
            Write("<BR>使用 fastJSON <BR>", "#8F3535", true);
            s_js = JSON.Instance.ToJSON(dt);
            Write(s_js + " <BR>", "#666", true);
            Write(DateTime.Parse(JSON.Instance.ToObject(s_js).ToString()).ToString() + " <BR>", "#666", true);
        }
        protected string ConvertObject2JSON(object Source)           
        {
            JavaScriptSerializer JSONSerializer = new JavaScriptSerializer();
            JSONSerializer.RecursionLimit = Int32.MaxValue;
            return JSONSerializer.Serialize(Source);
        }
        protected object ConvertJSON2Object(string JSON, Type ObjectType)
        {
            JavaScriptSerializer JSONSerializer = new JavaScriptSerializer();
            JSONSerializer.RecursionLimit = Int32.MaxValue;
            return JSONSerializer.Deserialize(JSON, ObjectType);
        }
        protected void Write(string word, string color, bool bord)
        {
            if (bord)
                Response.Write("<b><font color=\"" + color + "\">" + word + "</font></b>");
            else
                Response.Write("<font color=\"" + color + "\">" + word + "</font>");
        }
        protected void Write(string word)
        {
            Response.Write(word);
        }
    }
    public class User
    {
        public long ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    }
}

  2013-08-27      ez      .NET
開箱 Netcore 磊科 NR285P (EN25R) 溫控風散版 不死鳥 不熱盪

這台是大陸帶回的,內建溫控風扇版,加上韌體寫得不錯,所以不用擔心有熱盪的問題,產品規格寫的不太清楚,不過效能非常的優異 及 功能強大,可以打趴一些國內大廠產品,下篇再來介紹效能測試,此篇只進行產品開箱。

 
收到產品時我一度以為老闆寄錯商品了,因為外盒寫著 EN25R 整個怪怪的!

後來想想可能廠商找代工廠製作,然後偷灌別人的韌體,所以才會產品外盒與實際內容韌體不同。

我想工廠只是出產品硬體,韌體其實可以灌任何一家產品,只是看韌體可不可以支援硬體而已,這樣就可以掛上不同牌子進行銷售。


  2013-07-24      ez      開箱
QNO 使用 Smart Link VPN (QVM VPN) 串接 兩地 公司 網路 (企業虛擬私有網路)

QNO 有提供獨家的 Smart Link VPN (QVM VPN) 技術,傳統的 IPSec 需要較多的步驟,才能串接兩地網路,因而產生了 Smart Link VPN (QVM VPN),本篇就來介紹使用此技術串接兩地網路。

 
首先進入第一間公司的 QNO 設備,選擇 "Smart Link VPN 設定",右邊先選擇為 "Smart Link VPN 伺服器配置",之後需要新增一組帳號給 第二間公司 連接使用。

用戶名稱:輸入連線的帳號名稱

密碼 及 再次輸入密碼:請自行輸入連線密碼

IP位址:不須修改

子網路遮罩:不需修改

VPN Hub功能:打勾

啟用:打勾

按下 "增加到對應表列"


  2013-07-23      ez      開箱