電腦不乖 – HTTP 與印表機問題

前陣子某一天, 我的網站突然不能用了. 按照先前的印象, 首先檢查寬頻連線、防火牆、HTTP port. 果然 HTTP port (80) 不知被誰佔用了?

網路上有很多這類文章, 隨便 Google 都可以查得到, 所以我前一次把問題解決後也沒去記用法. 不過問題再度發生的時候就糗了, 又要重頭 Google. 網路上的 SOP 是執行

netstat -ano

看 0.0.0.0:80 是哪個 PID 占用? 高手 [1] 會用

netstat -nao | find “0.0.0.0:80″

這樣就會自動撈出來 PID. 有了 PID, 還要找是哪個程式在用, 同樣參考 [1], 應該打

tasklist /fi “pid eq 1234"   (1234 是舉例)

如果這程式不是 Apache, 而是像是慣犯 Skype…等等在用, 就可以把它先 kill 掉. 比較麻煩的是看到 pid =4 , 這是系統自己占用的, 網路上的解法 [2] 是把 http service 停掉, 並且把開機時的 http service 設為 disabled.

運氣好的話, 執行

net stop http

這時用到 http 的程式就會一隻一隻停掉. 但我的運氣不太好, 停到 http service 的時候, 就會跟我說 http 正在開啟或關閉中, 無法停止服務. 我猜是因為 apache 還在用它的關係. 此時死馬當作活馬醫, 繼續打

Sc config http start= disabled

然後重新開機, 基本上就修復了. 雖然中間反覆了幾次修些小問題, 但這招是靈光的. But….

用了這招之後, printer 就爛掉了. 我的 printer 是 MFP, 所以它還可以掃描, 但是不能印東西了! 這實在讓我很不方便. 一開始也沒聯想到是關閉了 http 的關係. 根據正常的直覺, 當然是先檢查 spooler 啊! (看我大學系統程式學得多精實, 哈!)

當我去服務裡面啟動 spooler, 它彈給我一個 error 1068! 1068 的錯誤代碼是相依於 spooler 的服務無法啟動. 到處看了幾篇文章, 原來 spooler 的相依性在這裡.

print-spooler

把 RPC, DCOM Server Process Launcher, 甚至是網路上 [3] 有人建議的 WINHTTP Web Proxy Auto-Discovery Service 都檢查了. 它們都是正常的! 所以…元凶還是我自己啊! 赫然想起我前一陣子把 http 設為 disabled 了.

因此, 重來一次, 這次把它設為… 

net stop http

Sc config http start= boot

哇! 不行, 設 auto..也不行! 設 delayed-auto …耶! 可以了!

Sc config http start= delayed-auto

重新開機, 此時 spooler 可以運作了. 由於 bug 發生的症狀是: 想要印東西時, word 找不到印表機. 因此我趕快新增印表機!

搜尋新增裝置…找不到! 再試一次…還是找不到! 莫非….

原來不用新增, 根本系統就自動找到印表機了. 雖然我看了某篇文章去刪除了 printer 的機碼. 但看來不影響, 它又自動裝上了, 難怪新增不了, 唉! 我真是自作聰明.

為了避免這問題再發生第三次, 乾脆就把前因後果全部火速打成一篇. 希望也能幫助別人解決類似的問題.

[ref]

1. 如何查詢哪個程式佔用了指定Port

2. [Windows] Port 80被佔用導致Apache無法啟動

3.  Printer spooler windows 8 Error 1068: The dependency service or group failed to start.

電腦不乖 – 雲端硬碟篇

這幾天電腦相當地不配合. 首先是試用了 2TB 免費的百度雲. 超大空間免費用當然很吸引人囉.  不過若不安裝它的 APP, 就不能上傳超過 2GB 的檔案. 聽說這是有辦法破解的, 但重點不在 2GB, 而是使用這個 APP 時, 速度會忽快忽慢. 過不了多久就斷線了.  一直傳一直斷, 我只好放棄它吸引人的容量和挺不錯的檔案夾同步功能.

接下來最便宜的就是MediaFire 了, 1TB 定價每年 49.99 USD, 花一個一千多台幣就有一個雲, 似乎勉強可以接受, 而且單檔可以到 20GB. 可是 MediaFire 的速度實在令人失望, 我的幾台電腦一直無法同步, 即使是用 ADSL 的網路放著讓它過連假, 幾天過去了, 還是沒辦法同步完. 當我試著把 MediaFire 目錄裡的檔案殺光, 跑去雲端看他們都還完好如初, 更不用說別台電腦裡備份也還健在. 經過實驗證明, 我的 PC 和和兩台 NB 始終不能同步.

還有一個方案價錢也不錯: Amazon 雲, 只要 59.99 USD 就可以無限上傳不限容量的檔案. 可惜這個 APP 介面很差, 不能像 OneDrive, Dropbox, iCloud, .. 一樣直接把檔案總管理的檔案拉進去, 只能夠一股腦地丟上去, 需要的時候再去雲端找出來下載. 我想它的用途就是當作超大倉庫來用. 而且它可以免費試用三個月, 我會再丟丟看它的倉庫功能是否令人滿意.

不得已只好試試 OneDrive, OneDrive 比 MediaFire 貴多了, 1TB 大約是一年 3190 NTD (後詳), 價錢和 DropBox 相當 (一年 100 USD). OneDrive 同步的速度還算 OK. 但是它只在 MacBook 可以選要同步那些目錄, 在 PC 就一定要同步所有的檔案, 使得我的 PC 一定要留 1TB 的硬碟給它. 

當然, 買 OneDrive 若不搭 Office 360 就不划算, 因為買 Office 360 家用版送每個 user 1TB, 5 個 user 就等於 5TB. 也可以想像成買雲端硬碟送 Office. 看似不錯的選擇, 但搭了 Office 又會有什麼壞處呢? Office 2016 剛好跟 Mac 最新的 OS X El Capitan 相衝. 如果您先安裝免費的 El Capitan,  再安裝 Office 2016, 那 Office 會當掉. 這樣您還有機會在 Office 360 的一個月試用期之內把它退掉! 反之, 如果先裝好 Office 2016, 再試圖安裝  El Capitan, 那麼會安裝不起來.

若是一時好奇心重, 到應用程式裡面手動執行 El Capitan 的執行檔 –> 那麼恭喜了, 整台 MacBook 都要重新安裝, 而我就是那個好奇的人. 一開始我還以為是自己失手, Google 到了別人文章才知道兩者有衝突. 而且 Microsoft 和 Apple 都沒有積極去解決.

OneDrive 還有一個超爛的地方, 那就是別家的後台可能都是 Linux,. 但 OneDrive 後台可能是 Windows. 因此, 檔案名稱太長, 目錄太深, 檔名裡面有奇怪空格, 對別的雲端硬碟都沒問題, OneDrive 就是不給上傳!  想不到吧!

iCloud 最貴, 是給用 iPhone 的有錢人用的. Google Drive 莫名其妙就把你的手機相片都備份上去了. 看來會成為它們大數據的一部分.

唉, 電腦不乖!

[Note]

  1. Office 2016 與 OS X EL Capitan 不相容的問題, 已經在 EL Capitan 2015/10/21 的修正中解決.
  2. 根據一段時間的觀察, Dropbox 同步的速度比 OneDrive, MediaFire, …都強太多了.

QUIC 小註解

QUIC (Quick UDP Internet Connection) 是最近 Google 想要推的一個新的網路規範, 顧名思義, 它的目的就是快!

Google 有這麼多聰明人, 取名字自然不含糊. QUIC 唸起來和 quick 相同, 可以很直接地聯想在一起. 其實, 就算是這個 protocol 沒有用到 UDP, 歷史上也沒有發明過 internet, 都還是可以兜出 QUIC = quick connection. 哈!

那麼 QUIC 快在哪裡呢?快在兼具 UDP (User Define Protocol) 的輕巧, 以及 TLS (Transport Layer Security) 的保護.  UDP 的輕巧當然是相對於 TCP (Trasmission Control Protocol)  來的, 如果大部份都走 UDP, 當然傳輸速度就會增加, 讓我們複習一下.

協定 優點 缺點
TCP 可靠
UDP 不保證收到

簡單地說, 可以把 QUIC 解釋為 TLS + TCP 的改良版, 並且是用 UDP 來實現. 當然, Google 不會傻到撞牆, 傳了一路 UDP 又另外傳一路 TCP, 而是把 TLS 和 TCP 的內容包裝到 UDP 裡面. 所以按照下圖, TLS + TCP 可以通, QUIC + UDP 也可以通.  那 SPDY 又是什麼呢?這個晚點再說, 先假裝沒看到. 基本上它已經變成了 HTTP2 的一部分.

那麼, Google 宣稱的快速 hand shake 又是如何做到的呢?根據 [2], client 會先送 inchoate client hello 給不認識的主機, 主機也不客氣地回 REJ. 由於這個 REJ 裡面會帶有 source address 和 server certificates 的資料, 所以並沒有白白被拒絕. 這時再送一次 client hello (CHLO), 應該就會對了, 後續可能就會收到 server hello (SHLO) . 

或曰, 難道其他人都想不出有這招, 只有 Google 的人想得到? 當然不是這樣. 根據 TLS 的規格 – RFC5246 [3] 7.4.1.2, client hello 原本就要帶著一些資訊送給 server. 7.4.1.3 說 server hello 要回傳 client 看得懂的演算法, 或者傳 fail. 因此在現行規格下, server 可能根本不願意吐出資訊給冒冒失失的 client. Ref [2] 說:  They may be several rounds of inchoate client hello before the client receives all the information that it needs because the server maybe unwilling to send a large proof of authenticity to an unvalidate IP address. 

所以, 所謂的 0 round 或是 1 round hand shake 都是宣傳的噱頭. 這需要有夠傻的 server 願意配合才行. 一個捏造的 IP client 送一個小封包, server 就要大陣仗地把自己的認證資訊都吐出來, 這樣聽起來 server 很容易被攻擊耶. 除了這一步有風險之外, 後續的資料會受到 TLS 的保護. 根據 Ref [4], QUIC 整個 channel 都有加密.

根據 [5], 其實 QUIC 有考慮到被攻擊的事. 一個合法的 clinet 需要 proof of ownership of an address, proof of data received. 前者的精神是 server 會把一個值傳給 client, 看 client 是否可以回傳它. 後者的精神是, 通常網路攻擊就是 client 不理會 server 而瘋狂地送出 data. Quic 的相容性 SERVER 會檢查 client 到底有沒有消化過先前送出的資料. 做法是在某個特定的  bit 做 0/1 的隨機變換, client 要忠實地反映這個變化, 才算是真的 user, 而不是攻擊者.  

QUIC 另外有幾個優點在於: 用錯誤更正碼 (Forward Error Correction) 代替  TCP 的重傳, 減少重傳的數量. 事實上, 網路很好的時候幾乎都不會重傳, 網路愈糟, 愈需要重傳, 形成一個惡性循環. 因此 QUIC 基於 UDP 可以理解. 但假如 QUIC 把  TCP 幹掉了, 以後網路上都是 QUIC, 等到頻寬吃完了, 不就互相排擠, 讓 packet 掉光光? 

Well, QUIC 有兩招可以處理這個狀況 [5]. 他會送出 Congestion Feedback Frame. 這就像是網路頻寬金絲雀, 金絲雀死了, 就知道有問題了. 另外一招是測量  ack 的間距, 如果 sender 偷偷加速封包的傳送, round trip 的時間卻沒有拉大, 表示網路還很空, 還可以送快一點. 技術細節類似於 Linux 用的 cubic congestion algorithm.

[結語] Server 和 client 之間, 除了 internet 還有很多 router, switch, 如果全部更新是很大的商機吧!那某大網路 IC 設計公司會大漲嗎?哈!

[後記] 今天在 FB 上看到人家分享 QUIC 的文章, 重點倒也不是介紹技術, 而是捧 Google 的厲害. 雖然沒有寫什麼十三億人都驚呆了, 但是意思也差不多. 只講優點不講缺點之餘, 也沒有起到科普的作用, 只是打擊了一下工程師們脆弱的心靈而已. 台灣企業也努力過, 聯發科追過 Wimax 規格, 瑞昱試著訂 UWB 規格, 雖然都功虧好幾簣. 不過該做得還是可以再試一下, 也許有一天就成功了. 九陽豆漿機冠名贊助的真經上說過: “他驚由他驚, 大江閃星星, 他呆任他呆, 隨處有 WIFI." 在驚嘆之餘, 其實只要花一兩個小時就可以略跪門栓, 比一昧佩服人家然後驚呆來得好.

[ref]

1. TCP 與 UDP

2. QUIC Crypto design

3. https://tools.ietf.org/html/rfc5246

4. Quic Geek FAQ  

5. Risk Complete Failure

烏龍的 Uboot 使用記

話說一直忙著其他的事, 我的開發板有好一陣子沒升級了, 有天抽空想把它升級看看, 卻發生了一些烏龍事, 順便把它記下來.

首先要升級 bootcode, 結果發現 bootcode 位置改了. 沒關係, 這小事. 不過把 bootcode load 到 memory 的過程中,  卻把網路驅動打死了, 所以呈現出 tftp 上傳不了的狀態. 其實跟網路一點關係也沒有, 就是位置不對, 像是下面的 BAD ADD2 (R).

tftp 0xBADADD2 my_bootcode.bin

升好了 bootcode, 想練習一下 USB 安裝. 我這邊一直看到 FAE 同仁發 mail 給客戶教學, 但是自己卻沒有實做過. 因為直接按 hot key 升級實在簡單多了! 要從 USB 升級, 首先在 uboot 下打 usb start — 成功! 果然看到很多 USB device, 主要是接 HUB 的關係.  舉例來說 [1], 可能一口氣出現一堆.

=> usb start
(Re)start USB…
USB0:   USB EHCI 1.00
scanning bus 0 for devices… cannot reset port 1!?
1 USB Device(s) found
USB1:   USB EHCI 1.00
scanning bus 1 for devices… 1 USB Device(s) found
       scanning usb for storage devices… 0 Storage Device(s) found
=> usb info
1: Hub,  USB Revision 2.0
– u-boot EHCI Host Controller
– Class: Hub
– PacketSize: 64  Configurations: 1
– Vendor: 0x0000  Product 0x0000 Version 1.0
   Configuration: 1
   – Interfaces: 1 Self Powered 0mA
     Interface: 0
     – Alternate Setting 0, Endpoints: 1
     – Class Hub
     – Endpoint 1 In Interrupt MaxPacket 2048 Interval 255ms

2: Hub,  USB Revision 2.0
– u-boot EHCI Host Controller
– Class: Hub
– PacketSize: 64  Configurations: 1
– Vendor: 0x0000  Product 0x0000 Version 1.0
   Configuration: 1
   – Interfaces: 1 Self Powered 0mA
     Interface: 0
     – Alternate Setting 0, Endpoints: 1
     – Class Hub
     – Endpoint 1 In Interrupt MaxPacket 2048 Interval 255ms

下一步是 fatload usb 0:1 XXX, 從網路上抓個例子 [2].

fatload usb 0:1 0x1000000 launchu3.exe

也就是想把 launchu3.exe 載入到 0x1000000, 這個動作會失敗. 我想起 FAE 跟客戶說, 那個 0:1 不一定是 0:1, 要試試看別的組合. 到底是什麼組合呢? 第一個參數是 device, 第二個參數是 partition. 我們可以根據 usb start 或是 usb reset, usb info 的結果來決定參數. 我選的指令是這個, 簡簡單單, 就算不下參數都可以, 下參數還可以從 0 開始盲測, 哈!

usb part 0

看到 partition table 之後, 找到 device 也沒問題了. 但是 fatload 依然不成功. Console 無情地吐出:

** Unable to use usb 0:1 for fatload **

** Invalid boot device **

這時我發現 usb part 的結果會有一個 type 的數字. 例如 ref [3] 上說的.

Marvell>> usb part 0

Partition Map for USB device 0  --   Partition Type: DOS

Partition     Start Sector     Num Sectors     Type
    1                 2048          317440      83
    2               319488         3211264      83
    3              3532798          499714       5 Extd
    5              3532800          499712      82

可以看出每個 partition 都有一個 type, 其中 83h 就是 EXT2/EXT4 的 file system, 82h 是 swap space. 而我的 USB 呈現的是 type 7h, 這表示它的格式是 ExFat. 啊! 難怪認不到, 沒 port driver. 立馬換個 FAT32 的隨身碟, type 變成 bh, 就 OK 了. 至於那一種 type 對應到哪一種 file system 呢? 可以參考 WIKI 上的 partition type [4], WIKI 內容真是豐富啊!

[ref]

1. https://community.freescale.com/thread/327088

2. http://blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:usb

3. http://www.cyrius.com/debian/kirkwood/sheevaplug/troubleshooting/

4. http://en.wikipedia.org/wiki/Partition_type

VUDU Spark Unboxing

As everybody knows [1], VUDU annouced her own streaming dongle – VUDU Spark just like Google Comcast and Amazon Fire TV did recently. By noticing the famous “PREFIX", you can easily find out that each dongle has a rich father stands behind it. Google has ECO system advantage, Amazon has on-line stires. How about VUDU? VUDU dongle is now available in 2400 Walmart stores because Walmart acquired VUDU in 2010. So VUDU Spark has off-line store to support it.

VUDU Spark is sold at only $25, it is the most inexpensive product in the market comparing to Comcast ($30), Amazon’s Fire TV ($40), Ruku’s streaming Stick ($50)…etc. However, VUDU Spark is also bundled with $25 credit for movie rental, so it is actually free of charge.

After you open your pack, you can also see a USB power cord and and a RF remote controller. If your TV set does not have a USB port, you can use your mobile phone adapter instead. As to the Zigbee remote controller, it is very convenient for users to control the dongle from 10 meters aways. Even the HDMI dongle is usually plugged behind the huge TV panel.

The playback style of VUDU Spark can be explained by the pciture below. At the upper left corner, you can find out the move title is “Alice in Wonderland". The control bar is placed below and the cyan bar above it is the progress bar. Since the movie almost ends, the bar is also almost full. The center area of the screen is for the (big) subnails. You can use directional keys to browse interested scenes forward or backward, when you press OK, the highlight scene will start to play from here.

At the upper right corn of the screen shot above, you can see VUDU Spark provides DDP and WIFI signal strength indicator, and HDX sign (means higher than HD quality). 

Each movie title and TV show has 3 levels of qualities. It all depends how well the WIFI strength is. How do you know that? You can use the embedded Network Speed Test to measure the bit rate from your TV to VUDU servers. Just like it shown in the pciture below.  

Then ,what happened if the WIFI quality becomes worse during the playback? In this case, VUDU Spark will try to rebuffering enough data for about 3 times. If it fails too often, system will recommend you to try lower bit rates. The selection button of video quality is the 3rd icon (from left side) of the control bar in the previous picture.

Of course, VUDU Spark is not the only dongle in the market. and VUDU is not exclusively existed in SPARK. But the number of HDMI port of a TV is limited, if user gets used to play VUDU Spark, it will occupy one HDMI port for a long time. That will be good to VUDU. Otherwise, users may also broswse some Netflix, some HULU+, some Youtube,…, this kind of thinking may explain why VUDU is willing to sell this VUDU Spark for “free". 

[REF]

1. Walmart’s $25 Vudu Spark streaming stick is now available to the masses

2. Walmart acquired Vudu in 2010