Tabledown

32
Tabledown 2011 OSDC.TW @tcc / [email protected]

description

 

Transcript of Tabledown

Page 2: Tabledown

Tabledown?

• 命名靈感: Markdown

• (應用)資料, Java示範, Python實作

• google: tabledown

Page 3: Tabledown

About me

SI 5+ 事C/C++PerlJavaWeb

SW 5- 人 Python

SD 5+ 球 GroovyScala

Page 4: Tabledown

能用軟的解決就不要硬來

• 運算能力躍進• 規模經濟戰場• 整合勝過特製

Page 5: Tabledown

大綱

• 背景 - 發展 Tabledown 原由

• 方案 - 開發與使用觀點

• 可能 - 還能做的?

Page 6: Tabledown

開始

• 強者DIY, 採取DRY

• 找合用的系統 ...

• OFBiz ☞ FLOSS! Apache! 中文?

Page 7: Tabledown

安裝

• FLOSS 持續改版

• 應用系統設定繁雜, 資料遷移問題

• 跨多個子系統, 多個 UI

• 使用 twill 播放 HTTP (解決)

• scotch HTTP 代理記錄成 *.pickle

• translate-recording-to-twill 轉換 *.twill

UX FAIL!

DATA FAIL!

Page 8: Tabledown

twill 範例

go http://localhost:8080/ofbizsetup/control/mainfv 2 groupName '甲方'fv 2 USER_ADDRESS1 '東大路'fv 2 USER_POSTAL_CODE '300'fv 2 USER_COUNTRY 'TWN'fv 2 USER_CITY '新竹市'fv 2 USER_WORK_COUNTRY '886'fv 2 partyId 'jia'fv 2 USER_WORK_CONTACT '5153000'fv 2 USER_WORK_AREA '3'fv 2 USER_EMAIL '[email protected]'submit

(部份)

Page 9: Tabledown

使用應用系統

• 常見: 人員, 產品, 專案

• 不同系統 ☞ 類似的資料

• 設定繁多...

UX FAIL!

Page 10: Tabledown

改用試算表

• 多個畫面, 一個表單

• 使用者 ok

• 開發者 orz

Page 11: Tabledown

試算表處理

• 工具: 匯出匯入, 單一表格對單一表單

• API: 程式讀取/寫入

• DSL: Groovy Builder/Slurper

• Tabledown: Collections 對應 Collections

☞ Hash + List

Page 12: Tabledown

tabledown 範例 1

{ '_':['master','tasks'], 'master':{ 'id':['A^1',u'專案ID'], 'name':['A^2',u'名稱'], 'desc':['A^3',u'描述'], 'billing':['A^4',u'客戶的帳務處理'], 'cust_pm':['C^4',u'客戶PM'], 'org':['A^5',u'執行單位'], 'exec_pm':['C^5',u'執行PM'], 'sa':['E^5',u'系統分析'], 'pg':['G^5',u'開發人員'], }, 'tasks':{ '*':{ 'id':['A1',u'ID'], 'sno':['B1',u'序號'], 'type':['C1',u'種類'], 'name':['D1',u'名稱'], 'desc':['E1',u'描述'], 'est_bgn':['F1',u'預定開始'], 'est_end':['G1',u'預定結束'], 'res':['H1',u'人員'], }, },}

{ u'Sheet1': { 'master': { 'billing': u'yi', 'cust_pm': u'yi', 'desc': '', 'exec_pm': u'bing', 'id': '', 'name': u'PR001', 'org': u'jia', 'pg': u'wu,ji,geng', 'sa': u'ding'}, 'tasks': [ { 'desc': '', 'est_bgn': '', 'est_end': '', 'id': '', 'name': u'\u8a55\u4f30', 'sno': u'100', 'type': u'P'}, { 'desc': '', 'est_bgn': u'2011-3-26', 'est_end': u'2011-3-26', 'id': '', 'name': u'\u8166\u529b\u6fc0\u76ea', 'res': 'bing,ding,wu', 'sno': '', 'type': u'T'},

設定 資料

(部份)

Page 13: Tabledown

tabledown 範例 2

from tabledown.tdxls import TDXlstdx = TDXls(conf)

data = tdx.xls2dict(filename)

tdx.dict2xls(data, filename)

設定

讀取

寫入

Page 14: Tabledown

連接應用系統

• REST, Web Service ... OFBiz 單一開關

• 實際上 ... 功能不足!

• 連接 Web App ☞ mechanize

(Python, Perl, Ruby ... PHP 比較缺乏)

SOA FAIL!

Page 15: Tabledown

mechanize

• 可靠• 自由軟體鑄造廠 WWW::Mechanize

• 相本收集/下載 (Ruby) 非常人性的應用

• 10yr, 5yr

• 特性• 與 twill 差別

• 與 Beautiful Soup 搭配處理

Page 16: Tabledown

mechanize 範例import mechanizebr = mechanize.Browser()...# create projectdProject={'workEffortName': mName, 'description': mDesc, 'clientBillingPartyId': mBilling, 'organizationPartyId': mOrg, 'scopeEnumId':'WES_PRIVATE',}br.open("%s/EditProject" % url_app)applyDict2Form(br, 'EditProject', dProject)res = br.submit()id, soup = page_get_project_id_and_soup(res.get_data())

def page_get_id_and_soup(page): soup = BeautifulSoup(page, convertEntities=BeautifulSoup.HTML_ENTITIES) title = soup.find('div', {'class':'page-title'}) # ok id = None if title: m = re.search(r'\[([^\]]+)\]', title.find('span').getText()) if m: id = m.groups()[0] print "---> new id %s" % id return (id, soup)

(部份)

新增專案

Page 17: Tabledown

整理

PythonWeb/

Services試算表

twill + scotch

mechanize+

BeatifulSoup Tabledown

Page 18: Tabledown

日常生活

• OFBiz 時間表(Timesheet) → 轉發票 ♥

• 時間表的處理流程• 每人每週一張• 工作項目是任務(Task)

• 指定時間轉發票• 區分已記帳、未記帳• 發票進入應收管理

UX OK

Page 19: Tabledown

時間表 範例OFBiz

試算表

Page 20: Tabledown

時間表使用 Td

• 使用方便、隨時使用• 登入 ☞ 選擇(找)功能 ☞ 記時數

• 月底高峰?

• 留有存檔(表單化)

• 除了資料匯出/匯入, 示範配合作業流程。衍伸另一個問題 …

Page 21: Tabledown

連接或不連接

• 網路、雲端、行動 ... 連接!

• 試算表遂行表單化• 容易實行 ex: PM, 問題追蹤

• 行動設備 >> 上世代主機

• 獨立關鍵步驟, 有益資料健康

• 表單化可批次處理 ... 連接?

Page 22: Tabledown

實現雲端服務

• 尋找合用 SaaS, 在 PaaS 打造, 而 IaaS 偽?

• 購買 IaaS 搭配開源/客製/商業方案

• 啟動 > 人工/腳本設定 > 上線 > 資料保存

Page 23: Tabledown

IaaS 實行策略

• 購買 IaaS 配合某套件

• 啟動 > 人工/腳本設定 > 上線 > 資料保存

• 設定: 試算表

• 流程: 試算表

• 資料: 試算表

(假說)

Page 24: Tabledown

可能

• 使用者觀點• 建置: 更容易起步, 降低負擔

• 流程: 行動與商務配合

• 資料: 私有化與一致性

• 雲端: 搭配 Socialtext 的 Socailcalc 或 Google Spreadsheet

Page 25: Tabledown

限制

• 分段處理適合, 連續處理不適合

• 階段: 資料輸入, 報表產生

• 連續: 線上服務(查詢), 生產管理 SFC

• mechanize 的交易問題

• 被 UI 限制 架構 FAIL?

Page 26: Tabledown

FAILs

• DATA FAIL: 資料遷移

• UX FAIL: 多關連的資料, 多畫面的操作

• SOA FAIL: 實際功能只在 Web App 有

Page 27: Tabledown

小結

• 動手填妥試算表, 立刻開始, 跨越煩瑣的步驟

• 安全網路中斷不中斷商務; 成為攻擊對象??

• ♥ 地球 / ♥ $ £¥

批次執行使用, 採買計算不包養

Page 28: Tabledown

• Tabledown http://code.google.com/p/tabledown/

• OFBiz http://ofbiz.apache.org/

• xlrd, xlwt http://www.python-excel.org/

• twill http://twill.idyll.org/

• scotch http://darcs.idyll.org/~t/projects/scotch/doc/

• mechanize http://wwwsearch.sourceforge.net/mechanize/

• Beatiful Soup http://www.crummy.com/software/BeautifulSoup/

Page 29: Tabledown

謝謝來參加[ Tabledown ]

Twitter: [email protected]

Page 30: Tabledown

Option比較 XML, JSON, YAML, S-表示式

Page 31: Tabledown

Option: 開放應用架構1

!"#$ %&#$'()*

+,-*!"./

Page 32: Tabledown

Option: 開放應用架構2

!"#$

%&

'()* +,#$-./ +,#$-.0 +,#$-.1

ERP OFBiz

B2B

Portal

...

...

23

Vim

Eclipse

45 67 89 :; <=

Markdown

Docbook

DITA

Sphinx

Ant/mvn

sbt/gradle

Artifactory

Jenkins

(Hudson)

Selenium

JMeter

Hg

git

Trac

>?Java

Scala Groovy

@A Akka Grails ZK

BCrobust

serv.

cust.

serv.

Web

App

DEFGHI

JKL

MNMO

FTP

Web

...

...

PQApache

DS

R3 Activiti

ST Nuexo

UV Zenoss

WXYZ

Openfire

["\]^

Felix / Karaf

Camel

ServiceMix

_*!"`a