Your SlideShare is downloading. ×
0
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Use of django at jolt online v3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Use of django at jolt online v3

841

Published on

Talk on Python Ireland 14th April 2010

Talk on Python Ireland 14th April 2010

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
841
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • This presentation will explain some techniques and highlights on the use of Django (and related stuff) on our day-to-day operations on Jolt Online.
  • Jolt is making browser games like Legends of Zork, Utopia Kingdoms or Playboy Manager. Our actual main programming languages are Python and Ruby. We make extensive use of Django and Ruby on Rails.
  • Currently there is a campaign ongoing in the US for stores. There distributing promotional codes that will give advantages for the users registering them. Each code is unique, and it's related to the store. To keep track of the distribution of codes, and to encourage the stores to distribute them, we have develop a system to show the actual performance of the stores and make some rankings. The presentation explains some techniques using in this project. The project is made in Django, of course.
  • Basic configuration of the production environment.
  • Some ways of using Django that are not the usual ones.
  • Django not always has to server templates or text files. It can generate CSV files using the Python standard library. StringIO is a ”fake file”. You can use it like a file and then get the information with .get_value()
  • Django can also return binary data, in this case, a chart generated by reportlabs
  • Using XML-RPC, you can allow remote function calls to Python code. The functions are accessible to any language with a XML-RPC library. On Jolt we use it to access the application mostly from Ruby code (Legends of Zork is made with Ruby on Rails).
  • Some useful techniques to work with the database using Django tools. Photo: http://everystockphoto.com/photo.php?imageId=1310754
  • You can define a fixture with the defined data to include on the database. Management command loaddata will load fixtures in the app/fixtures directory (no need for complete path) The data can also be dumped from the database: python manage.py dumpdata --format=json myapp > /path/to/myapp/fixtures/initial_data.json If the fixture is called initial_data.sjon, it will be loaed after create the database with syncdb. Initial data can be created with Django shell command and then dumped. Very useful in development!
  • That will allow to run the script using Django settings Also django-extensions allows the use of jobs and scheduled jobs.
  • You can use those stand-alone scripts to perform operations on the database not directly linked to the web application, like calculate periodically statistics or other data.
  • The Django ORM is really good, but it's slow for some big scale operations.
  • Example. Retail campaign. Generate millions promotional codes and insert on the database. Generation was really fast (just 9 random characters) Generation and insertion into database using Django ORM takes about 3 hours As we generate using a web interface, that will lead to create some actualization, progress bar, syncronization, etc to show the user the progress. That is not trivial to achieve.
  • Solution: Generate an SQL insert script (text file) Time to insert the codes < 3 minutes (1.5 writing file and 1.5 inserting into database) The user can wait that amount of time just with a ”This operation can take a few minutes” message. That simplifies the application. From time to time the best options it to keep using SQL
  • Other tools used on the deployment and use of the applications on production.
  • The staging server has the same environment, but is not serving to the public. Virtual Environment allow to create a controlled environment, without having to depend on the machine for the python setup. Fabric help in the deployment in an automated way git gets the proper version of the code to be deployed
  • Isolated environment Generate script with all the Python packages you need for your application installed through easy_install Django 1.1 or other specific version Django-debug-toolbar Django-extensions … Use source virtualenv/bin/activate to change shell or user virtualenv/bin/python interpreter
  • Executes remote commands using ssh Simplify a lot of maintenance operations and repetitive work. Avoids errors. The code should behave differently on a production deployment than on a development deployment (e.g, using a file only on production)
  • Example of the output of the execution of fabric command (simplified) We use also Capistrano (similar concept in Ruby)
  • It's great even for using it on a personal project, as it encourages frequents commits and branching, something that in other SCMs is difficult. The use of git is difficult and takes time to undestand its philosophy, but it's worth it
  • Git helps in making a lot of commits, each one with a particular step. You can search the commits and get back to any point The merging is easy (merging in SVN is risky). It is also much easier to generate new (small) branches with features and merge them into master (or trunk). Avoids the ”don't send your changes yet!” scenario. It's much complex, SVN is easier to use. Most of the difficulties (and advantages) comes from being distributed (e.g. There is no such thing as a central repository)
  • The current schema on Jolt to production follows roughly the one on http://nvie.com/git-model
  • This presentation will be available on my personal blog, www.wrongsideofmemphis.wordpress.com
  • Thanks for the attention! Photos from MorgueFile
  • Transcript

    • 1. THE USE OF AT J AIME B UELTA [email_address]
    • 2. Presentaci'on de Jolt Online
    • 3. Overview de retail campaign
    • 4.  
    • 5. ATYPICAL
    • 6. <ul><ul><li>csv_file = StringIO()
    • 7. output_file = csv.writer(csv_file,
    • 8. dialect=csv.excel)
    • 9. output_file.writerow([ 'Time UTC' ,
    • 10. datetime.datetime.utcnow()])
    • 11. output_file.writerow([ 'Column1' , 'Column2' ]) output_file.writerows(
    • 12. (value, '{0}%' .format(value/total * 100 ))
    • 13. for value in data)
    • 14. return HttpResponse(csv_file.getvalue(), 'text/csv' ) </li></ul></ul>
    • 15. <ul><ul><li>from drawing_char import LineChart
    • 16. # Instance Do fancy stuff
    • 17. d = LineChart(WIDTH, HEIGTH)
    • 18. # Data is just a list of values
    • 19. d.char.data = ( 1.2 , 2.3 , 4.5 )
    • 20. # X axis labels
    • 21. d.chart.categoryAxis.categoryNames=( 't1' , 't2' , 't3' )
    • 22. binary = d.asString( 'png' )
    • 23. return HttpResponse(binary, 'image/png' ) </li></ul></ul>
    • 24. C/C++
    • 25. DATABASE WORK
    • 26. FIXTURES
    • 27. <ul># Setup environment for Django ORM from django.conf import settings import os from codecs import ignore_errors if 'DJANGO_SETTINGS_MODULE' not in os.environ: os.environ[ 'DJANGO_SETTINGS_MODULE '] = 'settings' </ul>
    • 28. CALCULATE DATA
    • 29. MAINTENANCE AND CLEANING
    • 30. IMPORT DATA
    • 31. ORM PROBLEMS
    • 32. GENERATE MILLIONS OF PROMOCODES TIME > 3 HOURS
    • 33. CREATE & LOAD SQL SCRIPT TIME < 3 MIN
    • 34. OTHER TOOLS
    • 35. PRODUCTION STAGING Fabric virtenv virtenv
    • 36. VIRTUAL ENVIRONMENT
    • 37. FABRIC <ul>def deploy(): ''' Update the project from the GIT repository to stable code. ''' with cd(git_dir): run( 'git reset --hard HEAD^' ) run( 'git pull origin master' ) run( 'git checkout master' ) _print_branch( 'master' , env.role) sudo( '/etc/init.d/cherokee restart' ) </ul>
    • 38. FABRIC <ul>$ fab -i key.pem production deploy [prod.com:22] run: git reset --hard HEAD [prod.com:22] out: HEAD is now at 15e6333 Merge branch 'master' of ssh://gitserver/services [prod.com:22] run: git pull origin master [prod.com:22] err: From origin:/services [prod.com:22] err: * branch master -> FETCH_HEAD [prod.com:22] out: Already up-to-date. [prod.com:22] run: git checkout master [prod.com:22] err: Already on 'master' ################################################# ## Using branch MASTER on PRODUCTION server ## ################################################# [prod.com:22] sudo: /etc/init.d/cherokee restart [prod.com:22] out: Stopping web server: cherokee . [prod.com:22] out: Starting web server: cherokee . </ul>
    • 39. COORDINATION WITH git
    • 40. git VS SubVersion Frequent commits Branching and merging Complex
    • 41. git <ul><li>Version control
    • 42. Cooperation with other developers and help deploying in production </li></ul>
    • 43.  
    • 44. Questions? QUESTIONS?

    ×