SlideShare a Scribd company logo
1 of 21
Download to read offline
11/18/2008, 7PM
      django-nyc
      Will Larson

      An intermediate
      over view of useful
      features.




charting django
   (A map to avoiding that
  “Where is the bathroom?”
      “Under the sign.”
           “Oh.”
          feeling.)
qualifications
It’s all true. Damnit.




           • Spent last year as English teacher.
           • Last presentation was to 13 year olds.
           • People skills. Damn it.
This presentation is
geared towards


                      django roadmap
advanced beginners, who
want a guide to become
intermediate
Djangonauts.

I hate that term.



          • beginner - templates, views and urls
          • intermediate - why you’re listening to me
          • advanced - reusable applications

          <img src=“funnyPicture.png”>Cats? Kids?</img>
Everyone needs three projects in their


                      django experience
trip towards Django mastery.

Don’t be afraid to start over from
scratch. When you make decisions
with insufficient knowledge is like
trying to get into a building when you
don’t know how to open doors.
              Project a hole in               Concept         Status
You’ll probably have to blow
the wall, and even after you learn
about the door the hole is still going to
       GalleryProject
be there.
                                            gallery builder

             LifeFlow                        blog engine

     django-userskins user-specific skins
Almost all of this functionality
                     can be ignored, but by using it


• local_settings.py
                     your applications can be smaller,
                     more flexible, and much easier to
                     write.        easy to feign mastery
                     Moving from beginner to adept is

• fixtures            about increasing efficiency and
                     quality, not necessarily about
                     doing new things, but doing old
                     things better.


• template tags & filters
• management commands
• custom context
                                harder to feign mastery
• middleware
This is a common
convention, rather than
a feature.

It’s even harder to learn
convention than to learn
                          local_settings.py
features, because they’re
often undocumented.



           • some project settings are location specific
           • some are not
           • Don’t Repeat Yourself
           • => local_settings.py
settings.py




local_settings.py
local_settings.py in VC
• versioned:
 • settings.py
 • local_settings.py.template
 • kitchen sink
• not versioned:
 • local_settings.py
local_settings.py variant
                                       This is how I roll.

                                       Bringing settings
                                       inheritance to the weary
                                       developer/sys admin

• 2 + max(n,1) settings files           hybrid.




• settings.py
• local_settings.py (not in version control!)
• ???_settings.py (deploy, devel, staging, etc)
                                        local_settings.py
Can be used for initial and


              fixtures
                                  testing data, as well.

                                  I use fixtures to maintain a
                                  local copy of my blog, to
                                  extract data to run

• export and import data          statistics, and--sadly--I do
                                  use it for simple migrations.


• extremely poor man’s schema migration
                                 shell session
template tags & filters
        • Don’t Repeat Yourself for templates
You’ve probably used the
default templates and
filters before. They’re
good, but sometimes you
run into missing
functionality.

Time to roll your own.




        • use when justified
template filters
         myapp/templatetags/magic.py




                some_template.html
template tags, 1
• more powerful & complex than filters
                           Kevin t wittered about the “pyif”
                           templatetag. That’s a great example of
                              some_template.html
                           complex and powerful.

                           That’s because it’s mostly a wrapper
                           around the Python eval() function, i.e. it
                           is basically a templatetag that provides
                           direct access to the Python interpreter.

                           Model-View-Controller be damned, lets
                           throw the interpreter into the templates.
template tags, 2
                   monetize.py
management commands
• periodic or one-time commands
• great with cron                 This is your primary
                                  interface bet ween the
                                  shell and Django, along
                                  with:

                                  python manage.py shell
clean_revisions.py




  shell session
custom context              These really extend the usability
                                   of generic views by letting you
                                   inject arbitrary data into all
                                   templates (well, all templates

• manage global information        served by views that use
                                   RequestContext, which includes
                                   generic views).

• play nicely with generic views   Try to keep them light weight to
                                   avoid slowing down everything.

                                         settings.py
context.py
middleware
• four levers to defy Django physics
    • process_request        This is a totally inadequate
                             introduction to middleware, which are
                             one of the more nuanced features of

    • process_view           Django.

                             You could have a 30 minute talk that


    • process_response
                             solely focused on middleware and still
                             have questions left over and rocks
                             left unturned.


    • process_exception      This is a sketch of a sketch of a map,
                             but that’s all the time we have.
middleware.py




middleware.py
Visit my blog if you’re
         interested in reading
         about... stuff. Yeah, or don’t
         visit it. That’s cool too.

         What isn’t cool is how
         smilely faces look in
         Marker Felt.




• Irrational Exuberance @ http://lethain.com/
• django-monetize @ http://github.com/
  lethain/django-monetize/tree/master/

More Related Content

Viewers also liked

Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)
Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)
Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)theoaraujo
 
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...OMcareers Community
 
iDoc24 presentation Amsterdam ISTD 2010 public
iDoc24 presentation Amsterdam ISTD 2010 publiciDoc24 presentation Amsterdam ISTD 2010 public
iDoc24 presentation Amsterdam ISTD 2010 publicAlexander Börve
 
Fretten spreekbeurt
Fretten spreekbeurtFretten spreekbeurt
Fretten spreekbeurtbrickston
 
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norway
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, NorwayAIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norway
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norwaysmileyaika
 
Qualche considerazione sulla mobilità dei ricercatori INFN
Qualche considerazione sulla mobilità dei ricercatori INFNQualche considerazione sulla mobilità dei ricercatori INFN
Qualche considerazione sulla mobilità dei ricercatori INFNPaolo Valente
 
Kendel Avaya-Fabric connect - Demo Lab Guide - basic-1
Kendel   Avaya-Fabric connect - Demo Lab Guide - basic-1Kendel   Avaya-Fabric connect - Demo Lab Guide - basic-1
Kendel Avaya-Fabric connect - Demo Lab Guide - basic-1ELI KENDEL אלי קנדל
 
From Kalyani To Chillibreeze!
From Kalyani To  Chillibreeze!From Kalyani To  Chillibreeze!
From Kalyani To Chillibreeze!suresh.kalyani
 
Port royal market update sample
Port royal market update samplePort royal market update sample
Port royal market update samplemelanieharo
 
Scale Cloud across Enterprise
Scale Cloud across EnterpriseScale Cloud across Enterprise
Scale Cloud across EnterpriseChris Haddad
 
Le Vie D’Acqua
Le Vie D’AcquaLe Vie D’Acqua
Le Vie D’Acquajanaem
 
Prueba
PruebaPrueba
Pruebakirsej
 
The Globe And Facebook
The Globe And FacebookThe Globe And Facebook
The Globe And FacebookMathew Ingram
 
Pickme - Finding the Initial Team
Pickme - Finding the Initial TeamPickme - Finding the Initial Team
Pickme - Finding the Initial TeamFathhi Mohamed
 
Seeker [ehv3] Eindhoven
Seeker [ehv3] EindhovenSeeker [ehv3] Eindhoven
Seeker [ehv3] EindhovenTom Veeger
 
Paolo Valente per RN dei ricercatori INFN
Paolo Valente per RN dei ricercatori INFNPaolo Valente per RN dei ricercatori INFN
Paolo Valente per RN dei ricercatori INFNPaolo Valente
 

Viewers also liked (20)

Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)
Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)
Network Analysis Workshop - Review of Onnela & Reed-Tsochas (2010)
 
Check Point Command
Check Point CommandCheck Point Command
Check Point Command
 
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...
How International Startups Leverage Networks In Their Own Backyard Nasscom Fr...
 
iDoc24 presentation Amsterdam ISTD 2010 public
iDoc24 presentation Amsterdam ISTD 2010 publiciDoc24 presentation Amsterdam ISTD 2010 public
iDoc24 presentation Amsterdam ISTD 2010 public
 
Fretten spreekbeurt
Fretten spreekbeurtFretten spreekbeurt
Fretten spreekbeurt
 
Evidence
EvidenceEvidence
Evidence
 
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norway
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, NorwayAIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norway
AIESEC EE_MT internship in MarkIT_for Denmark, Sweden, Norway
 
Qualche considerazione sulla mobilità dei ricercatori INFN
Qualche considerazione sulla mobilità dei ricercatori INFNQualche considerazione sulla mobilità dei ricercatori INFN
Qualche considerazione sulla mobilità dei ricercatori INFN
 
Kendel Avaya-Fabric connect - Demo Lab Guide - basic-1
Kendel   Avaya-Fabric connect - Demo Lab Guide - basic-1Kendel   Avaya-Fabric connect - Demo Lab Guide - basic-1
Kendel Avaya-Fabric connect - Demo Lab Guide - basic-1
 
From Kalyani To Chillibreeze!
From Kalyani To  Chillibreeze!From Kalyani To  Chillibreeze!
From Kalyani To Chillibreeze!
 
UX Proposal
UX ProposalUX Proposal
UX Proposal
 
Port royal market update sample
Port royal market update samplePort royal market update sample
Port royal market update sample
 
Scale Cloud across Enterprise
Scale Cloud across EnterpriseScale Cloud across Enterprise
Scale Cloud across Enterprise
 
Le Vie D’Acqua
Le Vie D’AcquaLe Vie D’Acqua
Le Vie D’Acqua
 
Prueba
PruebaPrueba
Prueba
 
The Globe And Facebook
The Globe And FacebookThe Globe And Facebook
The Globe And Facebook
 
Pickme - Finding the Initial Team
Pickme - Finding the Initial TeamPickme - Finding the Initial Team
Pickme - Finding the Initial Team
 
Seeker [ehv3] Eindhoven
Seeker [ehv3] EindhovenSeeker [ehv3] Eindhoven
Seeker [ehv3] Eindhoven
 
Monogram Persalinan Normal
Monogram Persalinan NormalMonogram Persalinan Normal
Monogram Persalinan Normal
 
Paolo Valente per RN dei ricercatori INFN
Paolo Valente per RN dei ricercatori INFNPaolo Valente per RN dei ricercatori INFN
Paolo Valente per RN dei ricercatori INFN
 

Recently uploaded

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 

Recently uploaded (20)

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 

Charting Django

  • 1. 11/18/2008, 7PM django-nyc Will Larson An intermediate over view of useful features. charting django (A map to avoiding that “Where is the bathroom?” “Under the sign.” “Oh.” feeling.)
  • 2. qualifications It’s all true. Damnit. • Spent last year as English teacher. • Last presentation was to 13 year olds. • People skills. Damn it.
  • 3. This presentation is geared towards django roadmap advanced beginners, who want a guide to become intermediate Djangonauts. I hate that term. • beginner - templates, views and urls • intermediate - why you’re listening to me • advanced - reusable applications <img src=“funnyPicture.png”>Cats? Kids?</img>
  • 4. Everyone needs three projects in their django experience trip towards Django mastery. Don’t be afraid to start over from scratch. When you make decisions with insufficient knowledge is like trying to get into a building when you don’t know how to open doors. Project a hole in Concept Status You’ll probably have to blow the wall, and even after you learn about the door the hole is still going to GalleryProject be there. gallery builder LifeFlow blog engine django-userskins user-specific skins
  • 5. Almost all of this functionality can be ignored, but by using it • local_settings.py your applications can be smaller, more flexible, and much easier to write. easy to feign mastery Moving from beginner to adept is • fixtures about increasing efficiency and quality, not necessarily about doing new things, but doing old things better. • template tags & filters • management commands • custom context harder to feign mastery • middleware
  • 6. This is a common convention, rather than a feature. It’s even harder to learn convention than to learn local_settings.py features, because they’re often undocumented. • some project settings are location specific • some are not • Don’t Repeat Yourself • => local_settings.py
  • 8. local_settings.py in VC • versioned: • settings.py • local_settings.py.template • kitchen sink • not versioned: • local_settings.py
  • 9. local_settings.py variant This is how I roll. Bringing settings inheritance to the weary developer/sys admin • 2 + max(n,1) settings files hybrid. • settings.py • local_settings.py (not in version control!) • ???_settings.py (deploy, devel, staging, etc) local_settings.py
  • 10. Can be used for initial and fixtures testing data, as well. I use fixtures to maintain a local copy of my blog, to extract data to run • export and import data statistics, and--sadly--I do use it for simple migrations. • extremely poor man’s schema migration shell session
  • 11. template tags & filters • Don’t Repeat Yourself for templates You’ve probably used the default templates and filters before. They’re good, but sometimes you run into missing functionality. Time to roll your own. • use when justified
  • 12. template filters myapp/templatetags/magic.py some_template.html
  • 13. template tags, 1 • more powerful & complex than filters Kevin t wittered about the “pyif” templatetag. That’s a great example of some_template.html complex and powerful. That’s because it’s mostly a wrapper around the Python eval() function, i.e. it is basically a templatetag that provides direct access to the Python interpreter. Model-View-Controller be damned, lets throw the interpreter into the templates.
  • 14. template tags, 2 monetize.py
  • 15. management commands • periodic or one-time commands • great with cron This is your primary interface bet ween the shell and Django, along with: python manage.py shell
  • 17. custom context These really extend the usability of generic views by letting you inject arbitrary data into all templates (well, all templates • manage global information served by views that use RequestContext, which includes generic views). • play nicely with generic views Try to keep them light weight to avoid slowing down everything. settings.py
  • 19. middleware • four levers to defy Django physics • process_request This is a totally inadequate introduction to middleware, which are one of the more nuanced features of • process_view Django. You could have a 30 minute talk that • process_response solely focused on middleware and still have questions left over and rocks left unturned. • process_exception This is a sketch of a sketch of a map, but that’s all the time we have.
  • 21. Visit my blog if you’re interested in reading about... stuff. Yeah, or don’t visit it. That’s cool too. What isn’t cool is how smilely faces look in Marker Felt. • Irrational Exuberance @ http://lethain.com/ • django-monetize @ http://github.com/ lethain/django-monetize/tree/master/