2015年11月1日 星期日

以 linuxtv-dvb-apps 中的 tzap 測試數位電視訊號品質及錄影

 2017/10/8 排版及增加頻道檔案
 ========

在PC 上包好 archlinux 的電視棒module後,
繼續朝網樂通加上錄數位電視邁進。

這次主要是要找 Linux 上測訊號品質的方式,
又意外發現 linuxtv-dvb-apps 中
的 tzap 可以直接錄影,
只是檔頭好像不標準,
檔案管理程式不會當作影片。

不過 Mplayer 的 lavf demuxer 或Mplayer加強板 MPV 的lavf demuxer可以正常播放。
連之前只能在Windows 中的 TS player 播放的 兆赫zinwell 620hd 錄的檔案都可以用 lavf 解開。

Root 及 Unlock Nexus 7 2013 並保留所有資料

Nexus 7 2013 已經使用超過1年半,
在2015年初在過保前送到華碩皇家維修觸控問題,
還沒滿1年又有觸空問題。

乾脆取得 Root 權限,
遇到觸控有問題的區域就強制旋轉到另一邊。
還有太多App限制平板不能安裝,
也可以假裝成手機型號解決。
順便要解決只能收簡訊,看完馬上蒸發的情形。
意外發現去年底有人利用漏洞寫了免加核心檔案就能收發簡訊。


一般 Root 是先改 Bootloader,
但是Android 內建的 unlock 會清除資料,
還好有高手找到漏洞可以直接取得 Root 權限,
再利用 root 權限執行 unlock App,
就能在不清除資料情況下完成取得 root 權限加安裝客製化 Recovery 系統。

單純筆記(未排版):

2015年9月4日 星期五

PHP 萬年曆公式及星期計算公式

google 萬年曆公式,
沒想到第一個的內容就是有問題的,
奇摩知識+的雖然有加上月日天數對照表,
但是在閏年還是有錯誤。
看到頭昏眼花,
最後用程式驗算,
希望是比較正確的公式。

Ctrl+C Ctrl+P太容易了,
好像沒人要驗算。
代入的年份沒有減1的公式,
在2016年1月1日會出錯。

實際上公式應該是:

日月天數對照表:
一至十二月依序是
平年 [0,3,3 ,6,1,4 ,6,2,5 ,0,3,5]
閏年 [0,3,4,0,2,5,0,3,6,1,4,6]
根據說明,
這是各月1日和1月1日的星期數相差的天數。

判斷閏年:
Wikipedia中寫的目前使用的格里曆閏年規則如下:
  1. 西元年份除以400可整除,為閏年。
  2. 西元年份除以4可整除但除以100不可整除,為閏年。
  3. 西元年份除以4不可整除,為平年。
  4. 西元年份除以100可整除但除以400不可整除,為平年。
//判斷閏年部份寫成PHP 程式
if((!($year%4))&&$year%100!=0||(!($year%400)))
{
    $isLeapYear = true;
    echo $nowYear." is leap year.\n";
}


星期計算公式:
首先將代入的年份-1,
因為上方閏年對照表的閏年1月是和上個平年相同,
如果以閏年數字帶入,會至少多加1天
造成錯誤答案。
所以2016年必須代入2015。

2016年1月1日算法:
2016是閏年
(2016-1)÷4=503.75
(2016-1)÷100=20.15
(2016-1)÷400=5.0375
日月天數對照:0(查表)+1日=1
(2015+503-20+5+1)/7=357 餘 5
表示星期五。
算式:
(去年+(去年÷4)-(去年÷100)+(去年÷400)+日月天數對照表對應數字+日數)÷7 後取餘數
用Excel 或 LibreOffice Calc 驗算(實際上有直接顯示星期的公式),
A2輸入年份,
計算當年1月1日星期幾
=MOD((A2-1+ROUNDDOWN((A2-1)/4)+ROUNDDOWN((A2-1)/400)-ROUNDDOWN((A2-1)/100)+(0+1)),7) 

//計算year年month月第1天星期的PHP程式
$daysBias = [0,3,3,6,1,4,6,2,5,0,3,5];
$daysBiasLeap = [0,3,4,0,2,5,0,3,6,1,4,6];

$day = (floor($year-1)+floor(($year-1)/4)+floor(($year-1)/400)-floor(($year-1)/100)
        +($isLeapYear?$daysBiasLeap[$month-1]:$daysBias[$month-1])
+1)%7;

(如果想維持代入當年數字,上方的閏年的日月天數對照表就需要另外修正。)