highlight.js

星期日, 12月 28, 2014

製作 local 本機版的 App Inventor

App Inventor 相信是許多人入門 Android 程式設計的工具,只要有瀏覽器就可以開發程式, 而且透過滑鼠拖拉的方式就可以完成,不過因為整個開發環境必須連上 App Inventor的網站, 只要網路中斷, 或是網站掛點, 就什麼事也做不了了。事實上, App Inventor 是開放原始碼的服務, 只要你需要, 可以自行下載原始檔案, 建置一份在本機上執行的 App Inventor 網站,就不用擔心意外狀況了。

要建置本機版的 App Inventor, 需要以下幾個元件 (以下均以 Windows 平台為依據):
  1. Git 版本控制工具:你可在 Git 的 Windows 專頁下載 Windows 版本的安裝程式。記得要把 git.exe 所在的資料夾路徑加入 PATH 環境變數中。
  2. App Inventor 原始檔:可在 MIT App Inventor Public Open Source 網站下載, 下載回來解壓縮等候建置。不過建議用 git 工具 clone 回來, 因為下一步驟還需要補上所需的程式庫, 指令為:

    git clone https://github.com/mit-cml/appinventor-sources.git

  3. 補充下載所需的程式庫, 否則編譯會因為缺少必要的檔案而出錯 (可參考這一篇討論串):

    git submodule update --init

  4. Apache Ant 建置工具:你可在 Apache Ant 的下載專頁下載 zip 格式的壓縮檔, 下載回來後只要解壓縮, 並且將其中的 bin 資料夾路徑加入 PATH 環境變數中。
  5. Python 程式開發環境:你可在 Python 的下載專頁下載 Python 2.7 版 安裝程式, 你也必須把 python 的路徑加入 PATH 環境變數中。
  6. JDK:你可在 Oracle JDK 專頁下載安裝程式, 並設定環境變數 JAVA_HOME 為安裝的資料夾路徑 (是 JDK 而不是上層的 JAVA 資料夾路徑喔), 再把 java.exe 所在資料夾的路徑加入 PATH 中。請特別注意, 官方文件是使用 JDK7, 如果使用太新版本的 JDK, 可能會在執行時發生問題, 目前我使用 JDK8U66 的版本是可以執行的, 可參考這一篇討論
  7. 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 程式, 簡單修改加上存成文字檔的功能後, 就可以使用了。完整程式碼如下:

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 文字檔中。