2016年12月10日 星期六

FFmpeg : 影片剪接與加馬賽克

影片的剪輯不一定要使用圖形界面來操作的,如果只是想進行簡單的剪接而已,利用 ffmpeg 這個自由軟體,下指令即可進行剪接,甚至加上特效。

以底下的某化妝品廣告影片為例:



分析原廣告片,在 00:02:28.500 和 00:02:46.001 以後各有 1.5 秒 和 2 秒長的時間會出現商品的名稱,另外在 00:03:13 以後會有全版的廣告。片尾的廣告只要截掉不取即可,不過中間會有兩段要為商品名稱加上馬賽克。

本篇中會使用到兩個工具,都可以在網路中找到:

影片下載

在 YouTube 中的影片,可以片利用 youtube-dl 下載。假設我們將下載回來的 FullHD 的影片儲存為 source.mp4。

切割影片

利用 ffmpeg 將原始影片(本例中的 source.mp4)切割為五分段,並輸出為 s1.mp4、s1.mp4、s1.mp4、s1.mp4、s1.mp4,五個影片檔。指令如下:

ffmpeg -i source.mp4 -ss 00:00:00.00 -t 00:02:28.500 -y -c copy s1.mp4 
ffmpeg -i source.mp4 -ss 00:02:28.501 -t 00:00:01.500  -y -c copy s2.mp4 
ffmpeg -i source.mp4 -ss 00:02:30.001 -t 00:00:16.000  -y -c copy s3.mp4 
ffmpeg -i source.mp4 -ss 00:02:46.001 -t 00:00:02.00 -y -c copy s4.mp4 
ffmpeg -i source.mp4 -ss 00:02:48.001 -t 00:00:25.00 -y -c copy s5.mp4

上述指令中,「-ss」設定了分段影片的開始時間,而「-t」設定了分段影片的長度。

加馬賽克

我們可以利用 ffmpeg 的濾鏡功能來為 s2.mp4 和 s4.mp4 這兩段有 mark 的地方加上馬賽克。

下載回來的影片,解析度是 1920 x 1080 ,而

  •  s2.mp4 中需要加馬賽克的大小假設為 960x540,放置的座標為 (380,270)
  •  s4.mp4 中需要加馬賽克的大小假設為 1160x540,放置的座標為 (380,270)

最後再用原來的檔名覆蓋儲存即可。執行底下的兩行指令:

ffmpeg -i s2.mp4  -filter_complex  "[0:v]crop=960:540:380:270,boxblur=10[fg];  [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart  -y s2.mp4 
ffmpeg -i s4.mp4  -filter_complex  "[0:v]crop=1160:540:380:270,boxblur=10[fg];  [0:v][fg]overlay=380:270[v]" -map "[v]" -map 0:a -c:a copy -movflags +faststart  -y s4.mp4
上面的濾鏡參數:

  • [0:v] : 指出是針對第一個影片設定。
  • crop=960:540:380:270 在座標 (380, 27) 處取 960x540 大的畫面
  • boxblur : 馬賽克

連接影片

分段影片都處理好了,最後我們利用 ffmpeg 將 s1.mp4、s2.mp4、s3.mp4、s4.mp4、s5.mp4 五個檔案連接起來,並儲存為 new_movie.mp4,執行底下的這行指令:

ffmpeg -i s.mp4 -i out2.mp4  -i out3.mp4  -i out4.mp4  -i out5.mp4 -filter_complex concat=n=5:v=1:a=1 -y new_movie.mp4

concat 參數的部份:

  • n=5 : 有 5 個影片
  • v=1 : 有影片
  • a=1 : 有聲音


透過前面的操作以後,最後輸出的影片裡,看不到商品的名稱了。ffmpeg 實在好強,有空再來研究一下別的玩法。

相關文章



2016年12月6日 星期二

LimeJS : 使用 this 產生 WARNING

在 LimeJS 中使用「build」參數來產生 .js 檔時,常常會出現一堆類似底下的「WARNING」:


WARNING - dangerous use of the global this object ......

WARNING - dangerous use of this in static method ......

追了一下程式碼,這些訊息主要是發生在我自己寫的元件中使用「this」。因為編譯完的程式仍然可以正常執行,該有的效果都有出來,LimeJS 用了幾年了,哈!一直沒理它,不過,追求完美的我,心中仍然有一點芥蒂。

剛剛用關鍵字去搜尋了一下,看到底下這個討論串,頓時豁然開朗:



LimeJS 主要是架構在 Google 的 Closure Compiler 上,而問題就出在我沒照人家的規定,在  constructor function 的前面加上宣告  constructor 的註解,以致在 complie 的時候被認為會出問題而警告,只要 constructor function 的前面至少加上以下的註解 (JSDoc tags) 即可:

/**
 * @constructor
 */

那如果不是 constructor function,可以單獨指出「this」是哪一種物件,例如:

/**
 * @this {lime.Sprite}
 */

至於還可以使用哪些「JSDoc tags」,可參考 Closure Compiler 網站上的說明:


改完,哇!終可以不用看到一堆 WARNING 的結果了。


2016年11月11日 星期五

LimeJS : hitTest

最近寫了一個將物體拖曳到天平秤重的程式,原本的程序是利用 ['mousedown','touchstart'] 來觸發 Drag 事件,不過 LimeJS 預設會在最後將物體移到 DropTarget 上,也就是秤盤的中心點上,這樣的畫面實在很不自然,在不知道要將移動物體位置的程序安插在哪個事件中的情形下,只好放棄使用 drag 的相關事件,改在 ['mouseup','touchend', 'touchcancel'] 時用「hitTest」來判斷是否已將物體拖曳至秤盤上。

查看了 LimeJS 的 node.js 中的「hitTest」,它其實是抓參數的 .screenPosition 值(一般為滑鼠的所在位置),並利用 screenToLocal 轉換為要和要檢查是否碰撞物體同一系統的座標。

這下又產生新問題了,以將物體放到秤盤上來說,一般人的直覺會在滑鼠指標對準物體的中心左右按下滑鼠開始拖曳,然後當物體的邊緣碰到待測試的東西邊緣時可能就放開滑鼠按鍵,這樣一來,滑鼠指標的位置並不會在秤盤上,測試兩物體是否「碰撞」,理所當然就傳回 false。

為了解決上述的問題,只好修改測試碰撞的座標,改以物體邊緣的座標來測試。

LimeJS 裡, node.js 中的「hitTest」原本應該傳一個 lime.events.Event 型態的 e Event object 來當參數,不過,看 hitTest 的原始碼,它是要抓 e.screenPosition,所以我們只要傳一個物件,且帶有一個名為 screenPosition 的座標變數給它即可(記得先轉為 screen 的座標系統)。

以拖曳 sprite 這個物體為例,具體的程序如下:

var pos =  new Object();
pos.pos = sprite.getPosition();
pos.pos.y += sprite.getSize().height*2/3;
pos.screenPosition = sprite.getParent().localToScreen(pos.pos);

上面把測試的座標往下移 2/3 個 sprite 高度,因為我們起算的座標都是以 sprite 的觀點,而 sprite 是存在於它的 parent 中,所以我們用 sprite.getParent().localToScreen 來轉換座標,算出它的 screenPosition。

處理完座標後,我們就可以利用底下的語法來測試 targetObject 和 sprite 是否碰撞了

 targetObject.hitTest(pos) 


LimeJS 除了 localToScreen ,還有 localToNode 和 localToParent 可以用來轉換座標,滿值得研究的。


2016年10月31日 星期一

Tools : youtube-dl 下載影片的利器 part 4

關於 youtube-dl 這個強大的工具,之前寫過三篇介紹(詳見文末的相關文章),再追加一篇,如何連字幕一起下載。

youtube-dl 關於字幕的參數有:

  • --write-sub
  • --write-auto-sub
  • --all-subs
  • --list-subs
  • --sub-format FORMAT
  • --sub-lang LANGS
  • --embed-subs
  • --convert-subs FORMAT

以 YouTube 的影片來說,它的字幕 format 目前提供 vtt 和 ttml 兩種格式,我們可以利用底下指令來查詢:

youtube-dl --list-subs 影片網址

不過,我常用的影片播放程式 VLC 好像沒有支援 vtt 格式,沒關係,youtube-dl 的好朋友 ffmpeg 可以幫我們轉換為 VLC 支援的 srt 格式字幕檔。

所以,如果想在 YouTube 影片下載以後,順便:
  • 下載字幕檔。(使用 --write-sub --all-subs 參數)
  • 轉為 srt  格式的字幕檔。(使用 --convert-subs srt 參數)
  • 將字幕嵌入影片檔中。(使用 --embed-subs 參數)
就需要先下載底下兩支程式:
並將兩支程式放在同一個目錄中來搭配使用。

最後執行以下指令:

youtube-dl --write-sub  --all-subs --embed-subs --sub-format srt  影片網址

即可下載帶有字幕的 YouTube 影片。

什麼!下指令很麻煩!

好吧!我將之前的「Youtube-影片下載.vbs」改了一下,將下載所有字幕的參數加進去了,只要將這個有下載字幕的版本和 youtube-dl 及 ffmpeg 放在一起,就能變成有字幕的 YouTube mp4 影片囉!

檔案下載



相關文章



2016年10月30日 星期日

Mac : 依日期分目錄歸檔的 shell script

幫同事救行動碟中的資料,由於救回的檔案幾乎只剩一堆編號,原來的檔名都不見了,加上資料量大,於是想順便幫忙把照片檔案按日期分別置入不同的資料夾中。找到在 Ask MetaFilter 中的這篇文章:


裡面是利用 shell script 去呼叫 Mac OS X 中的底下幾個指令來達成按日期歸檔的:

  • 「ls -1」:列出目錄中所有的檔案檔名。
  • 「mdls」:列出檔案的 metadata contents。
  • 「grep CreationDate」:只顯示帶有「CreationDate」的那行資料。
  • 「awk '{print $3}'」:以空白當分隔符號,取出第三個欄位的資料(年月日)。
  • 「export date=」:將找出的日期設為「date」的環境變數

以此來判斷日期的目錄是否存在,已存在就執行「cp」的指令複製檔案,不存在則先利用「mkdir」指令來建立目錄後,再執行檔案複製。

因為我已經將救回的檔案備份到另一顆隨身碟中了,所以在備份目錄中的操作,將原網頁中的指令改用「mv」指令,也就是用搬移來取代複製。

另外,此次救援的主要對象是照片和影片檔案,所以在列出檔案清單的「ls」指令後面加上了可能的副檔名「*.jpg *.nef *.mp4 *.mpg *.avi *.mov」來過濾,只搬移那些副檔名的檔案,其它的都不處理。

底下是依日期分目錄歸檔的 shell script :

#!/bin/bash
for image in `ls  -1 *.jpg *.nef *.mp4 *.mpg *.avi *.mov`; do export date=`mdls $image | grep CreationDate | awk '{print $3}'`;
if [ -d ./$date/ ]
then
mv $image ./$date/
else
mkdir ./$date/ && mv $image ./$date/
fi; done
exit

參考文章:

2016年9月21日 星期三

Windows : Aspire One ZG5 無線網路不通

同事的 Aspire One (ZG5 AOA150) 無線網路很奇妙,明明連上基地臺,等了老半天,終於取得了基地臺 DHCP server 派送的網路組態,ping 本機的 IP 有回應,ping 網路內的其它機器的 IP 卻沒反應。試了好久,還是沒能解決問題。其實這並不是第一臺遇到,另一臺最後是捨機器內建的無線網卡,改插了一個 USB WiFi Dongle 才能上網的。

問題擱在那裡,心中實在不爽呀!以「aspire one zg5 wifi problem」的關鍵字問了 G 神,哈!Bingo!找到了底下的文章:


依作者的說法,ZG5 AOA150 的無線網路 driver (ver. 7.6.0.224) 是有問題的,後來有更新,但是卻沒有放在 ZG5 A0A150 的下載頁面中,唉!買東西就怕像這樣「斷頭」!幸好有人發現在 Aspire One AOD255 中有更新過後的 driver (ver. 7.7.0.456)。

連到 Acer 網站後,

  • 點一下「服務支援」中的「驅動程式與手冊」
  • 由「或從清單中選取我的產品」中點選
  • 點選「小筆電」
  • 點選「Aspire One」
  • 點選「AOD255」
  • 點選作業系統中的「Windows XP 32-bit」
  • 點選「驅動程式」
  • 找到「Wireless LAN」「Atheros」「Wireless LAN Driver」「 7.7.0.456」的連結,並點下載。
將下載回來的檔案解壓縮以後並安裝,無線網路就可以正常使用了。





2016年9月19日 星期一

Flash : Flash Player projector

各大網頁瀏覽器陸續放棄對 Flash 的支援,以前可以在 Chrome 中播放 Flash 的 .swf 檔案,現在得面對它不支援的問題(哈~突然發現,因為我的 Windows XP 也被 Chrome 放棄,Chrome 不能更新,所以 Flash 繼續在已經是舊版的 Chrome 中運轉著)。

除了非要在網頁瀏覽器中播放 .swf 檔,不然,我們可以下載 Adobe 的「Flash Player porjector」來開啟 .swf 執行的。下載的網址如下:


進入頁面以後,往下捲,我們可以找到 Windows、Mac OS X 或是 Linux 用的 Flash Player:


對~對~對~~就點那個「Download the Flash Player projector」的連結下載。

下載完的是一個執行檔,建議先將檔案搬移到合適的資料夾存放,然後執行它來開啟 .swf 檔:

Windows 中的開啟檔案截圖
哈~其實不難吧!



2016年7月4日 星期一

3DP : 蛋形相片 LED 燈

玩過圓柱形的相片 LED 燈後不過癮,再來一個特別的吧!在 Thingiverse 中有不少復活節蛋的模型,厲害的是,有的可以在蛋上面加圖案,其中有一個是用 OpenSCAD 來產生 3D 模型,更好玩的是,它能將照片貼在蛋的表面。我利用這個小工具製作「相片蛋」,列印時故意將填充值設為 0 ,並且讓它底部的 2mm 不列印,也就是印了一個貼有相片的「『破』蛋殼」,將它和 LED 燈的底座,一個蛋形相片 LED 燈就完成了。


底下記錄一下蛋高 50mm 的燈罩製作方法。

2016年6月25日 星期六

3DP : Lithophane 相片 LED 燈

2015年夏天曾經玩過以 Ultimaker Cura 匯入 .jpg 的照片後轉 3D 模型,Cura 會幫我們分析照片各點的顏色,把顏色轉為 3D 模型中的高度,最後可以用 3D printer 將照片印出來。如果印得薄薄的,因為各點的透光率不同,燈光一打,照片的圖像就還原在上面了。以這種方式製作的「照片模型」預設是放水平印的,但是放水平印得缺點是 3D printer 得調校到不錯才行,不然,printer 的噴頭或留下刮痕,或因溢料而把影像弄得花花的。最近又陸續找到幾個新的玩法,可以避免前述的困擾。趕緊記錄一下,不然,忘得很快的!

相片轉 Lithophane 的網站

上面的兩個網站,第二個的造形變化較多,不過,個人較喜歡第一個網站的簡明風格,把照片拉一拉,改一點點參數,很快就能在線上製作空心圓柱狀 3D 模型。再加上網路上另一個人分享,使用 CR2032 電池的 LED 燈座,就變成一個小巧、有質感的相片 LED 燈。



2016年6月21日 星期二

Tools : youtube-dl 下載 youku 的影片

2014年曾經介紹過利用 youtube-dl 來下載 YouTube 中的影片,最近好友在問如何下載 Youku 中的影片,印象中 youtube-dl 也支援 Youku 影片的下載。不過,太久沒更新我電腦中的 youtube-dl ,試了沒結果。重新下載最新版的 youtube-dl 才能正常的工作。

後來我們遇到另外一個問題,較長的影片,Youku 會將之切成很多小片段,所以一部影片下載完以後,會有很多檔案。甚至如果是使用「youtube-dl-gui」這個圖形化的界面來操作,只能下載到第一小段而已。

經過反覆的測試,最後,我將之前寫的「Youtube-影片下載.vbs」改寫為「Youku-影片下載.vbs」,讓它先利用 youtube-dl 去下載指定網址的 Youku 影片,然後再利用 ffmpeg 這個工具來把各分段影片檔案合併,用起來還算方便。底下簡單的分享一下操作的程序。

下載所需的工具


「Youtube-影片下載.vbs」會使用到以下兩支別人分享的工具程式


它們其實支援常見的作業系統,底下先以 Windows 為例,介紹如何使用。

下載的網址:



進入 youtube-dl 的下載頁面後,找到紅色前頭所指的「youtube-dl.exe」,它是我們下載影片的主角,建立一個資料夾,將下載的 youtube-dl.exe 儲存在該資料夾串。

youtube-dl 下載頁面
如果執行影片的下載任務出現找不到「msvcp100.dll」的訊息時,沒關係,上圖綠色箭頭所指的「Microsoft Visual C++ 2010 Redistributable Package (x86)」下載回來,安裝完後即可解決問題。

進入 ffmpeg 的下載頁面以後,可依 Windows 系統是 32位元或 64位元版而選擇不同的版本來下載。

ffmpeg 的下載頁面

下載回來的 ffmpeg 是個壓縮檔,解壓縮以後,我們只要「bin」資料夾的「ffmpeg.exe」即可以,將它複製到存放 youtube-dl.exe 的資料夾中。

最後登場的是下載我弄的小小工具「Youtube-影片下載.vbs」,下載的網址如下:


將壓縮檔裡的 「Youtube-影片下載.vbs 」解壓縮以後,和前面的 youtube-dl.exe 和 ffmpeg.exe 放在同一個資料夾中。有了這三者,應該可以輕鬆的下載 Youku 網站中的影片了。




下載 Youku 影片


工具準備妥當,可以下載影片囉!先大概介紹一下「Youtube-影片下載.vbs」所進行的程序:

  • 取得使用者輸入的 Youku 影片網址。
  • 試著用 youtube-dl 去擷取影片的「標題」。
  • 建立以影片標題為名稱的資料夾。
  • 試著以 youtube-dl 去擷取影片片段的清單,並產生給 ffmpeg 合併影片用的檔案清單,並儲存至 file_list.txt 檔案中。
  • 以 youtube-dl 下載影片。
  • 以 ffmpeg 合併各段影片為一個檔案。


影片下載 step 1

要下載影片,當然就是先連到 Youku 中,找到想下載的影片頁面,然後將影片的網址複製下來(圖片紅色箭頭指的那一長串)。



影片下載 step 2

啟動 「Youtube-影片下載.vbs」




影片下載 step 3

將複製好的影片網址貼入對話框輸入區,並按「確定」鈕。




影片下載 step 3

如果 youtube-dl 順利擷取到影片的相關資訊,應該會顯示類似底下合併影片訊息:


並且新增一個以影片標題為名的新資料夾。

按完「確定」鈕,就會開始下載影片囉!


相關文章





2016年5月30日 星期一

DIY : 冰棒棍彈珠軌道

小孩子有一套可擴充式的軌道車,電動小車子的齒輪組壞得差不多,要嘛完全動不了,不然就是得三不五時用手推一下,車子才能跑。原本被賦予造新車的任務,哈!為父則強嗎?當爸爸的就得會造車。

想起小時候很喜歡到同學家玩很炫的火柴盒小汽車和可以迴旋又迴旋的軌道車,咻~咻~咻~的畫面還深深的印在腦海中。拿起之前做冰棒棍機械手臂剩下的冰棒棍,放了一顆小彈珠在兩根成 V 字形的冰棒棍上,滾來又滾去,思索著,如何讓孩子可以用最簡單的方法,將一根根冰棒棍串成軌道;如何讓他們可以花最少的金錢就能享受到玩軌道車的快感,而且可以依自己的創意無限擴充,組成心中的軌道。

想過用黏膠來黏,試著用膠帶來貼,但都不容易固定冰棒棍,手邊找不到其它方便取得的材料可以玩,只好以 Tinkercad ( https://www.tinkercad.com/ )畫了個 Y 字形的連接件,並用 3D printer 將物件印出來,讓兩根冰棒棍可以輕鬆地用 120度夾角變成彈珠軌道,調整一下長度,還可以再串另兩根冰棒棍。就這樣子,每三個 Y 字形塑膠連接件就能串兩兩一段的冰棒棍,一段接一段。後來 Y 字形塑膠連接件改為井字形,兩根冰棒棍以夾角 90 度為軌道,底部還能再夾住其它冰棒棍,變成腳架。就這樣,冰棒棍彈珠軌道愈來愈成熟。



2016年5月18日 星期三

3DP : 手機顯微鏡自訂大小

前一篇「3DP : 手機顯微鏡」中提到我使用的是 7mm 的透鏡,因此,在設計底座的模型時,預留的孔徑是直徑 7.2mm。如果印表機調校得好,照說,將透鏡放在底座的透鏡,應該是輕壓一下就裝入底座內,但是我自己的三臺 3D printer , 印出來的底座可說是各有千秋,其中有一臺用預設的擠出量,印出來的底座就是緊到怎麼壓,都無法將透鏡壓進透鏡孔中。只好將 3D printer 的「擠出量」調降為原來的 85%後重新再印。因為沒有「溢料」了,輕輕一壓,透鏡就乖乖的固定在底座裡了。

如果不想去調「擠出量」,因為我有使用 OpenSCAD 寫了個動態產生模型的指令稿,也 upload 到 Thingiverse 中了,所以我們可以利用 Thingiverse  Customizer 的功能,自己設定透鏡的孔徑,把它加大一點點後,製作自己客製化後的模型後再重印測試。底下是做個簡單的操作說明,此程序也適用在 Thingiverse 其它有提供 Customizer 功能的物件。

Thingiverse 中,如果是可以自訂參數的,在右側選單中應該會有個「CUSTOMIZE」的選單,按一下它,即可進入自訂模型的程序:



滑鼠移到「Customizer」的圖示上,會出現選單,對準「LAUNCH APP」按一下:


接著依自己的需求設定參數,圖片中,我把「Lens Diameter」改為 7.2mm,也就是比原來透鏡的直徑多設了 0.2mm,試試這樣稍大的底座孔徑是否能置入透鏡。


自訂好相關的參數以後,我們就可以按右上角的「Create Thing」來產生客製的模型了。接著出現底下的畫面:


我們可以為自己的客製化模型頁面標題命名,並選擇是否公開這個模型,如果不想公開,就取消「Publish New Thing」的勾勾。最後按一下「Create Thing」。Thingiverse 就會為我們製作新的模型,製作好以後,將模型檔案下載回來,即可印出來試試囉!


相關文章




3DP : 手機顯微鏡

朋友送我一些直徑 7mm 的透鏡,只要固定在手機或是平板的鏡頭前,就可以讓手持裝置立即變成簡易顯微鏡,不但可以即時觀察,還能將觀察的內容拍照存檔。之前拆過光碟機和雷射筆的透鏡玩過,由於是自己隨便玩一玩,隨手找了塑膠片和膠帶貼一貼就可以測試效果;也用 3D printer 印過別人設計的模型來安裝透鏡,最大的缺點是模型的尺寸是固定的,得為不同的裝置設計不同的模型,而印物件的時間也耗掉不少。這回很認真的畫了模型,目標是一個小模型將透鏡固定好後,即可應用在各種尺寸的裝置上。

下載模型的網址:



底下是製作好的成品:

透鏡加在手機上
透鏡加在 iPad 上
將直徑 7mm 的透鏡塞入列印件的固定孔中,再掛上橡皮筋,即可套入手持裝置上了。


哈!就這樣,會不會太簡單了!因為易取得的橡皮筋有彈性,加上可以隨意的串接,管你的裝置有多大,都可以套上去啦!而這個小列印件,以 0.2mm 層高列印,5分鐘以內就搞定了。

底下是觀察飛機木的結果:


好朋友送的好東西不能浪費,有空再來用 3D printer 多印幾個固定件,好東西當然要跟好朋友分享囉!


後記:
如果透鏡的直徑不是 7mm 的話,Thingiverse 連結點進去以後,右上方選單中有個「Customizer」可以自訂參數,並依參數產生新的模型,製作符合個人需求的透鏡座。

如果印出的透鏡座太緊, 有可能是 3D printer 的擠出量太大或是噴頭壓太低,調整一下再重新印一個,應該會較好組裝。

補充一下組裝影片:




相關文章

2016年5月15日 星期日

3DP : 以 Android 裝置控制 3D printer

我的 SmartrapCore 3D printer 沒有安裝 LCD 和控制面板,家裡有幾個閒置的 Android 裝置,在想,如果能夠透過 OTG 線以 USB 直接連線,帶有觸控面板的 Android 裝置就能發揮剩餘價值,而且,觸控的吔!操作起來很炫!

被 AppInventor 輕鬆寫 App 的方式竉壞了,第一個想到的當然是朝可不可以用 AppInventor開發這個方向去找資料。找到這個「USB_BRIDGE_ANDROID_OTG」:



後來又挖到一些如何透過 USB 進行通訊的資料。好久沒寫 Android 的程式,那~有沒有現成的 Apps 啊!

運氣不錯,找到了一個最近才發佈沒多久的 App:「Reprap Control」



作者還很佛心的提供了 source :



如果 Android 手機或平板有支援 OTG 的話,可以玩玩看用觸控方式操作 3D printer 。

2016年5月14日 星期六

Biking : 淡蘭古道

天氣狀況 : 晴
TRIP DIST : 29.75
TRIP TIME : 1:37:04
AVG. SPEED : 18.39
MAX. SPEED : 40.52

自從年初時去爬員林百果山三百崁步道下山得扶著扶手下山後,全心的讓自己的雙腿好好的休息,不曾動念騎長程的自行車。連續兩週和小孩在下班後緩坡快走都沒有不適,昨天將自行車打飽氣,早上進行了 2016 年的首騎。

為了不想太早弄掛自己的雙腿,一路都是輕齒前進,哈~齒比放最重應該是回程下坡時。還是別為難自己,逞一之時勇是不能長久的。抱著遊山玩水的心情,騎來輕鬆。
 
© 2009. Design by Pocket