發表文章

目前顯示的是有「Web Application」標籤的文章

Amazon S3 正確處理 HTML5 History 路由問題

圖片
如果你是使用 Angular、React 或是 Vue 來開發 SPA(單頁面應用),並且放在 Amazon S3 Static Website Hosting 上的話,那麼你會碰到 URL routing 的問題。 一般 react-router 或 vue-router 都預設使用 hash 的方式來處理 SPA 的路由: http://domain.com/#!/paths 如果你不喜歡 #!/ 的顯示方式,可以使用 HTML5 的 History API ,這樣就能像一般網站那樣顯示 URL: http://domain.com/paths 但是使用 HTML5 History API 時,通常必須搭配 server 端正確的 路由配置 才能防止出現 404 Not Found 的情形。 遺憾的是,在 Amazon S3 Static Website Hosting 上,你無法更動 Apache 或 Nginx 的配置,所以需要靠其它方式來解決問題。 使用 S3 的 Redirection Rules 使用 CloudFront 的 Custom Error Response 使用 S3 的 Redirection Rules Amazon S3 Static Website Hosting 提供了 Edit Redirection Rules 的選項,我們可以輕鬆使用這段程式碼將所有 domain.com/#!/paths 所產生的 404,全部重新導向至根路徑: <RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <HostName>你的網域(例:domain.com)</HostName> <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith> </Redirec...

Code Coverage with CircleCI + Codecov

圖片
Code Coverage with CircleCI + Codecov 最近的案子用到 Redux + React ,因為它 Pure Function 的特性,所以 單元測試 很容易寫,順便也趁機會玩一下 程式碼覆蓋率 (Code Coverage)。 單元測試 Unit Test 這裡就不講單元測試怎麼寫了,網路上有很多大神的好文可以爬,我是用 Mocha + Chai : mocha 是 test framework,提供 describe 、 it chai 是 assertion library,提供 assert 、 should 、 expect 安裝 Gulp : npm install --save-dev gulp gulp-mocha 安裝 Babel 讓程式支援 ES6 語法: npm install --save-dev babel 加入 mocha 到 gulpfile.babel.js : // gulpfile.babel.js import gulp from 'gulp'; import mocha from 'gulp-mocha'; gulp.task('mocha', () => { return gulp.src('test/**/*.js') .pipe(mocha()); }); 使用 npm test 取代 gulp mocha : // package.json { "scripts": { "test": "gulp mocha" } } 這樣做的好處: gulp 可不用 -g 全域安裝 CI 會自動執行測試 程式碼覆蓋率 Code Coverage 有許多提供 code coverage review 的服務,例如: Code Climate 、 Codecov 、 Coveralls 。這裡選擇 Codecov ,因為它的 GitHub public repo 方案是免費的。 安裝 istanbul 產生 coverage report: npm insta...

AngularJS + Google Spreadsheet

圖片
概要 這篇文章主要是說明如何寫 AngularJS 的 service,以類似 $resource REST 的方式來取得 Google 試算表的資料。 本文假設讀者已讀過 AngularJS Tutorial ,了解 AngularJS 基本概念。 目錄 建立試算表 Template App Module Service Controller 注意事項 參考 建立試算表 前往 https://drive.google.com 或是參考已經建立好的 試算表 。 先建立一份新的試算表: 建立 > 試算表 。 填寫資料表,以 AngularJS Tutorial 的 phones.json 為例。 將試算表權限公開: 檔案 > 共用 > 擁有存取權的使用者 > 變更 。 共用設定 > 公開在網路上 > 存取權 > 可檢視 > 儲存 。 權限公開後,發佈到網路: 檔案 > 發佈到網路 > 內容有所變更時自動更新發佈 > 開始發佈 。 發佈完成後,公開連結中會提供一組 key,可以前往 Google Data APIs 測試看看資料是否回傳正確。 接下來進入正式寫程式的階段,這裡我們會使用到 Tabletop.js 這個第三方的 library,提供 javascript 快速取得 json 格式的試算表資料。 這裡會以 AngularJS Tutorial 的 phonecatApp 為例子,說明如何實作 Tabletop.js 的 service。 Template 建立 index.html ,並加入 angular.js , angular-route.js 和 tabletop.js 。 index.html : <!doctype html> <html ng-app="phonecatApp"> ... <div ng-view></div> ... <script src="angular.js"></script> ...

Web Components

圖片
今天想要跟大家聊聊 Web Components 這個新玩具,說是新玩具,其實這個概念已經發展有段時間了,尤其筆者本身是玩 Flash 技術出身的,發現 Web Components 跟 Flex Component 差不多,所以就來分享一些心得。 Web Components 是什麼? 簡單來講就是你可以客制化 HTML <tag>。 <my-component></my-component> 由 W3C 提出: The component model for the Web. When used in combination, Web Components enable Web application authors to define widgets with a level of visual richness and interactivity not possible with CSS alone, and ease of composition and reuse not possible with script libraries today. 使用 Web Components 有什麼好處? 鉴于许多Web框架通过暴露JavaScript API来构建用户界面,而构建用户界面实际上就是生成一堆div和spans标记,Web 组件是原生浏览器的解决方案因此不依赖于一个完整的框架。因此,与现在的一般依赖某个Javscript框架的HTML组件相比,Web组件希望能减少碎片。 最近新起許多 MDV (Model-driven-view) 這類 template 和 data binding 開發方式的框架 (backbone, angular, ember..), 那 Web Components 跟這些框架有什麼不同呢? 基本上就是希望藉由規格標準化,讓 Web application 的開發方式與架構更清晰。 Web Components 的瀏覽器支援情況? 尽管Web组件是一项有趣的新技术,但在浏览器们都支持它们(并且大部分用户都开始使用这些浏览器们)之前,其中的大部分功能还派不上用场。解决这个问题的一种方法是使用polyfills。 很遺憾,目前的瀏覽器普遍都還不支...

我的數位生活 2012

這次不談程式的東西, 來聊一些 2012 年的數位生活心得, 這幾年許多應用快速雲端化加上智慧型裝置普及率提高, 幾乎大部份的工作都可以離開 PC 來完成了, 剛好在去年我達成了 Apple 家族四天王(iPhone iPad AppleTV Macbook)制霸! 所以在這邊整理分享 2012 年用了哪些服務. 因為我手上的裝置都是蘋果, 所以下面介紹的服務會以 iOS 系列為主, Android 的朋友抱歉囉.. 我在找想用的服務時會盡量挑以下幾點符合的: 多螢一雲 有提供各平台的 app, 網頁, 或桌面應用軟體. 社群化 擁有自己的社交互動圈, 或整合 twitter, facebook 等服務. 手機為主 PC為輔 優先挑選手機 app 好用的服務. 另外, 根據服務性質的不同, 也會看是適合哪個平台來選擇, 例如: iPhone 人在外面, ex: 工作, 通勤等.., 通常生產力相關的工具會比較適合在這時候使用. iPad 在家裡, 但不是電腦前, ex: 沙發, 床上.., 通常使用閱讀, 影片, 繪畫軟體較適合. Apple TV 在客廳, 不過軟體不多, 通常都拿來看影劇和聽音樂居多. PC 電腦或筆電, 通常都是拿來做較複雜的事情, ex: 整理, 規劃, 編輯.. OK, 在了解完我挑選應用服務的方式後, 下面列出的就是我要分享的清單: 知識管理 Google Reader Reeder Zite Pocket Evernote Delicious Blogger 生產力管理 Gmail Google Calendar Reminders Notes Dropbox 人脈管理 Google Contacts Facebook (Twitter, Google+, LinkedIn) LINE 財務管理 随手记 休閒娛樂 iTunes Match Last.fm TuneIn Radio SoundHound YouTube Podcast iTunes U Google Map Foursquare Foodspotting Picasa Instagram ...