EuroPython 2011 - How to build complex web applications having fun?
-
Upload
andrew-mleczko -
Category
Technology
-
view
7.338 -
download
1
description
Transcript of EuroPython 2011 - How to build complex web applications having fun?
![Page 1: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/1.jpg)
How to build complex
web applications having fun?
How to build complex
web applications having fun?
How to build complex
web applications having fun?
![Page 2: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/2.jpg)
Andrew MleczkoSoftware Integrator
Ferrara (Italy)
twitter: amleczko
author
![Page 3: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/3.jpg)
the team
![Page 4: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/4.jpg)
WHY this talk?
![Page 5: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/5.jpg)
My Reasons to be here
★ Building complex web
applications could be fun
★ Architectural decisions are
more important than you
think
★ Promote
and
![Page 6: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/6.jpg)
★ among the top 2% of all open source projects worldwide
★ more than 340 active core developers
★ developed since 2001
★ version 4.1 released 12 days ago
![Page 7: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/7.jpg)
![Page 8: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/8.jpg)
★ available in more than 40 languages
★ the best security track record of any major CMS
![Page 9: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/9.jpg)
powered
![Page 10: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/10.jpg)
the growing community
![Page 11: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/11.jpg)
![Page 12: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/12.jpg)
![Page 13: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/13.jpg)
SMALL “Roughly 5000 lines of code”
![Page 14: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/14.jpg)
SMALL
FAST
“Roughly 5000 lines of code”
![Page 15: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/15.jpg)
SMALL
FAST
STABLE
“Roughly 5000 lines of code”
![Page 16: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/16.jpg)
SMALL
TESTED
FAST
STABLE
“Roughly 5000 lines of code”
“100% statement coverage via unit and
integration tests”
![Page 17: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/17.jpg)
SMALL
DOCUMENTED
TESTED
FAST
STABLE
“Roughly 5000 lines of code”
“100% statement coverage via unit and
integration tests”
“Literally nothingin Pyramid
is undocumented”
![Page 18: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/18.jpg)
The Bad story
![Page 19: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/19.jpg)
The Customer
★ Large public sectore
entity
★ > 1000 employees
★ Needs a complex intranet
★ Deadline: 2 years
![Page 20: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/20.jpg)
The Team
![Page 21: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/21.jpg)
The Team★ Mixed roles:
Tester
Developer
Project manager
Software architect
★ No development philosophy
![Page 22: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/22.jpg)
technology★ Temptation to be on the
technological edge
★ The Learning Curve Effect
everything is a “prototype”
★ Technical design debt is...
... more then average
![Page 23: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/23.jpg)
bad dec i s ions★ Project manager as
Software architect as
Tester
★ Technology didn't
fit in
★ no fun at all
![Page 24: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/24.jpg)
The Good Story
![Page 25: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/25.jpg)
The Customer
★ .
★ Born as a startup
★ Offices in Miami,
New York and Los Angeles
![Page 26: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/26.jpg)
Water today
★ U.S. - the largest consumer market for
bottled water in the world
★ in 2011, the market is forecast to have a
value of $86,421.2 billion
“Bottled water has become the second largest commercial beverage category”
![Page 27: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/27.jpg)
![Page 28: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/28.jpg)
![Page 29: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/29.jpg)
project requirements
![Page 30: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/30.jpg)
![Page 31: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/31.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
![Page 32: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/32.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Customer’s management (satisfaction, order status, etc.)
★ Reports (machine statistics, etc.)
★ Campaigns
![Page 33: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/33.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Sales network management
★ Invoicing / accountancy
★ Revenue counter
★ Discount management
![Page 34: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/34.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Catalog management
★ Warehouse management
★ Logistic tracking
![Page 35: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/35.jpg)
★ Online shop (for beverages and accessories)
★ Machine configurator (interactive wizard)
★ Online payments
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
![Page 36: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/36.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Machine maintenance (filter change)
★ Emergency services
★ Order / installation process
![Page 37: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/37.jpg)
paperless saleCRM
Sales
1
2
3
4
5
Warehouse
E-commerce
Support
★ Machine maintenance (filter change)
★ Emergency services
★ Order / installation process
![Page 38: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/38.jpg)
Support
CRM
Sales
Warehouse
E-commerce
paperless sale
![Page 39: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/39.jpg)
Support
CRM
Sales
Warehouse
E-commerce
Intranet Extranet
paperless sale
![Page 40: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/40.jpg)
Totally paperless ERP
![Page 41: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/41.jpg)
project gotchas
![Page 42: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/42.jpg)
project gotchas
★ Requirements are not rock solid
(it’s a startup) - project will grow with the customer
★ Customer is in U.S. - planning
regular meetings is essential
★ We need to find proper (new?)
framework
★ Only 5 months to delivery
![Page 43: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/43.jpg)
project background
![Page 44: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/44.jpg)
The DEV TEAM★ Software architect
★ database design
★ integration layer (data,
authentication)
★ Developers
★ Plone team
★ Pyramid team
![Page 45: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/45.jpg)
★ Prototyping - the good way
★ Collecting specification and
keeping docs up-to-date
★ Software development having
fun
![Page 46: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/46.jpg)
Arch i tectural dec i s ions
![Page 47: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/47.jpg)
a n d
![Page 48: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/48.jpg)
★ architecture is not so far away
from Zope
★ it supports SQLAlchemy out
of the box
★ great documentation and
active community
★ add’s some fresh air to your
architecture
why ?
![Page 49: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/49.jpg)
★ Pyramid CRUD
★ Multi-upload widget
★ Metric units widget
★ Autocomplete widget
★ Multi-relation widget
★ ... and more
★ 75% jQuery code
why ?
![Page 50: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/50.jpg)
why ?
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
![Page 51: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/51.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 52: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/52.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 53: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/53.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 54: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/54.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 55: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/55.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 56: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/56.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 57: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/57.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 58: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/58.jpg)
★ Poi
★ Diazo
★ LinguaPlone
★ PloneFormGen
★ The Best CMS
★ Enterprise ready
★ 1595 addons (and counting...)
on plone.org/products
why ?
![Page 59: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/59.jpg)
Integrat ion
![Page 60: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/60.jpg)
PostgreSQL
aeterna.models
SQ LA l chemy
![Page 61: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/61.jpg)
auth storage
au then t i c a t ion - au thor iza t ionR
eque
st
PostgreSQL
repoze.who
pas.plugins.sa
![Page 62: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/62.jpg)
auth storage
au then t i c a t ion - au thor iza t ion
★ users
★ groups
★ roles
PostgreSQL
single-sign-on
★ plone.session
★ repoze.who.plugins.auth_tkt
mod_auth_tkt
![Page 63: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/63.jpg)
bu i l dout
[intranet-plone]
recipe = plone.recipe.zope2instance
eggs =
${intranet-plone:eggs} aeterna.models
[intranet-pyramid]
recipe = zc.recipe.egg
eggs =
${intranet-pyramid:eggs} aeterna.models
![Page 64: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/64.jpg)
intranetextranet
T he b ig p i c ture
PostgreSQL
ZODB
Apa
che
repoze.who
pas.plugins.sa
beaker
![Page 65: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/65.jpg)
why not other compet i tors?
![Page 66: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/66.jpg)
django: no!★ less code more magic
★ not so flexible
(specification is growing)
★ using SQLAlchemy
could be tricky
![Page 67: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/67.jpg)
drupal : no!★ security problems
(370 CVE entries)
★ integration is more
difficult
(PHP vs. Python)
★ missing features -
workflow, complex ACL, etc.
![Page 68: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/68.jpg)
openerp : hmm★ quite complex: CRM, sales,
accounting and much more
★ not enough time
to fully investigate it
![Page 69: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/69.jpg)
What matters
![Page 70: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/70.jpg)
Proper Tools
![Page 71: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/71.jpg)
Proper ROLES
![Page 72: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/72.jpg)
What's next?
![Page 73: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/73.jpg)
Pyramid CRUD
★ started from Sergey Volobuev
Kelpie (repoze.bfg crud prototype)
★ using SQLAlchemy, Formalchemy
and fa.jquery
★ known as pyramid_formalchemy
![Page 74: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/74.jpg)
★ what is accomplished:
★ events hooks
★ view and action customizations
★ i18n support
★ autocomplete widget
★ paster templates
★ plans:
★ fanstatic integration
Sprint summary
![Page 75: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/75.jpg)
>>> $ pip install pyramid_formalchemy
>>> $ paster create -t pyramid_fa myapp
pa s t er t emp la t e
more details:http://blog.redturtle.it/redturtle-blog/pyramid-crud-sprint-summary
![Page 76: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/76.jpg)
★ sprinters:
★ Gaël Pasgrimaud [gawel]
★ Patrick Gerken [do3cc]
★ Me [amleczko]
★ new version of:
★ pyramid_formalchemy 0.4
★ fa.jquery 0.9.4
Sprint summary
![Page 77: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/77.jpg)
Quest ions?
![Page 78: EuroPython 2011 - How to build complex web applications having fun?](https://reader034.fdocuments.in/reader034/viewer/2022051609/545c37b9af7959c8098b46cd/html5/thumbnails/78.jpg)
★ http://flickr.com/photos/mleczko
★ http://www.melaiphone.com/
★ http://static.iphoneitalia.com
★ http://www.theapplelounge.com
★ http://www.nonconvenzionale.com
★ http://craziestgadgets.com/
★ http://obsessivelystitching.blogspot.com/
★ http://theclockblog.blogspot.com/
★ http://www.scatoladeigiochi.altervista.org/
★ http://wallpapers.brothersoft.com/
★ www.prisionerodelpixel.com
★ http://jawaexpress.com/
★ http://mikehenneke.mvourtown.com/
★ http://android-apps.com/
Credits