azure best practices2
DESCRIPTION
TRANSCRIPT
![Page 1: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/1.jpg)
Windows Azure in the Real World: From Idea to Production in a Few Months
Jesus RodriguezTellago Studios, Inc
![Page 2: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/2.jpg)
About Me
• Co-Founder Tellago, Inc• Co-Founder Tellago Studios, Inc• Seat at the Board of a few software companies• Microsoft MVP• Microsoft Architect Advisor• Speaker, Autthor• http://jrodthoughts.com/ • http://weblogs.asp.net/gsusx/ • https://twitter.com/jrdothoughts
![Page 3: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/3.jpg)
About Today
• Windows Azure vs. the competition• What did we build?• Architecting, building and
operating large scale Windows Azure solutions in the real world: best practices & lessons learned
![Page 4: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/4.jpg)
How Real is this Real-World Talk?
![Page 6: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/6.jpg)
KidoZen: An Enterprise Mobile PaaS
Messaging Services
Connector Services
AppCenterStorage Services
HTML5 Hosted Apps
Security Services
Integration Services
SDKs
KidoZen
Your Datacenter
![Page 7: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/7.jpg)
KidoZen Capabilities
• Security– AD Authentication– Google ID
Authentication– Live ID
Authentication• Storage
– Object Storage– Logging– Configuration
• Integration– Queuing – Publish-Subscribe– Service Relay
• Messaging– SMS– Email– Push Notification
• Connectors– SharePoint– Exchange– SQL Server, Oracle– MongoDB– …
• IOS• Android• Windows
Phone • Windows 8• JavaScript• PhoneGap
• Mobile app provisioning
• Mobile app security management
• Mobile app backend magenement
• App analytics
• HTML5 application hosting
• HTML5 application deployment
Backend as a Service
Mobile SDKs
Enterprise App Center
Hosted HTML5
Apps
• Time Tracking
• Event Viewer• IIS Manager• Expense
Report
![Page 8: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/8.jpg)
How did we get here?
![Page 9: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/9.jpg)
Why Windows Azure?
![Page 10: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/10.jpg)
We Needed a PaaS Platform
![Page 11: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/11.jpg)
![Page 12: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/12.jpg)
Not So Fast…
![Page 13: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/13.jpg)
Why? Aren’t you using .NET and SQL
Server?
![Page 14: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/14.jpg)
Not Exactly
![Page 15: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/15.jpg)
The Candidates
![Page 16: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/16.jpg)
We Needed Rapid/Hot Application Deployment
![Page 17: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/17.jpg)
Rapid and Hot Application Deployment
![Page 18: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/18.jpg)
We Needed First Class Node.JS Support
![Page 19: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/19.jpg)
Node.JS Support
![Page 20: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/20.jpg)
We Needed an Identity Infrastructure
![Page 21: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/21.jpg)
Identity Services
![Page 22: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/22.jpg)
We Needed to be Able to Control the Hosting
Instances
![Page 23: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/23.jpg)
Open VMs
![Page 24: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/24.jpg)
We Needed Solid Support for Windows
![Page 25: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/25.jpg)
Windows Support
![Page 26: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/26.jpg)
We Needed a Cloud Service Virtualization
Technology
![Page 27: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/27.jpg)
Service Virtualization Technology
![Page 28: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/28.jpg)
No Vendor Lock In
![Page 29: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/29.jpg)
No Vendor Lock In
![Page 30: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/30.jpg)
Integration With Test Tools and Frameworks
![Page 31: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/31.jpg)
Cloud Testing
![Page 32: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/32.jpg)
And The Winner Is…
![Page 33: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/33.jpg)
![Page 34: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/34.jpg)
Why Windows Azure?
• Support for both IaaS and PaaS models• Great development toolset• Global footprint• Phenomenal NodeJS experience• Some really unique technologies
• Windows Azure Active Directory• Windows Azure Service Bus
![Page 35: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/35.jpg)
What did we learn?
![Page 36: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/36.jpg)
Lesson Learned: If you are going to build for the
cloud….design for the cloud
![Page 37: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/37.jpg)
Building Blocks….
![Page 38: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/38.jpg)
Storage
![Page 39: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/39.jpg)
A few options available
![Page 40: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/40.jpg)
SQL AzureTable Service Blob Storage
HDInsight Service (Hadoop)
![Page 41: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/41.jpg)
A few observations…
![Page 42: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/42.jpg)
Mobile data == semi-structured data
![Page 43: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/43.jpg)
Blob storage is awesome….but for
binaries
![Page 44: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/44.jpg)
Table service is useless: doesn’t support any
serious queries, slow, doesn’t support indexes
![Page 45: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/45.jpg)
SQL Azure is great for rows and columns but…It doesn’t support JSONAnd it’s not optimal for
large databases
![Page 46: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/46.jpg)
HDInsight Service is not ready for primetime
![Page 47: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/47.jpg)
That sucks….Now what?
![Page 48: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/48.jpg)
Azure
MongoDB
![Page 49: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/49.jpg)
MongoDB on Windows Azure
• Two deployment models– Virtual Machines– Worker Roles
• Support for multiple Oss• Native toolset
![Page 50: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/50.jpg)
KidoZen MongoDB Scalable Topology in Windows Azure
Shards and mongos (router) hosted on Windows Azure worker roles or virtual machines
Key range A-B
Primary
Secondary
Secondary
Key range B-C
Primary
Secondary
Secondary
Key range C-D
Primary
Secondary
Secondary
Key range D-E
Primary
Secondary
Secondary
Mongos (router)
KidoZen Storage, Logging,
Configuration APIs
![Page 51: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/51.jpg)
Tons of challenges…
![Page 52: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/52.jpg)
Scaling?
![Page 53: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/53.jpg)
Monitoring?
![Page 54: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/54.jpg)
Monitoring: Mongo Monitoring Service(MMS)
![Page 55: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/55.jpg)
Backup?
![Page 56: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/56.jpg)
Effective Data Backup
MongoDB
MongoDB
MongoDB
MongoDB
Backup Process
Blob Storage Blob Storage
Data Center 1 Data Center 2
![Page 57: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/57.jpg)
Lesson Learned: In Windows Azure Storage:
VMs== Control== Flexibility == Operational
Headaches
![Page 58: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/58.jpg)
Service APIs
![Page 59: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/59.jpg)
Requirement: Optimized for concurrency, Rapid
provisioning, Deep HTTP Support, Easy
Deployment, Portability
![Page 60: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/60.jpg)
Welcome
![Page 61: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/61.jpg)
Native integration with Windows Azure:
var azure = require('azure');
![Page 62: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/62.jpg)
Native support in Web Matrix
![Page 63: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/63.jpg)
Challenges?
![Page 64: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/64.jpg)
Testing?
![Page 65: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/65.jpg)
expresso to the resqueexports['test String#length'] = function(beforeExit, assert) { assert.equal(6, 'foobar'.length); };
![Page 66: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/66.jpg)
HOW ARE YOU DOING?Create a status or health
endpoint.process.memoryprocess.uptime
process.pidconnections
proc: cpu microtime
![Page 67: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/67.jpg)
Integration with your corporate assets
![Page 68: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/68.jpg)
Requirement: Integrate your enterprise mobile
apps on-premise systems
![Page 69: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/69.jpg)
Introducing the Windows Azure Service Bus
![Page 70: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/70.jpg)
Windows Azure SB
Service Relay Queues Topics
Your Datacenter
Azure SB
![Page 71: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/71.jpg)
Tenant Provisioning and Management
![Page 72: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/72.jpg)
Requirement: Provision and scale tenants
dynamically
![Page 73: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/73.jpg)
Dedicated
Instance
Tenant
Tenant
Tenant
Tenant
Tenant
Tenant
Tenant
Tenant
Tenant
Share Instance
![Page 74: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/74.jpg)
Provision Tenant
Provision VM
Provision Storage
Provision Services
Configure Load Balancers
Provision SB Namespace
![Page 75: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/75.jpg)
Leverage Windows Azure Management APIs
![Page 76: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/76.jpg)
Automate tenant provision and management
![Page 77: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/77.jpg)
Performance
![Page 78: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/78.jpg)
Requirement: Process data and messages close
to the consumer
![Page 79: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/79.jpg)
Leverage Windows Azure Content Delivery Network
![Page 80: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/80.jpg)
Consider geo-routing technologies
![Page 81: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/81.jpg)
Windows Azure Traffic Manager has been in
perpetual beta
![Page 82: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/82.jpg)
Introducing Dyn
![Page 83: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/83.jpg)
Development Practices
![Page 84: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/84.jpg)
Requirement: Achieve development agility in
the cloud
![Page 85: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/85.jpg)
Test in the cloud: Emulators are for babies
![Page 86: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/86.jpg)
Deploy Regularly
![Page 87: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/87.jpg)
Version Everything
![Page 88: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/88.jpg)
Security Practices
![Page 89: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/89.jpg)
Requirement: Secure every byte that flows through the platform.
Federate with different identity providers
![Page 90: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/90.jpg)
Window Azure Active Directory is AWESOME
(conceptually) and PAINFUL(Operationally)
![Page 91: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/91.jpg)
Leverage Windows Azure Connect to create virtual
private networks
![Page 92: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/92.jpg)
Operational Practices
![Page 93: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/93.jpg)
Backup Everything
![Page 94: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/94.jpg)
Plan for disaster
![Page 95: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/95.jpg)
![Page 96: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/96.jpg)
![Page 97: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/97.jpg)
Monitor everything
![Page 98: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/98.jpg)
Cost-based architecture
![Page 99: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/99.jpg)
The results?
![Page 100: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/100.jpg)
KidoZen
• Operating in 6 data centers• 700+ production deployments• Survived two major outages• ~1TB tracking data• 60 compute instances
![Page 101: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/101.jpg)
What’s next?
![Page 102: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/102.jpg)
KidoZen
• Leverage HDInsight service for analytics • Leverage Media Services for video and pictures storage• Integrate with Skydrive for data synchronization • Use Workflow Manager for internal business processes
![Page 103: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/103.jpg)
Summary
• Windows Azure IaaS and PaaS capabilities present a great offering for building large scale cloud applications
• If you are building for the cloud, design for the cloud• Think outside the box, Windows Azure is great but not
enough• Consider cost • Start small, iterate
![Page 104: Azure best practices2](https://reader038.vdocuments.mx/reader038/viewer/2022110302/5491ecbab479591a7b8b4661/html5/thumbnails/104.jpg)
http://www.tellagostudios.com http://jrodthoughts.com
http://twitter.com/#!/jrodthoughtshttp://weblogs.asp.net/gsusx