SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Djangocon Presentation
Bruce Kroeze & Chris Moffitt  
     September 6th, 2008
Discussion Topics

    • Introduction and history
 
    • Unique Features
 
    • Large Project Issues
 
    • The Future 
Satchmo ­ The Beginning

Excerpt from the initial post: 

       quot;I know some people have started (or have completed) work on their 
        own stores.  Is there any framework out there that I can leverage or 
        do I have to quot;roll my own?quot;  I think it would be a great thing for this 
        community to create a store framework.  The Django pluses I 
        mentioned would be awesome in a complete solution.  I think it 
        would also attract a lot of users to the project. Is there interest or 
        any activity in this area?  I'm willing to hack through by myself but I 
        think if there's anyone that is an expert, we could move through this 
        a lot more quickly.quot;
 
       ­ Django Users Posting by Chris Moffitt April 12, 2006 
What's in a name?


 
 
    Googling for 'quot;too commercialquot; jazz' turns this up: 
    http://www.redhotjazz.com/louie.html 
    It's Louie quot;Satchmoquot; Armstrong.  I could go for Armstrong, but I think 
        quot;Satchmoquot; is cooler. 
    ­ jmj 

       Posted by Jeremy Jones on April 14th, 2006
What is Satchmo?
     • Django­based framework for developing unique and highly 
       customized ecommerce sites
  
     • Designed for developers that have a unique store need 
  
     • Supported by over 570 people in Satchmo­users Google Group
  
     • Deployed to 9 known production sites & more in development

     • Translated into multiple languages
  
     • Preparing for it's 1.0 release!
Satchmo Features
                             •
 • Template driven               Multiple shops­per­instance 
                             •   Multiple discount options
 • Multiple payment 
                             •   Wishlists
   gateways 
                             •   Full account management 
 • Custom shipping modules
 • Custom payment modules        options
                             •   PDF invoice & shipping 
 • UPS, FedEx integration
 • Downloadable,                 documents
                             •   Automatic image 
   subscription & custom 
                                 thumbnails 
   products
                             •   Modular newsletters
 • Gift certificates 
                             •
 • Tax & VAT                     Strong internationalization 
                                 and localization



                  And Much More ...
Components
                           Middleware
Applications (core)        •   quot;threaded_multihost.middleware.ThreadLocalMiddlewarequot;,  
'satchmo.caching',              quot;satchmo.shop.SSLMiddleware.SSLRedirectquot;,    
                               quot;satchmo.recentlist.middleware.RecentProductMiddlewarequot;
'satchmo.configuration',
'satchmo.shop',
'satchmo.contact',         Context Processors
'satchmo.product',         •   'satchmo.recentlist.context_processors.recent_products',  
                                 'satchmo.shop.context_processors.settings',
'satchmo.shipping‘,
'satchmo.payment',
                           Applications (non­core)
'satchmo.discount',
                            'satchmo.shipping.modules.tiered‘
'satchmo.supplier',
'satchmo.thumbnail',         'satchmo.newsletter',    
'satchmo.l10n',              'satchmo.feeds',
'satchmo.tax‘,               'satchmo.giftcertificate',
‘satchmo.productrating’      'satchmo.recentlist',
                             'satchmo.wishlist',
                             'satchmo.upsell',
Unique Features ­ Custom Shipping
Satchmo supports many shipping 
modules but the real power is in 
the flexibility to create your own.




 Scenario ­ You have a small retail presence and would like to 
 allow people within 20 miles of your store to stop by and pick up 
 the purchase instead of spending money for shipping
   
 Solution ­ Create your own shipping module to determine how 
 far the address is from your shipping point. 

 Bonus – Use Google Map’s API to do it!
Creating a Custom Shipping Module
Steps to create a your quot;local pickupquot; shipping module:
 
  1. Make a new directory somewhere. Ex: mysite.localpickup
  2. Copy in the boilerplate from satchmo.shipping.modules.per.
  3. Only two files of interest:  config.py and shipper.py
  4. config.py uses another Satchmo feature, the configuration 
     system, and defines the custom variables used by this 
     shipper.
  5. shipper.py uses a standard quot;walks like a duckquot; Python 
     interface for handling shipping calculations.
Local Pickup Shipper Code ­ Boilerplate
from django.utils.translation import ugettext, ugettext_lazy
from satchmo.configuration import config_value
_ = ugettext_lazy
from satchmo.shipping.modules.base import BaseShipper
from geopy import geocoders
from geopy import distance
from satchmo.shop.models import Config

class Shipper(BaseShipper):
  id = quot;LocalPickupquot;

       def __str__(self):
         quot;quot;quot;
         This is mainly helpful for debugging purposes
         quot;quot;quot;
         return quot;Local Pickupquot;
       def description(self):
         quot;quot;quot;
         A basic description that will be displayed to the user when selecting their shipping options
         quot;quot;quot;
         return _(quot;Local Pickupquot;)

  def cost(self):
     quot;quot;quot;
     Complex calculations can be done here as long as the return value is a dollar figure
     quot;quot;quot;
     fee = config_value('SHIPPING', 'LOCAL_PICKUP_FEE')
     return fee
 def method(self):
     quot;quot;quot;
     Describes the actual delivery service (Mail, FedEx, DHL, UPS, etc)
     quot;quot;quot;
     return _(quot;Local Pickupquot;)      
    
Local Pickup Shipper Code ­ Workhorse
       def expectedDelivery(self):
         quot;quot;quot;
         Can be a plain string or complex calculation returning an actual date
         quot;quot;quot;
         return _(quot;5 Hoursquot;)

       def valid(self):
         quot;quot;quot;
         Can do complex validation about whether or not this option is valid.
         quot;quot;quot;
         return self._destination_is_local()

       def _destination_is_local(self):
         store_config = Config.objects.get_current()
         store_add= uquot;%s, %squot; % (store_config.street1, store_config.postal_code)
         customer_add = uquot;%s, %squot; % (self.contact.billing_address.street1,
                                            self.contact.billing_address.postal_code)
         api_key = config_value('SHIPPING', 'GOOGLE_API_KEY')
         g = geocoders.Google(api_key)
         _, store = g.geocode(store_add)
         _, dest = g.geocode(customer_add)
         dist = distance.distance(store, dest).miles
         return(dist < config_value('SHIPPING','LOCAL_PICKUP_DISTANCE'))       
    
Local Pickup Config Code
from django.utils.translation import ugettext_lazy as _
from satchmo.configuration import *
SHIP_MODULES = config_get('SHIPPING', 'MODULES')
SHIP_MODULES.add_choice(('satchmo.shipping.modules.localpickup', _('Local Pickup')))

SHIPPING_GROUP = config_get_group('SHIPPING')
config_register_list(

    DecimalValue(SHIPPING_GROUP,
      'LOCAL_PICKUP_FEE',
      description=_(quot;Pickup Feequot;),
      requires=SHIP_MODULES,
      requiresvalue='satchmo.shipping.modules.localpickup',
      default=quot;5.00quot;),

    DecimalValue(SHIPPING_GROUP,
      'LOCAL_PICKUP_DISTANCE',
      description=_(quot;Radius for local pickupquot;),
      requires=SHIP_MODULES,
      requiresvalue='satchmo.shipping.modules.localpickup',
      default=quot;10.0quot;),

    StringValue(SHIPPING_GROUP,
       'GOOGLE_API_KEY',
       description=_(quot;Google Maps API Keyquot;),
       help_text=_(quot;Google API Keyquot;),
       requires=SHIP_MODULES,
       requiresvalue='satchmo.shipping.modules.localpickup',
       default=quot;quot;),
)
Enabling the Local Pickup Module
In the site's settings.py, we have a dictionary for Satchmo settings.  
Add the module as an option there, and it will get picked up as an 
allowable shipper.
 
    SATCHMO_SETTINGS = {
      # ... skipping the other settings here
      CUSTOM_SHIPPING_MODULES = ['mysite.localpickup'] }

Then, you would activate the newly built shipping module at your site 
settings page usually “mysite.com/settings/quot;  

That's also where you would configure:
–  Maximum distance
–  Google API key
–  Fee
Configuring the Local Pickup Module
Unique Feature ­ Configuration
Why?

– Updating configuration files isn’t always practical

– We got tired of always having to make backwards incompatible 
  notes just to add a new feature  

– The Shop object got to be a dumping ground and it was a hassle.

– Configuration app is aware of prerequisites, so you don't see 
  sections which aren't applicable to you.  No UPS on your store, then 
  no need to have all that data in the db.

– Very fast, heavily cached access to all config variables.
Unique Feature ­ Caching
Why?

­ Able to cache a None object, and know that they weren't 
cache misses.

­ A consistent design patterns for cache application.

­ Caching stats and resets from the app itself.
Unique Feature – Payment Modules


•  Satchmo’s payment module design supports 
     a broad range of payment processors:

  –  URL posting and response ­ Authorize.net

  –  Full XML message creation and response – Cybersource
     • Utilize full power of Django templates for XML message creation
     • Elementree for simple parsing of data

  –   Complex site redirection/posting – Google Checkout, Paypal
     • Uses custom views to manage the process

  –  Custom interface via libraries – TrustCommerce via Tclink
Signal Usage in Satchmo
We currently have 13 signals in the base Satchmo.

quot;satchmo_order_successquot; and quot;satchmo_cart_changedquot; are 
the two most heavily used.

The use of signals allowed us to remove circular dependencies, 
clear up responsibilities, and make the whole thing much more 
understandable.

We'll be adding many more as we grow to support better 
integration.
Real­World Signal Usage
Loyalty Card Creation
Scenario:  Develop a site for a customer who wishes to sell 
“loyalty cards” which offer a 10% discount, each have a unique 
code, and automatically expire in 1 year.

Approach:  Listen for “order_success” signal, look through cart 
for loyalty cards, create a unique discount code for each one 
found, email the code to the user and to the fulfillment house, 
update order notes with loyalty card code.

Total time to implement with testing: 1.5 hours.
Real­World Signal Usage
Custom Tiered Pricing
Scenario:  Develop a site for a customer 
who has two classes of users, each of 
which see and pay different prices for 
products.

Approach:  Listen for “satchmo_price_query” signal.  Look up 
user from threadlocals.  If user is part of special group, look up 
discount for that group, apply to current price, and return 
modified price.  

Total time to implement with testing: 2 hours.
Integrating with other
Django Apps ­ Banjo
Scenario: Customer wants to have a
Blog integrated with their store.

Django App Used: Banjo

Interesting bits:
  •  Blog entries can be integrated onto the homepage

  •  Entries can be tagged so that they show related products

  •  Blog remote­posting interface can be used to edit/maintain
     pages instead of the manual “flatpages” app.
Steps to Integrate Banjo

 Add requirements to INSTALLED_APPS 
  and CONTEXT_PROCESSORS
   
 Make a custom templatetag library
  which looks up related products using 
  the tags attached to the blog entry.  
  Put this in the local “site” app.

 Override the Satchmo base_index.html template and the 
  Banjo blog/view_post.html template.
Big vs. Small 
The Endless Debate
Should Satchmo be:

­A single app

­Focused on small stores

­Capable of supporting thousands of products

­Easily integrated with other “Enterprise” apps

­Heavily “instrumented” for reporting that some stores need
Big vs. Small 
The Working Philosophy
Satchmo will remain usable standalone.
Core development is driven by real sites.

We appreciate contributions providing new functionality if they:

­ have tests
­ have documentation (sadly rare)
­ are optional
­ don’t require modification of basic functionality or addition of 
special cases
­ need new signals (we’ll add them if they make sense)

It is simply amazing how far signals + templatetags will get you.
Documentation

We strive to emulate Django’s documentation example.

ReStructured text for all the documents

Sphinx for presenting them nicely

Use built in admin docs functionality

The biggest challenge is providing the right level of 
documentation to help newbies as well as experienced devs
The Future

• Stabilizing on Django 1.0 
   – YEAH!

• Improving the documentation around extensibility

• Improved product model

• More customization of the admin interface
The Future ­ Product Models

• Current product model has some limitations
–   Not straightforward to extend
–   Tend to proliferate a lot of different model types
–   Lots of special case checking throughout the code
–   Doesn’t take full advantage of inheritance and generic foreign keys

• Future model
– Create a design that is easily extensible for unique shops
– Clean interface to other sections of the code
– Support just about any product that could be sold on the web
The Future ­ Admin

New Admin Features in the works:

Order Manager:
­Multi­tab interface
­Modify orders, adjust discounts, add notes, set status, add 
order items, change quantities, mark manual payments

Product Manager:
­Built to handle thousands of products & variations
­Integrated assignment of categories
­Importing and Exporting of product lists to common formats

Reporting – we need some!
The Future ­ External Apps

XMLRPC interface

  ­Use Satchmo as backend to Flash store

  ­Desktop product manager

  ­Desktop reporting

JSON interface

  ­AIR/Google/Yahoo/OSX store status widgets
Questions ?

Contenu connexe

Tendances

OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
Yi-Ting Cheng
 
Yearning jQuery
Yearning jQueryYearning jQuery
Yearning jQuery
Remy Sharp
 
Dependency Management with RequireJS
Dependency Management with RequireJSDependency Management with RequireJS
Dependency Management with RequireJS
Aaronius
 
Zf2 how arrays will save your project
Zf2   how arrays will save your projectZf2   how arrays will save your project
Zf2 how arrays will save your project
Michelangelo van Dam
 

Tendances (20)

OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
 
Yearning jQuery
Yearning jQueryYearning jQuery
Yearning jQuery
 
WCLV13 JavaScript
WCLV13 JavaScriptWCLV13 JavaScript
WCLV13 JavaScript
 
Symfony 1, mi viejo amigo
Symfony 1, mi viejo amigoSymfony 1, mi viejo amigo
Symfony 1, mi viejo amigo
 
Best Practices for Magento Debugging
Best Practices for Magento Debugging Best Practices for Magento Debugging
Best Practices for Magento Debugging
 
Angularjs
AngularjsAngularjs
Angularjs
 
Creating GUI Component APIs in Angular and Web Components
Creating GUI Component APIs in Angular and Web ComponentsCreating GUI Component APIs in Angular and Web Components
Creating GUI Component APIs in Angular and Web Components
 
AngularJS Directives
AngularJS DirectivesAngularJS Directives
AngularJS Directives
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
Gae
GaeGae
Gae
 
Creating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web ComponentsCreating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web Components
 
Dependency Management with RequireJS
Dependency Management with RequireJSDependency Management with RequireJS
Dependency Management with RequireJS
 
Building Potent WordPress Websites
Building Potent WordPress WebsitesBuilding Potent WordPress Websites
Building Potent WordPress Websites
 
HTML::FormHandler
HTML::FormHandlerHTML::FormHandler
HTML::FormHandler
 
Images and PWA in magento
Images and PWA in magentoImages and PWA in magento
Images and PWA in magento
 
Zf2 how arrays will save your project
Zf2   how arrays will save your projectZf2   how arrays will save your project
Zf2 how arrays will save your project
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
Progressive What Apps?
Progressive What Apps?Progressive What Apps?
Progressive What Apps?
 
WordPress and Ajax
WordPress and AjaxWordPress and Ajax
WordPress and Ajax
 
Turn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesTurn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modules
 

Similaire à Satchmo

Private slideshow
Private slideshowPrivate slideshow
Private slideshow
sblackman
 
Wide Open Spaces Using My Sql As A Web Mapping Service Backend
Wide Open Spaces Using My Sql As A Web Mapping Service BackendWide Open Spaces Using My Sql As A Web Mapping Service Backend
Wide Open Spaces Using My Sql As A Web Mapping Service Backend
MySQLConference
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter
nicdev
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentation
railsconf
 
Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2
Byrne Reese
 

Similaire à Satchmo (20)

More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
 
Smarty
SmartySmarty
Smarty
 
Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009Blueprint talk at Open Hackday London 2009
Blueprint talk at Open Hackday London 2009
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Introduce cucumber
Introduce cucumberIntroduce cucumber
Introduce cucumber
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Neil Patel - What You Need to be Measuring and How to Do It
Neil Patel - What You Need to be Measuring and How to Do ItNeil Patel - What You Need to be Measuring and How to Do It
Neil Patel - What You Need to be Measuring and How to Do It
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)
 
What's New in ZF 1.10
What's New in ZF 1.10What's New in ZF 1.10
What's New in ZF 1.10
 
Private slideshow
Private slideshowPrivate slideshow
Private slideshow
 
GWT
GWTGWT
GWT
 
Wide Open Spaces Using My Sql As A Web Mapping Service Backend
Wide Open Spaces Using My Sql As A Web Mapping Service BackendWide Open Spaces Using My Sql As A Web Mapping Service Backend
Wide Open Spaces Using My Sql As A Web Mapping Service Backend
 
From jQuery to App Store in 30 Minutes
From jQuery to App Store in 30 MinutesFrom jQuery to App Store in 30 Minutes
From jQuery to App Store in 30 Minutes
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application Framework
 
Ten modules I haven't yet talked about
Ten modules I haven't yet talked aboutTen modules I haven't yet talked about
Ten modules I haven't yet talked about
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentation
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2Hacking Movable Type Training - Day 2
Hacking Movable Type Training - Day 2
 

Plus de DjangoCon2008

Plus de DjangoCon2008 (6)

Why I Hate Django
Why I Hate DjangoWhy I Hate Django
Why I Hate Django
 
Pinax
PinaxPinax
Pinax
 
Reusable Apps
Reusable AppsReusable Apps
Reusable Apps
 
What’S New In Newforms Admin
What’S New In Newforms AdminWhat’S New In Newforms Admin
What’S New In Newforms Admin
 
High Performance Django 1
High Performance Django 1High Performance Django 1
High Performance Django 1
 
High Performance Django
High Performance DjangoHigh Performance Django
High Performance Django
 

Dernier

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

Satchmo