2016年12月27日 星期二

Tvheadend and Raspberry pi

很久以前曾經有研究過DVB-T Streaming
http://blog.mosquito.work/2014/07/stream-dvbt-by-vlc-on-debian.html

後來嫌麻煩放棄了,維持了很長一段時間在本機上透過me-tv直接看電視
(這過程中還包括研究vaapi、VDAPU,透過硬體加速改善Full HD解碼效能)

me-tv升級後嘗試改變架構,改為Client-Server架構,
後續維護的沒那麼好,加上功能始終很陽春,可是我只是拿來看看電視
所以一直沒有去動這塊

前一陣子,為了看小熊對印地安人總冠軍第七戰
我在公司的時候,花了不少時間在查線上收看
可是沒一個能看的
最後發狠,WOL把家裡電腦打開,透過第一個連結的方式
直接用VLC串流,讓我可以連回家裡看轉播XDDDD


因為這樣的緣故,又心血來潮Google類似的關鍵字
我找到了Tvheadend
這是一個PVR軟體,但是有很多Client可以搭配使用
所以我在我的Server上安裝Tvheadend,把USB DVB-T dongle移到Server上
接著在手機、桌機、小米盒子上分別安裝對應的Client
手機是TVHClient https://play.google.com/store/apps/details?id=org.tvheadend.tvhclient&hl=zh_TW
桌機則是用Showtime https://movian.tv/ 我搞不太清楚到底叫movian還是Showtime...
小米盒子上則是裝Android Kodi https://kodi.tv/download/

這樣一來,我可以在三個不同裝置上收看數位電視咧~

但還是有一些缺點,Tvheadend預設是Pass profile
就是從USB DVB-T Dongle收進來的TS,直接轉送出去
好處是佔用相當少的CPU資源
缺點是佔用比較多頻寬
一個是在家裡看FullHD頻道,很容易出現影音不同步現象(但後來懷疑是小米盒子解TS的效果不好Orz)
一個是在外面就更不用想看FullHD頻道,我家網路上傳頻寬不夠大...

又一次心血來潮,繼續Google,
嘗試現有的Server上開Transcoding,花了不少時間終於可以打開,結果因為CPU太差,一開就是悲劇
又找到另外一篇文章,有人在Raspberry Pi上使用Tvheadend,並開啟HW Encoder
也有人說Raspberry Pi 3的效能足夠負荷最低品質的Transcoding...(但我的是Raspberry Pi 2...)

因此,我又花了一堆時間,最終在Raspberry Pi 2上弄好Tvheadend
實際測試的結果,Transcoding同樣是悲劇
但在電腦上面看FullHD似乎影音不同步的現象有改善?!

就不管了,目前先這樣照用,
等哪天心血來潮,再來想辦法研究
順帶一提的是,Raspbian新的Desktop PIXEL
用起來的感覺比以前舊版本的要漂亮多了~~~~
那張大大的底圖,基本上增加很多印象分數XDDDDD

2016年12月4日 星期日

東亞日光燈具型錄

找電子安定器挖到的資料
留一份起來作參考

https://drive.google.com/file/d/0B1wG0-c31TM2ZHpFR3RRZUFoUFE/view?usp=sharing

2016年12月1日 星期四

Fix Spreadsheet Compare (Compare between 2 excel file)

因為有需要進行Excel的比較,找到一個open source的tool

http://www.thefoolonthehill.net/drupal/Spreadsheet%20Compare
https://sourceforge.net/projects/spreadshcompare/

安裝教學與問題排除
http://www.thefoolonthehill.net/drupal/sites/default/files/WebFM/admin/help/Spreadsheet_Compare/Spreadsheet%20Compare%20Help.html?Introduction.html

這個還不錯用,只是使用時要自己手動設定一堆,或是另外安裝一堆Library
搞到最後,有一個MSCOMCTL.OCX
根據說明文件,這個是ProgressBar的元件
忘記是裝不上去,還是裝上去卻一直有問題

最後放大絕,直接把ProgressBar這個元件,連同相關代碼都註解掉
至少讓功能可以動作

留個備份
https://drive.google.com/file/d/0B1wG0-c31TM2NFNXeWtRTVV0U00/view?usp=sharing

2016年11月14日 星期一

MicroSD Card write endurance test

前文
MicroSD/eMMC Endurance?
讓我想試著測試MicroSD卡...

如同網路上對SSD作的測試
我想要對一張MicroSD卡持續讀寫,驗證它甚時候出現BadBlock
這個測試放在我的Server上面跑,因為一般PC沒有SD Interface
所以採用USB讀卡機作為SD Interface

因為MicroSD不像SSD有SMART資訊可以判讀總寫入量(Total Bytes Written)、錯誤發生數量(
Reallocated Sectors Count)
所以採用Badblocks直接對磁碟進行讀寫操作,判斷錯誤發生的數量
讀取/proc/diskstats的sectors written判斷總寫入量

最後,收集數據,自動上傳到Blogger,最後再來想怎呈現
測試的Log會自動發布在Sandisk 8G Write Test

目前測試的MicroSD卡是舊的,等整個測試驗證ok再拆新的卡來跑XD
測試shell script如下,如果有修改再更新

#!/bin/bash

# Loop badblock to write disk
# check the disk endurance, and update it to blogger

DISK='sdc '

while true
do
	sudo badblocks -ws -o usbstick.log /dev/sdc
	DATE=`date -R`
	DISK_TOTAL_MBYTES_WRITEN=`grep $DISK /proc/diskstats|awk '{print $3"\t"$10 / 2 / 1024}' `
	BADBLOCKS_LOG=`cat usbstick.log`
	echo $DATE,$DISK_TOTAL_MBYTES_WRITEN,$BADBLOCKS_LOG >> Sandisk_8G_Write_test.txt
	b.py post Sandisk_8G_Write_test.txt
done

8G的卡, MLC如果3000次,可以寫入24TB的資料量
假設2MBytes/Second
要花138天...

Post Blogger from Linux Shell or command line

前文
MicroSD/eMMC Endurance?
MicroSD Card write endurance test

在進行測試的過程中,我打算把測試結果自動發布
要發布到網路上很簡單,但確有不少限制
如果隨便找個網站或是pastebin貼,在這個Blog上我只能用一個Link的方式指過去
不能透過javascript撈到這些資料
因為安全性因素,javascript預設不能跨站存取資料
refer: 同源政策 (Same-origin policy)

要處理這塊似乎有點麻煩,因此我把念頭轉向直接更新到Blogger上

陸陸續續Google了不少資料,測試不同的範例
從shell script到python的範例
從Google API v2到v3
oauth 2.0 api到Blogger api
(我應該再多比較一下的...現在看起來直接貼blogger比CORS還麻煩Orz)

最後找到這個專案
b.py http://pythonhosted.org/b.py/index.html
不確定Owner還有沒有在維護,因為網頁上有尋求人接手的訊息
執行的時候有Warning message,但還可以正確動作

文件看起來很詳細,但實際用起來還是碰到一些狀況
備註一下這些狀況或是我覺得寫的不清楚的地方

  • http://pythonhosted.org/b.py/introduction.html#installation
    可以用pip安裝,但pip安裝時沒有處理相依性問題,網頁上有另外列出相依的package
    (是pip本來就不會處理相依性問題嗎??我不太熟這個...)
  • 安裝後,因為我要貼到Blogger,需要透過Google開放的api進行操作
    Google api改為全部資料存取必須先經過oauth 2.0 api認證
    所以需要設定相關的client_ID跟client_secret
    (這兩個值需要在Google API Console申請)
    http://pythonhosted.org/b.py/apidoc/bpy.services.html#module-bpy.services.blogger
    但這邊提供的範例內,service_options宣告為dict型態,key為字串型態,應該要用單引號包起來
    但client_id跟client_secret沒有...
  • http://pythonhosted.org/b.py/introduction.html#dependencies
    相依性列出的算是詳細,但可能是因為小弟我資質駑鈍,有些地方一開始沒看懂...
    Handlers是負責解讀文件的parser,將文件解讀為正確的排版,貼到Blogger上
    Handlers是粗體字,底下的AsciiDoc、HTML、Markdown、reStructuredText、Text表示的是可以支援的輸入格式,需要對應的Package來處理

    Markdown似乎不支援一些語法? 我用Table語法沒有被正確處理成Table
    reStructuredText需要的Package似乎下架了,因為我找了半天找不到
    最後才看懂他的表示方式,因為我只需要簡單的文字,所以直接使用Text格式上傳
    輸入格式依據輸入檔案的副檔名決定
搞blogger的時間比我寫測試腳本的時間還多很多...

Anyway, It's worked!

MicroSD/eMMC Endurance?

隨著NAND Flash越來越普及,NAND Flash的價格越來越低,低到可以當作PC的主要儲存媒介來使用,SSD單價比硬碟高一些,但速度比硬碟快上許多
可靠度也已經有不少測試,實際驗證SSD的可靠度
依照測試的結果,SSD一般使用情境應可以使用上七八年不成問題

但實際上,隨著半導體製程的演進,密度越大,價格越來越低
NAND Flash的可靠度也越來越低...
實際上現在的MLC NAND Flash,P/E Cycle已經降到剩下3K,而且這還是開啟一堆雜七雜八功能的情況下的可靠度...
快閃記憶體可靠性對控制晶片的挑戰

從NAND Flash耐受度(Endurance)與所需ECC修正位元數的趨勢來看,過去SLC僅使用1bit ECC,P/E Cycles為100K,到了2xnm就降到60K,MLC則隨著製程的演進,Endurance呈現巨幅下降,ECC修正位元數呈現指數曲線的暴增;從5xnm製程的MLC的P/E Cycles有10K、需4bit ECC,到3xnm製程的MLC其P/E Cycles已下降到5K,且需要 8bit ECC;2xnm製程的MLC則降為3K、ECC修正位元提高到15~24bit。而TLC記憶體的P/E Cycles更降到1K以下,需72bit甚至上百位元的ECC。因此Flash控制晶片的編碼技術,將從BCH編碼技術,逐漸轉向LDPC(Low Density Parity Check)。

refer: Flash與SSD產業的挑戰─可靠度與總成本
我手上有Raspberry pi跟Raspberry pi2各一塊,都是用MicroSD作為主要儲存
另外手上的手機、平板也分別是使用NAND Flash與eMMC作為主要儲存

我手上有一台艾諾烈焰,製造日期為2012/08/16,主要拿來看漫畫、小說的
這一兩年也出現過異常緩慢,開機後出現缺少package之類的訊息,有時甚至要進行還原才能正常工作
懷疑是NAND Flash已經衰退,剩下就是拖一口氣,看哪天壞到連還原都沒救XDDD

這台是直接使用NAND Flash的產品,拆機圖片如下
貼的NAND Flash為美光29F64G08CBAAA
這顆現在應該停產了,淘寶上還找的到料(不知道是真的假的...)
像這種Pure NAND的產品,依靠的是SOC本身的NAND Controller作ECC與Bad block control
NAND Flash的可靠度也無從判斷起...


那如果是使用eMMC的產品,或是使用MicroSD搭配RaspberryPi,MicroSD/eMMC提供的可靠度足夠讓系統長時間穩定運作嗎??

網路上找的到的資料不多,如果我自己來作這樣的自動測試?
有這個念頭...就開始弄吧:D

2016年7月13日 星期三

第一次洗板子... ADC Converter v0.1

先前因為工作需求,拿麵包板接了一個電路
用STC的mcu,搭配10K NTC電阻
用mcu作溫度觀測

FW的部份
ADC量測,換算成溫度,透過UART輸出量測結果
接著以PC teraterm作Data logger

同事看到覺得這個不錯,雖然公司沒有專門的溫度監測儀器,
但針對一些需要長時間監測的情況還是可以湊合著用

我心中的小宇宙又燃起了一把火
一直沒有完成的電路跟Layout
(每次畫到一半就放棄,Layout線拉不出來...)

趁著有需求,週末花個一天時間把線路跟Layout畫完
我對Layout很不熟,看是會看,畫倒是沒有任何經驗
想說反正低頻,也沒吃多大電流,管他媽媽嫁給誰
把幾條主線大概拉一拉
剩下就Autoroute給他跑下去XDDDDDD

畫電路跟Layout是用Eagle免費版本,有一些限制,但夠用
不過更好的是,Eagle有Linux版本~~~~

Firmware則是用Code::Blocks搭配SDCC,在Linux下編出Intel Hex格式的binary
燒錄原先是在公司用STC的Tool燒,STC的tool只支援Windows
回到家裡,則是在網路上找到的tool stcflash.py

綜合以上,整個開發都可以在Linux platform下完成

Layout在淘寶找了一個pcb洗板打樣的賣家
花了40塊人民幣(運費10塊~25塊另計)
最後成品回來,自己再人工上件

洗板的成品跟上件後的成品如下

幾個缺點紀錄一下

  • 當電源開關的Switch選錯Symbol=_______=
  • Crystal原本想Co-Lay,可以選用Dip件或是SMD件,結果放太近了,鐵殼會貼到Pad。
    在上件前先貼上透明膠帶充當絕緣XD
  • Crystal的負載電容其實轉45度就好放很多,當初不知道在糾結啥,硬放一個很奇怪的位置,不太對稱XDDDD
  • 應該再多一條Trace放LED,充當電源指示燈跟放電迴路,放電放的有點慢
  • VCC那條Net沒有特別改,只有10mil寬,應該要再加寬一些

2016年6月25日 星期六

reset USB device when resume/wakeup my desktop with linux mint 17 (ubuntu 14.04)

Cause I've replace my desktop before, from Homebuilt computer that old than 8-year
To brix mini computer, and I've solve the monitor VH226H HDMI source could not sleep issue by replace it to VGA source...

Now I have a computer that can sleep/hibernation and wakeup/resume
but following issue is, I've plug a DVB-T usb dongle on my Desktop, and I'm using Me-TV 1.4 as my TV player,
Me-TV 1.4 turn into server and client architecture, so server application will stay in background, keep open device

If computer sleep or hibernation, it wake up or resume quickly, but DVB-T dongle might be work abnormal, maybe the driver does not implement relative power management function? I don't know:~

I need replug my DVB-T dongle , kill Me-TV server manually to make it work
Hm.... Try to make it easier:)

put following code to /usr/lib/pm-utils/sleep.d, save as 99ZZ_my_script, and make it executable
it could kill me-tv both server and client when sleep,
and when you wake up, find the usb port number, force it reset

#!/bin/sh
# resume me-tv-client if exist

case "$1" in
 hibernate|suspend)
  #echo "7 blink" >/proc/acpi/ibm/led
  killall me-tv-server
  killall me-tv-client
  ;;
 thaw|resume)
                for X in /sys/bus/usb/devices/*; do
                    #if [ "$VID" == "$(cat $X/idVendor 2>/dev/null)" -a "$PID" == "$(cat $X/idProduct 2>/dev/null)" ]
                    if [ "MDTV Receiver" = "$(cat $X/product 2>/dev/null)" ]
                    then
                        Port_Number=`echo $X | awk -F / '{print $NF}'`
                        #echo "Found $Port_Number"
   echo $Port_Number > /sys/bus/usb/drivers/usb/unbind
   sleep 1
   echo $Port_Number > /sys/bus/usb/drivers/usb/bind
                        break
                    fi
                done
  ;;
 *) exit $NA
  ;;
esac

exit 0



refer:
  1.  Run Script on Wakeup?
  2.  POWER OFF AND ON USB DEVICE IN LINUX (UBUNTU)

2016年6月19日 星期日

換了新眼鏡...

換了新眼鏡,留個紀錄
這次配的度數比較高一些,
不過好市多的眼鏡部,驗光比一般的眼鏡行要來的仔細咧...


2016年5月27日 星期五

Brix GB-XM11-3337(Intel graphic HD4000, HDMI and miniDP) multi monitor with linux Mint 17

一兩個禮拜前,我跟朋友買了一台Brix GB-XM11-3337
取代我原有的桌上型主機,快要十年的e6300+EP35-DS3

一開始花了兩天的時間把舊的OS搬到新的硬碟去
舊的硬碟是SATA 64G SSD
換到新的硬碟mSATA 128G SSD
都是之前公司的同事友情贊助的>//////<

花了兩天處理,因為一開始沒處理好,不小心把grub弄爛了Orz


搞定作業系統後,第一個就是體驗到開機果然快上不少
(光是USB開機都比之前快Orz)

接下來就是處理雙螢幕問題
之前在網路上一次買了兩條線,一條miniDP轉HDMI、
一條miniDP轉VGA

兩條線在公司的Notebook上測試都正常
但回到Brix GB-XM11-3337,miniDP轉HDMI正常,miniDP轉VGA偵測不到

因為我需要VGA螢幕搭配KVM的緣故,所以必須處理VGA問題
先從軟體方面著手,
試著安裝intel graphic installer,
但沒想到現在支援的作業系統平台只有ubuntu 14.10, 15.04, 15.10
14.04還不支援,16.04兩個LTS版本還沒支援...
Linux mint 17 based on ubuntu 14.04,結果就是悲劇...

測試了幾個作業系統都是同樣結果,
甚至手動將Kernel升級到4.3.3也是同樣結果


軟體方面無法改善,改從硬體方面下手
miniDP轉VGA的線拆開後,發現是Realtek RTD2168方案
網路上找不到這個IC的Datasheet
仔細逛了一下,有些miniDP轉VGA標榜使用的是Analogix ANX9832
在拍賣找到一個,貴了一點,直接下標購買
截圖留個紀錄
回家之後測試同樣不能用... =______=
看起來跟我買的第1條長的就是一模一樣
拆開來看看

What's the...
跟賣家說的不一樣,結果還是RTD2168...

往比較負面的角度想
這個賣家八成也是批來賣,可能也沒搞清楚他賣的是什麼方案
隨便從網路上抄資料來貼的吧...
這條線聯絡賣家退費了
商品規格與實際商品不同,有廣告不實的嫌疑
如果商品有價差(例如拿低價規格當高價賣),有詐欺的嫌疑
其實我不太懂賣家的態度不太好是什麼意思...


馬上在PCHOME再刷一條,

http://24h.pchome.com.tw/prod/DPAH48-A9006PZ07
收到之後測試,果然可以用了!!!!!



雙螢幕到此告一段落
接下來要處理VH226H HDMI不會休眠,
或是因為我的新電腦太省電,結果我的節能延長線沒辦法正常斷電的問題=___=

2016年3月6日 星期日

wpa_supplicant configuration with unicode/chinese SSID

為了設定raspberry pi的wifi搞了幾個小時
留個紀錄,以便我自己可以google到XD

refer: http://lists.shmoo.com/pipermail/hostap/2012-August/026419.html
wpa_supplicant.conf
ssid這欄可以直接吃hex的ssid
所以,例如我的SSID是小黑的家
轉成utf8 hex是E5 B0 8F E9 BB 91 E7 9A 84 E5 AE B6
直接在wpa_supplicant.conf輸入
ssid=E5B08FE9BB91E79A84E5AEB6

上述例子是utf8,我不確定會不會有ssid用utf16編碼
可能碰到要再試試