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月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天...

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

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!

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編碼
可能碰到要再試試

How to disable GUI on armbian (revert the Desktop to server)

Check which Display manager that you're using currently cat /etc/X11/default-display-manager nodm should be default if you're choose...