2024年8月28日 星期三

提升英文對話能力

用英文清楚表達想法一直是我無法企及的事情。事實上不只英文,我對語言的處理能力都不好。原因無非是沒有需求。不過世事難料,眼下兩個狀況會需要使用英文,驅使我開始面對和加強英文對話能力。作法如下。

1.寫文章,請CHATGPT幫忙修改 todostart2 2024/09/06 每天寫英文章 todoend

CHATGPT的文字改寫能力實在太強,我原本淺薄的文字立刻就變得有深度。

2.每天讀和念,youtube中,和工作興趣有關的頻道。作法是先下載YT的聲音和文字(聲音連結 文字連結  文字連結 文字連結   MAC專用連結),多聽多看並且重複念出(錄音回放再檢討)。目前蒐集項目如下。

工作部分:
興趣:
有的沒的:

2024年8月25日 星期日

卯澳灣海泳

8/3日將參加東北角卯澳灣海泳活動,卯澳是個小而美的秘境港灣,就順便當成小旅行。活動當天五點從新竹出發,七點抵達福連國小會場,順利報到後,繞行國小,拍攝些奇妙的照片。






原定八點,實際拖延二十分才開始下水。

路線是由福連國小下方海水泳池下水、游向卯澳灣東邊的跳石仔方向、折返福連國小下水點上岸、全長約1600公尺(過往活動紀錄 連結 報名資料連結)。原希望屆時能用自由式完成,但最近工作太忙疏於練習,留待下次吧。

起初下水處有許多大型礁石,但五公尺外就進入深水區。我以輕鬆的蛙式緩緩前進著,海水溫度適中,兩側又有戒護,非常安全。眼前就可見到折返點標的,一方面是輕鬆,二方面是時間充裕,有很大的餘裕觀察四周。

前面幾次海泳,例如墾丁海灘、外木山、澎湖灣,都是在很大壓力下進行,目標性太強,完全無法觀察海中環境。這次卯澳灣完全不同,大概游五百公尺後,水深已不可見底,因為是蛙式可以輕鬆四望,陽光自海面上撒下,水下的光線不是一個平面,而像是布幕般向下方無盡延伸但又緩緩揉動著。而且隨著我前進的波浪這片海幕不斷翻動著,每一刻都是不同的景象,好像是水中的極光。時間彷彿凝結在這一刻,讓人忘卻一切煩憂與壓力。在大自然的懷抱中,感受著自由與美好,猶如飛翔在無邊的夢境中。

九點多就完成活動上岸沖洗。

雖然短期內沒有其他海泳活動,但是只要在傍晚的戶外泳池,斜射下的光線,在水面因為波浪而不斷晃動,炫目不已。我會思索,相對於變動的畫面,例如海浪、山嵐、流水,穩定不變的畫面,例如大山、平原的吸引力反而比較薄弱。

2024年8月8日 星期四

路是人走出來的:淡蘭古道中路

「淡蘭古道」是清代淡水廳(今台北)到噶瑪蘭廳(今宜蘭)之間主要的交通路線。若看整個東北角地形圖,會發現,台北宜蘭兩地間是西北和東南連線,但當中卻有大大小小山脈共五座,且山脈方向的是東北和西南,與古道方向垂直,也就是說,前人穿越古道就是在不斷的翻山越嶺。


想像二百年前,先民望著眼前連綿不絕山巒,手邊沒有等高線地圖,又沒有對這區域的概念,只能先從地勢較低的北部開始,也開始引領了北台灣漢民族開始由西部往東部發展的黃金時期。隨著古道附近逐漸被認識,更多住民前進山嶺中村落開墾,避免了平埔族侵擾,為了縮短距離加快通行時間,路線慢慢向南部高山處移動,距離更短的中路南路陸續被開發出來,成為小市民採買日用品或嫁娶的道路。原先的北路則成為官府疾馳送公文的北路官道。

繼先前完成北路(連結)和南路(連結)後,這次嘗試踏查中路。我們先開車至暖東峽谷,此處有顯著的雙葉蕨標誌,度過東勢坑溪即是綠意盎然的峽谷。峽谷內綠樹成蔭,河水與藍天不時露臉,蟲鳴鳥叫聲不絕於耳。

翠峽廣場的公共藝術非常獨特,呈現卷曲的蕨類造型,與四周大自然融為一體。

淡藍古道所處的東北角,因為地理位置關係,夏秋兩季易受颱風侵襲,冬春則因為處於東北季風迎風面,終年潮濕多雨,四處可見溪流和爛泥等,因為水分充足,培養出許許多多植物,沿途林蔭茂密,藤蔓和倒木不斷。如下圖就是常見的景緻,岩壁,河流,各種植物縱橫。峽谷內峭壁更為明顯,走出峽谷區域就不復見此種地形。

百年土地公廟,古道中常會有土地公廟保佑往來行人的安全,原本是見一座拍一座,發現實在太多,略過了許多,未來可以。

土地公廟旁邊即是溪谷,此處是全線唯一必須攀繩地點,旁邊人說下次來可能就搭建好橋樑了。


提供大C帥照一張

渡河後是露營區,路程較為紛亂要小心選擇。盡量往左邊走,但就算像我們走錯也是無所謂的。之後續行一段柏油路面,終點是暖東舊道的入口。

暖東舊道,又名十分古道,總長約1公里,陡上,終點五分山頂。沿途有荖寮坑步道,資料上提到有較多文史古蹟,只是在趕路心情下,完全沒有繞遠路的心情。林間有座石棚土地公,石板已經被青苔覆蓋,讓人有思古之幽情。

山頂是嶺頭福德宮,休息片刻繼續由五分山步道下山。預計前往平溪。

五分山步道全為石頭階梯非常好走,終點是台灣煤礦博物館,門票兩百元(?),到達時正好有觀光小火車駛入,簡單瀏覽就延鐵軌離開。

淡蘭古道歷史與煤礦產業並無交集。煤礦興起時古道早已衰落,從日據時代後期,侯峒等地就有開採煤礦的紀錄,十分煤礦成於民國五十多年,算是台灣煤礦大本營。營運數十年後,因為無法與國外煤礦競爭,無論是產量或品質或價格全無優勢,於民國八十年就結束,(參考連結)。

博物館是礦體,延著博物館有舊時運煤道,將挖出的煤礦送往集貨場。以前被荒煙蔓草覆蓋的遺跡,現在整理的井然有序並規劃成為了古道的一部分,過去的榮景不再,換以新的型態,展現在旅客眼前。

再往下,是座巨大的廢墟,巨大的樑柱撐起至少有二十公尺(?)長寬高的廣大空間,四處無壁,可以直接凝視內部大型漏斗結構,好像剝掉皮膚的怪異身體模型。挑高的樓板間以簡單無保護的樓梯連結著,是那種動作片電影中主角會上下追逐的恐怖階梯。

此處為舊時儲煤和洗煤廠,在侯硐、菁桐都有類似遺跡。參考一九七零年的老照片資料庫,會驚訝看到當時是有類似雲霄飛車之類小鐵軌,用很不牢靠的方式從山邊延伸過來,搭建在廠房樓頂,讓運煤火車採高架形式將煤礦直接送到頂部。而廢墟附近就是平溪線,煤礦就直接和平溪線接軌,整個廠區和人們的生活圈緊緊相連。看照片可以想見,當時機器整日不停運轉的狀況,轟鳴聲在山嶺間迴盪的情景。與如今,四周搭起擋板,好像就為了避免不良少年吸毒聚集的樣貌,大大不同。


連結

礦場遺跡距離市區僅數百公尺,很快就到達平溪線鐵路邊,我對十分和平溪的印象非常淡薄,檢視過去經驗只有多年前環島走路時匆匆路過(連結),當時是由台北汐止經汐平公路,先抵達平溪後沿公路北上到十分,再前往侯硐,與淡蘭古道無關。

十分雖然曾是古道重要交通聚集處,但真正興起也是因為礦業發展,只是隨著礦業結束而式微,讓我想起看過的日本北海道都市歌志內(連結)。原本以為是空蕩一片,但今天映入眼簾卻是眾多東南亞旅遊團遊客將十分鐵路塞得水泄不通,他們五或六人一組,圍著天燈寫願望,當天燈四面都被願望填滿後,就是拍照,點火,在眾人驚呼中緩緩的飛向藍天。十分已經轉型成為觀光小鎮了。

我們在此簡單用午餐,到便利商店採買晚上和第二日食物及飲水,就頂著烈日度過基隆河,移動到左轉繞行一陣抵達籃球場,開始下一階段番仔寮步道。

步道二旁林木密佈,踩著枕木階梯一路向上行,途中有涼亭,稍做休憩後繼續上行。總之就是不斷向上,途中遇有個分叉點因為太累放棄,後續查詢是著名景點國旗嶺。終於最後到頂,循之字路慢慢下行至番仔坑。

番仔坑的地形非常奇特。














站上一較高處,四周眺望,對面應該是泰平方向。


走在幽陰路面,驚動了一隻山羌慌忙逃離,由右側山坡處向左跑去,只是碰到了水泥山壁只好折回。
柑腳:位置在雙溪的西南方,柑腳之後有兩條路,北環和南還。曾發生過遊客被暴雨沖走慘事。預計走北環。
泰平(北環):已經設定搭帳點(連結)。
三水:北環南環在此會合,也有標定預備搭帳點(連結)。由此處到外澳要翻越兩個山頭,為求效率,路線設計上都有盡量依著隘口而規畫。

外澳:東岸終點,北海岸太多澳,金瓜石附近是深澳,順時針為澳底,宜蘭附近則是外澳。由此搭火車到暖暖火車站。

整體來說,古道所見都不是什麼鬼斧神工的大景,但是都十分耐看。行走期間,覺得安全好通行,這多虧了政府和民間努力,開發出許多符合自然工法的階梯,即使潮濕多雨的環境但也僅僅只感到有些濕滑。遙想先民應該是胼手胝足,不懈的勤奮步伐,更能體認到臺灣早期開墾的辛苦。



參考資料 連結 連結  連結 連結 連結 地圖 連結 連結

2024年8月6日 星期二

東北角海岸之旅

向山本博司致敬

對東北角的印象就是碧海藍天美不勝收,只是多數時候是開車快速通過,這次因為參加卯澳灣海泳,順帶安排了福隆住宿,才有機會遍遊三貂角附近景點,感受了與以往不同的東北角風光。

因為天氣炎熱,一切計劃在高溫前都顯得如此蒼白無力,最好的方案就是躲在旅館吹冷氣休息,直到傍晚四點,我們終於認真開始計畫,選定福隆舊草嶺環狀自行車道。起點是福隆海灘旁YMCA營地,抵達福隆火車站後,左轉向東伴隨著北迴鐵路線,在鄉村間慢慢騎行,綠樹遮蔽著自行車道,蟲鳴聲不絕於耳,對面方向的自行車絡繹不絕迎面騎來,看他們臉上並無痛苦表情,讓我對此行充滿了信心。

隨著逐漸向山區前進,山嶺逐漸露頭,歷經一整天藍天洗禮,終於從山邊湧現出朵朵白雲,下面照片中的山頭再向前延伸就是遠望坑,草嶺古道的登山口。

接近隧道口首先會看到寬闊的停車場、休憩區和出租自行車的店家。再往前就是充滿舊時代風情的隧道,也就是舊草嶺隧道。此隧道開鑿於日治時期,為東部鐵路運輸提供莫大貢獻,但是隨著東部運輸日益增加,原有的單線鐵軌不敷使用,政府在牠旁邊開鑿新草嶺隧道,此隧道也就功成身退封閉閒置了二十年,直到十多年前,華麗轉身成為福隆地區重要觀光景點。

隧道北口
夫妻偕行

隧道內明亮視野佳,兩側、地面和頂部都非常平整,空氣也很清新,完全沒有以往陰溼滴水潮濕印象,很適合自行車活動。照片中可見每隔一段距離即有照明,兩側是復古紅磚牆面而非岩石山壁,地面的柏油鋪面還繪有兩條仿舊鐵軌線,引導雙向交通,頂部也是平面而非拱形。較特別的是,隧道內還撥放著臺灣民謠〝丟丟銅仔〞「火車行到伊都,阿末伊都丟,唉唷磅空內」很有趣。

隧道長兩公里,出口位於宜蘭石城北側,許多遊客在此休憩稍事休息後原路折返福隆。我們先不能免俗的眺望著太平洋景致,尤其是孤懸海上的龜山島,今天能見度高,龜山島清晰可見,接著討論是否鼓起勇氣向北,完成二十公里的環型路線。老婆因為從未挑戰過如此距離而猶豫,事後評估的確有些勉強,但能欣賞到後續的風景可謂非常值得。

從此處往北直到福隆,一路都是壯闊的海蝕地形。這些海蝕地形是造山運動後期海底火成岩體持續隆起,再經過海水侵蝕而形成,若沒有高聳的山壁是沒有辦法形成海蝕平台的。

公路沿線峻嶺

海蝕平台的形成原因,如下圖。比對上下圖片,就會發現,一側是大山,中間區域是海蝕平台,另一端海面上散落的石塊,也曾是海蝕平台的一部份,隨著侵蝕作用成為孤立的海上石柱。

海蝕平臺並非完全平坦,經查,若當時是砂岩和頁岩交疊沉積而成,受到海浪拍打而被侵蝕後,因為砂岩的質地比頁岩來得堅硬,所以會形成砂岩層略為突出、頁岩層較為凹陷的地形,整片海蝕平臺看起來就會成平行的凹痕,就有魔鬼(巨人)洗衣板之名。若是範圍更大,板塊擠壓更劇烈,還會出現傾斜的單面山。

海蝕平台

繼續前進至馬岡漁村,老婆立刻鑽進阿婆海女(連結)家中享受九孔、海螺和石花凍。這些海螺是阿婆兒子當天從海中摘上來,想要吃牠還不是很容易,得學習如何敲碎外殼才能吃到殼最深處的螺肉。

直接坐在阿婆客廳吃海鮮

繼續騎行,立刻就被馬岡漁港邊大片九孔養殖池吸引,此處原先應該也是海蝕平台,漁民在其間闢建出一個個類似游泳池大小的養殖池,目的是飼養九孔。經過查詢此種養殖池在東北角海岸約有五十多處,都是在風景管理處成立前就已建設完畢,目前除了少量維修外,不允許任何擴張和新申請。


來到卯澳漁港時,正逢夕陽餘暉映照在海面上,時間彷彿凝結在這一刻,讓人忘卻一切煩憂與壓力。

美麗的夕陽霞光與海面交相呼應,形成一幅海景圖畫。


第二日參觀靈鷲山




福隆沙雕季,覺得太過可愛,略過。

澳底貓哥冰淇凌,沒機會嘗試。


2024年7月25日 星期四

ANDROID STUDIO & BLE

ANDROID STUDIO & KT(連結)
ANDROID STUDIO & BLE(連結)

文章說明( 連結 ) 程式( 連結 ) 進度為:用KT連結PIXART,

log 1 2 3 4 5  這邊已經進行 device.connectGatt 完畢

log 10 BluetoothProfile.STATE_CONNECTED 進入這個狀態

從log看狀況

Timber.i("Connected to GATT server.")

Timber.i("Attempting to start service discovery: %s", bluetoothGatt?.discoverServices())  這會自動進行後面動作

log 50 52 BluetoothGatt.GATT_SUCCESS  應該可以繼續發展,傳送資料 但是因為沒有後續,之後就進入 log 11 BluetoothProfile.STATE_DISCONNECTED

log 10 > 後面重複循環 (應是系統自行connect)

過程中基礎知識薄弱,又參考(連結 github位置)

write的功能已經驗證,write完畢會收到onXXX,但是只是結果正確與否,而不是BLE裝置送出的項目
取得部分方式一read,只是BLE這邊沒有對應程式,先跳過
取得部分方式二notification
A.先設定enableIndicateNotification(APP自行設計 setCharacteristicNotification)
會啟動系統gatt.writeDescriptor
B.這裡應該是會收到訊息的地方
override fun onCharacteristicChanged(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) {
        val content = ByteUtils.bytesToHexString(characteristic.value)
        uiCallback.state("特性改变: 收到内容:$content")
}




DeviceListFragment

BluetoothAdapter.startDiscovery() -> 掃描經典藍芽和BLE藍芽兩種(  目前範例使用這個 )
BluetoothAdapter.startLeScan() -> 用來掃描低功耗藍芽 —- 已被棄用
BluetoothLeScanner.startScan() -> 新的BLE掃描方法
理論上,可以限定要搜尋的service,帶入代表該service的UUID
有四件事情
1.繼承一個BroadcastReceiver 然後使用receiver type的形式返回結果bleDevice
private val receiver = DeviceListBoardCast { bleDevice ->deviceViewModel.addDevice(bleDevice)}
這個在下一個
2.註冊監聽BluetoothDevice.ACTION_FOUND
val filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
    requireContext().registerReceiver(receiver, filter)
掃描的結果會返回DeviceListBoardCast {}內,根據專案調整
3.private val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
4.bluetoothAdapter!!.startDiscovery()

DeviceListBroadcast

取得資料的運作
val device: BluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)!!
val rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE).toInt()
val uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID)

BlueToothLEService

找到藍芽裝置
建好service,當跟藍芽綁定時,就能互相溝通,並建立Binder,用來onBind時返回實例給fragment去調用。
準備幾個返回的callback
onConnectionStateChange新的連接狀態改變
onServicesDiscovered新的服務被發現
onCharacteristicRead新的東西讀到後
重要功能是啟動connect
進入點是前面DeviceListFragment
執行service中的connect
要跟裝置內的GATT Server連線mBluetoothGatt = device.connectGatt(this, false, mGattCallback);這會連線到藍芽裝置host的GATT Server。
bluetoothGatt = device.connectGatt(this, false, gattCallback)
把要連線的adress丟進去
拿到想要連線的BluetoothDevice
再用device內的方法connectGatt去綁定Gatt裝置
當然同時要丟入前面寫好的gattCallback

讀取資料

displayGattServices
藍芽最重要的就是終端之間的通訊
所以如果想要收送資料
必需要找出service與characteristic
這個範例並沒有提到如何讀取資料,如果真的要進行
gattServices.forEach { gattService ->
    取得各個charxxxx  有sample但實際code沒看到
fun readCharacteristic(characteristic: BluetoothGattCharacteristic) {
        bluetoothGatt?.let { gatt ->
            gatt.readCharacteristic(characteristic)
    這是取得characteristic內容 
private val bluetoothGattCallback = object : BluetoothGattCallback() {
        override fun onCharacteristicRead(
            gatt: BluetoothGatt,
            characteristic: BluetoothGattCharacteristic,
            status: Int
            ) {
                if (status == BluetoothGatt.GATT_SUCCESS) {
                broadcastUpdate(BluetoothService.ACTION_DATA_AVAILABLE, characteristic)
            }
        }
    }
其他類似範例(連結)

其他

理論:Android BT API(連結)。

基本character:範例

  1. 對應ADAFRUIT IOS 有幾個不同的  連結 連結
  2. 落落長非常專業說明 連結 連結

進階HID:PIXART的範例聚集在HID(連結  連結)。