SlideShare a Scribd company logo
1 of 76
在雲端上啜飲爪哇
在雲端上啜飲爪哇 王建興 qing.chwang at gmail.com
講者簡介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object]
關於這個講題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
雲端計算帶來的好處 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Java 在雲端的選項 ,[object Object],[object Object],[object Object],[object Object]
Amazon 的雲端計算平台 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Amazon EC2 (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Amazon EC2 (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用 EC2 對開發者的好處 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
在 EC2 上部署 Java Web 應用程式 *Chris Richardson, “Running Java applications on the Amazon Elastic Compute Cloud”
Cloud Tools ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],*http://code.google.com/p/cloudtools/
Java libraries for AWS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
基於 IaaS 平台的優缺點 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
基於 PaaS 平台開發應用軟體 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
規模擴展時的議題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
這正是為什麼有時候我們需要基於 PaaS 平台來開發的重要原因之一
什麼是 GAE ?  (1/2) ,[object Object],[object Object]
什麼是 GAE ? (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object]
執行環境及程式語言 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
成本及預算 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
行情 *http://code.google.com/intl/en/appengine/docs/billing.html $0.64 Hourly per instance Backends ( B8   class) $0.32 Hourly per instance Backends ( B4   class) $0.16 Hourly per instance Backends ( B2   class) $0.08 Hourly per instance Backends ( B1   class) $0.30 N/A (daily) Always On $0.0001 recipients Recipients Emailed $0.45 gigabytes per month High Replication Storage $0.15 gigabytes per month Stored Data $0.10 CPU hours CPU Time $0.10 gigabytes Incoming Bandwidth $0.12 gigabytes Outgoing Bandwidth Unit cost Unit Resource
架構 Request  Response  Web page transactions Result Browser  URL fetch or E-mail More services  Schedule routine  Static Storage  HTTP / HTTPS * 清大資工鍾葉青教授雲端計算課程講義投影片 Web interface Sandbox Runtime environment Datastore Memcache
GAE 採用 Sandbox 的概念 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 上的諸般限制  例一:網路存取 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 上的諸般限制  例二:檔案系統存取 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 上的諸般限制  例三:執行時間及方式 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 上的 Java 執行環境 (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 上的 Java 執行環境 (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 的 Datastore (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 的 Datastore (2/2) ,[object Object],[object Object],[object Object]
處理 Datastore 會是在 GAE 上開發應用系統的最大挑戰
Kind 、 Entity 、 Key 、 Property User 傳統關聯式資料庫 Datastore *Cloud Tu @TWJUG User Sport Null Null Favor2 Movie Null Null Favor3 Music Cloud 1 Music Tom 3 Null John 2 Favor1 Name PK Music Favor Cloud Name 1 Key John Name 2 Key Music , Sport , Movie Favor Tom Name 3 Key Kind Table Key PK Property Field Entity Row
Native Datastore 操作 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Entity employee = new Entity("Employee"); employee.setProperty("firstName", "Antonio"); employee.setProperty("lastName", "Salieri"); Date hireDate = new Date(); employee.setProperty("hireDate", hireDate); employee.setProperty("attendedHrTraining", true); datastore.put(employee);  Kind  Entity  Key  Property *Cloud Tu @TWJUG 在 Entity 的 constructor 中指定。未指定時,系統會自動指派一個 UUID 的 key
用 JDO 的方式描述資料  (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
用 JDO 的方式描述資料  (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
對 Datastore 進行查詢 ,[object Object],[object Object],[object Object],[object Object],[object Object]
JDO/Query Language public byte[] getPhoto(long id) { PersistenceManager pm =  PMF.get().getPersistenceManager(); String query = &quot;select from &quot; + Photo.class.getName() + &quot;  where id == &quot;+id; List<Photo> photos = (List<Photo>)  pm.newQuery(query).execute(); if( photos.isEmpty() ) { pm.close(); return null; } Photo p = photos.get(0); Blob content = p.getContent(); byte[] b = content.getBytes(); pm.close(); return b; }
EntityGroup ,[object Object],[object Object],[object Object]
EntityGroup User *Cloud Tu @TWJUG 自動產生 RootKey ParentKey Cloud Name 1 Key 自動產生 RootKey ParentKey John Name 2 Key 2 ParentKey Mary Name 3 Key 2 ParentKey Mary Name 4 Key 2 ParentKey Joe Name 5 Key A EntityGroup B EntityGroup
建構 EntityGroup Entity parent = new Entity(&quot;User&quot;); Entity child1 = new Entity(&quot;User&quot;, parent.getKey());  Entity child2 = new Entity(&quot;User&quot;, parent.getKey());  Constructor 未指定其 ParentKey 時,系統會自動產生一個 RootKey ,[object Object],[object Object],[object Object],*Cloud Tu @TWJUG
Google Accounts (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Google Accounts (2/2) ,[object Object],[object Object]
GAE 提供的 Service (1/2) ,[object Object],[object Object],[object Object],[object Object]
GAE 提供的 Service (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Scheduled Tasks ,[object Object],[object Object]
Backends (1/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Backends (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 中三種類型的程式碼 Request Handler Scheduled Task Backend
同與異  (1/2) ,[object Object],[object Object],[object Object],[object Object]
同與異  (2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object]
GAE SDK ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 開發流程 (1/3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 開發流程 (2/3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GAE 開發流程 (3/3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
域名 ,[object Object],[object Object],[object Object]
克服各種限制 ,[object Object],[object Object],[object Object],[object Object],[object Object]
到雲端上喝 Java 咖啡 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Case Study ,[object Object],[object Object],[object Object],[object Object]
Diggirl x Cloud
Diggirl x Cloud for iPhone (1/2)
Diggirl x Cloud for iPhone (2/2)
Diggirl 考慮移植至 GAE 的原因 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
移植過程的變化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
移植過程的困難 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Directory Service 的原有架構 Internet API
Directory Service 的現有問題 ,[object Object],[object Object],[object Object],[object Object],[object Object]
採 GAE 輔助的新架構 Internet Internet API API
移植過程的變化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Schemaless 的設計變動 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
得道昇天後的好處 ,[object Object],[object Object],[object Object],[object Object]
結論 ,[object Object],[object Object],[object Object]
Special Thanks To ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resources ,[object Object],[object Object]
Thanks!

More Related Content

Viewers also liked

全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用建興 王
 
開發實用創新的 Android 應用程式
開發實用創新的 Android 應用程式開發實用創新的 Android 應用程式
開發實用創新的 Android 應用程式建興 王
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用建興 王
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫建興 王
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java建興 王
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算建興 王
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發建興 王
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI建興 王
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby建興 王
 
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - LuceneJava 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene建興 王
 
「沙中撈金術」﹣談開放原始碼的推薦系統
「沙中撈金術」﹣談開放原始碼的推薦系統 「沙中撈金術」﹣談開放原始碼的推薦系統
「沙中撈金術」﹣談開放原始碼的推薦系統 建興 王
 
排隊應用開發
排隊應用開發排隊應用開發
排隊應用開發建興 王
 
Mahout資料分析基礎入門
Mahout資料分析基礎入門Mahout資料分析基礎入門
Mahout資料分析基礎入門Jhang Raymond
 

Viewers also liked (13)

全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用全文搜尋引擎的進階實作與應用
全文搜尋引擎的進階實作與應用
 
開發實用創新的 Android 應用程式
開發實用創新的 Android 應用程式開發實用創新的 Android 應用程式
開發實用創新的 Android 應用程式
 
開放原始碼的回收與再利用
開放原始碼的回收與再利用開放原始碼的回收與再利用
開放原始碼的回收與再利用
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
 
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 JavaIKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
 
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - LuceneJava 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
 
「沙中撈金術」﹣談開放原始碼的推薦系統
「沙中撈金術」﹣談開放原始碼的推薦系統 「沙中撈金術」﹣談開放原始碼的推薦系統
「沙中撈金術」﹣談開放原始碼的推薦系統
 
排隊應用開發
排隊應用開發排隊應用開發
排隊應用開發
 
Mahout資料分析基礎入門
Mahout資料分析基礎入門Mahout資料分析基礎入門
Mahout資料分析基礎入門
 

Similar to 在雲端上啜飲爪哇

Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_finalWei Sun
 
GAE/J 簡介
GAE/J 簡介GAE/J 簡介
GAE/J 簡介Cloud Tu
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdf.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdfGelis Wu
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手Poy Chang
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 

Similar to 在雲端上啜飲爪哇 (20)

Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_final
 
GAE/J 簡介
GAE/J 簡介GAE/J 簡介
GAE/J 簡介
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdf.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdf
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3
 
Cocoa on Rails 4th
Cocoa on Rails 4thCocoa on Rails 4th
Cocoa on Rails 4th
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Osgi Intro
Osgi IntroOsgi Intro
Osgi Intro
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 

在雲端上啜飲爪哇

  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. 在 EC2 上部署 Java Web 應用程式 *Chris Richardson, “Running Java applications on the Amazon Elastic Compute Cloud”
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23. 行情 *http://code.google.com/intl/en/appengine/docs/billing.html $0.64 Hourly per instance Backends ( B8   class) $0.32 Hourly per instance Backends ( B4   class) $0.16 Hourly per instance Backends ( B2   class) $0.08 Hourly per instance Backends ( B1   class) $0.30 N/A (daily) Always On $0.0001 recipients Recipients Emailed $0.45 gigabytes per month High Replication Storage $0.15 gigabytes per month Stored Data $0.10 CPU hours CPU Time $0.10 gigabytes Incoming Bandwidth $0.12 gigabytes Outgoing Bandwidth Unit cost Unit Resource
  • 24. 架構 Request Response Web page transactions Result Browser  URL fetch or E-mail More services Schedule routine Static Storage HTTP / HTTPS * 清大資工鍾葉青教授雲端計算課程講義投影片 Web interface Sandbox Runtime environment Datastore Memcache
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. 處理 Datastore 會是在 GAE 上開發應用系統的最大挑戰
  • 34. Kind 、 Entity 、 Key 、 Property User 傳統關聯式資料庫 Datastore *Cloud Tu @TWJUG User Sport Null Null Favor2 Movie Null Null Favor3 Music Cloud 1 Music Tom 3 Null John 2 Favor1 Name PK Music Favor Cloud Name 1 Key John Name 2 Key Music , Sport , Movie Favor Tom Name 3 Key Kind Table Key PK Property Field Entity Row
  • 35. Native Datastore 操作 DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Entity employee = new Entity(&quot;Employee&quot;); employee.setProperty(&quot;firstName&quot;, &quot;Antonio&quot;); employee.setProperty(&quot;lastName&quot;, &quot;Salieri&quot;); Date hireDate = new Date(); employee.setProperty(&quot;hireDate&quot;, hireDate); employee.setProperty(&quot;attendedHrTraining&quot;, true); datastore.put(employee); Kind Entity Key Property *Cloud Tu @TWJUG 在 Entity 的 constructor 中指定。未指定時,系統會自動指派一個 UUID 的 key
  • 36.
  • 37.
  • 38.
  • 39. JDO/Query Language public byte[] getPhoto(long id) { PersistenceManager pm = PMF.get().getPersistenceManager(); String query = &quot;select from &quot; + Photo.class.getName() + &quot; where id == &quot;+id; List<Photo> photos = (List<Photo>) pm.newQuery(query).execute(); if( photos.isEmpty() ) { pm.close(); return null; } Photo p = photos.get(0); Blob content = p.getContent(); byte[] b = content.getBytes(); pm.close(); return b; }
  • 40.
  • 41. EntityGroup User *Cloud Tu @TWJUG 自動產生 RootKey ParentKey Cloud Name 1 Key 自動產生 RootKey ParentKey John Name 2 Key 2 ParentKey Mary Name 3 Key 2 ParentKey Mary Name 4 Key 2 ParentKey Joe Name 5 Key A EntityGroup B EntityGroup
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50. GAE 中三種類型的程式碼 Request Handler Scheduled Task Backend
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 62. Diggirl x Cloud for iPhone (1/2)
  • 63. Diggirl x Cloud for iPhone (2/2)
  • 64.
  • 65.
  • 66.
  • 68.
  • 69. 採 GAE 輔助的新架構 Internet Internet API API
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.