2018-07-15

好力屋、日本阿嬤

這次飛過去除了在空中看見山丘上寫著大大的「好力屋(Hollywood)」之外,回程
在空中第一次看到圓型耕作,大約在北緯32.82431, 西經109.92879, 11088公尺的
空中看到的。

查了一下,叫做Center pivot irrigation, 中文翻成「中樞灌溉系統」

差不多就是這段影片所說的
https://www.youtube.com/watch?v=DE3tJzL-LT0

水從一個固定點,借由直的管線,像時鐘指針那樣旋轉、噴水灌溉,所以耕作面積
呈現圓形。

********
在LA轉機時還發生一個有趣的事,一位日本阿嬤問我轉機的事,很巧的是,她也是
要飛到EL PASO!

一聽她說的是非常日本腔的英語,然後又發現她的英語非常有限,就開始試著用我
稍微能用的日語跟她交談起來。

這位日本阿嬤86歲,看起來還蠻健康,她家住在日本最大湖泊「琵琶湖」附近的
近江八幡市,一個人從東京羽田機場搭機到LA,要去找她在EL PASO當醫生的60歲
女兒。

從EL PASO機場出來時,她背著背包,然後拖一個行李箱,86歲行動都還很靈活,
說她女兒會開車來載她,不必為她擔心,還跟我握手道謝,我就搭車去飯店了

2018-07-02

抗噪音耳機

長途飛行最令人難以忍受的就是飛機引擎加上機體與空氣磨擦所產生的噪音,
從台灣飛鄰近亞洲國家,如日本、韓國、中國或馬來的話,大概兩三個小時或
頂多四個多小時,忍一下就到了。飛十幾個小時的話就很不好受,也難睡著。

這次出差前領到一支SONY主動式消除噪音耳機(Noise Cancelling Headphone),
效果相當不錯。這支耳機除了消除噪音,也可以當一般耳機聽音樂、電影。這次
在看機上電影,劇情場景進行到寧靜公園裡,出現鳥聲時,還真有點訝異!在
飛機上怎麼會有這麼像真的公園鳥鳴聲?

這種主動式消除噪音耳機是內建電池的,它含有一個微型運算器,會根據收到
的外在環境音波,計算出一個反向波,把規律的噪音抵消掉,這樣你就會有身處
安靜環境的感覺。

缺點就是,它跟飛行員戴的耳機相似(不是耳塞式的),所以有相當的重量,以及
夾住你的頭的壓力。

這款SONY WH-1000XM2有一個缺點,就是在不接藍牙也不插3.5mm音源線後,
它五分鐘到就斷電關機。為了只用來消除噪音,不想聽音樂的時侯,可以在它的
耳機孔插入一個3.5mm音源插頭,這樣它就不會斷電了。

聲明:我不是SONY公司的人, 也沒有SONY股票

2018-07-01

在EL PASO同時看到金水兩星

今天在北緯31.7811632西經106.3963542度,UTC時間7月1日03:25左右
看見金星(約19度仰角)水星(約7度仰角)在西方, 以及高掛天空的木星.

同事卻把木星及週圍幾個星認為是夏天三角.
所謂夏天三角應該在仲夏的午夜會出現在中天, 這個時間怎麼可能高掛頭頂 ?

剛才看星星的時間是當地的晚上九點二三十分左右, 查一下星圖軟體,
這時間夏天大三角還在東方不到45度的天邊.

2018-06-26

低頻噪音的測量

我國法令對低頻噪音的規範為20到200Hz。
低頻噪音對人體的危害包括對人體會產生壓迫感、對睡眠及生心理的影響大,可能
導致神經衰弱、憂鬱症等等。
最近辦公室座位異動,結果新座位區域鄰近是主要機房,而機房的空調壓縮機就日夜
放送低頻噪音了!
手機很方便,用來量測低頻噪音的軟體很多,試用之後覺得這個不錯用:
"Sound Analyzer Free"
https://play.google.com/store/apps/details?id=jp.nokubi.nobapp.soundanalyzer.free&hl=en_US
可以量出那個壓縮機不斷放送的低頻為90Hz,其它軟體使用上不太方便,這個可以
用手指拉放,找出峰值圖。

2018-04-05

玩Android不註冊不綁信用卡

使用Android phone最令人討厭的就是要你註冊,還要綁信用卡。
不然就不能在google play 安裝app(apk)!
當然還有很多地方可以下載apk, 但各有優劣,對於Linux用戶來說有個比較
簡單的辦法,就是利用gplaycli來搜尋、下載。
https://github.com/matlink/gplaycli
https://github.com/matlink/gplaycli/releases/

python3 setup.py install 之後,視你系統現有的環境,可能需要裝一些額外的
packages 如 libffi-dev, libssl-dev, python3-dev.... 才能有 xxxxx.h 的.
完成之後的用法是
gplaycli -s flightradar24 (用來搜尋某個app)
gplaycli -d com.flightradar24free (用來下載某個app, app名稱就是
搜尋後看到的AppID)
(但有時候它會一直說server busy, 要試很多次才能下載,但有時候一次就下載成功)

最後就是用 adb install com.flightradar24free.apk (安裝)
如果試了一下發現不好用,馬上
adb uninstall com.flightradar24free (不必加 .apk)

當然你的手機要先打開「開發人員選項」,這在出廠值之下是沒有的,要特別去按
某些地方才會有,以Nougat(Android 7.x.x)來說,要進「關於手機」找到
「版本號碼」這項,一直按,然後回到上層就會看到多出一項「開發人員選項」。

2018-03-10

漢文化沒有愛、自由的元素

漢文化(也可以說包括朝鮮、扶桑、安南)開口閉口的總是忠、孝、節、義,
影響所及的各國完全找不出「愛、自由」,所以昭和的日本可以發動太平洋戰爭、
以及戰爭末期的自殺攻擊。二戰的中國可以鼓吹各種犧牲自我去送死愛國的戰術,
這些都是源自漢文化陰暗的忠、孝、節、義教育,從漢文化的小說、戲曲裡硬是
找不到除了忠、孝、節、義之外的元素。

漢文化沒有「愛、自由」更表現在「筷子寓言」,漢文化同時也是筷子的發源地,
然而「筷子寓語」卻強調要把筷子綑綁在一起、強調這樣才能團結,殊不知筷子
就是要一支一支分開,才能組成一雙一雙,用來餵飽每一個人,把筷子綑綁成一把
只會讓人沒有吃飯的工具。

2018-02-28

人類捕魚的big data

BBC的報導
http://www.bbc.com/news/science-environment-43169824

提到漁撈是跟政治、文化綁在一起的產業活動,它並不會受季節、氣侯影響。

因為依照規定,大型漁船要裝設自動識別器,它每幾秒就會發出自己航向、位置
、速度的識別訊號,所以只要從天空的衛星就能收集全世界的漁船在哪裡、在什
麼時間從事漁撈作業。(GMSK, 9600bps, 161.975 MHz, 162.025 MHz)


中國是作業時間最多的國家,在2016年,超過一千六百多萬小時,
幾乎快要等於全世界的作業量。


整個中國的東到東南沿海的漁撈作業!

迴音定位,人類也可以像蝙蝠

根據BBC這一篇,有些盲人是可以被訓練得能夠用自己的口腔
來發聲,然後聽取回音,但主要是面前的物體,側面或後面
的物體就要花更多時間去偵測。
http://www.bbc.com/news/science-environment-43173613
而最能辨識的物體高度大約在臉部到胸部之間,這可以補償
白手杖所無法偵測到的範圍。

這篇有詳細的實驗解說
http://rspb.royalsocietypublishing.org/content/285/1873/20172735

是不是可以用現在電子設備的達到相同的目的?
有沒有已經有類似的商品?
像已經可以用Arduino搭配超音波迴音測距儀(例如HC-SR04)來做一些
自動裝置。 

2018-01-09

UART with FTDI/PL23

一般來說ARM SBC是丟在某個角落, 只要它乖乖做事, 是不會去看它的. 最近拿到
一支OrangePi Zero, 就是以這個目的來使用, 這是一支沒有video out的SBC(RaspPi
有HDMI), 好處是它有獨立的UART debug port(RaspberryPi要另外config兩支GPIO
來當RX/TX才能接UART/TTL), 拿一台NB接上就能進系統改東西.

一般是在NB上插一支USB/TTL轉接器, 跑miniterm.py, 結果只有看到boot時的
messages, 但是messages到一個階段後就再也沒有東西出來, 也就是沒有login prompt.

於是東查西查(現在都改用systemd, 沒有/etc/inittab), 也查了systemctl的
getty@ttyS0以及/etc/systemd/system/ 還有 /lib/systemd/ 下面各種可能造成
沒有login的原因, 但是仍找不出來.

這支USB/TTL用在RaspberryPi 完全正常, 因此一直沒懷疑它, 今天想到之前用在
ESP8266時, 不同支ESP8266對不同USB/TTL的反應不一樣, 因此換一支FTDI的,
結果就能看到OrangePi Zero送出來的login prompt了!

看來這隻OPiZero的UART電壓可能跟RPi的不太一樣.

miniterm.py /dev/ttyUSB0 115200 --eol LF --raw
加--eol LF以及--raw 才能避開各種控制碼造成的混亂.

2017-12-02

telegram-cli觀察記

已經觀察了六天,發現telegram-cli拉高CPU loading的時間不一定,有時連續
一整天每個小時都出現很多(幾十次)衝到50%以上的情形,有時卻好幾個小時都
不曾出現10%以上的loading,但可以確定的是「不是OS造成程式loading high的
問題」,懷疑是網路通訊連接到telegram server有阻礙,因此一直retry導致
loading high。這六天的紀錄也沒有出現70%以上的(使用A10 single core)。

"-P XXXX"好用的地方在於telegram-cli仍可以續繼操作,又可以接受外部程式
送來的payload,並將它送出。

2017-11-26

telegram-cli 使用後記

telegram-cli使用兩年多好像沒什麼不良,但最近卻發現主機常常system reboot,
查來查去,推測是telegram-cli把CPU loading拉很高,最後引發system reboot.

好吧,那來加個監測CPU loading並且把情況回報給自己的帳號,這樣就可以找到
最後的黑盒子內容。
telegram-cli 加上 -P 2323 的參數,開一個小門來讓外部程式送訊

監視CPU的程式可以用
pn = popen('pidof telegram-cli').readline().strip()
P='top -bn1 -p %s|tail -n1|awk \'{print $9}\''%pn
while True:
   L = popen(P).readline().strip()
   如果 L 大於 10 就送個簡訊
   system('echo "msg XXX_YY %s %s"|nc localhost 2323 -q1'%(L,strftime('%T')))
   如果 L 大於 90 就把它殺了
   system('sudo pkill telegram-cli')

2017-09-04

釵、十手、古武道

最近看了2016年的時代劇「傳七捕物帳」,劇中主角傳七是江戶時代的捕快,
他的隨身武器叫做「十手(Jutte)」,十手是鈍器,但它的側邊有一支L型的護具,
就是用它來鉗住日本刀,同時可能再從身上拿出另一支十手來打彎或甚至打斷日本刀,
進而制服對手。











網路上有一篇談「十手」的文章在結尾說
『十手在硫球空手道體系中系統性地演化並發展出特定的套路,成為硫球空手道的經典兵器。』
這似乎有誤,琉球古武道的武器並沒有「十手」而是另一種叫「釵(sai)」的武器。
「釵」是鈍器,在「忍者龜」裡被誤導成利器!

在台灣老一輩武術界稱為「鐵尺」或「太子手」,它是雙手各一支、一對使用的演武法,可以搭配「拳」
來練習使用。釵的武技是藉由翻轉釵身,可以往前突刺或以長過手肘那一小段往後突刺對
手,以及翻轉時敲打對手。


「釵」在主體的左右兩側各有一支突出物,跟「十手」類似,但不同的是「釵」的這兩支
突出物與「釵」主體的距離比「十手」大,為的就是讓手能反握。而「十手」在演技上
並不翻轉,主要是用來鉗制對手的刀具,也因此突出的那一支與主體的距離是較小的,這樣才足以發揮鉗夾的功能。

為了能輕易翻轉「釵」,近年來販售的釵身在「monouchi」這一段被短化了,以便重心落在接近yoku跟釵身交叉處,結果monouchi 大約是tsuka 的兩倍多一點點。

但這也造成另一個問題,就是monouchi 本來設計的長度是比手肘長出大約半寸,反握(握在monouchi 而不是握tsuka)之後,可以用比手肘略長那一段攻擊身後的敵人,但這種短化的設計就少了那一段,殺傷力也變小了。

真是兩難,如果monouchi 比手肘長,在翻轉釵身的時候會比較費力。
最後這張回是傳統釵的長短比例。

2017-09-02

小行星Florence的月球

9月1日掠過地球的小行星Florence(直徑4.5公里)竟然帶著兩粒月球!
這兩粒月球的直徑大約在100-300公尺之間。
內圍的月球大約8小時繞Florence一圈,外圍的月球大概22-27小時繞一圈。

https://cneos.jpl.nasa.gov/news/news199.html

這是NASA在Florence接近地球時用70公尺直徑的大天線以電波偵測出來的
https://www.jpl.nasa.gov/spaceimages/details.php?id=PIA17792

https://en.wikipedia.org/wiki/Goldstone_Deep_Space_Communications_Complex

2017-08-31

PM8546 UART python 讀取資料

最近因為要透過PM8546 UART去讀取後面的資料,才用到更高的230400 baud速度.
基本上python 可以利用兩種方式讀取 serial port data:
1. pexpect 的 before 來獲取
  用spawn()去呼叫 miniterm.py, 新舊版的參數方式稍有不同
  舊版: pexpect.spawn('miniterm.py -d /dev/ttyUSB0 -b 230400 --lf')                                         
  新版: pexpect.spawn('miniterm.py /dev/ttyUSB0 230400 --eol LF --raw')
  (加--lf 或 --eof LF 是為了避免一次得到兩行空行)
2. serial 的 read()
  利用while 來使Serial.read() 不斷累加,獲取到達特定字元(例如 '>' 提示符號)之前的所有字串

從PM8546上讀出來的string再用 split('\r')來分隔每一行,最後從每一行的字串
裡去判讀最終目標字串。

2017-08-26

福衛五進入軌道

這幾天的主要新聞包括台灣福衛五號在8/24昇空,8/25進入軌道。

新衛星的TLE在8/24還不太好找,因為還沒列出FORMOSAT-5,
還好找到一個8/24發射的2017-049A 然後再找到 42920
就找到TLE了.

1 42920U 17049A   17237.24511176 -.00000044  00000-0  00000+0 0  9993
2 42920  98.2909 311.6421 0009843 225.0388 135.0120 14.50730944    72

用earthtrack 畫出來
前不久經過台灣附近
即將經過台灣附近

不過有新聞提到Xspace公司這次發射福衛五號是陪本生意,因為用一支很大的
火箭來射一粒小小的福衛五就像開一列捷運車,卻只載了一個客人。

2017-06-18

雨天裡公園的滑水道

這幾天的預報,下雨機率都是百分之百,也使得入夜後氣溫涼到只有廿三、廿四度,
端午之後這麼涼的天氣也很難得。

下午路過附近公園,因為下著雨,除了涼亭有少數下棋的人以外,整個公園只有
我一個行人,以及雨滴打在傘上的聲音,連鳥都去躲雨了。

走過遊戲區,有一套架高起來的溜滑梯以及攀爬平台,滑道分成有蓋式的、無蓋式
的,塑膠(或塑鋼、FRP ?)製大紅大綠的那種。

忽然聽到小孩的叫喊聲,轉頭看見一個大概幼稚園的小弟。

正在滑著雨水遍佈的滑道,像水上樂園的滑水道一樣,小弟從滑道的洞口出來,
然後站起身。

頭、衣服、褲子都是濕的。

溜下來,接著又爬上梯架,換到另外一個滑道,再滑下來。整個公園沒有人跟他
搶遊樂設施。

小孩的媽媽撐著傘,站在遊樂組合的旁邊,靜靜看著小弟一趟又一趟的滑著、
叫著。

生為這個媽媽的小孩,長大後一定有很多快樂的童年回憶。

我們的這一代、上一代,制式反應是『下雨天不要出去亂玩,淋雨會感冒、
會生病』。

2017-06-10

空機執行CentOS Live(有關iPXE)

原本都是用CentOS Live放在USB,最近因為有需求用PXE執行CentOS,但是傳統上
PXE的tftp傳輸很慢,於是改用iPXE,因為iPXE可以使用像是http, iSCSI, AoE等等的
protocol,相較快很多,http又可以跨越local LAN。

網路上大多數談到PXE是以安裝Linux系統為主要,但是這裡的目的,不是要install
,而是直接跑live system在一台空機上面, 因此需要把整個live image傳送到clicnet端,
如果採用iPXE加上http會比tftp好太多!

不論PXE(或iPXE)基本上只能傳送kernel及initrd兩個檔給client,可是我們有
kernel(vmlinuz), initrd.img, squashfs.img三個檔案,沒辦法全都傳!
而三個檔中的squashfs.img很大,根本不適合用tftp傳送!

網路上有人寫了一個把CentOS Live ISO轉給PXE用的script
https://github.com/livecd-tools/livecd-tools/blob/master/tools/livecd-iso-to-pxeboot.sh

它主要就是把原生CentOS Live的ISO拆開,再重新打包成兩個檔(一個kernel
及一個initrd.img),雖然我已經customized的CentOS Live當然可以再反組裝
回去ISO,但那是多費力氣,並不需要。

只要把squashfs.img打包成ISO檔,塞進拆開的initrd裡面,就構成PXE必要的
兩個檔之一,加上kernel就能透過iPXE快速的傳送到client端執行了。

squashfs.img的customize在這裡只簡單說明,它裡面有一個LiveOS的目錄,
裡面塞了一個ext4的單一檔案,這個檔案可以用dd if=/dev/zero來打底,改變
大小,將整個system tree搬進去,修改後再重新打包回squashfs.img裡面,
就是customize完成。

將squashfs.img打包成ISO的方法如下:
genisoimage -J -joliet-long -r -T -o CentOS.iso --root LiveOS /PATH/squashfs.img
再挖一個坑,例如 myISO/,把產出的CentOS.iso丟進去,myISO/下面你也可以
放任何你要放的檔案。
cd myISO/
find . -print|cpio -H newc -L -o|gzip -9 |cat /PATH/initrd.img - > ../init4PXE.img
產出的init4PXE.img會在 myISO/的上一層。
請注意!上面的"- >" 「減號」跟「大於」之間有一個「空白」

新的init4PXE.img會是幾百MB或超過1GB,看你做了什麼而定。

最後的重點就是bootloader的menu要怎麼寫,原本CentOS Live的bootloader
menu有一個參數
"root=live:CDLABEL=LIVEUSB" 這時候要改成
"root=live:/CentOS.iso" ←這個CentOS.iso是根據上面我們製作ISO給的
名字,然後boot option至少要保留"rd.live.image"這一個。
附註: 要拆解原生CentOS的initrd.img需要用到
CentOS自己的/usr/lib/dracut/skipcpio
這個工具。
(customize CentOS Live可能也要拆解initrd.img並且重新打包。
重新打包就是用上面的指令及參數
find . -print|cpio -H newc -L -o|gzip -c > initnew.img)

2017-04-14

Raspberry Pi 3 serial 通訊

Raspberry Pi 很多時候是靜靜躺在某個角落默默的做我們要它做的事
它不需要螢幕也不需要鍵盤,但偶而遇到網路不通時,這時如果還要
搬一台螢幕再接一台鍵盤才能操作,就太麻煩了。

如果可以透過serial port連進去,就可以隨便拿一台筆記型電腦來操作它了。

https://openclipart.org/download/264608/gpiopinsv2withpi.svg
從這個圖(這是RPi三代機)可以看出右側雙數腳6(接地),8(TX),10(RX)
可以用來做serial通訊。

由於三代Pi是用debian jessie, 隨著debian從sysvinit 改用systemd, 舊版Pi 的
修改/etc/inittab 的控制方式已經不適用, 必需用systemctl 來控制.
(有很多人討厭systemd, 但迫於情勢, 也不得不接受了)

我先是用dietpi-config 來啟用serial port, 但是無效, 後來手動修改
/boot/config.txt 以及/boot/cmdline.txt 裡面加上某些控制字串才能啟用。

config.txt: 加入以下
dtoverlay=pi3-disable-bt
enable_uart=1
這個config.txt 如果是在Raspberry系統執行中修改可能重開後會不見
所以改成把microSD 卡拿出來插到讀卡機裡, 用其它電腦editor來修改.

cmdline.txt: 插入以下
console=serial0,115200
這裡的"serial0"是一個sym link, 如果不通, 可以試試看ttyAMA0 或ttyS0

重開機後執行systemctl|grep serial 來確認一下serial 方面的service狀態.
當然在硬體方面你要準備一支USB to TTL的轉接器, 不管是FTDI或PL23xx 都可以,
TX 要接到RX 才能通訊, 總之不通的時候確認一下腳有沒接對.

2017-03-31

DietPi 網路收音機

前陣子Asus低調的出了一款Tinker board, 可以說是仿Raspberry Pi, 因為
整個尺寸跟layout可以說完全跟Raspberry Pi一樣, 大概就是RAM比較大,有2G,
在台灣的售價不高於2200元.(RPi 3 大約1350元)

http://dietpi.com 是個比較特別的Raspberry Pi Linux版本, 除了是源自
Raspbian, 可以用在Raspberry Pi 之外, 還有提供給各種不同ARM SoC的版本.

它不預裝一堆你可能用不到的東西,所以整個系統可以dd到1GB的MicroSD
卡上面使用.

當然by default也就沒有Xwindow, 但因為它仍是Raspbian base, 所以可以使用
Raspbian/Debian的repository來安裝自己想要的軟體.

它有幾個特別之處,就是把常有r/w的目錄, 改成tmpfs來使用,除了可以提高
r/w速度也能延長SD卡壽命.

因為Raspberry Pi 3有Wifi, 所以接著就利用它來做為網路收音機.

先收集喜好的網路電台URL, 利用python寫一個script用來變換電台
推薦這個德國的音樂網站,有很多種類的音樂
http://stream.klassikradio.de/
用樣的利用python/bash寫一個web CGI介面, 便可以用瀏覽器控制電台變換
這樣也不需login到Raspberry Pi裡面操作

最後再加上先前利用8x8LED 加一個Arduino Micro做的顯示器
用來在開機時顯示Raspberry Pi的IP, 共兼做各種資訊的顯示
(8x8LED至少可以顯示英文字母+數字+常用符號)

2017-01-26

Firmata Serial直送PWM,Servo

除了將各pin做為digital out用可以送出
serial.write(chr(0xf4)+chr(PIN)+chr(1)) 來定義之外,這裡再補充一下
PWM及Servo

PWM:
serial.write(chr(0xf4)+chr(13)+chr(3)) 將13pin定義成PWM
(第13pin在Arduino板子上有內建的LED可以做測試)
(Arduino限定3, 5, 6, 9, 10, 11, 13才俱有PWM功能)
不過328P的13pin不能當PWM用,32U4才可以。

定義某一支pin做為PWM之後,可以送出
serial.write(chr(0xe0+PIN)+chr(N)+chr(0或1))
來控制PWM LED的亮度,例如:
serial.write(chr(0xe0+13)+chr(127)+chr(0))
控制第13pin,亮度127
亮度數值從0到254,當亮度大於127時,第三byte要為1,其於則為0
serial.write(chr(0xe0+13)+chr(150)+chr(1))

Servo:
serial.write(chr(0xf4)+chr(13)+chr(4)) 將13pin定義成Servo
定義某一支pin做為Servo之後,可以送出
serial.write(chr(0xe0+PIN)+chr(A)+chr(0或1))
來控制Servo推動的角度,例如:
serial.write(chr(0xe0+13)+chr(127)+chr(0))
控制第13pin,Servo轉到127度
Servo的角度從0到179,當角度大於127時,第三byte要為1,其於則為0
serial.write(chr(0xe0+13)+chr(150)+chr(1))

當pin小於或等於15時,用上列的控制算法

當pin大於15時,用以下方法

當角度小於或等於127時,用
serial.write( chr(0xf0)+chr(0x6f)+chr(PIN)+chr(A)+chr(0xf7) )
例如:
serial.write( chr(0xf0)+chr(0x6f)+chr(16)+chr(120)+chr(0xf7) )
如果角度大於127時,用
serial.write( chr(0xf0)+chr(0x6f)+chr(16)+chr(150)+chr(0x1)+chr(0xf7) )

不過一般來說,Servo實際推動的角度範圍還不到180度。