2019年2月13日 星期三

DIY : 滑順骨溜的電子白板筆

教室的前面裝上大尺寸的觸控電視,取代了原來的單槍投影機和虛擬電子白板。昨天被孩子們笑說手太髒,在螢幕上留下了指痕。手指碰了黑板後使用觸控螢幕,留下痕跡是一定的;另外,使用手指寫字,感覺還是沒有拿筆習慣。為了解決前述的問題,原本是拿了一支免削鉛筆的尾端當畫筆,因為這種筆的尾端是有一點軟的塑膠,在電視的螢幕上書寫時,除了比較不會有聲音外,書寫時的手感也比硬頭的筆較好一些。早上想到教具箱中有好幾支早已乾掉沒水的白板筆,將它們拿來改裝成觸控螢幕的筆,滿不錯的。



這支筆想要擁有的特性是:

  • 筆頭有一點點彈性,書寫時比較不會有聲音。
  • 書寫滑順。


基於上述的需要,準備的材料如下:

  • 白板筆或是其它筆也可以。(筆身)
  • 泡棉。(軟而有彈性)
  • 鐵氟龍膠帶。(滑順)



製作的程序大概如下

1.先將白板筆的筆頭和筆芯拿掉



2.將泡棉由外面塞入筆頭的孔中。


3.將鐵氟龍膠帶貼在泡棉的外面。


泡棉我使用的是「巧拼貼」的一小塊,它軟但又有彈性。泡棉的磨擦力比較大的問題則是利用鐵氟龍膠帶骨溜的特性來彌補。



這樣的一支筆花不到五分鐘就可以完成,在大電視上書寫,不但骨溜流暢,手感滿好的。有興趣可以自己找材料試試。



2019年1月19日 星期六

Android : 找回 Facebook 貼文的「草稿」

昨晚有人在 Facebook 上貼文求救,想找回消失不見的「草稿」。平常沒有使用 Facebook App 的習慣,看到那則才知道,原來如果在行動載具上使用 Facebook App,文章打一半是可以暫時存成「草稿」的,而且最多可以暫存三天。幫忙找了一下救回草稿的方法,為了測試,就在 Android 手機上以 Facebook App 登入。

整理一下測試結果,有兩個重點一定要先具備:
  • 使用 Android 的 Facebook App 。
  • Facebook 的「通知」一定要「開啟」。

底下的截圖是 Sumsung S8 的畫面,其它品牌的可能有部份不同。

1.進入 Android 系統設定,開啟 Facebook 的通知


2.新增一個測試的貼文後,按「返回鍵」


3.出現「儲存為草稿」的選項,按一下該項。


4.我的手機按完「儲存為草稿」以後,畫面會暫時變黑一下下,然後 Android 系統會發出通知;將通知的頁面拉下來後,就可以出現類似底下的「你的草稿已儲存」的畫面。點一下該項目,即可開啟草稿的清單。


5.由草稿清單中點選要繼續編輯的草稿


6.繼續編輯


上面的程序是 Android 的 Facebook App 中測試的,在 iPad 上可以看到草稿儲存的訊息,但卻無法叫出清單,等我有進一步的發現再記錄囉!


2018年12月31日 星期一

JavaScript : URIError: URI malformed

Facebook 的備份檔如果選用 JSON 格式來備份,所有的文字都會以 Unicode 編碼,例如:

"content": "\u00e9\u0099\u008d\u00e9\u009b\u00a8\u00e6\u00a9\u009f\u00e7\u008e\u008790%"

這個如果變成 JavaScript 的變數,內容會被直接解碼,不過,中文字通通變成亂碼。後來想到一招,將每個「\u00」通通換成「%」,就可以利用 JavaScript 的「decodeURIComponent」來解碼了。所以將上面的內容先變成:

"content":
"%e9%99%8d%e9%9b%a8%e6%a9%9f%e7%8e%8790%"

不過,大部份的內容都可以順利的轉換為中文字,遇到上面舉的例子就會出現底下的錯誤的訊息:

URIError: URI malformed

基本上,如果有 decodeURIComponent 不能解碼的字,就會出現前述的錯誤訊息。追了一下「%」編碼的東西,最後面多了一個「%」,導致解碼失敗。因為 URI 的編碼,每個字的前面會加上百分比的符號「%」,照說,如果要用「%」,應該要用「%25」才對,如果沒有將 % 編碼,在解碼時就會出現錯誤。

如果不想改原始內容怎麼辦?駝鳥心態的話,當然是直接跳過不解碼了。哈!我可不想當駝鳥,於是遇到錯誤時,就將錯誤修正過來再重新解碼即可!

底下的程式碼先試著解碼,如果有錯的話,就以 % 將字串分解,然後一一檢查後重組。判斷 % 到底是編碼時的前導符號,還是只是 % 這個字的關鍵如下:

  • 編碼後, % 後面接的字串字數必須為二的倍數

所以如果 % 後面接的字串字數不是二的倍數,甚至是空的,表示它只是一般的百分比符號而已,必須將它變成編碼後的「%25」。

底下是以土法煉鋼的方式寫的程式,先記錄下來 ,以後再進化:


uriDecode = function (str) {
var out = '';
try {
var out = decodeURIComponent(str);
} catch(e) {
if( typeof(console) != 'undefined' ) {
console.log(str);
console.log(e); }
var p = str.split('%'); //以 % 將字串分解
var len = p.length; var out = '';
for(var i=0; i<len; i++) {
//如果是分解完的內容是空的,表示為第一個或是 %
//檢查下一個是否為兩個字元, 如果不是, 表示為%
if(p[i] == '') { if(i<len-1) {
//如果下一個為空的或是字元數不是二的倍數, 則應為%
if( p[i+1]=='' || p[i+1].length % 2 == 1) {
p[i] = '%25'; //轉為 % 的編碼
}
} else { //出現在最後, 一定為 %
p[i] = '%25'; //轉為 % 的編碼
}
out += p[i];
} else {
//如果長度為二的倍數, 就在前面加上 %
if(p[i].length % 2 == 0) {
out += '%'
}
out += p[i];
}
}
try {
out = decodeURIComponent(out);
} catch(e) {
if( typeof(console) != 'undefined' ) {
console.log(str);
console.log(e); } } }
return out; }






2018年12月28日 星期五

PowerPoint : 匯出 pptx 中的聲音檔

想將朋友 PowerPoint (.pptx) 檔案中的聲音檔匯出,查了一下,原來 .pptx 檔案是一個壓縮檔,只要解壓縮就可以取得裡頭的聲音檔了。

如果系統中有安裝類似 7-zip 的工具,只要對準要解壓縮的 .pptx 檔案,按一下滑鼠的右鍵,按照下圖的步驟,選取「解壓縮至...」即可。


再以檔案總管開啟解壓縮後的目錄,依序找到「ppt」→「media」的資料夾,就可以看到想要的聲音檔囉!




2018年12月23日 星期日

DIY : 改裝 Nokia HDB-5 耳麥

舊手機曾經買了一個 Nokia HDB-5 耳麥,它的接頭和腳位和現在的 Android 手機或 iPad 已經完全不同,為了讓它可以「重生」,把 HDB-5 的耳機線剪了,將之前買的四極接頭焊上去。HDB-5 和手機、iPad 又成了好搭檔。


HDB-5 的線有兩條,一條是耳機,一條是麥克風,每一條中兩股細細的漆包線,為了把正負極分開,可苦了我的眼睛,老花眼加上色弱,紅色、綠實在很難分啊!


HDB-5 的四極由尖端起,依序為:
  • 耳機(+)
  • 麥克風(+)
  • 耳機(-)
  • 麥克風(-)
iPad / Android 的四極由尖端起,依序為:
  • 左聲道
  • 右聲道
  • GND
  • 麥克風
因為 HDB-5 只有單聲道,所以把它的耳機(+) 焊到新端子左、右聲道的接腳。麥克風(+) 焊到新端子的麥克風接腳。而耳機(-) 和麥克風(-) 則都焊到新端子的 GND 上。

四股線都焊好,將端子的外殼鎖緊,收工!


2018年12月20日 星期四

Excel : 取得某個中文字的 BIG5 碼

昨天才知道,原來利用 Excel 的函數就可以輕鬆取得某個中文字的 BIG5 碼。假設在格址「 A 1」中是中文字,我們可以利用底下的函數來取得它的 BIG5 碼:

DEC2HEX(CODE(A1))

CODE 可以幫我們取得 A1 中的中文字內碼,但得到的值為十進制的。
DEC2HEX可以幫我們將十進制轉為十六進制的。

哈哈哈~以前自己用程式弄是在幹嘛啦!

2018年11月18日 星期日

Node.js : 安裝指定版本的 firebase-tools

前幾天想更新 Google Firebase 空間中的檔案,執行 firebase deploy 後,居然無法上載檔案。後來將 firebase-tools 更新為最新版以後,更慘~連執行都不能執行。後來一陣亂搞後,連 node.js 都玩壞了。

其實主因還是自己常用的電腦是跑 Windows XP ,node.js 已經無法安裝最新版,連帶的 firebase-tools 也無法使用最新版。

今天把 node.js 重新安裝,順便記錄一下用 node.js nmp 如何安裝指定版本的 firebase-tools。例如想安裝 v4.1.0 的 firebase-tools ,就執行:

npm install -g firebase-tools@^4.1.0

哇~這樣子可以安裝舊版的 firebase-tools ,那在 Windows XP 可以再上載資料到 firebase server 了嗎?

並不是所有的故事都是以歡樂結束的,答案是:「不行!」。

2018年10月30日 星期二

FFmpeg : 切割聲音檔

如果想將一個聲音檔或是影片檔切割,使用 FFmpeg 就可以輕鬆完成任務。

例如底下的指令:

ffmpeg -i input.mp3 -f segment -segment_time 300 -c copy out%03d.mp3

解析一下各參數:
  • -i 後面接的 input.mp3 是要分割的 mp3 檔案。
  • -f segment 指定以固定時間來切割。
  • -segment_time 後面接的 300 是指定每 300 秒為一個檔案。
  • -c copy 指定以原來的編碼來輸出檔案。
  • out%03d.mp3 是輸出的檔名,會以三位數字,自動編號的檔名。



除了用固定長度來切割,也可以用指定開始時間和結束時間的方式來切割,此部份在之前的另一篇「雄 : FFmpeg : 指定要加特效的時間點」中已寫過,就不再贅述。


相關文章




2018年10月18日 星期四

LimeJS : Install error : zipfile.BadZipfile

這幾年寫 HTML5 的工具,主要是使用 LimeJS 這個 HTML5 Game Framework。雖然它已經很久沒有更新與維護了,時至現在,還是滿好用的。

不過,由於 LimeJS 主程式 lime.py 中使用到的兩個工具網址已失連,導致在安裝時,可能出現類似下圖中的錯誤訊息:


或是這個錯誤訊息:


關鍵的地方我用黃色做上記號了。

這兩個錯誤訊息都是因為下載不到檔案而產生的。一個是發生在要安裝「Closure compiler」時,而另一個則是發生在要安裝「Closure Templates」。

既然只是路徑有誤,我們只要修正路徑以後,就可以繼續使用 LimeJS 來開發 HTML5 的程式囉!

LimeJS 的主程式 lime.py 放在 bin 目錄中,先以文字編輯器開啟以後,需要修正的檔案路徑如下:

1.有關「Closure compiler」的部份,找到

http://closure-compiler.googlecode.com/files/compiler-20130411.zip

改為:

http://dl.google.com/closure-compiler/compiler-20130603.zip


2.有關「Closure Templates」的部份,找到

http://closure-templates.googlecode.com/files/closure-templates-for-javascript-latest.zip

改為:

http://dl.google.com/closure-templates/closure-templates-for-javascript-latest.zip


為什麼「Closure Templates」用的是最新版的,而「Closure compiler」卻是採用 20130603 版?其實原來 LimeJS 的「Closure compiler」是要用 20130411 版,不過現在專案空間中已找不到該版本。那又為什麼不使用最新版呢?主要是之前使用時發現一個問題,用較新版的 「Closure compiler」,如果使用「精簡」的「-a」參數處理過的 HTML5 程式,在運作會不正常,因此,以測試過沒問題的 20130603 版來替代會較好。關於這一點,似乎沒有人發現。哈~有看到此篇人,算是撿到了!

關於 LimeJS 詳細安裝方法,在官網中已有「Programing Guid」詳細說明,就不再贅述。









2018年10月17日 星期三

LinuxMint : 解決發不出聲音

上週把舊筆電上的 LinuxMint 18 改安裝為 LinuxMint 19,在測試要給小孩玩的教學軟體後,才發現筆電的喇叭發不出任何音效。改用 Windows XP 開機,音效卻又正常。本來以為是 BIOS 太舊的問題,想辦法更新了 BIOS ,問題依舊。只好再重新認真的找答案。

後來用「linuxmint enable sound」的關鍵字, Google 到一部影片教人家怎麼更改音效卡的輸出設定。哈!在一臺聽不到聲音的筆電上看影片,只能看圖說故事囉!不過,有了大概的方向後,試了一下,真的讓筆電「開金口」了!

關鍵在這部筆電在安裝完 LinuxMint 19 以後,預設的設定,居然是「Off」,然後圖示並不是顯示為關閉的狀態,害我怎麼調音量都沒有用。

底下留一點筆記,以免日後又,「迷路」了。


1.先用滑鼠點一下 LinuxMint 19 畫面右下角「音量控制器」中的「混音器」



2.進入「混音器」(Volume Control) 的設定畫面以後,按一下「Configuration」


如果像上面的「Profile」被設為「Off」,就準備換為其它選項。


3.我將「Configuration」的 Profile 更換為「Analog Stereo Duplex (unplugged)」



4.換好 Profile 以後,就可以關閉設定視窗。


下面是更換 Profile 以後,音量控制選項的畫面



除了輸出,還多了麥克風的選項可以設定。最重要的是筆電在 LinuxMint 19 下,終於可以播放音效了。



2018年10月13日 星期六

LinuxMint : 中文化 chromium-browser-l10n

如果 Linux Mint 安裝完 Chromium 後,界面並不是中文的,沒關係,安裝  chromium-browser-l10n 即可解決問題。

打開終端機,並在裡面執行以下的指令:

sudo apt-get install  chromium-browser-l10n

安裝完,重新啟動 Chromium ,即可出現中文的選單與訊息了。

2018年7月28日 星期六

Biking : 自行車道→大稻埕碼頭

天氣狀況 : 晴
TRIP DIST : 34.91
TRIP TIME : 01:33:54
AVG. SPEED : 22.30
MAX. SPEED : 34.73

晚上七點多出發,一路上騎自行車的不多,跑步和散步的倒是不少。尤其是景美到公館特別熱鬧。在馬場町稍微休息以後,開始進入路燈較少的路段,只好放慢速度,更集中精神小心路上的行人。

昨晚因為太累而錯過了最大火星衝和月食,今晚的月色依舊美麗,在手機 Sky Map 的輔助下,找到了星空裡的幾顆行星,雖然有光害的情形下,金星、水星、火星及木星還是可以輕易的看出來,而木星就伴著天秤座呢!

過了華中橋下後,路變得更暗了,兩個年輕小伙子騎著公路車,從後面超車而過,還對著我耳邊大叫「加油!」,熱情到讓人覺得是挑釁。哈~被這麼一激,就一路往下騎,快到忠孝橋,追上兩個已經累的小伙子,他倆併排騎,哈!當然不用客氣的噹一聲示意超車,對著稍微呆滯的兩人輕聲說了聲「加油」,就這麼從中間超越。之後他們一直尾隨在後面。快到大稻埕碼頭,我放慢速度,他們才呼嘯而過。

假日的大稻埕碼頭很熱鬧,遠遠就可以聽到音樂聲和人聲。美麗的夜景當然也不在話下。


休息了近半個小時,準備要走時,才發現一旁的那群人原來是在看2008上映的電影「媽媽咪呀!」,好久沒看露天電影了,跟著在一旁看了一會兒。

電影播畢散場,不想再騎向黑漆漆的自行車道,改由水門出去,走車多的馬路回家。




2018年7月16日 星期一

Apps Script : TPET10 NFC 簽到系統


上學期期末時,好友原禎 (大學塾的站長) 提到想在 TPET 年會時,玩一下 NFC 的電子簽到系統,初步的構想就是讓學員擁有一張 NFC 貼紙,來上課的學員就拿貼有 NFC 貼紙的名牌,讓設置在講堂的 NFC 讀卡機「嗶」一下(感應),系統再進行名冊資料的搜尋,並登錄簽到的時間。這麼好玩的事,當然不可以放過囉!

為了方便資料的維護,及跨平臺的目標,我們採用了 Google 的試算表當資料的儲存空間,程式則是用 Google Apps Script 來開發。

系統運作大致如下:

前置作業:

試算表的部份
  • 在試算表中建置一個名為「users」的工作表
  • users 第一個欄位為 NFC tag 的 ID (格式建議設為文字,以免零開頭的編號被省略)。
  • users 第二個欄位為學員的姓名。
Apps Script 的部份
  • 填入試算表的 Google DOC ID。
  • 在程式碼中加入所有課程的清單。


程式主要流程:
  • 選定講堂進行的課程,送出課程代碼給程式。
  • 學員刷卡,送出卡號給程式。
  • 在試算表中「users」工作表的第一欄中搜尋和卡號一樣的那一行。
  • 在以課程代碼為名的工作表中登錄學員的卡號、姓名及簽到的時間;如果簽到資料已存在就以新資覆蓋。
  • 在刷卡頁面顯示學員姓名及歡迎詞,並等待下一個人刷卡。

如果沒有 NFC 貼紙和讀卡機怎麼玩?沒關係,可以用 Barcode scanner 加條碼;再沒有,就手動輸入編號即可玩了。

下面看看如何在自己的 Google 雲端硬碟中建置這個簡易的簽到系統。


2018年7月12日 星期四

Biking : 自行車道

天氣狀況 : 晴
TRIP DIST : 28
TRIP TIME : 01:30:00
AVG. SPEED : 18.66
MAX. SPEED : 32.27



滿天星斗的夜,蟲嗚環繞,微熱的風迎面吹拂。

2018年7月11日 星期三

Biking : 自行車道→光復橋

天氣狀況 : 晴
TRIP DIST : 38.6
TRIP TIME : 02:04:12
AVG. SPEED : 18.64
MAX. SPEED : 34.50

今年第8號颱風瑪莉亞由北部海域掠過,兩天的天氣狀況完全不同。樓上的小藍 Neveda 1.0 好久沒有出門了,特地扛它下樓遛遛。

一路由河濱自行車道騎到了光復橋才折返。雨後的自行車道還是老問題,滿多地方因為路旁的積水流至車道,車子一過,噴得到處都是,只好刻意降速。

太久沒有這樣高速的騎乘,加上從上週三起,一連開了六天的車,體力有夠糟,一躺上床就睡著了。
 
© 2009. Design by Pocket