SlideShare a Scribd company logo
1 of 32
Download to read offline
Tabledown
    2011 OSDC.TW
@tcc / tcchou@tcchou.org
Tabledown?

•           : Markdown
• ( ) , Java , Python
• google: tabledown
About me
                C/C++

SI   5+          Perl
                 Java
                  Web




SW   5-         Python




SD   5+         Groovy
                 Scala
•
•
•
•   -   Tabledown
•   -
•   -      ?
• DIY, DRY
•           ...
• OFBiz FLOSS! Apache!   ?
• FLOSS                      DATA FAIL!
  •                     ,
•                ,     UI UX FAIL!
•       twill      HTTP (      )
  • scotch HTTP                 *.pickle
  • translate-recording-to-twill *.twill
twill
go http://localhost:8080/ofbizsetup/control/main
fv 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 'jia@side.org'
submit
                                             (     )
•   :    ,    ,

•

•       ...




              UX FAIL!
•    ,
•   ok
•   orz
• :              ,
• API:         /
• DSL: Groovy Builder/Slurper
• Tabledown: Collections Collections
    Hash + List
tabledown                                               1
{ '_':['master','tasks'],                      { u'Sheet1': { 'master': { 'billing': u'yi',
     'master':{                                               'cust_pm': u'yi',
         'id':['A^1',u'   ID'],                               'desc': '',
         'name':['A^2',u'    '],                              'exec_pm': u'bing',
         'desc':['A^3',u'    '],                              'id': '',
         'billing':['A^4',u'             '],                  'name': u'PR001',
         'cust_pm':['C^4',u'     PM'],                        'org': u'jia',
         'org':['A^5',u'       '],                            'pg': u'wu,ji,geng',
         'exec_pm':['C^5',u'     PM'],                        'sa': u'ding'},
         'sa':['E^5',u'       '],                 'tasks': [ { 'desc': '',
         'pg':['G^5',u'       '],                              'est_bgn': '',
     },                                                        'est_end': '',
     'tasks':{                                                 'id': '',
         '*':{                                                 'name': u'u8a55u4f30',
             'id':['A1',u'ID'],                                'sno': u'100',
             'sno':['B1',u'    '],                             'type': u'P'},
             'type':['C1',u'     '],                         { 'desc': '',
             'name':['D1',u'     '],                           'est_bgn': u'2011-3-26',
             'desc':['E1',u'     '],                           'est_end': u'2011-3-26',
             'est_bgn':['F1',u'        '],                     'id': '',
             'est_end':['G1',u'        '],                     'name': u'u8166u529bu6fc0u76ea',
             'res':['H1',u'    '],                             'res': 'bing,ding,wu',
         },                                                    'sno': '',
     },                                                        'type': u'T'},
}

                                                                                             (    )
tabledown                  2
from tabledown.tdxls import TDXls
tdx = TDXls(conf)



data = tdx.xls2dict(filename)



tdx.dict2xls(data, filename)
• REST, Web Service ... OFBiz
•         ...          !   SOA FAIL!
•      Web App     mechanize
  (Python, Perl, Ruby ... PHP   )
mechanize
•
    •                     WWW::Mechanize
    •             /   (Ruby)
    • 10yr, 5yr
•
    •    twill
    •    Beautiful Soup
mechanize
  import mechanize
  br = mechanize.Browser()
  ...
  # create project
  dProject={'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)
mechanize
                  +
            BeatifulSoup             Tabledown
 Web/
                            Python
Services
           twill + scotch
• OFBiz   (Timesheet) →      ♥
•
  •                       UX OK
  •           (Task)
  •
  •
  •
OFBiz
Td
•
    •               (       )

    •       ?
•       (               )
•               /               ,
                        …
•                  ...   !
•
    •   ex: PM,
    •   >>
•         ,
•                 ...    ?
•          SaaS,   PaaS           ,       IaaS   ?
•   IaaS           /          /
•   >        /            >           >
IaaS                   (   )



•       IaaS
•       >      /   >   >
•   :
•   :
•   :
•
    •     :            ,
    •     :
    •     :
•      :      Socialtext   Socailcalc
    Google Spreadsheet
•             ,
    •   :         ,
    •   :         (   ),      SFC
• mechanize
• UI                  FAIL?
FAILs

• DATA FAIL:
• UX FAIL:         ,
• SOA FAIL:            Web App
•
         ,           ,
•
                 ;       ??
•♥   / ♥ $ £¥
             ,
•   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/
[ Tabledown ]
      Twitter: tcc
  tcchou@tcchou.org
Option
XML, JSON,YAML, S-
Option:                   1


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




           +,
                 -*!"./
Option:                                                                                                          2

                                    robust    cust.     Web         MN        FTP     UV   Zenoss
                                                                                                       ["]^
   ERP       OFBiz           BC                                     MO
                                     serv.    serv.     App                   Web
                                                                                      ST   Nuexo       Felix / Karaf
  B2B          ...           @A      Akka      Grails    ZK         JKL        ...                         Camel
                                                                                                        ServiceMix
                                                                                      R3   Activiti
                                     Scala         Groovy
  Portal       ...           >?                                     DEFGHI     ...
                                                                                           Apache       WXYZ
                                            Java                                      PQ     DS
                                                                                                         Openfire

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



           23          45         67           89             :;             <=

         Vim         Markdown Ant/mvn        Jenkins          Hg             Trac
         Eclipse     Docbook  sbt/gradle     (Hudson)         git
                     DITA     Artifactory    Selenium
                     Sphinx                  JMeter                                                   _*!"`a
       %&

More Related Content

What's hot

Data Mangling with mongoDB the Right Way [PyData London] 2016]
Data Mangling with mongoDB the Right Way [PyData London] 2016]Data Mangling with mongoDB the Right Way [PyData London] 2016]
Data Mangling with mongoDB the Right Way [PyData London] 2016]Alexander Hendorf
 
PythonでJWT生成からボット作成、投稿までやってみた
PythonでJWT生成からボット作成、投稿までやってみたPythonでJWT生成からボット作成、投稿までやってみた
PythonでJWT生成からボット作成、投稿までやってみたitoxdev
 
London XQuery Meetup: Querying the World (Web Scraping)
London XQuery Meetup: Querying the World (Web Scraping)London XQuery Meetup: Querying the World (Web Scraping)
London XQuery Meetup: Querying the World (Web Scraping)Dennis Knochenwefel
 
M04 mengelola strategi desain
M04 mengelola strategi desainM04 mengelola strategi desain
M04 mengelola strategi desainCoky Fauzi Alfi
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyAtsuki Yokota
 
The Security Risks of Web 2.0 - DEF CON 17
The Security Risks of Web 2.0 - DEF CON 17The Security Risks of Web 2.0 - DEF CON 17
The Security Risks of Web 2.0 - DEF CON 17Security Ninja
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10minIvelina Dimova
 
(Ab)Using the MetaCPAN API for Fun and Profit
(Ab)Using the MetaCPAN API for Fun and Profit(Ab)Using the MetaCPAN API for Fun and Profit
(Ab)Using the MetaCPAN API for Fun and ProfitOlaf Alders
 
Building Your First Widget
Building Your First WidgetBuilding Your First Widget
Building Your First WidgetChris Wilcoxson
 
IASP World Conference, 2005 Beijing, China
IASP World Conference, 2005 Beijing, ChinaIASP World Conference, 2005 Beijing, China
IASP World Conference, 2005 Beijing, ChinaIlkka Kakko
 
Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with ExtbaseJochen Rau
 
Connecting XForms to Databases: An Extension to the XForms Markup Language
Connecting XForms to Databases: An Extension to the XForms Markup LanguageConnecting XForms to Databases: An Extension to the XForms Markup Language
Connecting XForms to Databases: An Extension to the XForms Markup LanguageMarkku Laine
 
Slaying the Dragon: Implementing a Programming Language in Ruby
Slaying the Dragon: Implementing a Programming Language in RubySlaying the Dragon: Implementing a Programming Language in Ruby
Slaying the Dragon: Implementing a Programming Language in RubyJason Yeo Jie Shun
 
Sant Jordi
Sant Jordi Sant Jordi
Sant Jordi mpere334
 
Functional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipperFunctional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipperosfameron
 
PHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くためにPHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くためにYuya Takeyama
 
From Closed Silos to Collaborative Networks: Digital Impacts on Museums
From Closed Silos to Collaborative Networks: Digital Impacts on MuseumsFrom Closed Silos to Collaborative Networks: Digital Impacts on Museums
From Closed Silos to Collaborative Networks: Digital Impacts on MuseumsPeter Samis
 

What's hot (20)

Data Mangling with mongoDB the Right Way [PyData London] 2016]
Data Mangling with mongoDB the Right Way [PyData London] 2016]Data Mangling with mongoDB the Right Way [PyData London] 2016]
Data Mangling with mongoDB the Right Way [PyData London] 2016]
 
PythonでJWT生成からボット作成、投稿までやってみた
PythonでJWT生成からボット作成、投稿までやってみたPythonでJWT生成からボット作成、投稿までやってみた
PythonでJWT生成からボット作成、投稿までやってみた
 
London XQuery Meetup: Querying the World (Web Scraping)
London XQuery Meetup: Querying the World (Web Scraping)London XQuery Meetup: Querying the World (Web Scraping)
London XQuery Meetup: Querying the World (Web Scraping)
 
M04 mengelola strategi desain
M04 mengelola strategi desainM04 mengelola strategi desain
M04 mengelola strategi desain
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
 
The Security Risks of Web 2.0 - DEF CON 17
The Security Risks of Web 2.0 - DEF CON 17The Security Risks of Web 2.0 - DEF CON 17
The Security Risks of Web 2.0 - DEF CON 17
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10min
 
(Ab)Using the MetaCPAN API for Fun and Profit
(Ab)Using the MetaCPAN API for Fun and Profit(Ab)Using the MetaCPAN API for Fun and Profit
(Ab)Using the MetaCPAN API for Fun and Profit
 
JQuery Basics
JQuery BasicsJQuery Basics
JQuery Basics
 
Building Your First Widget
Building Your First WidgetBuilding Your First Widget
Building Your First Widget
 
Currículum Carmen Laviña
Currículum Carmen LaviñaCurrículum Carmen Laviña
Currículum Carmen Laviña
 
IASP World Conference, 2005 Beijing, China
IASP World Conference, 2005 Beijing, ChinaIASP World Conference, 2005 Beijing, China
IASP World Conference, 2005 Beijing, China
 
Get into the FLOW with Extbase
Get into the FLOW with ExtbaseGet into the FLOW with Extbase
Get into the FLOW with Extbase
 
Connecting XForms to Databases: An Extension to the XForms Markup Language
Connecting XForms to Databases: An Extension to the XForms Markup LanguageConnecting XForms to Databases: An Extension to the XForms Markup Language
Connecting XForms to Databases: An Extension to the XForms Markup Language
 
Theme verdadeiro
Theme verdadeiroTheme verdadeiro
Theme verdadeiro
 
Slaying the Dragon: Implementing a Programming Language in Ruby
Slaying the Dragon: Implementing a Programming Language in RubySlaying the Dragon: Implementing a Programming Language in Ruby
Slaying the Dragon: Implementing a Programming Language in Ruby
 
Sant Jordi
Sant Jordi Sant Jordi
Sant Jordi
 
Functional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipperFunctional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipper
 
PHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くためにPHPUnit でよりよくテストを書くために
PHPUnit でよりよくテストを書くために
 
From Closed Silos to Collaborative Networks: Digital Impacts on Museums
From Closed Silos to Collaborative Networks: Digital Impacts on MuseumsFrom Closed Silos to Collaborative Networks: Digital Impacts on Museums
From Closed Silos to Collaborative Networks: Digital Impacts on Museums
 

Similar to Tabledown

Programming Contest Hacks
Programming Contest HacksProgramming Contest Hacks
Programming Contest HacksKosei Moriyama
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceleinweber
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsMichael Pirnat
 
Happy Go Programming
Happy Go ProgrammingHappy Go Programming
Happy Go ProgrammingLin Yo-An
 
App과 Server의 은밀한 대화
App과 Server의 은밀한 대화App과 Server의 은밀한 대화
App과 Server의 은밀한 대화Rock Kang
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析Takahiro Inoue
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonAlex Payne
 
useR!2010 matome
useR!2010 matomeuseR!2010 matome
useR!2010 matomeybenjo
 
Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for CassandraEdward Capriolo
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"DataStax Academy
 
Intro oracle10gexpress
Intro oracle10gexpressIntro oracle10gexpress
Intro oracle10gexpressjatin Sareen
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardGeorg Sorst
 
Consul ou comment bien tirer sur l’élastique
 Consul ou comment bien tirer sur l’élastique Consul ou comment bien tirer sur l’élastique
Consul ou comment bien tirer sur l’élastiqueNicolas Ledez
 
Malli: inside data-driven schemas
Malli: inside data-driven schemasMalli: inside data-driven schemas
Malli: inside data-driven schemasMetosin Oy
 
Go Web Development
Go Web DevelopmentGo Web Development
Go Web DevelopmentCheng-Yi Yu
 
DBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちDBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちRyo Miyake
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたTaro Matsuzawa
 

Similar to Tabledown (20)

Programming Contest Hacks
Programming Contest HacksProgramming Contest Hacks
Programming Contest Hacks
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conference
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
 
Happy Go Programming
Happy Go ProgrammingHappy Go Programming
Happy Go Programming
 
App과 Server의 은밀한 대화
App과 Server의 은밀한 대화App과 Server의 은밀한 대화
App과 Server의 은밀한 대화
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析
 
Emerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the HorizonEmerging Languages: A Tour of the Horizon
Emerging Languages: A Tour of the Horizon
 
useR!2010 matome
useR!2010 matomeuseR!2010 matome
useR!2010 matome
 
Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for Cassandra
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
 
Czzawk
CzzawkCzzawk
Czzawk
 
Intro oracle10gexpress
Intro oracle10gexpressIntro oracle10gexpress
Intro oracle10gexpress
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
 
Couchdb
CouchdbCouchdb
Couchdb
 
How to eat Cucmber
How to eat CucmberHow to eat Cucmber
How to eat Cucmber
 
Consul ou comment bien tirer sur l’élastique
 Consul ou comment bien tirer sur l’élastique Consul ou comment bien tirer sur l’élastique
Consul ou comment bien tirer sur l’élastique
 
Malli: inside data-driven schemas
Malli: inside data-driven schemasMalli: inside data-driven schemas
Malli: inside data-driven schemas
 
Go Web Development
Go Web DevelopmentGo Web Development
Go Web Development
 
DBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちDBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たち
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
 

Tabledown

  • 1. Tabledown 2011 OSDC.TW @tcc / tcchou@tcchou.org
  • 2. Tabledown? • : Markdown • ( ) , Java , Python • google: tabledown
  • 3. About me C/C++ SI 5+ Perl Java Web SW 5- Python SD 5+ Groovy Scala
  • 5. - Tabledown • - • - ?
  • 6. • DIY, DRY • ... • OFBiz FLOSS! Apache! ?
  • 7. • FLOSS DATA FAIL! • , • , UI UX FAIL! • twill HTTP ( ) • scotch HTTP *.pickle • translate-recording-to-twill *.twill
  • 8. twill go http://localhost:8080/ofbizsetup/control/main fv 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 'jia@side.org' submit ( )
  • 9. : , , • • ... UX FAIL!
  • 10. , • ok • orz
  • 11. • : , • API: / • DSL: Groovy Builder/Slurper • Tabledown: Collections Collections Hash + List
  • 12. tabledown 1 { '_':['master','tasks'], { u'Sheet1': { 'master': { 'billing': u'yi', 'master':{ 'cust_pm': u'yi', 'id':['A^1',u' ID'], 'desc': '', 'name':['A^2',u' '], 'exec_pm': u'bing', 'desc':['A^3',u' '], 'id': '', 'billing':['A^4',u' '], 'name': u'PR001', 'cust_pm':['C^4',u' PM'], 'org': u'jia', 'org':['A^5',u' '], 'pg': u'wu,ji,geng', 'exec_pm':['C^5',u' PM'], 'sa': u'ding'}, 'sa':['E^5',u' '], 'tasks': [ { 'desc': '', 'pg':['G^5',u' '], 'est_bgn': '', }, 'est_end': '', 'tasks':{ 'id': '', '*':{ 'name': u'u8a55u4f30', 'id':['A1',u'ID'], 'sno': u'100', 'sno':['B1',u' '], 'type': u'P'}, 'type':['C1',u' '], { 'desc': '', 'name':['D1',u' '], 'est_bgn': u'2011-3-26', 'desc':['E1',u' '], 'est_end': u'2011-3-26', 'est_bgn':['F1',u' '], 'id': '', 'est_end':['G1',u' '], 'name': u'u8166u529bu6fc0u76ea', 'res':['H1',u' '], 'res': 'bing,ding,wu', }, 'sno': '', }, 'type': u'T'}, } ( )
  • 13. tabledown 2 from tabledown.tdxls import TDXls tdx = TDXls(conf) data = tdx.xls2dict(filename) tdx.dict2xls(data, filename)
  • 14. • REST, Web Service ... OFBiz • ... ! SOA FAIL! • Web App mechanize (Python, Perl, Ruby ... PHP )
  • 15. mechanize • • WWW::Mechanize • / (Ruby) • 10yr, 5yr • • twill • Beautiful Soup
  • 16. mechanize import mechanize br = mechanize.Browser() ... # create project dProject={'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)
  • 17. mechanize + BeatifulSoup Tabledown Web/ Python Services twill + scotch
  • 18. • OFBiz (Timesheet) → ♥ • • UX OK • (Task) • • •
  • 19. OFBiz
  • 20. Td • • ( ) • ? • ( ) • / , …
  • 21. ... ! • • ex: PM, • >> • , • ... ?
  • 22. SaaS, PaaS , IaaS ? • IaaS / / • > / > >
  • 23. IaaS ( ) • IaaS • > / > > • : • : • :
  • 24. • : , • : • : • : Socialtext Socailcalc Google Spreadsheet
  • 25. , • : , • : ( ), SFC • mechanize • UI FAIL?
  • 26. FAILs • DATA FAIL: • UX FAIL: , • SOA FAIL: Web App
  • 27. , , • ; ?? •♥ / ♥ $ £¥ ,
  • 28. 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/
  • 29. [ Tabledown ] Twitter: tcc tcchou@tcchou.org
  • 31. Option: 1 !"#$ '()* %&#$ +, -*!"./
  • 32. Option: 2 robust cust. Web MN FTP UV Zenoss ["]^ ERP OFBiz BC MO serv. serv. App Web ST Nuexo Felix / Karaf B2B ... @A Akka Grails ZK JKL ... Camel ServiceMix R3 Activiti Scala Groovy Portal ... >? DEFGHI ... Apache WXYZ Java PQ DS Openfire !"#$ '()* +,#$-./ +,#$-.0 +,#$-.1 23 45 67 89 :; <= Vim Markdown Ant/mvn Jenkins Hg Trac Eclipse Docbook sbt/gradle (Hudson) git DITA Artifactory Selenium Sphinx JMeter _*!"`a %&