:::

如何重置Zotero Standalone登入資料庫 / How to reset Zotero Standalone logins database

布丁布丁吃布丁

如何重置Zotero Standalone登入資料庫 / How to reset Zotero Standalone logins database

簡報1

最近我的Zotero Standalone 5.0.59在關閉時出現了「zotero無法存取你的登入資訊,可能是由於zotero登入資料庫壞掉了。關閉Zotero,備份並刪除你Zotero profile中的目前cert8.db 、key3.db及logins.json,並在Zotero偏好設定的同步窗格中重新輸入你的Zotero登入資訊。」的錯誤訊息。我研究了一下處理方法,把它記錄在這裡。

(more...)

Chromebook多重作業系統簡介:Chrome OS + Android + Linux的世界 / Chrome OS, Android and Linux on Chromebook

Chromebook多重作業系統簡介:Chrome OS + Android + Linux的世界 / Chrome OS, Android and Linux on Chromebook

Presentation1

你知道嗎,便宜且硬體等級不高的Chromebook中竟然能夠同時運作Chrome OS、Android和Linux,甚至可以模擬並安裝Windows軟體。這實在是太有趣了,讓我就用這篇來跟大家做個簡單的介紹吧。

(more...)

如何手動修改Zotero的文中引用跟參考文獻 / How to edit Zotero Citation and Bibliography

布丁布丁吃布丁

如何手動修改Zotero的文中引用跟參考文獻 / How to edit Zotero Citation and Bibliography

簡報1

Zotero雖然可以自動產生引用文獻,但有時候你可能會覺得Zotero的引用有點奇怪,想要手動修改某些引用時,像是想把中文引用最左邊的半形括號改成全形掛號,我們就能用Zotero的編輯功能來自訂引用的文字。

(more...)

任意網頁載入jQuery:書籤小工具產生器 / Load jQuery from Bookmark: Bookmarklet Generator

任意網頁載入jQuery:書籤小工具產生器 / Load jQuery from Bookmark: Bookmarklet Generator

簡報1

書籤小工具(bookmarklet)是一種可以在任意網頁上執行預先寫好的JavaScript程式碼的做法。舉例來說,當你想要用console來撰寫jQuery語法來調整資料顯示結果時,卻發現該網站並沒有載入jQuery函式庫,這時候就可以用書籤小工具來為這個網頁載入jQuery函式庫,讓網頁工程師更方便到處測試。

我把載入jQuery函式的書籤小工具做成了書籤小工具產生器。除了預設的「Load jQuery」書籤小工具之外,你也可以自訂書籤小工具的名稱與JavaScript程式腳本的內容。讓我們來看看怎麼使用這個書籤小工具吧。

(more...)

Chromebook新體驗:重灌和維修 / Getting Started with Chromebook, Powerwashing, and Sending for Repair

布丁布丁吃布丁

Chromebook新體驗:重灌和維修 / Getting Started with Chromebook, Powerwashing, and Sending for Repair

Presentation2

這篇要來跟大家閒聊我最近買的Chromebook筆電:ASUS Chromebook Flip C213NA的一些事情。話說在前頭,很多人都會問:「Chromebook好用嗎?」我通常都會回答:「不好用」。但比起Windows,他有更多我喜歡的地方。

(more...)

Zotero的空間不足?用Google備份Zotero的附加檔案 / Backup Your Zotero Attachment Files with Google Backup and Sync

Zotero的空間不足?用Google備份Zotero的附加檔案 / Backup Your Zotero Attachment Files with Google Backup and Sync

簡報1

很多人會將Zotero作為文獻保存與管理工具,我們在瀏覽資料庫的時候能方便地抓取論文的書目資料和PDF全文檔案。但是Zotero的免費帳戶只有300MB,非常不夠用。雖然我以前教過大家使用WebDAV協定將檔案同步到Yandex,不過實際上用起來,WebDAV同步常常出現故障,非常不穩定。到頭來還是使用能夠直接同步電腦資料夾的Google備份與同步處理 (Backup and Sync from Google)最令人安心,而且還能享用教育版Google雲端硬碟的超大空間來備份你的Zotero喔!這篇就讓我們來看看怎麼用Google備份與同步處理來備份Zotero的附加檔案吧。

(more...)

Zotero Standalone安裝布丁版中英APA引用樣式 / Install Pulipuli Chinese & English APA Style in Zotero Standalone

布丁布丁吃布丁

Zotero Standalone安裝布丁版中英APA引用樣式 / Install Pulipuli Chinese & English APA Style in Zotero Standalone

簡報1

在中英文文獻夾雜的論文中使用Zotero插入文獻時,我推薦大家使用布丁版中英APA引用樣式,而不是Zotero內建的American Psychological Association 6th edition。我在2014年時寫過Firefox擴充套件版本Zotero安裝引用樣式的做法,這篇則是教大家在Zotero Standalone版本下安裝布丁版中文APA引用樣式。

(more...)

如何取得AutoIt回傳結果?如何編譯AutoIt命令列應用程式 / How to compile AutoIT as a Console Application

布丁布丁吃布丁

如何取得AutoIt回傳結果?如何編譯AutoIt命令列應用程式 / How to compile AutoIT as a Console Application

簡報2

AutoIt一般常作為自動操作Windows應用程式的圖形化應用程式(GUI Windows application),例如自動安裝檔。但如果要讓其他程式取得AutoIt的執行結果,那就要把AutoIt編譯為命令列應用程式(console application)。讓我們來看看怎麼做吧。

(more...)

政大百年樓的會場指示牌擺哪裡好?通往330424圖檔所圖書實習室之路 / Maps for Venue Signs Location to Room 330424 in Bai Nian Building, NCCU

布丁布丁吃布丁

政大百年樓的會場指示牌擺哪裡好?通往330424圖檔所圖書實習室之路 / Maps for Venue Signs Location to Room 330424 in Bai Nian Building, NCCU

簡報3

對於政大圖檔所的學生來說,常常會遇到需要指引來賓前往位於百年樓四樓後棟的330424圖書實習室的情況。到底會場指示牌要擺在百年樓的哪裡好呢?這篇就記錄一下我覺得比較合適的會場指示牌擺放位置。

(more...)

Google簡報製作一頁二張投影片的PDF列印講義 / Create Hangout PDF on 2 Slides per Page from Google Slides

Google簡報製作一頁二張投影片的PDF列印講義 / Create Hangout PDF on 2 Slides per Page from Google Slides

簡報1

我之前介紹過如何將4張投影片8張投影片濃縮在一頁中,製作成方便列印的講義。這次我們要從Google簡報開始,教大家如何製作2張投影片印在同一頁中,並且為講義加上頁碼喔!

(more...)

閒聊智慧型手機上玩手遊用的鍵盤滑鼠遊戲控制器 / Talk about Keyboard & Mouse Controllers for Mobile Gaming

布丁布丁吃布丁

閒聊智慧型手機上玩手遊用的鍵盤滑鼠遊戲控制器 / Talk about Keyboard & Mouse Controllers for Mobile Gaming

image

近年來電競風氣的盛行,讓電競市場從桌上型電腦與筆記型電腦之後,進入到了智慧型手機上。隨著電競類手遊的增加(像是幾個知名的吃雞手遊),連帶刺激了遊戲控制器的發展。傳統的遊戲手把上少少的幾個按鍵已經無法滿足現今手遊複雜的操作需求,因此鍵盤、滑鼠又再度加入到遊戲控制器的行列。這篇就來跟大家閒聊一下最近我關注的鍵盤與滑鼠遊戲控制器的發展吧。

(more...)

政大百年樓教室編號配置圖 / Classroom Map of Bai Nian Building, NCCU

布丁布丁吃布丁

政大百年樓教室編號配置圖 / Classroom Map of Bai Nian Building, NCCU

封面

你知道國立政治大學山上校區百年樓的教室名稱與其對應編號嗎?這篇我就整理一下百年樓每一樓層的地圖,然後列出教室跟編號的對應表吧。

(more...)

純文字檔案的編碼與內文批次轉換:Big5轉UTF-8 / Batch convert Plain Text Files for Encoding and Content Replacing: Big5 to UTF-8

純文字檔案的編碼與內文批次轉換:Big5轉UTF-8 / Batch convert Plain Text Files for Encoding and Content Replacing: Big5 to UTF-8

image

圖書資訊與檔案學領域中時常使用XML作為交換後設資料的格式。然而,由於早期系統大多為大五碼Big5編碼,並不能夠直接相容於現在的主流使用的萬國碼Unicode編碼,特別是比較常用的UTF-8編碼。如果要將XML這種純文字格式的檔案從Big5轉換成UTF-8的話,除了拜託程式設計師撰寫轉碼工具之外,我們也可以用Windows上現成的免安裝軟體ConvertZNotepad++Portable來完成這件事情。讓我們來看看怎麽操作吧。

(more...)

如何將SVG向量圖插入到Google文件中? / How to insert SVG vector images into Google Doc?

如何將SVG向量圖插入到Google文件中? / How to insert SVG vector images into Google Doc?

image

繼前一篇我們介紹了如何將SVG向量圖插入到桌面版辦公室工具軟體Office Word中之後,接下來我們換來挑戰現在最知名的辦公室工具軟體:Google文件(包含Google文件、Google試算表與Google簡報)。整體做法前半部跟前一篇很像,也是將SVG轉換成EMF格式,但後半部則是要藉助Google Drawings的功能才能EMF插入Google文件中。這篇的做法來自於Hacker's ramblings,但其實網路上相關教學早已多不勝數,不過中文的教學卻還是十分欠缺。所以特別整理成這一篇供大家參考。

(more...)

用HTML5開發網頁APP、桌面APP、跟行動裝置APP:混合應用程式框架 / Hybird APP Framework for Web APP, Desktop APP and Mobile APP

用HTML5開發網頁APP、桌面APP、跟行動裝置APP:混合應用程式框架 / Hybird APP Framework for Web APP, Desktop APP and Mobile APP

image

HTML5 (JavaScript + CSS3)可以在網頁上跨平臺執行已經是眾所皆知的常理,但是要如何用HTML5來開發能在瀏覽器上執行、能夠在桌面作業系統上安裝、還能夠在行動裝置(手機、平板)上安裝的應用程式呢?這個OnsenUI+Vue.js+Electron+PhoneGap Build的「混合應用程式框架」就是我的答案。

因為這只是最近心血來潮整理出來的混合做法,架構上並不是很漂亮,我也沒有打算寫太多文件。但對於想要發揮HTML5極限的開發者來說,應該是個不錯的參考。


程式碼 / Source code

image

混合應用程式框架保存在GitHub中,任何人都可以自由下載、修改、發佈。

軟體展示 / Demo

在混合應用程式框架中,我們只要開發一個HTML5框架,就可讓它以在網頁瀏覽器、桌面端應用程式、行動端應用程式執行。你可以實際玩玩看,看看混合應用程式框架會是什麼樣子:

接下來我用以下幾張截圖跟照片來讓大家看看它在不同平臺上的樣子:

網頁瀏覽器截圖 / Run in Web Browser

image

這是在Chrome網頁瀏覽器上的畫面。

Windows桌面版應用程式截圖 / Run in Windows

2018-05-24_153932

這是在Windows桌面端執行的畫面。

Android手機應用程式截圖 / Run in Android Phone

Screenshot_20180524-164945

Screenshot_20180524-164949

這是在Android手機上執行的畫面。

Android平板應用程式截圖 / Run in Android Tablet

Screenshot_20180524-165216

Screenshot_20180524-165208

這個是在Android平板 (8吋)上執行的畫面。

除了一些元件的位置怪怪的之外,大致上畫面都能夠正常呈現,很不錯吧。

接下來就讓我們來看看混合應用程式框架怎麼做到這件事情的吧。


框架架構 / Framework architecture

image

我把「混合應用程式框架」的架構整理成上面四個層次:顯示畫面 (Display)、平臺轉接(Platform Transport)、裝置(Client Device)、作業系統(Client Operation System, OS)。其中藍色的部分是我們可以掌握的元件,而灰色的部分對應不同使用者會用的客戶端。以下說明顯示畫面跟平臺轉接的細節。

顯示畫面 / Display

2018-05-24_153932

這邊使用的是Onsen UI,一個成熟的HTML5顯示框架。而控制資料邏輯的MVVM架構使用的是Vue 2。

我已經在「政大借書籃」跟「Voc4Fun全民樂單字」使用Onsen UI框架,但那時候Onsen UI只有跟Angular.js整合。現在Onsen UI已經開發到第二版,而且可以跟jQuery、Vue 2整合。

站在一個想要追求快速開發的角度,Vue算是相當好上手的MVVM架構。而這裡我選擇的是不編譯的Vue架構,因此可以直接在瀏覽器上執行,不需要任何打包或封裝。

平臺轉接 / Platform Transport

混合應用程式框架基本上可以直接用網頁瀏覽器開啟,但如果要打包成不同裝置上可以安裝的應用程式(APP),我們需要藉助一些平臺轉接的框架。

轉接桌面端應用程式:Electron / Electron for Desktop Application

Electron_0.36.4_Icon

(圖片來源:維基百科)

為了產生可以在桌面端作業系統安裝的應用程式,我們使用的是GitHub開發的知名框架Electron。

Electron可以產生給Windows、Mac OS、Linux使用的應用程式。這邊我主要只用Windows,Electron會在Windows平臺中產生可執行檔案,我寫了AutoIT將設定包裹成exe檔案,讓使用者可以直接點選執行。未來也可以更進一步使用InnoSetup打包成安裝檔。

至於Linux跟Mac OS我則沒有測試過,Linux可以直接用Electron打包,但我沒試過能不能執行。至於Mac OS,則必須要在Mac環境下打包才能使用,因此我也沒有試過。

之前我已經在「試做Electron桌面應用程式:webapp-wrapper」整理了一個簡單的基礎,現在我把它整合到混合應用程式框架中,讓Electron更容易將HTML5打包成桌面端應用程式。

轉接行動端應用程式:PhoneGap Build / PhoneGap Build for Mobile Application

Phonegap-build-mobile-app-development-tool-300x245

(圖片來源:boston technology)

為了產生可以安裝在行動裝置上的應用程式,包括手機、平板,我們使用的是PhoneGap Build。

PhoneGap Build提供了將HTML5程式打包成Android、iOS、Windows Phone三種平臺APP的功能。不過因為建構iOS APP需要具備開發者身份(每年需繳交不少費用),而Windows Phone已經沒落,所以實際上我只有用PhoneGap Build打包成Android APK而已。

我以前就有在「PhoneGap網頁樣板:簡單建立網站APP」寫過使用PhoneGap Build來建構網站APP的做法,跟Electron一樣,我也把它整合到混合應用程式框架中,成為大框架下的一份子。
值得一提的是PhoneGap Build雖然採用的是Apache Cordova核心,但這個名稱卻是描述在Adobe提供的伺服器上打包APP的整個流程,而不是像是Cordova在本機端部署環境、打包應用程式的做法。


功能 / Features

在混合應用程式框架中,我整理了一些在開發中可能會用到的功能,這是為了未來開發做的準備。這些功能包括了作為一個應用程式(APP)所需要的排版(包括主畫面、上方的工具列、左方的滑動選單)、主畫面的換頁、通知對話視窗、開啟外部連結、儲存由JSON產生的試算表檔案ODS、MVVM資料綁定、國際化語系、以遊戲引擎運作。以下簡單說明這些功能。

1. 排版與換頁 / Layout and Pages Navigation

image

混合應用程式使用了行動裝置為主的APP排版,主要畫面分成3大部分:1. 主畫面、2. 工具列 (toolbar)、3. 滑動選單 (sliding menu)。主畫面顯示該頁的主要內容,工具列會一直固定在畫面上方,而左邊的滑動選單則是會隨著你的畫面寬度動態的顯示、隱藏,你也可以按下工具列的選單按鈕來顯示滑動選單。

受益於OnsenUI的Auto Style功能,功能元件在不同平臺上會有些微的不同。舉例來說,下圖是iOS中的工具列:

image

下圖則是Android中的工具列:

image

我把換頁的方法包裝在onsenui_helper中,JavaScript語法如下:

onsenui_helper.switch_page(about)
2. 通知對話視窗 / Notification dialog

image

混合應用程式框架的使用了OnsenUI的$ons.notification功能來實作對話視窗。

受益於OnsenUI的Auto Style功能,上圖iOS風格的對話視窗在Android底下會變成下圖這個樣子:

image

通知功能的JavaScript語法如下:

vm.$ons.notification.confirm({      message: i18n.t("Are you sure to visit About?"),      callback: function (_result) {          console.log(_result);      }

});
3. 開啟外部連結 / Open link with your default browser

image

點下一些非APP內的連結時,混合應用程式框架提供了一些方法來讓他使用你預設的瀏覽器開啟。這部分我用hybird_app_helper來處理不同平臺的做法,JavaScript語法如下:

hybird_app_helper.open_window('https://github.com/pulipulichen/HTML5-Hybird-APP-Framework')
4. 儲存由JSON產生的試算表檔案ODS

image

這邊使用了JS-XLSX套件來讓JSON物件轉換成ODS試算表格式。JS-XLSX的功能複雜,網路上大部分的教學都亂七八糟,最好的用法還是官方自己提供的上傳分析轉換下載範例。我整理了JSON轉換成ODS Base64編碼的做法,寫在xlsx-helper.js檔案中。

另外的問題是如何讓裝置下載,或是說儲存、分享檔案。在網頁上,我使用的是FileSaver.js。在桌面端,我使用了Electron的ipcMain跟ipcRenderer來交換資料,讓網頁介面跟背後的Electron能夠彼此溝通,交給Electron寫入檔案。雖然Electron端已經很複雜了,但比不上在行動端的麻煩。在PhoneGap Build中,我先用cordova-plugin-file將ODS檔案寫入到cache暫存資料夾,然後使用PhoneGap / Cordova Social Sharing plugin來分享檔案。

5. MVVM資料綁定

image

混合應用程式框架使用了Vue.js的MVVM框架讓資料與顯示雙向綁定。主畫面中的「Hello, world!」綁定的是JavaScript中的「main_page.data.message」。顯示的程式設定如下:

image

而這個「main_page.data.message」則是寫在main_page.js中,資料的程式設定如下:

image

只要修改「main_page.data.message」的值,顯示畫面也會跟著改變。這是Vue.js這種MVVC框架的基本應用,相信熟悉MVVC框架的開發者應該很容易理解。

6. 國際化語系 / Localization

image

混合應用程式框架使用了javascript-i18n-core來作為語系檔的框架。以工具列中間的標題為例,我們可以用這個JavaScript語法來取得索引名稱「TITLE」的翻譯設定如下:

{{ i18n.t("TITLE") }}

語系檔放在www/locale資料夾中,裡面可以設定各個語系與對應索引名稱。

7. 以遊戲引擎運作:Cocoon.js / Game engine demo: Cocoon.js

image

為了挑戰混合應用程式框架的極限,我試著加入了Cocoon.js遊戲引擎框架所開發的兩款展示遊戲:SpaceSimDemoSuper Mario Bros

大家可以看看混合應用程式框架在網路瀏覽器、桌面端、行動裝置上玩遊戲是什麼感覺,也許未來也可以取代OnsenUI,使用Cocoon.js開發遊戲呢?


小結 / In closing

混合應用程式框架只是我為了未來可能會開發真正的跨平臺應用程式而做的一個小小的準備。我怕我現在不整理,以後可能就會忘記,所以做到這邊就趕快記錄一下。

30485967745854535578

(圖片來源:幫趣)

這整篇並沒有什麼提供給開發者的文件,請有心要使用這個框架的開發者自行trace code,程式碼都在GitHub上,請自行研讀、fork或下載吧。

開發感想 / Thoughts

接著來聊聊一些開發過程的想法。

混合應用程式框架實際上是要寫UI顯示畫面邏輯、 Electron跟桌面端底層作業系統的溝通、PhoneGap Build跟手機端底層裝置溝通的龐大架構。雖然都是用JavaScript來寫,但是不同框架下面使用的API都完全不一樣。雖然號稱跨平臺,但是還是要為不同平臺下很多功夫,實際上並沒有真的這麼跨平臺。

現在有很多開發框架是更加的跨平臺,像是Unity,但畢竟這個門檻比較高,不能直接將網頁使用的技術帶過去使用。而且對快速開發來說也不見得是比較方便。

用網頁來寫UI還是可以讓開發者有很大的自由度,特別是現在CSS3發展成熟,許多特別的UI介面又漂亮又好用,還能作出驚人的特效。我想未來我還是會繼續使用網頁來開發任何應用吧。

速度問題 / Performance issues

在開發的過程中很多人會問的是速度問題,這是PhoneGap令許多開發者詬病的問題。這個速度問題其實細分起來有兩個層面。第一個是載入,PhoneGap在開啟程式的時候,需要用「document.addEventListener("deviceready",function () {});」來確保cordova核心套件有正常載入,因此不管硬體效能多好,通常載入時間還是需要0.5秒。

image

一般來說我們會使用splash載入畫面讓使用者不會覺得太過突兀,在混合應用程式框架中也會預設使用icon.png作為載入背景畫面。

另一個問題是畫面運作時的流暢度。在Ionic Framework vs React Native Comparison這個影片中,我們可以看到基於Ionic Framework包裝的應用程式運作效能非常的差,已經到了妨礙使用體驗的程度了。但這個問題通常是因為程式寫的不好,最常見的情況,是因為開發者在轉場動畫上使用連續改變物件位置參數來營造動畫感,這卻是相當不流暢的做法。

現在比較好的做法是採用較好的顯示畫面框架,像是Onsen UI。或是根據How to Make High Performance PhoneGap Apps來修正你的程式架構。不過光是混合應用程式框架現在的架構,在各個平臺運作起來就已經很流暢了,我想就一般的應用程式來說是已經足夠使用。

如果要到玩遊戲的話,雖然看起來是可以運作Cocoon.js這種遊戲框架,但是還是不知道它的流暢度極限到底在那裡。但因為我可能比較不會朝遊戲的方向開發,這部分就待有心人士來測試吧。

其他跨平臺框架 / Cross platform framework

比起原生應用,我仍然比較偏好可以跨平臺的框架。

儘管許多知名的框架號稱自己是跨平臺,但其實也都是限制於行動裝置的平臺或桌面端的平臺,並不是真的能夠橫跨網頁、桌面端與行動裝置端,這也是我做這個混合應用程式框架的動機。
大部分的跨平臺框架有許多門檻,像是React NativeNativeScript。當然,這些門檻在混合應用框架裡面也是難以避免。

第一個門檻是編譯。幾乎現在主流的跨平臺框架都需要先進行編譯,然後才能展示最後的成果。只要框架使用了作業系統上的原生UI,幾乎都需要編譯後才能使用。React Native提供了Hot Reloading減少重複編譯的問題,但是還是需要部屬相關的編譯環境。相較之下,混合應用程式框架藉助了Adobe PhoneGab Build來編譯行動端的應用程式,我們只要用Git或壓縮成zip上傳即可,部屬環境不需要煩惱。但是如果要用Electron編譯成桌面端應用程式,那還是要用npm來安裝Electron需要的環境。Electron編譯環境所需要的指令請看README說明

第二個門檻是API。雖然框架提供了跨平臺都能使用的UI API,像是特定的按鈕、特定的工具列寫法,但這個框架的API常常已經有別於傳統網頁的做法,並非一般網頁開發者所謂的HTML5,幾乎等於你要重學一個語言。而這語言使用的API並不能帶到其他平臺上,像是網頁或桌面端的Electron,因此不能說是真的跨平臺。儘管混合應用框架本身也用了OnsenUI跟Vue.js等框架,讓人需要重新學習這些框架的用法。不過至少OnsenUI上所寫的工具列是真的可以在網頁、桌面端跟行動端正常顯示,而不會被原生UI的限制所綁架。

Electron的限制 / Huge file from Electron

相較於行動裝置端有許多大紅大紫的知名跨平臺框架,桌面端的跨平臺框架倒是只有Electron比較知名。混合應用程式框架也是使用Electron來實作桌面端應用程式的跨平臺開發。

然而,Electron最大的問題,還是它編譯出來的檔案大小實在是太大了。在www中的主要程式其實只有16MB左右,但混合應用程式框架最後編譯出來的檔案大小居然來到136MB,壓縮成7z也還有35MB之多。網路上有許多人對Electron檔案大小感到疑惑,Expected app bundle size?  中zcbenz說就是這樣大小,沒辦法。我也覺得很無奈。

剛好今天看到了新的桌面端跨平臺框架出現:Vuido,這是用Vue.js撰寫桌面端應用程式的框架,可以使用桌面端原生的UI元件,而不是像我使用混合應用框架中實際上是寫一個網頁來模擬UI介面的做法。檔案大小似乎比Electron還要小,速度上也應該會比Electron還要快吧。不過我個人還是比較喜歡寫網頁,用網頁做UI介面,因此應該不會選擇這個方案,還是繼續使用Electron吧。


好啦,混合應用程式框架就聊到這邊了。

你有想過要開發跨平臺的應用程式嗎?以前你都是怎麼做的呢?除了像混合應用程式框架使用的OnsenUI + Vue.js + Electron + PhoneGap Build之外,你還知道什麼不錯的框架嗎?對混合應用程式框架什麼問題的話,歡迎你在下面的留言發問。如果你也覺得混合應用程式框架是個開發跨平臺應用程式不錯的起點,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!感謝你的耐心閱讀,讓我們下一篇見。

(more...)

怎麼將SVG向量圖插入到Word中?開放格式與專有格式的轉換 / How to insert SVG vector images into Word? Convert between Open Format and Proprietary Format

怎麼將SVG向量圖插入到Word中?開放格式與專有格式的轉換 / How to insert SVG vector images into Word? Convert between Open Format and Proprietary Format

image

前一篇我們介紹了如何將Word中使用的EMF向量圖片轉換成開放格式的SVG向量圖,這篇我們來反過來談談如何將開放格式SVG向量圖用在Word上。簡單來說,這個做法就是使用Inkscape開啟SVG向量圖,再轉存成EMF格式,這樣就可插入到Word中以向量模式運作了。最後我會整理一下SVG向量圖、EMF微軟專用向量圖、高解析度PNG圖片檔之間轉換的做法與用途,希望讓大家能夠更順利在辦公室軟體中使用向量圖片。

(more...)

EMF圖檔怎麼用?微軟專用向量圖EMF轉開放向量圖SVG教學 / How to convert EMF to SVG format

EMF圖檔怎麼用?微軟專用向量圖EMF轉開放向量圖SVG教學 / How to convert EMF to SVG format

image

EMF的全名是Enhanced Metafile,翻譯做Windows增強中繼檔,這是一種微軟專用的向量圖檔案,其目的是為了取代較早期32位元的WMF格式(Windows Metafile,Windows中繼檔)。EMF在Office軟體中能以無鋸齒的向量模式運作,但是它卻很難以高解析度的模式匯出成其他格式的圖片,令人難以使用。站在支持開放格式的立場,我這篇將教你如何將微軟專用的EMF向量圖轉換成開放格式的SVG格式,以便後續再進行編輯或轉換成高解析度的PNG圖檔。這篇教學是在Windows 7環境下使用Word 2013與InkScape來完成整個轉換動作,請確定你有這些環境才能做到本篇教的EMF轉SVG喔。

(more...)

用Acrobat Pro將掃描圖片檔案建立成PDF電子書 / Create an eBook PDF with Adobe Pro

用Acrobat Pro將掃描圖片檔案建立成PDF電子書 / Create an eBook PDF with Adobe Pro

image

我在「不拆書的自烹PDF電子書:免費軟體Scan Tailor的方案」中介紹了以Scan Tailor、XnView MP來整理掃描的電子檔,然後用一些免費工具來製作PDF檔案。但是如果你電腦裡面有安裝Acrobat Pro的話(不是免費的Adobe Reader喔),那不妨也可使用以下方法來製作PDF電子書喔。這篇將接續「不拆書的自烹PDF電子書:免費軟體Scan Tailor的方案」中Phase 3之後,後續改以Adboe Acrobat Pro DC為例介紹如何操作。

(more...)

PDF的文字錯誤怎麼辦?修正PDF上錯誤的OCR文字 / How to perform OCR PDF with Renderable Text Error

PDF的文字錯誤怎麼辦?修正PDF上錯誤的OCR文字 / How to perform OCR PDF with Renderable Text Error

image

雖然PDF檔案是標準格式,但是隨著PDF檔案產生的方法不同、文字辨識OCR工具帶來的字型與編碼問題,很多早期的PDF檔案雖然可以選取、複製文件上的文字,但複製出來的文字卻會是亂碼。我參考了Grant Robertson的建議,將PDF輸出到XPS印表機,再將XPS輸出成PDF,這樣就可以在PDF上進行OCR辨識,最後就能得到正確辨識的檔案了。以下我就來整理這一套做法,供大家參考參考。

(more...)

直接執行Python腳本:Python Caller / Running a Python Script Directly in Windows: Python Caller

直接執行Python腳本:Python Caller / Running a Python Script Directly in Windows: Python Caller

image

繼前一篇的RScript Caller之後,這次要來介紹的是直接執行Python的Python Caller。這隻程式的主要目的是提供讓Python腳本檔案(副檔名為.py)直接關聯到Python-Caller.exe,這樣就能在檔案總管中點兩下直接執行,然後在執行完畢後暫停,讓開發者可以看看執行結果。以下就是Python Caller的下載、設定與使用介紹。因為做法跟RScript Caller蠻像的,所以兩篇內容會看起來很像就是了。

(more...)

直接執行R腳本:RScript Caller / Running a R Script Directly in Windows: RScript Caller

直接執行R腳本:RScript Caller / Running a R Script Directly in Windows: RScript Caller

image

以往要使用R腳本(RScript)的時候,我都是將R腳本用RStudio開啟,再用RStudio執行。但這樣子執行挺麻煩的,也不太直覺。所以我用AutoIT開發了一個直接用指令端呼叫R腳本的exe程式:RScript Caller,方便供Windows使用。這樣我們在檔案總管中直接雙擊R腳本就可以執行R腳本的內容。以下我就來介紹一下怎麼取得RScript Caller、設定與使用吧。

(more...)

將Google試算表的圖表匯出成SVG向量圖檔 / Guide to Export Charts in Google Spreadsheet

將Google試算表的圖表匯出成SVG向量圖檔 / Guide to Export Charts in Google Spreadsheet

image23

如何從Google文件中的繪圖匯出高解析度的圖片之後,這篇要來講怎麽將Google試算表中的圖表輸出成SVG向量圖檔,以便轉換成高解析度的PNG圖片。雖然Google試算表的圖表可以輕易跟Google Docs結合,但很遺憾的是,它跟Google Docs中的繪圖一樣只能輸出72dpi的低解析度圖片,遠不及列印所需的高解析度300dpi,最後列印的時候將會看起來非常模糊。這篇將教你如何將Google試算表變成發佈網頁,然後再用我寫的書籤小工具Google-Spreadsheet-Chart-to-SVG將網頁上的圖表轉換成SVG並直接下載,這樣就可以取得圖表的SVG向量格式檔案了。

(more...)

將向量圖檔SVG轉換成高解析度的PNG圖檔:Inkscape教學 / How to Convert SVG to High-Resolution PNG Image with Inkscape?

將向量圖檔SVG轉換成高解析度的PNG圖檔:Inkscape教學 / How to Convert SVG to High-Resolution PNG Image with Inkscape?

image3

SVG可縮放向量圖形是向量圖片檔案中的一個常見標準。它具有向量圖片最大的優勢:不管圖片放到多大,字體和線條依然看起來非常清晰。許多工具都能繪製SVG圖檔,像是開放原始碼自由軟體InkscapeGoogle Docs的繪圖(Drawing),但很遺憾的是,我們現在常見的文書編輯工具(特別是Office)卻不能直接插入SVG檔案。因此,我們需要將SVG檔案轉換成高解析度的PNG圖檔,這樣才能將圖片順利插入到文件檔案中與其他文字共同排版,以便列印輸出。以下我們就用Inkscape這套專業的向量圖片編輯工具作為例子,教大家如何將SVG向量圖檔輸出成高解析度的PNG圖檔吧。

(more...)

如何從Google文件中的繪圖匯出高解析度的圖片 / Get High-Resolution Images from Drawing in Google Docs

如何從Google文件中的繪圖匯出高解析度的圖片 / Get High-Resolution Images from Drawing in Google Docs

image

我現在常常會在Google Docs (Google文件)上編輯文件,不僅方便與其他人協同作業,Google Docs內建的一些功能也足夠讓我寫入想要的內容,包括繪圖功能(Drawing)。然而Google Docs中使用繪圖功能畫出來的圖片,通常在下載成其他格式的檔案、發佈到網頁上的時候會有問題,特別是繪圖功能儘管是向量圖片,但卻預設是以72dpi的低解析度來呈現圖片,因此列印繪圖功能繪製的圖片時,看起總是慘不忍睹。

若要從Google Docs的低解析度繪圖中取得高解析度的圖片,我們需要將繪圖另存成SVG,然後使用InkScape之類的SVG編輯器來匯出高解析度的圖片。以下我就將這個方法整理一下,希望對與Google Docs使用者有所幫助。

(more...)

多組常態分佈資料之差異檢定與事後比較:R的ANOVA與Welch's anova / Parametric Tests for Comparing Many Normal Distribution Groups: ANOVA and Welch's anova in R

布丁布丁吃布丁

多組常態分佈資料之差異檢定與事後比較:R的ANOVA與Welch's anova / Parametric Tests for Comparing Many Normal Distribution Groups: ANOVA and Welch's anova in R

image

繼前一篇用的Kruskal–Wallis檢定跟Welch's anova來檢定多組非常態分佈資料之間是否有差異的無母數統計之後,這一篇則是用於常態分佈的多組資料之間差異檢定的有母數統計,也就是大家比較熟悉的ANOVA。雖然ANOVA也可以用SPSS來操作,不過這篇用R腳本來實作,不僅自動進行敘述統計、繪製直方圖與箱型圖,還會根據資料同質性檢定結果選擇使用ANOVA或Welch's ANOVA,操作起來更簡單喔。

(more...)