2010年3月23日

[好物推薦]D-Link DIR-412 3G行動無線寬頻路由器

如果各位朋友跟 YOGO 一樣常常要在外面跑來跑去,且無時無刻都有上網的需求,那使用 3G WiFi 會是目前最佳的解決方案,因此想必有很多朋友會有想購買3G網卡或已有3G網卡來解決隨時隨地上網,但3G無線網卡一般只能用於單一電腦上網使用,若有需要分享頻寬時(如在家時不只一台電腦要上網)就派不上用場,若再申請一條ADSL或光纖似乎又太浪費錢了(畢竟這年頭錢不好賺,能省則省),然到沒有比較好的解決方法嗎?其實是有的,而且 YOGO 本身就是採用這種方法,目前市面上已經有在賣整合型的IP分享器,也就是網路來源可以是ADSL或3G,然後在透過分享器以有線或無線的方式分享出去,以 YOGO 本身來說,外出時只要帶著NB + 3G網卡,就可以滿足 YOGO「不在辦公室,也能辦公事」的行動上網需求;回家後只要把3.5G網卡插到IP分享器上,即可分享品頻寬,全家一起上網,若你跟YOGO一樣有此需求,下面 YOGO「D-Link DIR-412 3G行動無線寬頻路由器」將會是個不錯的選擇。

 

D-Link DIR-412 3G行動無線寬頻路由器

D-Link DIR-412 3G行動無線寬頻路由器

  • 雙重無線3G/WiFi
  • 行動無線寬頻路由器
  • 無線傳輸速率最高可達150Mbps
  • 多人分享3G行動網路

    分享您的3G行動網路
    D-Link 3G行動無線寬頻路由器讓您可以創造多人同時分享的3G行動寬頻網路。簡單的將您向行動寬頻業者申請的3G行動網路卡連結在DIR-412 USB介面就可以透過DIR-412 所具備的802.11n 高速無線網路讓多人透過Wi-Fi方式分享3G行動寬頻連線。

  • ADSL/Cable 網路備援
    具備可切換模式式10/100乙太網路埠切換為WAN埠時可讓您連接ADSL/Cable 固定寬頻網路,將DIR-412最為一台802.11n 無線寬頻路由器,同時您可以將3G網卡連接在DIR-412USB介面作為固定寬頻網路的備援網路。

    DIR-412_03

    DIR-412_02進階網路安全
    DIR-412 提供完整無線安全加密機制包含WEP/WPA/WPA2等。設備具備WPS 快速無線安全連線按鍵,讓您可以快速的讓您的電腦無線連結至DIR-412 所提供的高速無線網路。DIR-412並具備雙防火牆機制(SPI與NAT)確保您網際網路連線安全。

    安裝使用容易
    DIR-412 具備中文化的網頁式操作介面讓您可以快速的建立3G行動分享網路,透過DIR-412 您可用於:
    - 取代家中固定寬頻網路:適合租屋族使用,搬家不用重新申裝或異動寬頻網路。
    - 建立活動會場寬頻網路:不論園遊會、家庭聚會、社團活動透過DIR-412 讓多人同時行動上網。
    - 建立商務寬頻無線網路:臨時會議、研討會、展覽攤位創造寬頻網路隨時發送E-Mail與網路資料傳遞。

    產品特色

    • 採用802.11n 無線晶片搭配1T1R天線提供150Mbps高速無線網路連線
    • 網路介面支援LAN&WAN功能切換,可讓3G網卡作為ADSL/Cable備援網路
    • 支援WEP/WPA/WPA2 無線安全加密機制
    • 具備WPS Wi-Fi快速無線安全連線按鍵
    • 具備防火牆功能(SPI&NAT)
    • USB介面支援多張3G行動網路卡
    • 中文化操作設定介面
    • DIR-412 支援3G行動網卡品牌與型號

    品牌

    型號

    品牌

    型號

    D-Link

    DWM-152

    Huawei

    E510

     

    DWM-156

    E180

    Qisda

    H21

    E169u

    Bandluxe

    C170

    E161

    廣達

    Q101

    E220

    Q110

     

     

    最新相容3G網路卡以D-Link 官方網站公告為主

    產品架構圖

    DIR-412

    商品規格

    標準

    • 802.11n
    • 802.11g
    • 802.11b
    • 802.3
    • 802.3u
    無線網路安全
    • 64/128-bit WEP (Wired Equivalent Privacy)
    • WPA & WPA2 (Wi-Fi Protected Access)
    • WPS (PBC/PIN)

    防火牆

    • Network Address Translation (NAT)
    • Stateful Packet Inspection (SPI)
    • MAC Address Filtering
    • Website Filtering

    VPN 安全連線

    • L2TP/PPTP/IPSEC VPN Pass-through
    • PPTP/L2TP Connection
    天線

    內建隱藏式天線

    設備介面

    • 1 x Ethernet (RJ-45)可切換(WAN or LAN)
    • 1 x USB 2.0

    LED 狀態指示

    • 電源
    • 網際網路連線
    • 無線網路
    • 乙太網路
    • WPS連線

    尺寸 (L x W x H)

    122 x 97 x 27 mm

    運作溫度

    0˚ to 40˚C
    運作溼度 10%-95% (Non-condensing)
    電源
    • 輸入: AC 100~120 60Hz
    • 輸出:DC 5V/2.5A +/- 5%
    進階功能
    • 3G網卡撥接數據機/ 乙太網路網際網路備援
    • 自動網際網路連線備援機制
    • QoS 管理
    安規認證
    • NCC
    • Wi-Fi
    • CE
    • FCC
    • ROHS Compliant

    ※以上規格資料若有任何錯誤,以原廠所公佈資料為準。
    產品出貨不含DWM-156 3.75G行動網卡



    產品網址:
    http://tw.partner.buy.yahoo.com/gd/buy?gdid=1861264&mcode=MV9FMWo0Mk43NjNDVFNaNUxMVGM1Zlhjd2pucFE2WHJzWEd4M3hLdWs4RzdnPQ==


    延伸推薦:
    D-Link DWM-156 3.75G HSUPA USB 無線網路卡(白)

    如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。

  • [轉貼]PHPUnit 實務入門簡介

    這幾天在寫折價券攤提到商品的數學演算法邏輯,搞得我七葷八素的…還好先前在製作購物車時,已經把單元測試放到架構裡,因此後面就只要專心應付演算法邏輯就好了。

    雖然這樣的規劃聽起來不錯,但單元測試這件事說到底我的實務經驗還是太少,在這次的專案項目裡,才讓我真正有了較為深入的體會。

    先對要測試的事情有一個概觀


    其實測試一開始真的很難下手,主要是因為我們不知道我們要測些什麼東西。因此,我們需要對需要測試的東西有個概觀。

    就以這次的例子來說吧,我要測試的東西就是「折價券攤提的演算法邏輯」,那它裡面重要的東西是什麼?

    在跟客戶討論,我們得知折價券面額要分攤到的商品上時有一定的規則;這時我們就要先在紙上作業,用簡單的例子跟客戶確認清楚規則。

    draft

    確認了方向之後,因為我之前已經測試架構準備好了,所以接下來就只要針對要測試的部份撰寫程式碼即可。但如果一開始還沒有準備好測試架構的話,這裡給大家幾個建置環境的簡易流程:

    1. 在專案裡開個 tests 資料夾,這裡就是放置測試案例的地方。

    2. 準備一個 init.php ,目的是用來設置 include_path 及 autoload 機制。

    3. 按照 PHPUnit 官方的建議,建立一個 AllTests.php 的 Test Suite 。

    註:這裡我就不列出程式碼了,讓大家自己試試看。

    然後每次測試就用以下指令即可:

       1:
    > phpunit AllTests.php

    之後我會以「跑測試」來表示執行這個指令。

    描繪程式的輪廓
    接下來我們就要把整個系統的測試架構定義出來,不過這時候其實我們還沒開始寫程式,只是把流程和相關的方法先定義出來。

    這裡的方法很簡單,就是先透過註解和方法介面來描述整個流程,而不是先寫細部的程式碼。

      1: class Shop_Cart_Plugin_Coupon extends Shop_Cart_Plugin
       2: {
       3:     // ... 略 ...
       4: 
       5:     // 演算法計算後的結果
       6:     protected $_sharedCouponData = array();
       7: 
       8:     // 取得演算法計算後的結果,也可供測試來驗證
        9:     public functino getSharedCouponData()
      10:
         {
      11:         return $this->_sharedCouponData;
      12:     }
      13: 
      14:     // 主要的執行方法
      15:     public function doCheckout()
      16:     {
      17:         $this->_getCouponData(); // 取得
      18:         $this->_getProductData(); // 取得商品資料
      19:         $this->_initData(); // 初始化要攤提的資料
      20:         $this->_shareCouponToProduct(); // 開始攤提
      21:     }
      22: 
      23:     // ... 略 ...
      24: }

    當然這些都是大概的輪廓,因為可能在我們寫好測試執行時,會再額外加入新的方法及介面。

    還有一個要先定義好的是測試用的比對數據格式,它對我們稍後要測試的程式寫法會有影響。

    寫第一個測試
    到這裡,我們就可以開始寫第一個測試,而接下來的程式碼,都是先以這個測試可以成功為目的。而這個測試要怎麼寫呢?就是把一開始我們在紙上作業的數字拿進來套用。

    當然這裡我的 setUp 和 tearDown 也已經在之前準備測試架構時寫好了,它們會讓我們每次的測試數據都能夠獨立。我們關心的就是第一個測試案例:

       1: <?php
       2: class Shop_Cart_Plugin_CouponTest extends PHPUnit_Framework_TestCase
       3: {
       4:     // ... 略 ...
       5: 
       6:     public function setUp()
       7:     {
       8:         // ... 略 ...
       9:     }
      10: 
      11:     public function tearDown()
      12:     {
      13:         // ... 略 ...
      14:     }
      15: 
      16:     public function testDoCheckout()
      17:     {
      18:         $this->_plugin->setValue(array(
      19:            1 => 1, // C1, ProductCoupon for P1, $100
      20:            2 => 2, // C2, ProductCoupon for P1, P2, $100
      21:         ));
      22:         $this->_cart->addItems(array(
      23:             'P1' => 1, // $200
      24:             'P2' => 1, // $300
      25:         ))->refresh();
      26:         $this->assertEquals(300, $this->_cart->getTotal());
      27:         $this->_plugin->doCheckout();
      28:         $resultDataList = $this->_plugin->getSelectedOrderCouponDataList();
      29: 
      30:         $this->assertEquals(-100, $resultDataList['P1-C1']['discountPrice']);
      31:         $this->assertEquals(-25,  $resultDataList['P1-C2']['discountPrice']);
      32:         $this->assertEquals(-75,  $resultDataList['P2-C2']['discountPrice']);
      33:     }
      34: }

    這裡因為我們在上一步就定義好比對用的數據,所以測試時就是用這個輸出的數據來與我們預期的數字相比較。

    接下來就先跑跑測試,看看這個 TestCase 有沒有執行錯誤的地方 (例如物件沒有正確初始化或是變數名稱誤寫等等) ;當然如果沒有出現預期值是正常的,因為我們根本還沒有寫計算公式。

    繼續完成演算法
    現在回到 Shop_Cart_Plugin_Coupon ,我們就要把剛剛那些只有骨頭的方法開始添血添肉,這裡就請大家自行發擇。

    接著只要你覺得程式差不多了,就先跑一下測試,看看是不是符合測試的預期結果。

    當你完成第一個測試時,程式的就差不多完成百分之五十啦,到這裡別忘了先把程式 commit 到版本控制系統裡。

    加入新測試並修改程式
    完成第一個測試時,當然不是沒事了,我們要針對不同的狀況再加入其他的測試數據。

    這裡我們就可以開始考慮把第一個測試以 PHPUnit 提供的 Data Provider 改寫,讓我們不必重複過多的程式碼。

       1: <?php
       2: class Shop_Cart_Plugin_CouponTest extends PHPUnit_Framework_TestCase
       3: {
       4:     // ... 略 ...
       5: 
       6:     public function setUp()
       7:     {
       8:         // ... 略 ...
       9:     }
      10: 
      11:     public function tearDown()
      12:     {
      13:         // ... 略 ...
      14:     }
      15: 
      16:     /**
      17:      * @dataProvider provider
      18:      */
      19:     public function testDoCheckout($selectedCouponIdList, $productSkuNumberList, $total, $discountDataList)
      20:     {
      21:         $this->_plugin->setValue($selectedCouponIdList);
      22:         $this->_cart->addItems($productSkuNumberList)->refresh();
      23:         $this->assertEquals($total, $this->_cart->getTotal());
      24:         $this->_plugin->doCheckout();
      25:         $resultDataList = $this->_plugin->getSharedCouponData();
      26: 
      27:         foreach ($discountDataList as $key => $value) {
      28:             $this->assertEquals($value, $resultDataList[$key]['discountPrice']);
      29:         }
      30:     }
      31: 
      32: 
      33:     public function provider()
      34:     {
      35:         return array( // 第一個測試
      36:             array(array(
      37:                 1 => 1, // C1, ProductCoupon for P1, $100
      38:                 2 => 2, // C2, ProductCoupon for P1, P2, $100
      39:             ), array(
      40:                 'P1' => 1, // $200
      41:                 'P2' => 1, // $300
      42:             ), 300, array(
      43:                 'P1-C1' => -100,
      44:                 'P1-C2' => -25,
      45:                 'P2-C2' => -75,
      46:             )),
      47:             array( // 第二個測試
      48:                 // ... 略 ...
      49:             ),
      50:             // ... 略 ...
      51:         );
      52:     }
      53: }

    而加入新測試之後,就可以跑跑測試,看看我們剛寫好的演算法是否正確動作?通常這時候才真正是考驗的開始。

    因為這時候前面寫好的程式碼可能只對第一個測試正常,接下來的測試也許就會出錯了。

    所以我們就會需要修改或重構程式碼,讓後面的測試也能正常執行。
    當然改過的程式也要讓第一個測試正常運作,才是正確的修改。
    當然演算法寫好後,就要真正上到 Web 畫面去測試。

    至此,你會發現你花在寫測試上的心力都有了回報,因為通常如果你已經定義好介面,而這次的修改只是改寫一個小類別的話,那麼就會發現程式會非常順利地運作了。

    心得
    每次寫購物車時,最麻煩的就是測試時要開啟購物車網頁,把一個一個的商品加進來,再加入不同的折價券條件…而有單元測試之後,我就可以省去一大堆開啟網頁,點選連結的功夫,專心地撰寫計算邏輯…只能說…單元測試真的個超級便利的工具呀。

     

    原文出處:
    http://www.jaceju.net/blog/?p=1062

    聖誕跑趴歡樂降★韓版假兩件針織連衣裙$890,新款顯瘦棒球服連帽風衣外套下殺$510,冬新款歐美棉襖棉服連帽短款外套限量↘$530,秋冬新款韓版大碼毛領氣質毛料外套↘$680,快上左耳貓網路購物

    您好!如圖太小看不清楚,請 點選此處 看詳細內容 左耳貓蝦皮賣場 https://shopee.tw/hrf5168 左耳貓 露天賣場 http://class.ruten.com.tw/user/index00.php?s=starbox 左耳貓粉...