2019-06-22

國民誠實度測驗

這是才剛做出來的實驗,這個實驗是在40個國家的355個城市,放置了17303個俱有
部份透明可以看到內部的皮夾,分成有放錢跟沒放錢的。

皮包裡面也放了用當地語文印製的名片,看起來就是本地人掉的東西,上面有連絡
的方式,放的錢是放當地貨幣。

測試的地方包括銀行、戲院、博物館、郵局、飯店跟警察局等等,做試驗的人故意
拿著皮包到這些地方的櫃台,跟櫃台的人說我在路上撿到這個皮夾,請你們處理,
然後急著就離開沒有留下連絡資料或要求給他收據。

紅色是有放錢的皮包,橘色是沒放錢的皮包



出處: https://science.sciencemag.org/content/early/2019/06/19/science.aau8712

2019-05-31

單一port提供多種protocol

原本每個port有各自專門用的protocol, 像 443是https, 22是ssh,
但有時可能只有一個port可以用, 卻想要分別有多種service, 這時可以藉由sslh
來管理, 會根據request protocol來轉給相對應的service.

最主要的設定在 /etc/default/sslh 而最基本的三行就夠用:
RUN=no
DAEMON=/usr/sbin/sslh
DAEMON_OPTS="\
--user sslh
--listen 192.168.10.5:8000
--ssh 127.0.0.1:22
--ssl 127.0.0.1:443
--pidfile /var/run/sslh/sslh.pid"

這樣當遠端對這台機器的port 8000要求ssh 連線時, sslh 會把封包轉成local
的port 22去找sshd service, 而當遠端對這台機器的port 8000要求https 連線時,
sslh 又會把封包轉給local 的port 443 去找secure http的service.

sslh 是由 systemctl 來控制起降.
如果搭配firewall 讓22 跟443 都不會被外界access, 只有開啟 sslh 後才能access,
這樣安全又增加了一層.

2019-04-20

電子書閱讀機mooink

最近拿到一台mooink+ 7.8inch的電子書閱讀機,比上個月在美國書店看到的kindle
螢幕大,價格也差不多,優點是支援漢字閱讀。

拿到後第一個重點是要連上wifi, 因為接下去它會去update裡面的OS+app(?), 完成後
系統是3.1.4, OS是Android 4.4.2, 這一版內建了萊姆輸入法,不過它的萊姆不能讓
使用者像在手機版萊姆那樣可以自行變更各種相關設定,但好歹也有倉頡可用,比稍早
的版本只有注音好多了。

查了一下手冊,它只能閱讀epub格式檔,於是上網找了幾個電子書檔案塞進閱讀機裡,
就可以看書了。只要用它附的USB線(一頭是mini USB)接上就可以進行檔案傳輸,開啟
任何檔案管理程式,例如pcmanfm, thunar,可以看到MOOINK,就可以用copy/paste
的方式把電腦裡的epub檔塞進mooink+.

打開epub檔案是可以看書,但是問題來了,因為用手指頭點來點去,它都在翻頁,我要
怎麼脫離閱讀的模式?或是在閱讀模式下改變閱讀的設定?

有時不小心隨便點一下,它會出現上下兩個區域可以設定字體大小、目錄、系統、亮度
、搜尋或是回到書櫃。有時出現有時不出現,不是點一下或快速點兩下,也不是長按,
也不是滑動,試了一陣子還是找不出邏輯。

試很久之後,終於找出它的邏輯,就是要點在「中線」就是螢幕正中央的垂直子午線,
用漢字的「中」來比喻的話,如果整個螢幕是一個「中」字,就是要點在「中」字的
中央那一直線上,功能設定的輔助就會出現。

最後來談談epub,網路上灰色地帶很多,可以找到很多中、英文電子書,但有各種不同
格式,只要把它轉成epub格式就可塞進mooink+閱讀,雖然網路上也有很多免費幫你
轉檔格式的網站,但如果考慮隱私權的話,還是自己轉比較安全。

在Linux環境下的calibre這套工具很好用,它除了可以直接閱讀電子書,也可以用來
轉換電子書成為不同格式,但pdf格式不一定能順利轉成epub,轉換的指令是:
ebook-convert aabbcc.pdf aabbcc.epub
其它像是txt、doc都可以轉成epub, 請自行試試.

電子書閱讀機的好處是它很省電,比一般手機、平板省太多了!充一次電,放了幾個
禮拜都還能閱讀。室外閱讀也沒問題。

2019-02-28

Live USB最簡單製做法

現在的BIOS大都支援UEFI boot, 所以製作USB boot disk已經不必再去管MBR,
也就是不必依賴特殊的工具來產生可以開機的USB隨身碟, 只要format 成FAT32
再利用grub2 加上幾個檔案就能開機.

使用Linux最簡單的作法是割第一個partition format成FAT32, 剩下的就做成
單一的第二partition 使用ext3(或ext4) format, 用來存放Linux.

第一個partition 挖兩個目錄, 一個為 /boot/grub/ 下面就放單一個 grub.cfg
即可, 裡面的規格也很簡單
set default=N  (就是以下開機項目的第幾個, 從0開始算)
set timeout=M  (就是沒按Enter之後幾秒開始戴入系統)

menuentry 'Ubuntu 18.04' {
linux /path/vmlinuz.a option1 option2 option.....
initrd /path/initrda.img
}

menuentry 'MX Linux 18.1' {
linux /path/vmlinuz.b option1 option2 option.....
initrd /path/initrdb.img
}

menuentry 'CentOS 7.4' {
linux /path/vmlinuz.b option1 option2 option.....
initrd /path/initrdb.img
}

第一個partition另一個目錄是 /efi/boot/ 下面放一個bootx64.efi 就夠了.

不過,這樣是沒有美觀的考量,但已經滿足開機的需求.
(如果更懶,可以整支USB 只有一個FAT32 partition, 但就沒有ext的好處可用)

再來就是第二個partition, 只要空間夠大, 可以放無數個Linux版本,例如:
ub1804 用來放 Ubuntu 18.04
mx181  用來放 MX Linux 18.1
cent74 用來放 CentOS 7.4

第一個partition另一個目錄是 /efi/boot/ 下面放一個bootx64.efi 就夠了.

不過,這樣是沒有美觀的考量,但已經滿足開機的需求.
(如果更懶,可以整支USB 只有一個FAT32 partition, 但就沒有ext的好處可用)

再來就是第二個partition, 只要空間夠大, 可以放無數個Linux版本,例如:
ub1804 用來放 Ubuntu 18.04
mx181  用來放 MX Linux 18.1
cent74 用來放 CentOS 7.4

在第一個partition 的grub.cfg 裡怎麼控制要開機進哪個Linux, 關鍵在於
1.指定系統所在的partition
2.指定系統所在的目錄

指定partition
Ubuntu用uuid=xxxxxxxxxxxx
MX Linux用buuid=xxxxxxxxxxxx
CentOS用root=live:UUID=

指定Linux目錄
Ubuntu用live-media-path=
MX Linux用 bdir=
CentOS用rd.live.dir=

squashfs壓縮的系統檔預設檔名
Ubuntu是filesystem.squashfs
MX Linux是linuxfs
CentOS是squashfs.img

重點都提到了!哈

2019-01-01

Roland AE-05 連接Linux

拿到一支Roland AE-05(Aerophone Go), 從說明書看,它可以透過藍牙跟手機連接,
然後利用手機來設定AE-05,或是用手機接受AE-05來播放額外的MIDI音源,因為
AE-05內建只有11種音源(包括一組打擊樂器),如果用手機可以播放額外幾十種音源,
不過這時要把AE-05本身的音量關到零。

首先遇到的問題就是手機無法連上AE-05的藍牙,裝了Aerophone Go APP也是連不到,
經過確認是安鳳無法連AE-05,只能用哀鳳或哀Pad連!(需要iOS 11或以上)

把AE-05透過USB線插到電腦後可以看到VID/PID

lsusb
Bus 006 Device 002: ID 0582:01d1 Roland Corp.

cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xd4500000 irq 30
 1 [AE05           ]: USB-Audio - AE-05
                      Roland AE-05 at usb-0000:00:1d.1-1, full speed

cat /proc/asound/AE05/usbid
0582:01d1

cat /proc/asound/AE05/usbmixer
USB Mixer: usb_id=0x058201d1, ctrlif=0, ctlerr=0
Card: Roland AE-05 at usb-0000:00:1d.1-1, full speed

dir /dev/snd/by-id/
total 0
lrwxrwxrwx 1 root root 12 12月 30 20:33 usb-Roland_AE-05_FFFFFFFEFFFF-00 -> ../controlC1

以上確認Linux能夠看到Roland AE-05的device, 再來檢查一下是否能收到AE-05送過來
的訊號?

aconnect -i
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 20: 'AE-05' [type=kernel]
    0 'AE-05 MIDI 1    '

指定 port 20
aseqdump -p 20

這時按AE-05的鍵或是吹氣出聲,都會從螢幕上列出一大串MIDI的值
 20:0   Control change          0, controller 2, value 95
 20:0   Control change          0, controller 11, value 95
 20:0   Control change          0, controller 2, value 90
 20:0   Control change          0, controller 11, value 90
 20:0   Control change          0, controller 2, value 82
 20:0   Control change          0, controller 11, value 82
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0F 64 03 F7
 20:0   Control change          0, controller 2, value 90
 20:0   Control change          0, controller 11, value 90
 20:0   Note on                 0, note 47, velocity 100
 20:0   Note off                0, note 45, velocity 0
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0F 60 07 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 0E 60 08 F7
 20:0   Control change          0, controller 2, value 82
 20:0   Control change          0, controller 11, value 82
 20:0   Note on                 0, note 65, velocity 100
 20:0   Note off                0, note 47, velocity 0
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 06 60 10 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2C 00 00 00 79 F7
 20:0   System exclusive           F0 41 10 00 00 00 4E 12 00 27 34 2F 00 06 40 30 F7
 20:0   Control change          0, controller 2, value 74
 20:0   Control change          0, controller 11, value 74

還未解決的問題是能否吹奏AE-05 讓腦裡來播出各種MIDI?

2018-12-28

墨西哥簽證與美國簽證

在台灣簽墨西哥簽很麻煩,因為一天只受理30個人,有可能你要早上六點多
就要到基隆路的墨西哥辨事處排隊,等大樓七點開放才能進入到15樓的辨事處
門外再排一次隊,然後大樓警衛還會來叫你不要蹲或坐地上,要一直站著等到
九點,辨事處開門進去抽號碼牌,如果你是排在第31位,那明天請早。

然後簽證辨事員各種刁難,這個不行那個不行,遇過同樣去簽的人說來第四次!
墨西哥簽一次只給六個月,六個月後還要去墨西哥的話還要來做同樣浪費時間的事!

如果不是趕時間的話,直接去AIT簽個最簡單的B1/B2,一次給五年,拿這個
就可以進入墨西哥(ESTA不行進入),省事多了,而且B1/B2面談很簡單,問幾句
沒什意外的話馬上就approve了!

既然B1/B2都簽了,那就順便再辨個Global Entry, 台灣是符合Global Entry
的國家,而且Global Entry的面談可以在AIT或是到美國機場再面談,只是你
要先安排適合的時間面談,這樣進入美國就可以快速通關。

用Micropython玩MCU

很久沒玩microcontroller 最近買了一支ESP32, 發現它也被micropython 支援了!
http://micropython.org/download 包括舊的 ESP8266 也有比一兩年前更好的
支援,不論ESP8266或ESP32 都可以玩micropython.

ESP32 或 ESP8266 出廠都不是燒micropython, 所以第一次燒micropython 要先清除
esptool.py --chip esp32 erase_flash
再把micropython 燒在 0x1000 的起始位置
esptool.py --chip esp32 --port /dev/ttyUSB1 write_flash -z 0x1000 \
esp32-20180511-v1.9.4.bin
20180511-1.9.4 目前是stable 版本(32/8266都是)
ESP32 可以選用最新版 esp32-20181228-v1.9.4-762-gfa50047bb.bin

micropython用的是python3

2018-09-16

觸控螢幕 touchegg

公司配用的Notebook有觸控螢幕,但是很少去用它,最多使用的還是touchpad,
因為手指的移動距離比較遠,synclient加上Ctrl就可以zoom in/out, 所以也就不太
會去用touch screen.

其實touch screen比較直覺,只要裝了touchegg就可以用了。
不過在捲動螢幕的方向時touchegg的default正好跟動作是相反的,手指把螢幕
往上推時,它的內容卻是往下跑,所以還是改一下
$HOME/.config/touchegg/touchegg.conf
裡面原本的INVERTED=false改成true
在以下這一段
gesture type=DRAG fingers="2" direction="ALL"
   action type="SCROLL" SPEED=7:INVERTED=true /action
/gesture       
       

就可以更直覺的翻動螢幕。

2018-08-25

Port 80h LED 的小工具

如果要檢測 server上的 Port 80 LED, 可以找這個
https://pypi.org/project/portio/

可以不用pip 來安裝, 直接compile so來用也可以, 攜帶方便。

tar zxvf portio-0.5.tar.gz
cd portio-0.5

gcc -I/usr/include/python2.7 -c -fPIC portio.c -o portio.o
(或是 -I/usr/include/python3.6)
(-fPIC Position Independent Code)

(接下來從 .o 來產出 .so)
gcc -shared -o portio.so portio.o

使用時可以把 .so 放在 .py 同一目錄即可,不必install
----程式start
import portio
portio.ioperm(0x80, 3, 1) #先打開
# N 可以從 0 到 255, 0是全滅, 255是全亮
portio.outb(N, 0x80)
portio.ioperm(0x80, 3, 0) #關閉
----程式end

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度。

2016-11-28

FirmataPlus Serial 直送碼

之前一直都用 pyfirmata 來控制 Arduino, 但是 digital pin 的數量受制, 所以要改
Board.h 又要改 pyfirmata.py 所以使用上不是很方便, 最近改用 PyMata 它可以
讓 mega32u4 用到更多 digital pins, 以 Leonardo 來說可以用到 23 支, 小一點的
Micro 也能用到 22 支, 更小的 Pro Micro 也能有 18 支可用, 所以不管是控制 7seg
LED 或 8x8 matrix LED 也夠用.

原本都要依賴 pyfirmata 或 PyMata 的 module, 但它的啟動有點長, 加上如果是要
透過別的機器不一定能提供完整的 library 給 pyfirmata/PyMata 呼叫, 因此嚐試
改用 python serial 直送 firmata 控制碼.

這裡以 digital pin 為例, 說明一下如何直接傳送控制碼, 以及 pin 腳的接法以達到
「最少傳送」而且能讓多支腳工作的方式.

Arduino (Leonardo/Micro/ProMicro)是裝了 PyMata 的 FirmataPlus32u4
這一支, 然後控制端只要用到 python serial 即可. Arduino 的腳分成幾個 port:
port 0: pin 0 -- 7
port 1: pin 8 -- 15
port 2: pin 16 -- 23

Firmata 的控制碼:
port 碼 + pin 碼 + 尾pin碼
例如要給 0(或 8 或 16) pin 拉 High, 就是送出
 第0腳:  0x90 + 1 + 0 三碼
 第8腳:  0x91 + 1 + 0 三碼
 第16腳: 0x92 + 1 + 0 三碼

 第7腳:  0x90 + 0 + 1 三碼
 第15腳: 0x91 + 0 + 1 三碼
 第23腳: 0x92 + 0 + 1 三碼
 (以上三支腳比較特別, 中間那一碼就保持原有的值, 不必加減)

 第3腳: 0x90 + 8 + 0 三碼
 第11腳: 0x91 + 8 + 0 三碼
 第19腳: 0x92 + 8 + 0 三碼

 同時 3 及 7 腳: 0x90 + 8 + 1 三碼
 同時 11 及 15 腳: 0x91 + 8 + 1 三碼
 同時 19 及 23 腳: 0x92 + 8 + 1 三碼

 同時 3 及 4 及 7 腳: 0x90 + (8+16) + 1 也就是 0x90 24 1 三碼

腳的算法是這個 port 的第幾支腳就是 2 的幾次方,
第3腳是 2的3次方, 所以是8
第11腳是 port 1 的第 3腳(由0開始), 所以也是 2 的 3次方, 也是8

第 8 腳是 port 1 的 0 腳, 所以 2 的 0次方, 及 第11腳同時 high 就是 1+8=9
所以送出的三碼是 0x91 9 0, 用 python serial 就是
serial.write(chr(0x91)+chr(9)+chr(0))
所以如果把同一個 port 的 pin 接在像是 8x8 LED 上相續的 row (或 column)
這樣就可以只送出一次控制碼, 便能同時讓多支 digital pin High/Low.
serial.write(chr(0x91)+chr(9)+chr(1))
可以讓 pin 8,11,15 三支同時 High.

2016-09-05

現在的 MicroPython for ESP8266

大概一年前看到 MicroPython 時,覺得很有趣,想抓來玩玩,但一看內容卻是零零落落
,一年後的現在再看,發現它基本功能都有,已經可以用了!
http://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/index.html

現有的 binary images 可以在這裡下載:
http://micropython.org/download/

請往下拉,找到給 ESP8266 用的檔案,大約 500KB.
esp8266-2016xxxx-v1.8.3-xxx-xxxxxxxx.bin

燒錄的方法跟燒 nodemcu image 一樣,可以用 esptool.py
(新版的燒錄工具在 https://github.com/themadinventor/esptool/ )

先清晶片裡的舊版 MicroPython:
esptool.py erase_flash (可以不必加 -p /dev/ttyUSB0 -b 115200)
再來便可以燒錄新版:
esptool.py write_flash -fm qio -fs 32m 0x00000 \
esp8266-2016xxxx-v1.8.3-xxx-xxxxxxxx.bin

-fm qio -fs 32m 的參數是給 4M Flash 的款式(如ESP-12) 用的
-fm dio -fs 8m 的參數是給 512K Flash 的款式(如ESP-01)用的

最基本的例子 LED 點滅:
from machine import Pin
p15=Pin(15,Pin.OUT)
p15.value(1) 點亮
p15.value(0) 熄滅

LED PWM 亮度控制:
from machine import PWM
pwm15=PWM(p15)
pwm15.freq(500)
pwm15.duty(128)
(例用PWM 就可以控制司服機(servo) 彎臂角度)

其它各項功能請自行參閱上面 tutorial.

2016-08-20

寄生 Linux 系統到手機裡

最近一支舊手機螢幕壞了,要修也要花錢,所以就讓它退役下來做些不一樣的事好了。

由於手機有1G RAM,如果不做什麼事,其實可以「寄生」一套 Linux 在裡面,
「寄生」的Linux可以不具備 kernel 相關的東西,藉著 Android 的 kernel
就可以吃香喝辣,所以只要小小的體積就俱有不少功能。

希望能把系統控制在200MB以內,包含基本的sshd, sshfs, python, w3m, tmux....
等等就可以做不少事, 最後整包系統(刪除不必要的東西如 /usr/share 下, 以及
/var/ 下)大約在 220M左右, 還可以接受。

用 adb 進入手機內建立一個300M 的 RAM disk, 把這包系統解到 ramdisk 裡
再 chroot 進入就可以啟用這包沒有 kernel 的寄生 Linux 了.

為了要找一個合適的 Linux, 找來找去最後找到 http://dietpi.com 裡面有
很多專為各種單板電腦打造的版本,可以選用其中的 OrangePi PC 或 NanoPi Neo
的image 來當「寄生」的原型,特別說明一下,它是Debian Jessie base,
所以如果熟悉 Debian/Ubuntu 的話應該很容易上手.

這裡以 NanoPi NEO 的image 為例,下載後以 7z 解壓縮出原本大小約為 460M, 但是
它包含了一塊 vfat 及一塊 ext4 partition, vfat 是boot/kernel 相關, 用不到,
我們只要取出 ext4 也就是Linux 這一塊.

fdisk -l DietPi_v127_NanoPiNEO-armv7-(Jessie).img 可以看到

DietPi_v127_NanoPiNEO-armv7-(Jessie).img2          133120

這個 133120 就是它的起始位置,
133120 * 512(每 sector) = 68157440

來把它 mount 起來:
mkdir /media/dietpi
mount -o offset=68157440 -t ext4 DietPi_v127_NanoPiNEO-armv7-\(Jessie\).img /media/dietpi
cd /media/diatpi
cp -a * /PATH/my_dietpi/

然後 chroot 進入 /PATH/my_dietpi/ 底下進行改造, 再將改造出來的整個目錄打包,
就可以塞進手機裡「寄生」了!

2016-05-31

用compton 讓桌面像抬頭顯示器(HUD)

原則上要使用 DE/CE 才能讓桌面及應用程式達到透明。
例如使用KDE、Xfce………等等包山包海的桌面環境,可以設成讓應用軟體(例如終端機)
可以看到桌面完整的圖及其它軟體投射的資訊。

而使用多數 WM (如icewm, openbox, fluxbox....) 最多只能讓應用軟體做到模擬透明

,而不是真正透明。

像說使用某些終端機(terminal,如terminator) 可以設成透明而看到桌面wallpaper 圖樣,
但卻看不到投射在桌面的資訊,例如conky 所顯示的系統負載狀態。

其實有個出來已經好幾年的 compton 可以讓一般 WM 也能達到真正透明。各主要的distro
都有打包好的 binary 可以用管理程式安裝,或者可以從這裡下載回來自己compile

https://github.com/chjj/compton

如果是打包好的package, 會包含一個 compton.conf 的範例,可以 copy 到 $HOME/.config/
下面, 它是個文字檔,主要包括 陰影(shadow)、透明度(opacity及模糊blur)、淡出淡入
(fading),以及其它事項,也可以在網路上搜詢到一些例子。

利用這個可以做到全部透明的工具,讓你的在用終端機工作時,搭配像是 conky 來投射、
即時更新你要的資訊,例如室外溫度、風速、雲層、天候、股價指數……或甚至是攝影機
的動態影像。

這樣你工作的終端機就可以俱有類似 HUD(抬頭顯示器)的效果,不必每次切換到不同的
桌面區或軟體才看得到你要的資訊。

2016-04-03

USB Live Linux 開機進 Macbook Air 更簡單

上一篇提到可以經由 isohybrid 來轉一個 image 再 dd 到 USB
專門做為 Macbook 開機,再導引到原有的 USB Live Linux.

現在找到比那種方式更簡便的辦法,就是直接用原有的 USB Live Linux
設定好讓 Macbook 的 EFI 認識,就能由 USB 開機進入 Live Linux.

最主要的就是我們需要一個 efi 的 bootloader, 可以找現成的抓來用,
像是包在 Ubuntu 15.10 ISO 檔案裡的
/EFI/BOOT/grubx64.efi

我們可以在以下這裡列表裡找到它
ftp://ftp.yzu.edu.tw/Linux/ubuntu-cdimage/ubuntu-gnome/15.10/
ubuntu-gnome-15.10-desktop-amd64.list

不過還是把 ISO 檔抓下來,
ftp://ftp.yzu.edu.tw/Linux/ubuntu-cdimage/ubuntu-gnome/15.10/
ubuntu-gnome-15.10-desktop-amd64.iso

mount -o loop /PATH/ubuntu-gnome-15.10-desktop-amd64.iso /media/ISO
再從其中 copy 出來, 改成另一個名字 bootx64.efi。

假設我們把 USB disk 掛載在 /media/USB/ 之下

mkdir -p /media/USB/efi/boot
cp /media/ISO/EFI/BOOT/grubx64.efi /media/USB/efi/boot/bootx64.efi
然後
mkdir -p /media/USB/boot/grub
再 vi /media/USB/boot/grub/grub.cfg

基本格式如下(kernel 後面的參數請依實際的代入):

set default=0
set timeout=10
manuentry 'Debian 8.3' {
linux /deb83/vmlinuz opt1 opt2 opt3 live-media-path=deb83
initrd /deb83/initrd.xyz
}
manuentry 'Ubuntu 15.10' {
linux /ub1510/vmlinuz opt1 opt2 opt3 live-media-path=ub1510
initrd /ub1510/initrd.aa
}
manuentry 'Ubuntu 15.04' {
linux /ub1504/vmlinuz opt1 opt2 opt3 live-media-path=ub1504
initrd /ub1504/initrd.kk
}

這樣製作出來的 USB disk 本身就可以在 Macboot 環境開機,又保持為 read/write,相當方便。

2016-03-24

製作 Macbook 可執行的多重 Linux Live USB

這裡所謂「多重」是指一支 USB disk 上有多種版本的 Linux, 例如 Debian, Mint,
Ubuntu, CentOS, 或是包括 Ubuntu 14.10, 15.04, 15.10, 16.04 多版本全放在一支
USB disk, 因為現在 USB disk 越來越大,一支 64GB 的可以裝10個以上不同Linux.

對於想要拿Macbook 來跑Linux 的人,跑Live Linux on USB disk 應該最方便, 
不必動到 Macbook 硬碟,更不必藉由 virtual machine. 直接把一支 USB 碟
插在 Macbook 按住 Option 開機就能進入 Linux 環境工作。

長期以來我都是把 USB disk format 成 vfat 再用 grub 0.97 放在 boot/ 下,就可以
在任何 x86 電腦上開機進入 Linux 環境,只是這樣的 USB 遇到 Macbook 就不能開機,
沒得玩了!
(grub 0.97 既可以 boot CD/DVD 也可以 boot vfat USB disk)

從網路上找到的製作 Macboot 可開機的 Linux Live USB 的方式是:
1. 下載 ISO 檔(例如 Ubuntu_xxxx.iso)
2. 在Macbook 執行 hdiutil convert -format UDRW -o yyyy.img Ubuntu_xxxx.iso
3. dd if=yyyy.img of=/dev/diskN bs=1m

但這支USB disk 變成read only, 又只能塞進一種 Linux, 剩下的空間(幾GB ?)
完全用不到,而且這個 Linux 是原出廠設定, 這不是我要的操作方式.

那我來重製 ISO 檔,這樣做出來的 Linux Live USB 開機後就是我想要的環境。
可是發現修改過的ISO(改內容,再重製成 ISO file) 經過hdiutil 轉過後,卻不像
原廠 ISO 做出來那樣可開機,我改的ISO dd 出來的 USB 在 Macbook 開機時完全看不到。

幾過多次試作,發現有兩種原因造成自行改過的 ISO 無法被Macbook 用來開機,
因此要這樣才能開機:
1. boot loader 必需要用 isolinux
2. 用genisoimage/mkisofs 做出來的ISO 檔要再過一次 isohybrid

genisoimage --no-emul-boot --boot-info-table --boot-load-size 4 \
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -J -r -l \
-o my_Linux.iso my_Linux_source_directory
然後執行
isohybrid my_Linux.iso

這樣做出來的 ISO 檔直接在 Linux 環境 dd 到 USB disk, 便可以插在 Macbook 開機,
完全不必再拿到 MacOS 環境下再用 hdiutil 轉換。
(dd if=my_Linux.iso of=/dev/sdX bs=1M)

只是,這樣就很不方便,因為對 Live Linux 內容任何大小的修改,每一次都必需重製成 ISO
再 dd 到 USB disk, 非常浪費時間。

換一個方式,把我原本可以在 x86 電腦開機的 USB disk 上各種 Linux 的 kernel/initrd
copy 出來,用上面提到的方式 改以 isolinux.cfg 來寫開機控制,參數可直接取用原有
那支 USB 的 grub/menu.lst 過來即可。

然後用上面的 genisoimage 指令及 isohybrid 做成一支可供 Macboot 開機的 USB disk,
在 Macbook 開機的時同時,也插入另一支我原本的 USB disk,

這樣在 boot loader 載入 kernel/initrd 後便會去另一支 USB disk(Macbook 不認定可開機的)
上面找對應的系統檔案,完成開機進入完整的 Linux 環境。

大部份的 Live Linux 都可以兩支同時插著開機(當然在按power 的同時也要按住 Option),
少數 Live Linux 要插拔一下非開機用的那支,才會被偵測到,載入完整系統。

2016-01-30

用 vlc 聽TuneIn radio

TuneIn Radio 是手機上相當好用的「網路電台」收音機,
可惜它沒出 for Linux 版本,不過還好有人寫了給 vlc
的小程式,掛上它就可以在 Linux 環境聽了。

藉由 vlc 媒體播放器,再加上三個小小的 lua 檔案,就可以在
Linux 環境下收聽 Tunein radio 一樣的內容。

三個 lua 檔案在: https://github.com/diegofn/TuneIn-Radio-VLC

下載後,把 tunein.lua 放在
$HOME/.local/share/vlc/lua/
把 radiotime.lua 及 streamtheworld.lua 放在
$HOME/.local/share/vlc/lua/playlist/

再改一下 $HOME/.config/Trolltech.conf 加入以下兩行
[Qt]
font="Sans Serif,14,-1,5,50,0,0,0,0,0"
(讓 vlc 打開後的電台列表字就不會那麼小)
(看你自己的喜好把上面的 14 改成你要的大小)

執行 vlc, 按 View(檢視) ---> Playlist(播放清單)
在左邊按 Internet(網際網路) ---> TuneIn Radio
就會有各種分類:
Local Radio (就是國內的電台)
Trending
Music
News 
Talk 
Sports
By Location
By Language

2015-12-31

LINE for Linux

使用LINE 交談是不得已,這麼說,是因為LINE 不願意提供給 Open source free software
社群一個有效的方便使用環境,但是台灣太多人用LINE,不用就不方便。

之前有人以反向工法解譯出可以用 Python 來傳送LINE 交談的方法,但是
不久 LINE公司就發文威脅該作者,那段程式碼便被移出網路不能公開了。

為了在 Linux 下使用 LINE,我試過以 wine 跑 LINE for Windows 或是
跑 kvm qemu 跑一個 Windows 來執行 LINE for Windows, 結果都有
使用上的不方便。

最後,發現 LINE 有 for chromium browser 的plugin, 於是試用了一下,
發現這是在幾種 Linux 環境下 LINE 不好用的方式裡
「最不會不好用」的方式,於是就這樣「不得已」的在 Linux 環境下
使用起 LINE 來,也推薦給使用 Linux 並且要用 LINE 的朋友用。

簡單講就是:
1. 安裝 chromium-browser (在Linux 環境)
2. 在chromium-browser 裡安裝 LINE app plugin
之後並不須要開啟 chromium-browser 而是把以下這段指令寫在某個
可供開啟的地方,例如 fluxbox 的 menu 裡:
"chromium-browser --app-id=menkifleemblimdogmoihpfopnplikde"
然後就可以在 Linux 圖型介面環境下啟用 LINE 了。
或者說,在任何 terminal 裡執行上面那段指令,就會啟用 LINE。

MK802 telegram + ESP8266 自動控制

由於ESP8266 本身俱有網路功能,只要有wifi 就能簡單建構起來。
這裡使用文字介面的 telegram-cli 加 esp8266(執行 telnetd service)。

利用 telegram-cli 當載具,可以接收來自地表各處給的指令(中國除外)、
向OS(Linux) 送出指令,介面由 python 組成(在我五月寫的 Telegram 機器人
那一篇有說明,用一台小小 的 MK802 (或Raspberry Pi)就可以達成。

MK802 到ESP8266 的介面也是藉由 python 來達成
ESP8266 用nodemcu 跑 telnetd service

與ESP8266 互動的部份:
espc = pexpect.spawn('telnet %s 23'%esp8266_IP)
--以下sendline() 內容可以改成任何指令
espc.sendline('gpio.mode(%s,gpio.OUTPUT)'%pin)
espc.expect('> ')
--取得執行後的資訊
espMSG=espc.before
print(espMSG)

ESP8266 執行 telnetd service 的部份:
s=net.createServer(net.TCP,180)
s:listen(23,function(c)
  function s_output(str)
    if(c~=nil) then c:send(str) end
  end
  node.output(s_output, 0)
  c:on("receive",function(c,l)
    node.input(l)
  end)
  c:on("disconnection",function(c)
    node.output(nil)
  end)
  print(" >> DE BV1AL <<")
end)
 
2015年要結束了,最後一天來灌點水! 

2015-12-03

ESP8266 多功能按鍵 2

前面那個按鍵的做法是在等待 1.1 秒之後,計算按了幾下,來執行對應的動作。
這個方式的缺點是定死了時間,所以最多也只能按大約四下,如果把等待的時間
延長,對於只按一下(或兩下)卻要等很久,所以不理想。

改成按了按鍵後,每 0.35 秒去檢查一次看看按鍵次數有沒有增加,如果增加,
就繼續等待,如果沒有增加,才去執行累計出來按鍵次數所對應的動作,這樣
既不必等很久,又可以很彈性的可以加入各種不同按鍵次數的動作。

old_b=0
function btcheck()
  if b == 0 then
    tmr.alarm(4,350,1, function()
      if old_b ~= b then
        old_b=b
      else
        buttdo()  
        b,old_b=0,0
        tmr.stop(4)
      end
    end)
  end
end  
這樣就好用多了!

2015-11-08

ESP8266 nodemcu 多功能單按鍵

一般按鍵大都只做一件事,但是nodemcu 可以利用 tmr.alarm 這個功能
在指定時間內讀取按鍵被按了幾次,
這樣一個按鍵就可以執行多種不同的功能。
(nodemcu 一共可以設 6個alarm)

在 init.lua 裡定義 b=0
並 dofile('button.lua')
在button.lua 裡定義如下

function buttdo()
  if b == 1 then
     do something as 1
  elseif b == 2 then 
     do something as 2
  elseif b == 3 then 
     do something as 3
  elseif b == 4 then 
     do something as 4
  else
     print(b)
  end
  b=0
end

function buttcheck()
  if b == 0 then
    tmr.alarm(4,1100,0, function() buttdo() end)
    -- 利用 alarm 1100(1.1 秒) 時間來累積按鍵次數
    -- 時間到,由buttdo() 去查總共按了幾次,執行對應的事
  end
end

gpio.trig(2,"down", function() buttcheck() b=b+1 tmr.delay(200000) end)
-- 如果按鍵已經被按下,按鍵在接下來的1.1 秒之間只用來累積次數
-- tmr.delay(200000) 是用來避免按鍵按下時在極短時間內被算成按很多次
-- 200000 是 0.2 秒,這是我自己試的經驗值,或許你的狀況不一樣

國旗 賣國賊 內褲

「你們這幾天不斷罵我去見習主席像小媳婦,
不斷罵我是賣國賊,
完全否定我很愛國的事實!   
告訴你們,
其實那天我有偷偷穿了一件
印著中華民國青天白日滿地紅國旗
的         
內褲   
你們都沒發現,對吧!
本來是想翻出來給習主席看的,
但是現場記者先生小姐很多,
我怕她們會跟我索取
原汁內褲,
由於我當天來回,只能穿一件       
一定不夠
所以就一直沒提到這件內褲
相信我,我確實帶了中華民國旗去見習主席,
國旗還跟我貼身24小時,
看,我多愛國啊!
你們以後不能再罵我小媳婦、罵我賣國賊了」