highlight.js
星期二, 7月 28, 2015
舊版 JDK 下載網址
有時候我們就是需要舊版本的 JDK 才能測試,這時候就需要 Oracle Java Archive 網站的協助了, 進入此網頁可以讓你下載之前版本的各項 Java 相關檔案, 非常便利。
星期五, 6月 26, 2015
Buffaro AirStation MAC 位址過濾的輸入方法
Buffaro的 AP 分享器有個莫名其妙的地方,如果你要建立 MAC 位址過濾清單, 必須進到設定的頁面:
雖然右邊的說明表示可以用換行、Tab、空格隔開多個 MAC 位址, 一次填入多個 MAC 位址, 不過實際上只能用空格才行。
雖然右邊的說明表示可以用換行、Tab、空格隔開多個 MAC 位址, 一次填入多個 MAC 位址, 不過實際上只能用空格才行。
星期四, 3月 12, 2015
星期日, 3月 08, 2015
從顯示 Big5 編碼文檔看 Linux/Unix 指令美感
我自己是 Linux/Unix 白癡, 以前裝 Linux 都是假設要取代 Windows 為前提, 所以都是在挑哪一種圖形桌面好看、好用, 總是對指令介面故意閃避, 除非逼不得以, 否則就是滑鼠滑來滑去。前幾個禮拜開始上 edx 中由 Linux Foundation 開的線上課程, 課程一開始也是偽裝成使用圖形界面, 不過一兩堂課後就完全是指令介面了, 也因此深深體驗到 Linux/Unix 的美。
在使用 cat 這個簡單的指令顯示檔案內容時, 就遭遇一個很基本的問題, 當我的檔案是 Big5 編碼時, cat輸出的結果就是一團亂碼, 因為它是以系統預設的 UTF-8 來解譯檔案內容。於是我就想那麼 cat 會不會有個選項是可以指定輸入資料的文字編碼呢?找了半天發現不只 cat沒有, less、grep 等所有會處理文字的指令也都沒有。好不容易上網找了資料後, 在這一篇找到了原來有個指令 iconv 可以轉換文字編碼。
到這裡就出現了 Linux/Unix 在指令設計上的美感, 由於有 pipe 資料管道的架構, 因此每個指令都專注在自己專門的工作, 如果需要用到指令本身所不具備的功能, 就依靠 pipe 傳送給具備該功能的指令來幫忙。例如若是想用 cat 顯示 Big5 編碼的文字檔, 就可以請 iconv 幫幫忙:
$cat big5_file.txt | iconv -f big5
這樣一來, 需要處理文字的指令都不需要自己加上處理文字編碼的功能, 就可以具備處理不同編碼文字檔案的能力。例如若要使用 less 檢視檔案內容, 可以將上述指令的輸出再傳送給 less 指令:
$cat big5_file.txt | iconv -f big5 | less
或是如果想用 grep 搜尋也沒有問題:
$cat big5_file.txt | iconv -f big5 | grep 我想找的字樣
要深刻的瞭解這一點, 才能將 Linux/Unix 指令用得開心, 而且用得有效率。
在使用 cat 這個簡單的指令顯示檔案內容時, 就遭遇一個很基本的問題, 當我的檔案是 Big5 編碼時, cat輸出的結果就是一團亂碼, 因為它是以系統預設的 UTF-8 來解譯檔案內容。於是我就想那麼 cat 會不會有個選項是可以指定輸入資料的文字編碼呢?找了半天發現不只 cat沒有, less、grep 等所有會處理文字的指令也都沒有。好不容易上網找了資料後, 在這一篇找到了原來有個指令 iconv 可以轉換文字編碼。
到這裡就出現了 Linux/Unix 在指令設計上的美感, 由於有 pipe 資料管道的架構, 因此每個指令都專注在自己專門的工作, 如果需要用到指令本身所不具備的功能, 就依靠 pipe 傳送給具備該功能的指令來幫忙。例如若是想用 cat 顯示 Big5 編碼的文字檔, 就可以請 iconv 幫幫忙:
$cat big5_file.txt | iconv -f big5
這樣一來, 需要處理文字的指令都不需要自己加上處理文字編碼的功能, 就可以具備處理不同編碼文字檔案的能力。例如若要使用 less 檢視檔案內容, 可以將上述指令的輸出再傳送給 less 指令:
$cat big5_file.txt | iconv -f big5 | less
或是如果想用 grep 搜尋也沒有問題:
$cat big5_file.txt | iconv -f big5 | grep 我想找的字樣
要深刻的瞭解這一點, 才能將 Linux/Unix 指令用得開心, 而且用得有效率。
星期日, 12月 28, 2014
製作 local 本機版的 App Inventor
App Inventor 相信是許多人入門 Android 程式設計的工具,只要有瀏覽器就可以開發程式, 而且透過滑鼠拖拉的方式就可以完成,不過因為整個開發環境必須連上 App Inventor的網站, 只要網路中斷, 或是網站掛點, 就什麼事也做不了了。事實上, App Inventor 是開放原始碼的服務, 只要你需要, 可以自行下載原始檔案, 建置一份在本機上執行的 App Inventor 網站,就不用擔心意外狀況了。
要建置本機版的 App Inventor, 需要以下幾個元件 (以下均以 Windows 平台為依據):
在 Windows 下, 為了讓建置過程順利, 你可能得建立 _JAVA_OPTIONS 環境變數:
set _JAVA_OPTIONS=-Xmx1024M
否則可能會遇到建置過程中, Java 回報在建立虛擬機器時無法配置足夠的記憶體。
完成上述的準備工作後, 就可以開始建置 App Inventor 了, 請進到解壓的原始檔中, appinventor 資料夾中, 執行以下指令:
ant clean
上述指令會清除之前建置的內容, 之後再執行
ant
即可開始一連串的建置動作, 建置時間有好幾分鐘, 你會看到一大堆的訊息, 成功時會看到以下訊息:

建置好後就可以開始執行, App Inventor網站其實有兩個伺服器, 一個是提供 App Inventor 開發環境的網站,一個是實際進行打包 APK服務的伺服器。首先執行開發網站, 以下是以 App Engine Java SDK 資料夾在 C:\appengine-java-sdk-1.9.17 為例, 下達指令:
D:\temp\mit-cml-appinventor-sources-5455be9\appinventor>c:\appengine-java-sdk-1.9.17\bin\dev_appserver.cmd --port=8888 --address=0.0.0.0 appengine\build\war

最後看到以下訊息, 就表示開發環境網站已經啟動:

你可以使用瀏覽器連上 http://localhost:8888/ 測試:

local 版的 App Inventor 一樣需要登入, 不過登入機制和雲端版本不同。如果沒有顯示上面登入頁面, 而是顯示錯誤訊息 "org.apache.jasper.JasperException: Unable to compile class for JSP:", 就表示使用的 JDK 版本太新, 可換成 JDK7 或是 JDK8U66 之前的版本試看看 (可參考這一篇討論)。這裡請點選 "Click Here to use your Google Account to login", 切換成只要填入 email 就可以登入的模式:
此種模式並不具有安全性, 任何人用同樣的 email 登入就可以存取同一使用者的專案。登入後同意授權條款之後就可以看到熟悉的 App Inventor 環境了:

你可以在網址列清楚的看到這是本機位址, 之後就可以如同操作雲端 App Inventor 服務一樣開發程式。不過在你按下打包 APK 功能之前,記得要先啟動後端打包 APK 的服務,這個服務稱為 buildsever, 啟動方法請先開啟新的命令提示字元, 切換到 App Inventor 下的 buildserver 資料夾, 再執行 ant RunLocalBuildServer 指令:

等看到以下訊息時, buildserver 服務就已經啟動了:

這樣你就可以在 App Inventor 中按功能表的『打包 APK』 建立可安裝的 APK 檔了。
要建置本機版的 App Inventor, 需要以下幾個元件 (以下均以 Windows 平台為依據):
- Git 版本控制工具:你可在 Git 的 Windows 專頁下載 Windows 版本的安裝程式。記得要把 git.exe 所在的資料夾路徑加入 PATH 環境變數中。
- App Inventor 原始檔:可在 MIT App Inventor Public Open Source 網站下載, 下載回來解壓縮等候建置。不過建議用 git 工具 clone 回來, 因為下一步驟還需要補上所需的程式庫, 指令為:
git clone https://github.com/mit-cml/appinventor-sources.git。
- 補充下載所需的程式庫, 否則編譯會因為缺少必要的檔案而出錯 (可參考這一篇討論串):
git submodule update --init
- Apache Ant 建置工具:你可在 Apache Ant 的下載專頁下載 zip 格式的壓縮檔, 下載回來後只要解壓縮, 並且將其中的 bin 資料夾路徑加入 PATH 環境變數中。
- Python 程式開發環境:你可在 Python 的下載專頁下載 Python 2.7 版 安裝程式, 你也必須把 python 的路徑加入 PATH 環境變數中。
- JDK:你可在 Oracle JDK 專頁下載安裝程式, 並設定環境變數 JAVA_HOME 為安裝的資料夾路徑 (是 JDK 而不是上層的 JAVA 資料夾路徑喔), 再把 java.exe 所在資料夾的路徑加入 PATH 中。請特別注意, 官方文件是使用 JDK7, 如果使用太新版本的 JDK, 可能會在執行時發生問題, 目前我使用 JDK8U66 的版本是可以執行的, 可參考這一篇討論。
- Google App Engine Java SDK:可在 Google App Engine SDK 專頁下載壓縮檔, 下載後解開即可。
在 Windows 下, 為了讓建置過程順利, 你可能得建立 _JAVA_OPTIONS 環境變數:
set _JAVA_OPTIONS=-Xmx1024M
否則可能會遇到建置過程中, Java 回報在建立虛擬機器時無法配置足夠的記憶體。
完成上述的準備工作後, 就可以開始建置 App Inventor 了, 請進到解壓的原始檔中, appinventor 資料夾中, 執行以下指令:
ant clean
上述指令會清除之前建置的內容, 之後再執行
ant
即可開始一連串的建置動作, 建置時間有好幾分鐘, 你會看到一大堆的訊息, 成功時會看到以下訊息:

建置好後就可以開始執行, App Inventor網站其實有兩個伺服器, 一個是提供 App Inventor 開發環境的網站,一個是實際進行打包 APK服務的伺服器。首先執行開發網站, 以下是以 App Engine Java SDK 資料夾在 C:\appengine-java-sdk-1.9.17 為例, 下達指令:
D:\temp\mit-cml-appinventor-sources-5455be9\appinventor>c:\appengine-java-sdk-1.9.17\bin\dev_appserver.cmd --port=8888 --address=0.0.0.0 appengine\build\war

最後看到以下訊息, 就表示開發環境網站已經啟動:

你可以使用瀏覽器連上 http://localhost:8888/ 測試:

local 版的 App Inventor 一樣需要登入, 不過登入機制和雲端版本不同。如果沒有顯示上面登入頁面, 而是顯示錯誤訊息 "org.apache.jasper.JasperException: Unable to compile class for JSP:", 就表示使用的 JDK 版本太新, 可換成 JDK7 或是 JDK8U66 之前的版本試看看 (可參考這一篇討論)。這裡請點選 "Click Here to use your Google Account to login", 切換成只要填入 email 就可以登入的模式:
此種模式並不具有安全性, 任何人用同樣的 email 登入就可以存取同一使用者的專案。登入後同意授權條款之後就可以看到熟悉的 App Inventor 環境了:

你可以在網址列清楚的看到這是本機位址, 之後就可以如同操作雲端 App Inventor 服務一樣開發程式。不過在你按下打包 APK 功能之前,記得要先啟動後端打包 APK 的服務,這個服務稱為 buildsever, 啟動方法請先開啟新的命令提示字元, 切換到 App Inventor 下的 buildserver 資料夾, 再執行 ant RunLocalBuildServer 指令:

等看到以下訊息時, buildserver 服務就已經啟動了:

這樣你就可以在 App Inventor 中按功能表的『打包 APK』 建立可安裝的 APK 檔了。
星期三, 12月 10, 2014
取得 PPT 投影片中的所有文字
PowerPoint中似乎沒有方便的工具可以取出投影片上所有的文字,搜尋之後, 找到了高手的 VBA 程式, 簡單修改加上存成文字檔的功能後, 就可以使用了。完整程式碼如下:
它會把所有投影片中的文字取出後, 存在與 PPT 檔相同資料夾下,與 PPT 檔同名的 .TXT 文字檔中。
Sub 取出文字()
Dim p As Presentation: Set p = ActivePresentation
Dim s As Slide
Dim sh As Shape
FName = ActivePresentation.FullName 'Word檔名
txtFname = Left(FName, Len(FName) - 4) & "_shapes.txt" 'txt檔名
Set objStream = CreateObject("ADODB.Stream")
objStream.Open
objStream.Position = 0
objStream.Charset = "UTF-8"
For Each s In p.Slides
For Each sh In s.Shapes
If sh.HasTextFrame Then
If sh.TextFrame.HasText Then
objStream.WriteText sh.TextFrame.TextRange.Text
End If
End If
Next
Next
objStream.SaveToFile txtFname, 2
objStream.Close
End Sub
它會把所有投影片中的文字取出後, 存在與 PPT 檔相同資料夾下,與 PPT 檔同名的 .TXT 文字檔中。
星期二, 9月 16, 2014
避免產生一大堆的連接埠 (COM Port) 裝置
因為工作的關係, 常常會測試多個同樣的硬體, 這時會因為硬體序號不同, 在裝置管理員中為個別的裝置建立單獨的項目, 像是我有一片使用 FT232 USB 晶片的開發板, 為了測試穩定性, 就會拿好幾片來測試, 結果就變成每一片在裝置管理員中都建立了單獨的項目, 而且賦予不同的連接埠編號, 每次都要察看才知道編號。
經由同事的介紹, 原來可以透過設定登錄機碼, 就可以忽略硬體序號讓同樣的硬體都使用同一個連接埠編號, 方法如下:
如果你想把之前已經分配的連接埠編號刪除, 可以依照以下程序進行:
經由同事的介紹, 原來可以透過設定登錄機碼, 就可以忽略硬體序號讓同樣的硬體都使用同一個連接埠編號, 方法如下:
- 在登錄編輯程式中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags 機碼。
在此機碼下新增一個二進位值, 設定名稱為 IgnoreHWSerNumXXXXXXXX, 其中 XXXXXXXX 是硬體識別碼, 可在硬體的詳細資料中查到, 例如:
就要將名稱設為 IgnoreHWSerNum04036001。然後將值設為 01 即可。
如果你想把之前已經分配的連接埠編號刪除, 可以依照以下程序進行:
- 以系統管理員身份執行命令提示字元。
- 設定環境變數:
set devmgr_show_nonpresent_devices=1 - 執行裝置管理員:
start devmgmt.msc - 執行『檢視/顯示隱藏裝置』功能表指令, 就會將已分配但目前沒有使用到的裝置顯示出來, 就可以看到之前分配的連接埠編號, 即可是需要一一刪除不必要的連接埠編號了。
訂閱:
文章 (Atom)

