SlideShare a Scribd company logo
PHP to Python:
No Regrets
The Grass Is Always Greener




                                Alex Ezell
                                  Emma
                              July 31, 2011
the on e on th e left.
Hi, I’m
The bloodiest wars in history
 have been religious wars.
               -Richard M. Nixon
Why did we change?
          How did we change?
  Would I do it all again?
          What did we learn?
Why did we change?
Change Is What We Do
Big, Hairy Ass Goals

 Rewrite the platform incrementally
 Provide a world-class customer API
 Reexamine every tool
 Quadruple the tech team
 Lead instead of follow
Opportunity
Major push from the business for new features more
often and the freedom to make that happen
Team growth
Stability and agreement in other areas: infrastructure,
strategic planning, etc.
Developer desire - we simply wanted more.
Necessity with regards to current codebase
Code Unity / Management
Lots of background, server processes managing parts
of our application. Desire for code in background
processes to more closely resemble application code
Threading, decoupling, and queueing.
Third-party mailer integration.
Several small teams working on a single project.
Modernizing Our Toolset

Homegrown PHP Web Framework -> Django
PEAR_DB -> SQLAlchemy
Apache -> WSGI
No Testing/Docs -> nose and Sphinx
CVS Update -> Fabric Deploys of Git Repo
Why Python?
Maturity and capability
Ease of use / Powerful / Low learning curve
Rapid development
Future of the technology
Ecosystem of tools
How did we change?
Revolution or Evolution?
 Stop for a full rewrite and not have something
 compelling when you reboot
 No new features while the rewrite occurs
 Inability to really beta test new stuff
 Fairly entrenched customer base
 Competition is innovating quickly
Service API
Scalability, Speed, Fault-tolerant, Easy Deployment
Collection of Python WSGI Apps
Delayed processes, log readers, and queue consumers
New structure for all business logic
Smaller, tighter codebase - Easier to build on
Public API is just a wrapper
Heavy use of Redis
Module Fiesta
                   accounts
   tantuclient                     tantu
                 audience
queueworkers                          jumper
                     dbsession

         logparser               graffiti
Learn the Python Ecosystem
      Fabric==1.1.2           meld3==0.6.7
       Jinja2==2.5.5           nose==1.0.0
     Pygments==1.4         paramiko==1.7.7.1
   SQLAlchemy==0.7.0        psycopg2==2.4.1
      Sphinx==1.0.7           pycrypto==2.3
     Tempita==0.5.1            redis==2.0.0
       WebOb==1.0            requests==0.5.0
     WebTest==1.2.2         setproctitle==1.1
      coverage==3.4        supervisor==3.0a10
    decorator==3.3.1          wsgiref==0.1.2
    distribute==0.6.16   yoyo-migrations==4.1.0
       docutils==0.7
Testing! Testing! Testing!

 nose, WebOb, WebTest
 Rapid iteration
 Distributed team
 No testing of the Django app piece
Session Handling

Let PHP continue to handle session authentication
Teach Python how to read/write PHP serialization using
Scott Hurring’s code: http://hurring.com/scott/code/
python/serialize/
Django has built-in memcache support, so we make
PHP save sessions in memcache
Gotta Get That Data

PEAR_DB handled all queries and the database
connection with hand-written SQL
Moving to multi-database, sharded model - handle
connections seamlessly
Handle different types of encoding seamlessly
Rewrite all queries in SQLAlchemy from straight SQL
PHP to Python with No Regrets
PHP to Python with No Regrets
The Campaign Edit Example

2600 lines of code to 700
Exact same functionality including some additional stuff
Number of database queries stayed close to the same
Very Javascript heavy, so changes might not be as
extensive as other sections
PHP to Python with No Regrets
PHP to Python with No Regrets
What did we learn?
What We Learned
We don’t really need a web framework
Django is awesome, so is Flask, so is WSGI
git is invaluable for distributed teams on big projects
Easy deployment is vital
Data encoding sucks and is hard
Timezone handling sucks and is hard
What We Learned
PHP frameworks (CakePHP and Symfony) have come
a long way and are on par with Django
The shift to sqlalchemy has provided lots of challenges
Django template parsing can be slow in certain
situations
Hiring Python developers can be tough, especially in
Nashville
Juggling multiple systems is fraught with danger
What We Learned
Incremental rewrites are technically more difficult
Starting from scratch would have left us lost in the
marketplace
Many of our problems had nothing to do with language
choice or tools or frameworks
Learning a New Language
Porting is bad
Bad habits are easy to break in Python, though not
unavoidable
Python’s interactive interpreter makes tinkering easy
Every developer learns in unique ways and at different
rates
Reading great code
Would I do it all again?
www.wordle.net
Positives
 Codebase is becoming more standardized
 Developer energy is high
 Features we have implemented have turned out well
 and been easy to add functionality to
 Python’s standard library offers powerful, quality add-
 on modules for free
 Developers we have hired have been able to contribute
 quickly and be impactful
Many of us crucify ourselves
between two thieves - regret for
the past and fear of the future.
                  - Fulton Oursler
We’re Launching It Sept.
1
Contact Me


 Email: alex@myemma.com
 Twitter: @aezellisdead or @emmaemailtech
We Are Hiring at Emma
Happy Hour Tonight at Eddie
George’s Grill from 6-8pm
http://myemma.com/tech-jobs/
Email: alex@myemma.com
Twitter: @aezellisdead or
@emmaemailtech
Photo Credits

Nixon - BusinessWeek: http://images.businessweek.com/ss/07/04/0426_dow/
source/5.htm

Change - http://www.flickr.com/photos/spursfan_ace/2328879637/

Kofi Annan - http://www.gambianow.com/news/Open-Forum/Have-Your-Say/
Many_Give_Annan_High_Marks_as_UN_Chief_Despite_Flaws.html

Butterflies - http://21stcenturylearning.typepad.com/blog/2009/01/why-
change.html

Sad boy - http://www.psychologytoday.com/blog/ulterior-motives/200806/will-i-
regret-it-in-the-morning-how-about-when-im-64

More Related Content

What's hot (19)

PDF
Lets Go - An introduction to Google's Go Programming Language
Ganesh Samarthyam
 
PDF
Go language presentation
paramisoft
 
PDF
Code rippa
Benjamin Tan
 
PPT
Introduction to Go programming
Exotel
 
PPTX
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
PDF
PHP Files: An Introduction
Jacques Woodcock
 
PDF
Livecode widget course
crazyaxe
 
PPTX
Go Language presentation
Gh-Mohammed Eldadah
 
PDF
The PHP Renaissance
All Things Open
 
PDF
Happy hacking with Plone
Makina Corpus
 
PDF
Running a Plone product on Substance D
Makina Corpus
 
PDF
Emscripten - compile your C/C++ to JavaScript
穎睿 梁
 
PDF
The GNOME way - What can we learn from and within the Open Documentation World
Radina Matic
 
PDF
Golang 101
宇 傅
 
PPTX
difference between c c++ c#
Sireesh K
 
PPTX
Ruby programming
Kartik Kalpande Patil
 
PDF
Solving Localization Challenges with Design Pattern Automation
PostSharp Technologies
 
PPTX
Future of PERL in IT
Nexiilabs
 
PDF
An introduction to programming in Go
David Robert Camargo de Campos
 
Lets Go - An introduction to Google's Go Programming Language
Ganesh Samarthyam
 
Go language presentation
paramisoft
 
Code rippa
Benjamin Tan
 
Introduction to Go programming
Exotel
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
John Anderson
 
PHP Files: An Introduction
Jacques Woodcock
 
Livecode widget course
crazyaxe
 
Go Language presentation
Gh-Mohammed Eldadah
 
The PHP Renaissance
All Things Open
 
Happy hacking with Plone
Makina Corpus
 
Running a Plone product on Substance D
Makina Corpus
 
Emscripten - compile your C/C++ to JavaScript
穎睿 梁
 
The GNOME way - What can we learn from and within the Open Documentation World
Radina Matic
 
Golang 101
宇 傅
 
difference between c c++ c#
Sireesh K
 
Ruby programming
Kartik Kalpande Patil
 
Solving Localization Challenges with Design Pattern Automation
PostSharp Technologies
 
Future of PERL in IT
Nexiilabs
 
An introduction to programming in Go
David Robert Camargo de Campos
 

Viewers also liked (20)

PPTX
Basic .Net Training in Hyderabad
Ugs8008
 
PPTX
presentation on Unix basic by prince kumar kushwhaha
Rustamji Institute of Technology
 
PDF
Python Programming - II. The Basics
Ranel Padon
 
PPT
Introduction To Unix
CTIN
 
PPTX
Python Basics
primeteacher32
 
PPTX
visual basic .net
ronald_a_go
 
DOCX
Unix operating system
midhunjose4u
 
PPTX
Java vs .net (beginners)
Ravi Vishwakarma
 
PPT
Basic 50 linus command
MAGNA COLLEGE OF ENGINEERING
 
PPS
VISUAL BASIC .net data accesss vii
argusacademy
 
PPTX
Comparison of Programming Platforms
Anup Hariharan Nair
 
PPTX
Android vs ios System Architecture in OS perspective
Raj Pratim Bhattacharya
 
PPTX
Unix slideshare
Mohan Krishna Kona
 
PPTX
Android Vs iOS
Vaibhav Tomar
 
PPTX
Introduction to Python Basics Programming
Collaboration Technologies
 
PPT
Difference between Java and c#
Sagar Pednekar
 
PPTX
Introduction to .NET Framework and C# (English)
Vangos Pterneas
 
PDF
Why Java Sucks and C# Rocks (Final)
jeffz
 
PPT
.NET Framework Overview
Doncho Minkov
 
PPTX
Unix OS & Commands
Mohit Belwal
 
Basic .Net Training in Hyderabad
Ugs8008
 
presentation on Unix basic by prince kumar kushwhaha
Rustamji Institute of Technology
 
Python Programming - II. The Basics
Ranel Padon
 
Introduction To Unix
CTIN
 
Python Basics
primeteacher32
 
visual basic .net
ronald_a_go
 
Unix operating system
midhunjose4u
 
Java vs .net (beginners)
Ravi Vishwakarma
 
Basic 50 linus command
MAGNA COLLEGE OF ENGINEERING
 
VISUAL BASIC .net data accesss vii
argusacademy
 
Comparison of Programming Platforms
Anup Hariharan Nair
 
Android vs ios System Architecture in OS perspective
Raj Pratim Bhattacharya
 
Unix slideshare
Mohan Krishna Kona
 
Android Vs iOS
Vaibhav Tomar
 
Introduction to Python Basics Programming
Collaboration Technologies
 
Difference between Java and c#
Sagar Pednekar
 
Introduction to .NET Framework and C# (English)
Vangos Pterneas
 
Why Java Sucks and C# Rocks (Final)
jeffz
 
.NET Framework Overview
Doncho Minkov
 
Unix OS & Commands
Mohit Belwal
 
Ad

Similar to PHP to Python with No Regrets (20)

PDF
Алексей Петров "PHP at Scale: Knowing enough to be dangerous!"
Fwdays
 
ODP
Dev ops
Eslam El Husseiny
 
PPTX
XPDays Ukraine: Legacy
Victor_Cr
 
PPTX
Intro to Perfect - LA presentation
Tim Taplin
 
PPTX
Performance Tuning with XHProf
Salesforce Engineering
 
PDF
PHP 4? OMG! A small vademecum for obsolete software migration.
Francesco Fullone
 
PPTX
Generative AI in CSharp with Semantic Kernel.pptx
Alon Fliess
 
PPTX
Dev Ops for systems of record - Talk at Agile Australia 2015
Mirco Hering
 
PPTX
The Medusa Project
Rahul Dé
 
PDF
Python and Zope: An introduction (May 2004)
Kiran Jonnalagadda
 
ODP
PhpSpec: practical introduction
Dave Hulbert
 
PDF
DevOps The Cultural revolution
Somenath Ghosh
 
PDF
Holistic JavaScript Performance
jeresig
 
ODP
Jared Whitlock Open Source In The Enterprise Plone @ Novell
Vincenzo Barone
 
PPT
scale_perf_best_practices
webuploader
 
PDF
Introduction to Python
Spotle.ai
 
PPTX
10 practices that every developer needs to start right now
Caleb Jenkins
 
PDF
The Rise of the DataOps - Dataiku - J On the Beach 2016
Dataiku
 
DOCX
dhiraj_ghavate
dhiraj ghavate
 
PPTX
best source to learn python
NaveenJindal20
 
Алексей Петров "PHP at Scale: Knowing enough to be dangerous!"
Fwdays
 
XPDays Ukraine: Legacy
Victor_Cr
 
Intro to Perfect - LA presentation
Tim Taplin
 
Performance Tuning with XHProf
Salesforce Engineering
 
PHP 4? OMG! A small vademecum for obsolete software migration.
Francesco Fullone
 
Generative AI in CSharp with Semantic Kernel.pptx
Alon Fliess
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Mirco Hering
 
The Medusa Project
Rahul Dé
 
Python and Zope: An introduction (May 2004)
Kiran Jonnalagadda
 
PhpSpec: practical introduction
Dave Hulbert
 
DevOps The Cultural revolution
Somenath Ghosh
 
Holistic JavaScript Performance
jeresig
 
Jared Whitlock Open Source In The Enterprise Plone @ Novell
Vincenzo Barone
 
scale_perf_best_practices
webuploader
 
Introduction to Python
Spotle.ai
 
10 practices that every developer needs to start right now
Caleb Jenkins
 
The Rise of the DataOps - Dataiku - J On the Beach 2016
Dataiku
 
dhiraj_ghavate
dhiraj ghavate
 
best source to learn python
NaveenJindal20
 
Ad

Recently uploaded (20)

PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Peak of Data & AI Encore AI-Enhanced Workflows for the Real World
Safe Software
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 

PHP to Python with No Regrets

  • 1. PHP to Python: No Regrets The Grass Is Always Greener Alex Ezell Emma July 31, 2011
  • 2. the on e on th e left. Hi, I’m
  • 3. The bloodiest wars in history have been religious wars. -Richard M. Nixon
  • 4. Why did we change? How did we change? Would I do it all again? What did we learn?
  • 5. Why did we change?
  • 7. Big, Hairy Ass Goals Rewrite the platform incrementally Provide a world-class customer API Reexamine every tool Quadruple the tech team Lead instead of follow
  • 8. Opportunity Major push from the business for new features more often and the freedom to make that happen Team growth Stability and agreement in other areas: infrastructure, strategic planning, etc. Developer desire - we simply wanted more. Necessity with regards to current codebase
  • 9. Code Unity / Management Lots of background, server processes managing parts of our application. Desire for code in background processes to more closely resemble application code Threading, decoupling, and queueing. Third-party mailer integration. Several small teams working on a single project.
  • 10. Modernizing Our Toolset Homegrown PHP Web Framework -> Django PEAR_DB -> SQLAlchemy Apache -> WSGI No Testing/Docs -> nose and Sphinx CVS Update -> Fabric Deploys of Git Repo
  • 11. Why Python? Maturity and capability Ease of use / Powerful / Low learning curve Rapid development Future of the technology Ecosystem of tools
  • 12. How did we change?
  • 13. Revolution or Evolution? Stop for a full rewrite and not have something compelling when you reboot No new features while the rewrite occurs Inability to really beta test new stuff Fairly entrenched customer base Competition is innovating quickly
  • 14. Service API Scalability, Speed, Fault-tolerant, Easy Deployment Collection of Python WSGI Apps Delayed processes, log readers, and queue consumers New structure for all business logic Smaller, tighter codebase - Easier to build on Public API is just a wrapper Heavy use of Redis
  • 15. Module Fiesta accounts tantuclient tantu audience queueworkers jumper dbsession logparser graffiti
  • 16. Learn the Python Ecosystem Fabric==1.1.2 meld3==0.6.7 Jinja2==2.5.5 nose==1.0.0 Pygments==1.4 paramiko==1.7.7.1 SQLAlchemy==0.7.0 psycopg2==2.4.1 Sphinx==1.0.7 pycrypto==2.3 Tempita==0.5.1 redis==2.0.0 WebOb==1.0 requests==0.5.0 WebTest==1.2.2 setproctitle==1.1 coverage==3.4 supervisor==3.0a10 decorator==3.3.1 wsgiref==0.1.2 distribute==0.6.16 yoyo-migrations==4.1.0 docutils==0.7
  • 17. Testing! Testing! Testing! nose, WebOb, WebTest Rapid iteration Distributed team No testing of the Django app piece
  • 18. Session Handling Let PHP continue to handle session authentication Teach Python how to read/write PHP serialization using Scott Hurring’s code: http://hurring.com/scott/code/ python/serialize/ Django has built-in memcache support, so we make PHP save sessions in memcache
  • 19. Gotta Get That Data PEAR_DB handled all queries and the database connection with hand-written SQL Moving to multi-database, sharded model - handle connections seamlessly Handle different types of encoding seamlessly Rewrite all queries in SQLAlchemy from straight SQL
  • 22. The Campaign Edit Example 2600 lines of code to 700 Exact same functionality including some additional stuff Number of database queries stayed close to the same Very Javascript heavy, so changes might not be as extensive as other sections
  • 25. What did we learn?
  • 26. What We Learned We don’t really need a web framework Django is awesome, so is Flask, so is WSGI git is invaluable for distributed teams on big projects Easy deployment is vital Data encoding sucks and is hard Timezone handling sucks and is hard
  • 27. What We Learned PHP frameworks (CakePHP and Symfony) have come a long way and are on par with Django The shift to sqlalchemy has provided lots of challenges Django template parsing can be slow in certain situations Hiring Python developers can be tough, especially in Nashville Juggling multiple systems is fraught with danger
  • 28. What We Learned Incremental rewrites are technically more difficult Starting from scratch would have left us lost in the marketplace Many of our problems had nothing to do with language choice or tools or frameworks
  • 29. Learning a New Language Porting is bad Bad habits are easy to break in Python, though not unavoidable Python’s interactive interpreter makes tinkering easy Every developer learns in unique ways and at different rates Reading great code
  • 30. Would I do it all again?
  • 32. Positives Codebase is becoming more standardized Developer energy is high Features we have implemented have turned out well and been easy to add functionality to Python’s standard library offers powerful, quality add- on modules for free Developers we have hired have been able to contribute quickly and be impactful
  • 33. Many of us crucify ourselves between two thieves - regret for the past and fear of the future. - Fulton Oursler
  • 35. Contact Me Email: [email protected] Twitter: @aezellisdead or @emmaemailtech
  • 36. We Are Hiring at Emma Happy Hour Tonight at Eddie George’s Grill from 6-8pm http://myemma.com/tech-jobs/ Email: [email protected] Twitter: @aezellisdead or @emmaemailtech
  • 37. Photo Credits Nixon - BusinessWeek: http://images.businessweek.com/ss/07/04/0426_dow/ source/5.htm Change - http://www.flickr.com/photos/spursfan_ace/2328879637/ Kofi Annan - http://www.gambianow.com/news/Open-Forum/Have-Your-Say/ Many_Give_Annan_High_Marks_as_UN_Chief_Despite_Flaws.html Butterflies - http://21stcenturylearning.typepad.com/blog/2009/01/why- change.html Sad boy - http://www.psychologytoday.com/blog/ulterior-motives/200806/will-i- regret-it-in-the-morning-how-about-when-im-64

Editor's Notes

  • #2: - while there will be some comparison of languages, this isn’t a talk about which language is better, it’s more about why we chose to switch from PHP to Python\n\n
  • #3: Name, Title, Experience?\n
  • #4: - because knowledge is power, I know more about this than you know about that\n- because success begets success, why change what you’re good at?\n- because language, even computer language, is a very personal human construct\n
  • #5: 4 topics for the preso\n
  • #6: \n
  • #7: - software development, especially web, is centered around change\n- business health demands change, mostly growth, but also strategic\n- personal growth demands change, not necessarily language, but new challenges\n
  • #8: \n
  • #9: - Looking at a complete rewrite of code for PHP 5/6 compliance\n- Current framework was showing its age: older templating system, older database access layer, maintenance was becoming a chore, adding new features was really difficult\n
  • #10: - yes, php can run from the command line -- environment, database connection, etc.\n- python is more general purpose from its inception\n- reuse code in scripts\n- threading in mailer processes, yay!\n
  • #11: - evaluation really began with looking at available Frameworks\n- What’s the most mature and can be used right now?\n- What has some capabilities to change where we might need change?\n- Who has a favorite framework? Name the thing you like most about it.\n
  • #12: - maturity/capability - who’s using it now? will it integrate with our other tools (database)?\n- use/learning - can we learn it? do we want to?\n- django’s user base is growing exponentially\n- python’s standard library - lots of quality modules\n\n
  • #13: Talk about timeline\n
  • #14: - tipping point where retrofit changes sides\n
  • #15: \n
  • #16: \n
  • #17: \n
  • #18: \n
  • #19: - added some code to the session stuff\n- wanted to pave the way for Django user management, because it’s nice\n
  • #20: - multi-database needs to shift on the fly\n- special encoding types: Latin 1, ASCII, Unicode\n- speed of sqlalchemy or the Django ORM - objects vs. arrays\n- writing queries was a big learning curve\n
  • #21: PHP response. Lots of tables. Many queries. Bad structure forcing bad code.\n
  • #22: sqlalchemy version of the same query. Better database structure begets better code.\n
  • #23: - code includes html, db access, javascript, everything\n- queries are interesting because they don’t change much and might actually be more code\n
  • #24: \n
  • #25: \n
  • #26: \n
  • #27: - do something: internal tools, one-off fun project\n- direction: concurrency, speed, etc.\n
  • #28: \n
  • #29: \n
  • #30: - bad habits: brute force loops vs. generators\n
  • #31: \n
  • #32: \n
  • #33: \n
  • #34: \n
  • #35: \n
  • #36: \n
  • #37: \n
  • #38: \n