[Android] Realm 資料庫

Realm 是最近很夯的 Mobile Database,Realm 支援 iOS 和 Android,在 Realm 官網甚至霸氣的介紹是「Realm is a replacement for SQLite & Core Data」

目前 Android Realm 的最新版本是 1.2.x 0.89.1(這個版本不是很穩定,有不少 Bug,建議安裝 0.88.3 版),Realm最大的優點是資料讀取速度超快(有 in-memory 的技術)。

在效能的部分,查詢 15 萬筆的資料,Realm 每秒鐘可執行 57 次查詢,大幅領先目前市面上的 Mobile Database。
http://sebastiandobrincu.com/blog/5-reasons-why-you-should-choose-realm-over-coredata

詳細安裝步驟可參考 https://realm.io/docs/java/latest/

另外,和 SQLite 一樣,在開發階段要查看 Realm 資料庫的內容,只能將 realm 檔案複製出來,用 Realm Browser 瀏覽資料庫內容,不過  Realm Browser 目前只有 Mac 版本。


優點:
  • 快又輕量
  • ORM,沒有 SQL 語法(但這可能也是缺點,因為不能執行複雜的資料計算)
  • 整合 ListView,可 Auto-update 資料
缺點:
  • 目前無法做複雜的資料計算
  • Android 版本仍在初期開發階段,某些功能(例如 Migration)仍不穩定




分類:

[Android] Agera - Google 的 Rx Library

Reactive Programming(有人翻為「響應式編程」,這裡的『響應』與網頁的響應式設計 RDW 無關)正夯,RxJava 為 Reactive Programming 函式庫之代表,然後各種程式語言因應 Reactive Programming 的方便性,紛紛產生以 RxXXX 命名的相關函式庫,例如 iOS 的RxSwift、Android 的 RxAndroid、Python 的 RxPY、 JavaScript 的 rxjs 等。

所以什麼是「Reactive Programming」?這是一個很難一下就解釋清楚的概念,大致上說,是用瀑布式的寫法,將非同步的數據流串接起來,讓程式碼更加簡潔易讀。

可參考以下文章的說明:
前幾天發現,Google 也默默的加入 Reactive Programming 的行列,Google 官方 GitHub 上發佈了一個稱為 Agera 的 Rx Library,目前的版本是 1.0.0-RC1


Agera 不是用來取代 RxJava,這個函式庫原本是 Google 內部開發 Google Play Movies,現在將其開源出來給大眾使用,讓開發者有多一種 Rx 函式庫可選擇。


前陣子剛好將之前的程式用 RxJava、RxAndroid 和 Retrofit 重構,體驗到 Rx Programming 的強大,其語法有點艱澀,仍需時間學習。而 Agera 因為才發佈不久,未來前景如何,可再觀察社群的反應。









分類:

Google 官方的 Android Architecture

Android 的開發沒有官方統一的架構,所以開發架構不是由工程師自創,就是由公司統一規定,而這樣的架構沒有一致的標準,造成接手的人需要一些時間去學習與適應。Android 的架構從 MVC,一直到發展到最近流行的 MVP 模式,這可以從 GitHub 上 Android 的熱門開源專案看得出一些端倪。

最近 Google 官方的 GitHub 出現了由社群貢獻,並經由 Google 認可的 Android 架構,主要就是以 MVP 模式為主,可見 MVP 模式言然已成為趨勢。以往用  MVC 模式,讓 View (Activity 和 Fragment) 的工作變得非常吃重,也很難維護,而改成 MVP 模式之後,View 的工作減輕了,Presenter 可以專心做畫面呈現的工作,這能讓程式碼的可讀性更高。

Google Android 架構範例傳送門:
另有兩個在 GitHub 上找到,具參考性的 Android MVP 專案:



分類:

[Android] TinyDB 輕量級儲存載體

最近看到的技術文章不約而同都提到,沒事僅量不要使用 SQLite 儲存資料。目前雲端平台盛行,可以把儲存在手機的大量資料移往雲端。就我個人的開發經驗,除非是有資料篩選或統計的需求,否則不會考慮使用 SQLite,畢竟擺一個資料庫在手機上,總會有維護成本,利如table schema的變更,以及資料的備份與回復等等。

事實上,市面上已經有一些 SQLite 的替代方案。用較少的維護成本來儲存資料。本篇介紹的是 TinyDB。

GitHub : TinyDB--Android-Shared-Preferences-Turbo

TinyDB 其實不是資料庫,它將資料儲存在 SharedPreferences,最早是 App Inventor 預設的資料儲存媒介。後來被人提取出來供 Android Studio 使用,TinyDB 非常輕量,輕量到甚至不是一個函式庫,它只有一個 Java 檔,從 Github 下載後,加入專案就可以使用。

TinyDB的使用場景是,儲存使用者的喜好,例如我的最愛或書籤。我們可以將書籤用 List 方式儲存在 TinyDB,可是 TinyDB 沒有篩選功能,若要篩選資料,得要將資料提取出來後,再用程式篩選。

以下是使用範例,可以是 List String
//Set List String
TinyDB tinydb = new TinyDB(context);
ArrayList<String> users = new ArrayList<String>();
tinydb.putListString("users", users);

//Get List String
tinydb.getListString("users");

或者是 List Object
//Set List Object
TinyDB tinydb = new TinyDB(context);
ArrayList users = new ArrayList();
tinydb.putListObject("users", users);

//Get List Object
tinydb.putListObject("users");


優點
  • 不用維護資料庫
  • 沒有table schema變更後的升級問題
  • 資料儲存容易
缺點
  • 無法做資料篩選
  • 無法直接查看儲存內容,Debug得靠第三方套件(可安裝 Stetho,用 Chrome 除錯)
  • 資料的備份還原要自己做



分類:

CloudFlare 在台灣有節點了

前陣子才開始使用 CloudFlare 的免費服務,前幾天就聽到 CloudFlare 台灣節點上線的消息。在 CloudFlare 官網也可以查到 Taipei 節點狀態了。


如果有使用 CloudFlare 的服務,要知道自己的網站使用的是哪個節點,可以在網址後面加上 /cdn-cgi/trace 查詢。
但 CloudFlare 官網的網路圖尚未更新

既然 CloudFlare 已經在台灣有節點,又提供不錯的免費方案且不現流量,有自己架站的朋友還等什麼呢,快去使用 CloudFlare 的服務吧!關於 CloudFlare 提供的免費服務,可參考我之前寫的文章



分類: ,

王建民重返大聯盟初登板






分類:

CloudFlare

CloudFlare 是著名的雲端網管服務,除了提供CDN之外,也提供SSL憑證申請與安裝的服務。

CloudFlare的帳號分為三種等級,Free,Pro,Business。免費版本提供的項目已經相當充足,網站管理者若有類似的需求,不妨多加利用。

註冊帳號之後,要輸入你的網域名稱,CloudFlare 會花幾分鐘的時間掃描當前網域的 DNS 資料。


掃描之後,找到的項目會出現在 DNS Records,也可以自行新增 CNAME,右方亮橘色表示啟用 CDN,可將其關閉。


然後 CloudFlare 會提供兩台他的 Nameserver,請至你的網域供應商後台把 NS 換成  CloudFlare 的 NS,更換時網站不會受影響。

CloudFlare 提供了非常多的管理功能

Analytics

這個功能類似 Google Analytics,會蒐集網站的流量資料,並顯示在 CloudFlare 後台。

Crypto

這是 CloudFlare 提供的 SSL 服務,依安全性區分,共有三種選擇:Flexible、Full、Full (Strict),一般選擇  Flexible SSL 即可。(細節可參考這裡)

CloudFlare 使用 COMODO 發出的免費 SSL 憑證,效期為六個月,憑證到期時 CloudFlare 會自動 Renew。


也可上傳自己申請的憑證

Page Rules

CloudFlare 是以網域為單位進行管理,也就是說不管你的網站存放在哪,只要相同網域的CNAME 加入 CloudFlare 的 DNS Record,在 CloudFlare上做的任何設定,都會一併生效。如不想全部 apply,可以用 Page Rules 設定過濾規則。

我們可以用這裡的規則來定義強制使用 HTTPS,以及哪些 CNAME 要使用 SSL,哪些不使用 SSL等等。設定規則後,需等待幾分鐘讓 DNS 更新後,規則就會生效。

免費版本只能設定三個規則。

Speed

透過 CDN 的特性來讓網站加速,Auto Minify 會優化網站上的程式碼,讓檔案變小,載入速度變快。但是這裡的優化規則可能會違反 Google Adsense 的政策,在有使用 Adsense 的網站建議不要開啟。

 Apps

CloudFlare 提供許多 Apps,包括與 GA 和 Google Webmaster Tools 整合,有在使用這兩套工具的話,不妨開啟。

後記

將 Blogger 改用  CloudFlare CDN 之後,可能是因為 IP 變更的關係,竟然意外的突破中國大陸 GFW 的封鎖(在中國,GFW 幾乎阻擋了 Google 的全部服務),真是太神了!

分類: ,

使用 Kloudsec 監控 GitHub Pages 網站

Kloudsec 是類似 Cloudflare 的雲端網管服務,它也提供 CDN 和 HTTPS 給託管在 GitHub Pages 的網站。Kloudsec 剛開張沒多久,會知道這個服務,是最近接受 Kloudsec 工程師的邀請參與GitHub Pages 的測試。

首先到這個網址註冊,並設定,三個步驟可創建帳號,並完成設定,非常簡單
https://kloudsec.com/github-pages/new

第一步,註冊帳號

第二步,填上你的 GitHub Page 網址及網域名稱

第三步,將 103.203.90.2 這個 IP 設定到 DNS 託管服務的 A 紀錄 (可參考「在 GitHub 使用 A 記錄網域名稱的方法」一文),完成後按最下面的按鈕。

然後等候一陣子,待 DNS 更新之後,就能開始使用 Kloudsec 的服務。

登入 Kloudsec 之後會出現 Dashboard。因為服務還沒啟用,Dashboard 會顯示很多問題。

Kloudsec 提供 CDN 加速,還會監控網頁速度。Kloudsec 的 CDN 節點主要在美國、歐洲、以及新加坡地區。

Offline Protection,提供離線 Cache 的功能,因為 GitHub Page 都是靜態網頁,如果你的網站掛了,用戶會存取 CDN 上的 Cache,不會因為網站掛了就無法使用,這個服務只提供 1 個 Page 免費,超過就要收費。不過我實際測試這個功能,手動讓網頁掛掉,但 Offline Protection 沒起作用。

第三個功能是 1-Click Encryption,因為 GitHub 本身沒有提供 GitHub Pages 的 SSL。若要在 GitHub Pages 上的網頁使用 HTTPS,得透過網路服務業者的 SSL 服務才行。而 Kloudsec 使用的是前陣子才開源的 Let's Encrypt 免費 SSL 憑證。啟用了這個服務,它會自動申請並安裝 SSL 憑證。也可以設定強制使用 HTTPS(存取 HTTP 會自動轉址到 HTTPS)。可是 Let's Encrypt 發出的 SSL 憑證有效期只有三個月,如果覺得效期太短,或不夠安全,也可以上傳自行申請的 SSL 憑證。


Kloudsec 使用 Let's Encrypt 發出的憑證。

 使用 SSL Lab 測試 SSL 憑證安全性,得到 A 級

Let's Encrypt 發出的憑證是 RSA 2048 bits,TLS 1.2,相當安全,但憑證有效期只有三個月。

整體來說,Kloudsec 提供的免費服務,對於 託管在GitHub Pages 的網站來說,應該相當夠用。不過 Kloudsec 提供的服務,其實 Cloudflare 也都有提供,下一篇,將介紹 Cloudflare 的免費服務。




分類: ,

Copyright © Andy Cheng

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes Up ↑