Building Production Quality Apps on App Engine. Ken Ashcraft 5/29/2008

Size: px
Start display at page:

Download "Building Production Quality Apps on App Engine. Ken Ashcraft 5/29/2008"

Transcription

1

2 Building Production Quality Apps on App Engine Ken Ashcraft 5/29/2008

3 Outline Writing code for production Testing performance Safe deployment after launch 3

4 Writing Code for Production

5 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() 5

6 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory 5

7 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory DeadlineExceeded 5

8 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory DeadlineExceeded OverQuotaError 5

9 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory DeadlineExceeded OverQuotaError Server crash 5

10 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory DeadlineExceeded OverQuotaError Server crash Datastore crash 5

11 Writing Code for Production Errors happen movie = Movie() movie.title = self.request.get( title, None) movie.director = self.request.get( director, None) movie.put() Out-of-memory DeadlineExceeded OverQuotaError Server crash Datastore crash Identical entity already exists 5

12 Writing Code for Production Use logging for forensics import logging user = users.get_current_user() if user: q = db.gqlquery("select * FROM UserPrefs WHERE user = :1", user) results = q.fetch(2) if len(results) > 1: logging.error( Multiple UserPrefs for user %s", user) if len(results) == 0: logging.debug( Creating UserPrefs for user %s", user) userprefs = UserPrefs(user=user) userprefs.put() else: userprefs = results[0] else: logging.debug( Creating dummy UserPrefs for anonymous user") 6

13 Writing Code for Production upon exception 7

14 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): 7

15 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): 7

16 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) 7

17 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) 7

18 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= 7

19 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, 7

20 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) 7

21 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) template_values = {} 7

22 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) template_values = {} if users.is_current_user_admin(): 7

23 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) template_values = {} if users.is_current_user_admin(): template_values[ traceback ] = lines 7

24 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) template_values = {} if users.is_current_user_admin(): template_values[ traceback ] = lines self.response.out.write(template.render( error.html, 7

25 Writing Code for Production upon exception class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): lines =.join(traceback.format_exception(*sys.exc_info ())) logging.error(lines) mail.send_mail_to_admins(sender= subject= Caught Exception, body=lines) template_values = {} if users.is_current_user_admin(): template_values[ traceback ] = lines self.response.out.write(template.render( error.html, template_values)) 7

26 Writing Code for Production Using the Python profiler 8

27 Writing Code for Production Using the Python profiler def real_main(): 8

28 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ 8

29 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), 8

30 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) 8

31 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) 8

32 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): 8

33 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() 8

34 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() 8

35 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) 8

36 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) def main(): 8

37 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) def main(): if random.randint(0, 100) == 4: 8

38 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) def main(): if random.randint(0, 100) == 4: profile_main() 8

39 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) def main(): if random.randint(0, 100) == 4: profile_main() else: 8

40 Writing Code for Production Using the Python profiler def real_main(): application = webapp.wsgiapplication([ ('/(.*)', WikiPage), ], debug=_debug) wsgiref.handlers.cgihandler().run(application) def profile_main(): # Turn on profiling and run real_main() logging.info("profile data:\n%s", profile_data) def main(): if random.randint(0, 100) == 4: profile_main() else: real_main() 8

41 Writing Code for Production Errors happen! 9

42 Loadtests

43 Loadtests What not to do The dev_appserver is not designed for performance! 11

44 Loadtests What not to do

45 The Request Path User App Engine Frontend App s Python Interpreter 13

46 The Request Path User App Engine Frontend App s Python Interpreter 13

47 The Request Path User User User App Engine Frontend App s Python Interpreter User User 13

48 The Request Path User User User App Engine Frontend App s Python Interpreter User User 13

49 The Request Path User User App s Python Interpreter User App Engine Frontend App s Python Interpreter User User App s Python Interpreter 13

50 Loadtests Good vs Bad

51 Loadtests Realistic values 15

52 Loadtests Realistic values 50,000 users / day 15

53 Loadtests Realistic values 50,000 users / day 2 pageviews / user 15

54 Loadtests Realistic values 50,000 users / day 2 pageviews / user 100,000 pageviews / day 15

55 Loadtests Realistic values 50,000 users / day 2 pageviews / user 100,000 pageviews / day 5 requests / pageview 15

56 Loadtests Realistic values 50,000 users / day 2 pageviews / user 100,000 pageviews / day 5 requests / pageview 500,000 requests / day 15

57 Loadtests Realistic values 50,000 users / day 2 pageviews / user 100,000 pageviews / day 5 requests / pageview 500,000 requests / day 5.8 requests / second 15

58 Loadtests Good vs Bad

59 Loadtests Good vs Bad 60 Qualities of a good load test:

60 Loadtests Good vs Bad Qualities of a good load test: Use production system (not dev_appserver)

61 Loadtests Good vs Bad Qualities of a good load test: Use production system (not dev_appserver) Gradual ramp up

62 Loadtests Good vs Bad Qualities of a good load test: Use production system (not dev_appserver) Gradual ramp up Sustained load

63 Loadtests Good vs Bad Qualities of a good load test: Use production system (not dev_appserver) Gradual ramp up Sustained load Realistic load

64 Safe Deployment

65 How App Versioning Works User App Engine Frontend Version 1.1 Datastore 18

66 How App Versioning Works User App Engine Frontend Version 1.2 Datastore 19

67 How App Versioning Works Version 1.1 User App Engine Frontend Datastore Version

68 App Versioning Control the version with app.yaml application: wiki-io version: 5482 # Revision number runtime: python api_version: 1 Suggestion: Create a build script to populate version 21

69 How App Versioning Works Version 1.1 User App Engine Frontend Datastore Version

70 How App Versioning Works Version 1.1 User App Engine Frontend Datastore Version

71 Testing the Release Selenium: a test tool for web applications Use the log viewer to look for errors 24

72 Feature Requests 25

73 Feature Requests A/B testing 25

74 Feature Requests A/B testing Integration with SVN 25

75 Feature Requests A/B testing Integration with SVN Edit running code 25

76 Summary 26

77 Summary Write code to handle errors Use logging and catch exceptions 26

78 Summary Write code to handle errors Use logging and catch exceptions Do realistic loadtests 26

79 Summary Write code to handle errors Use logging and catch exceptions Do realistic loadtests Use versions for safe deployment 26

80

Chapter 19: Twitter in Twenty Minutes

Chapter 19: Twitter in Twenty Minutes Chapter 19: Twitter in Twenty Minutes In the last chapter, we learned how to create and query persistent data with App Engine and Google's Datastore. This chapter continues with that discussion by stepping

More information

App Engine Web App Framework

App Engine Web App Framework App Engine Web App Framework Jim Eng / Charles Severance jimeng@umich.edu / csev@umich.edu www.appenginelearn.com Textbook: Using Google App Engine, Charles Severance (Chapter 5) Unless otherwise noted,

More information

App Engine Web App Framework

App Engine Web App Framework App Engine Web App Framework Jim Eng / Charles Severance jimeng@umich.edu / csev@umich.edu www.appenginelearn.com Textbook: Using Google App Engine, Charles Severance (Chapter 5) Unless otherwise noted,

More information

Google & the Cloud. GData, Mashup Editor, AppEngine. Gregor Hohpe Software Engineer Google, Inc. All rights reserved,

Google & the Cloud. GData, Mashup Editor, AppEngine. Gregor Hohpe Software Engineer Google, Inc. All rights reserved, Google & the Cloud GData, Mashup Editor, AppEngine Gregor Hohpe Software Engineer www.eaipatterns.com 2008 Google, Inc. All rights reserved, 2008 Google, Inc. All rights reserved, 2 1 Web 2.0 From the

More information

webapp2 Documentation

webapp2 Documentation webapp2 Documentation Release 3.0.0b1 Rodrigo Moraes Jun 20, 2017 Contents 1 Quick links 3 2 Status 5 3 Tutorials 7 4 Guide 31 5 API Reference - webapp2 57 6 API Reference - webapp2_extras 73 7 API Reference

More information

Rapid Development with Django and App Engine. Guido van Rossum May 28, 2008

Rapid Development with Django and App Engine. Guido van Rossum May 28, 2008 Rapid Development with Django and App Engine Guido van Rossum May 28, 2008 Talk Overview This is not a plug for Python, Django or Google App Engine Except implicitly :) Best practices for using Django

More information

CS4HS Using Google App Engine. Michael Parker

CS4HS Using Google App Engine. Michael Parker CS4HS Using Google App Engine Michael Parker (michael.g.parker@gmail.com) So what is it? What's it for? Building and running web applications Why use it? Handles serving web pages, efficiently storing

More information

2. What is Google App Engine. Overview Google App Engine (GAE) is a Platform as a Service (PaaS) cloud computing platform for developing and hosting web applications in Google-managed data centers. Google

More information

Building Python web app on GAE

Building Python web app on GAE Building Python web app on GAE tw3gsucks, a 3G network speed test web app. PyHUG Tsai, Shih-Chang 2011/12/21 It all starts with... 3G network is really SUCKS!!! I'm used to live in a connected world! Bad

More information

Hons. B.Sc. Degree in Software Engineering/Development. Web and Cloud Development

Hons. B.Sc. Degree in Software Engineering/Development. Web and Cloud Development Hons. B.Sc. Degree in Software Engineering/Development Web and Cloud Development Summer 2012 Instructions to candidates: Answer any four questions all questions carry equal marks. Start your answer at

More information

COMP1730/COMP6730 Programming for Scientists. Exceptions and exception handling

COMP1730/COMP6730 Programming for Scientists. Exceptions and exception handling COMP1730/COMP6730 Programming for Scientists Exceptions and exception handling Lecture outline * Errors * The exception mechanism in python * Causing exceptions (assert and raise) * Handling exceptions

More information

Introduction to Problem Solving and Programming in Python.

Introduction to Problem Solving and Programming in Python. Introduction to Problem Solving and Programming in Python http://cis-linux1.temple.edu/~tuf80213/courses/temple/cis1051/ Overview Types of errors Testing methods Debugging in Python 2 Errors An error in

More information

Installing and Running the Google App Engine On a Macintosh System

Installing and Running the Google App Engine On a Macintosh System Installing and Running the Google App Engine On a Macintosh System This document describes the installation of the Google App Engine Software Development Kit (SDK) on a Macintosh and running a simple hello

More information

CSC 148 Lecture 3. Dynamic Typing, Scoping, and Namespaces. Recursion

CSC 148 Lecture 3. Dynamic Typing, Scoping, and Namespaces. Recursion CSC 148 Lecture 3 Dynamic Typing, Scoping, and Namespaces Recursion Announcements Python Ramp Up Session Monday June 1st, 1 5pm. BA3195 This will be a more detailed introduction to the Python language

More information

Fundamentals of Programming (Python) Getting Started with Programming

Fundamentals of Programming (Python) Getting Started with Programming Fundamentals of Programming (Python) Getting Started with Programming Ali Taheri Sharif University of Technology Some slides have been adapted from Python Programming: An Introduction to Computer Science

More information

ArcGIS Enterprise Portal for ArcGIS

ArcGIS Enterprise Portal for ArcGIS Portal for ArcGIS Elzbieta Covington Outline This presentation is an overview of the components of ArcGIS Enterprise, including Installation Architecture Deployment 1 ArcGIS Online Both systems are complementary

More information

Building Scalable Web Apps with Python and Google Cloud Platform. Dan Sanderson, April 2015

Building Scalable Web Apps with Python and Google Cloud Platform. Dan Sanderson, April 2015 Building Scalable Web Apps with Python and Google Cloud Platform Dan Sanderson, April 2015 June 2015 pre-order now Agenda Introducing GCP & GAE Starting a project with gcloud and Cloud Console Understanding

More information

Course Structure of Python Training: UNIT - 1: COMPUTER FUNDAMENTALS. Computer Fundamentals. Installation of Development Tools:

Course Structure of Python Training: UNIT - 1: COMPUTER FUNDAMENTALS. Computer Fundamentals. Installation of Development Tools: Course Structure of Python Training: UNIT - 1: COMPUTER FUNDAMENTALS Computer Fundamentals o What is a Computer? o Computation vs calculation Microprocessors and Memory Concepts o Discussion on register,

More information

Jaesun Han (NexR CEO & Founder)

Jaesun Han (NexR CEO & Founder) S1 2008. 10. 23 Jaesun Han (NexR CEO & Founder) jshan0000@gmail.com http://www.nexr.co.kr S2 Big Switch: Power Burden Iron Works Edison Power Plant & Power Grid S3 Big Switch: Computing Corporate Data

More information

Building Scalable Web Apps with Google App Engine. Brett Slatkin June 14, 2008

Building Scalable Web Apps with Google App Engine. Brett Slatkin June 14, 2008 Building Scalable Web Apps with Google App Engine Brett Slatkin June 14, 2008 Agenda Using the Python runtime effectively Numbers everyone should know Tools for storing and scaling large data sets Example:

More information

61A Lecture 2. Friday, August 28, 2015

61A Lecture 2. Friday, August 28, 2015 61A Lecture 2 Friday, August 28, 2015 Names, Assignment, and User-Defined Functions (Demo) Types of Expressions Primitive expressions: 2 add 'hello' Number or Numeral Name String Call expressions: max

More information

Conditionals & Control Flow

Conditionals & Control Flow CS 1110: Introduction to Computing Using Python Lecture 8 Conditionals & Control Flow [Andersen, Gries, Lee, Marschner, Van Loan, White] Announcements: Assignment 1 Due tonight at 11:59pm. Suggested early

More information

Getting Started with Python

Getting Started with Python Fundamentals of Programming (Python) Getting Started with Python Sina Sajadmanesh Sharif University of Technology Some slides have been adapted from Python Programming: An Introduction to Computer Science

More information

Viri. Remote execution of Python scripts. Every time you use Viri, God kills a sysadmin. Marc Garcia

Viri. Remote execution of Python scripts. Every time you use Viri, God kills a sysadmin. Marc Garcia Viri Remote execution of Python scripts Every time you use Viri, God kills a sysadmin Marc Garcia Overview What is Viri? What is Viri? What Viri does? What can Viri be useful for How is Viri? Technical

More information

Repetition Algorithms

Repetition Algorithms Repetition Algorithms Repetition Allows a program to execute a set of instructions over and over. The term loop is a synonym for a repetition statement. A Repetition Example Suppose that you have been

More information

COMP 204: Sets, Commenting & Exceptions

COMP 204: Sets, Commenting & Exceptions COMP 204: Sets, Commenting & Exceptions Yue Li based on material from Mathieu Blanchette, Carlos Oliver Gonzalez and Christopher Cameron 1/29 Outline Quiz 14 review Set Commenting code Bugs 2/29 Quiz 15

More information

CS2021- Week 10 Models and Views. Model, View, Controller. Web Development Model, Views, Controller Templates Databases

CS2021- Week 10 Models and Views. Model, View, Controller. Web Development Model, Views, Controller Templates Databases CS2021- Week 10 Models and Views Web Development Model, Views, Controller Templates Databases Model, View, Controller The MVC pa@ern is simple and very useful in web development. MVC pa@ern forces one

More information

Outline. A C++ Linked Structure Class A C++ Linked List C++ Linked Dynamic Memory Errors In-class work. 1 Chapter 11: C++ Linked Structures

Outline. A C++ Linked Structure Class A C++ Linked List C++ Linked Dynamic Memory Errors In-class work. 1 Chapter 11: C++ Linked Structures Outline 1 Chapter 11: C++ Linked Structures A ListNode Class To support a Linked List container class LList, a ListNode class is used for the individual nodes. A ListNode object has two attributes: item

More information

learning objectives learn about variables, their types and their values learn about different number representations

learning objectives learn about variables, their types and their values learn about different number representations programming basics learning objectives algorithms your software system software hardware learn about variables, their types and their values learn about different number representations learn boolean algebra

More information

Optimizing Your App Engine App

Optimizing Your App Engine App Optimizing Your App Engine App Marzia Niccolai Spender of GBucks Greg Darke Byte Herder Troy Trimble Professional Expert Agenda Overview Writing applications efficiently Datastore Tips Caching, Caching,

More information

PROCE55 Mobile: Web API App. Web API. https://www.rijksmuseum.nl/api/...

PROCE55 Mobile: Web API App. Web API. https://www.rijksmuseum.nl/api/... PROCE55 Mobile: Web API App PROCE55 Mobile with Test Web API App Web API App Example This example shows how to access a typical Web API using your mobile phone via Internet. The returned data is in JSON

More information

Google GCP-Solution Architects Exam

Google GCP-Solution Architects Exam Volume: 90 Questions Question: 1 Regarding memcache which of the options is an ideal use case? A. Caching data that isn't accessed often B. Caching data that is written more than it's read C. Caching important

More information

Control Structures 1 / 17

Control Structures 1 / 17 Control Structures 1 / 17 Structured Programming Any algorithm can be expressed by: Sequence - one statement after another Selection - conditional execution (not conditional jumping) Repetition - loops

More information

What is an Exception? Exception Handling. What is an Exception? What is an Exception? test = [1,2,3] test[3]

What is an Exception? Exception Handling. What is an Exception? What is an Exception? test = [1,2,3] test[3] What is an Exception? Exception Handling BBM 101 - Introduction to Programming I Hacettepe University Fall 2016 Fuat Akal, Aykut Erdem, Erkut Erdem An exception is an abnormal condition (and thus rare)

More information

Outline. Introduction Concepts and terminology The case for static typing. Implementing a static type system Basic typing relations Adding context

Outline. Introduction Concepts and terminology The case for static typing. Implementing a static type system Basic typing relations Adding context Types 1 / 15 Outline Introduction Concepts and terminology The case for static typing Implementing a static type system Basic typing relations Adding context 2 / 15 Types and type errors Type: a set of

More information

Scope & Symbol Table. l Most modern programming languages have some notion of scope.

Scope & Symbol Table. l Most modern programming languages have some notion of scope. Scope & Symbol Table l Most modern programming languages have some notion of scope. l Scope defines the lifetime of a program symbol. l If a symbol is no longer accessible then we say that it is out of

More information

CS 11 python track: lecture 2

CS 11 python track: lecture 2 CS 11 python track: lecture 2 Today: Odds and ends Introduction to object-oriented programming Exception handling Odds and ends List slice notation Multiline strings Docstrings List slices (1) a = [1,

More information

Author Bob Ippolito Conference. PyObjC Hacking. PyCon DC, March 2005

Author Bob Ippolito Conference. PyObjC Hacking. PyCon DC, March 2005 Author Bob Ippolito Conference PyObjC Hacking PyCon DC, March 2005 Intended Audience Python developers using Mac OS X 10.3 or later... that aren't (very) afraid of C Who probably know a little about Objective-C...

More information

Making the Move to Magento 2: Successful Use of the Data Migration Tool

Making the Move to Magento 2: Successful Use of the Data Migration Tool Making the Move to Magento 2: Successful Use of the Data Migration Tool Cost-Benefit Analysis Cost of an Upgrade Magento: Treat upgrading to Magento 2 as if it were a re-platform Moving to Magento 2 is

More information

Jython. An introduction by Thinh Le

Jython. An introduction by Thinh Le Jython An introduction by Thinh Le precursor_python! Google App Engine! Dropbox! PyGTK (Gnome)! Vim (embedded)! BitTorrent/Morpheus! Civilization/Battlefield Jython! Interpretation of Python (1997)! Jim

More information

Abstract Data Types Chapter 1

Abstract Data Types Chapter 1 Abstract Data Types Chapter 1 Part Two Bags A bag is a basic container like a shopping bag that can be used to store collections. There are several variations: simple bag grab bag counting bag 2 Bag ADT

More information

SELENIUM - REMOTE CONTROL

SELENIUM - REMOTE CONTROL http://www.tutorialspoint.com/selenium/selenium_rc.htm SELENIUM - REMOTE CONTROL Copyright tutorialspoint.com Selenium Remote Control RC was the main Selenium project that sustained for a long time before

More information

Not-So-Mini-Lecture 6. Modules & Scripts

Not-So-Mini-Lecture 6. Modules & Scripts Not-So-Mini-Lecture 6 Modules & Scripts Interactive Shell vs. Modules Launch in command line Type each line separately Python executes as you type Write in a code editor We use Atom Editor But anything

More information

Scaling App Engine Applications. Justin Haugh, Guido van Rossum May 10, 2011

Scaling App Engine Applications. Justin Haugh, Guido van Rossum May 10, 2011 Scaling App Engine Applications Justin Haugh, Guido van Rossum May 10, 2011 First things first Justin Haugh Software Engineer Systems Infrastructure jhaugh@google.com Guido Van Rossum Software Engineer

More information

Errors. And How to Handle Them

Errors. And How to Handle Them Errors And How to Handle Them 1 GIGO There is a saying in computer science: Garbage in, garbage out. Is this true, or is it just an excuse for bad programming? Answer: Both. Here s what you want: Can you

More information

한재선 KAIST 정보미디어경영대학원겸직교수 & NexR 대표이사

한재선 KAIST 정보미디어경영대학원겸직교수 & NexR 대표이사 2009. 3. 11 한재선 (jshan0000@gmail.com) KAIST 정보미디어경영대학원겸직교수 & NexR 대표이사 http://www.web2hub.com S1 S2 Big Switch: Power Burden Iron Works Edison Power Plant & Power Grid S3 Big Switch: Computing Corporate

More information

App Engine: Datastore Introduction

App Engine: Datastore Introduction App Engine: Datastore Introduction Part 1 Another very useful course: https://www.udacity.com/course/developing-scalableapps-in-java--ud859 1 Topics cover in this lesson What is Datastore? Datastore and

More information

Exceptions Programming 1 C# Programming. Rob Miles

Exceptions Programming 1 C# Programming. Rob Miles Exceptions 08101 Programming 1 C# Programming Rob Miles Exceptions There are two kinds of programming error Compilation error Compiler complains that our source is not valid C# Run time error Program crashes

More information

Exceptions. Exceptions. Exceptional Circumstances 11/25/2013

Exceptions. Exceptions. Exceptional Circumstances 11/25/2013 08101 Programming 1 C# Programming Rob Miles There are two kinds of programming error Compilation error Compiler complains that our source is not valid C# Run time error Program crashes when it runs Most

More information

Call: Hyperion Planning Course Content:35-40hours Course Outline Planning Overview

Call: Hyperion Planning Course Content:35-40hours Course Outline Planning Overview Hyperion Planning Course Content:35-40hours Course Outline Planning Overview Oracle's Enterprise Performance Management Planning Architecture Planning and Essbase Navigating Workspace Launching Workspace

More information

Play with Python: An intro to Data Science

Play with Python: An intro to Data Science Play with Python: An intro to Data Science Ignacio Larrú Instituto de Empresa Who am I? Passionate about Technology From Iphone apps to algorithmic programming I love innovative technology Former Entrepreneur:

More information

CMSC 201 Fall 2016 Lab 09 Advanced Debugging

CMSC 201 Fall 2016 Lab 09 Advanced Debugging CMSC 201 Fall 2016 Lab 09 Advanced Debugging Assignment: Lab 09 Advanced Debugging Due Date: During discussion Value: 10 points Part 1: Introduction to Errors Throughout this semester, we have been working

More information

CIS192 Python Programming

CIS192 Python Programming CIS192 Python Programming Iterators, Generators, Exceptions & IO Raymond Yin University of Pennsylvania September 28, 2016 Raymond Yin (University of Pennsylvania) CIS 192 September 28, 2016 1 / 26 Outline

More information

CIS192 Python Programming

CIS192 Python Programming CIS192 Python Programming Object Oriented Programming Harry Smith University of Pennsylvania February 15, 2016 Harry Smith (University of Pennsylvania) CIS 192 Lecture 5 February 15, 2016 1 / 26 Outline

More information

61A Lecture 2. Wednesday, September 4, 2013

61A Lecture 2. Wednesday, September 4, 2013 61A Lecture 2 Wednesday, September 4, 2013 Names, Assignment, and User-Defined Functions (Demo) Types of Expressions Primitive expressions: 2 add 'hello' Number or Numeral Name String Call expressions:

More information

CIS192 Python Programming

CIS192 Python Programming CIS192 Python Programming Generators Exceptions and IO Eric Kutschera University of Pennsylvania February 13, 2015 Eric Kutschera (University of Pennsylvania) CIS 192 February 13, 2015 1 / 24 Outline 1

More information

Functions, Scope & Arguments. HORT Lecture 12 Instructor: Kranthi Varala

Functions, Scope & Arguments. HORT Lecture 12 Instructor: Kranthi Varala Functions, Scope & Arguments HORT 59000 Lecture 12 Instructor: Kranthi Varala Functions Functions are logical groupings of statements to achieve a task. For example, a function to calculate the average

More information

Any other Projects or assignments the student may be working on this week:

Any other Projects or assignments the student may be working on this week: Student CRP Form The purpose of this form is to accommodate a means for students to organize weekly project goals and to provide their results in a clear and measurable way. The CRP form will provide a

More information

Classification Using Genetic Programming. Patrick Kellogg General Assembly Data Science Course (8/23/15-11/12/15)

Classification Using Genetic Programming. Patrick Kellogg General Assembly Data Science Course (8/23/15-11/12/15) Classification Using Genetic Programming Patrick Kellogg General Assembly Data Science Course (8/23/15-11/12/15) Iris Data Set Iris Data Set Iris Data Set Iris Data Set Iris Data Set Create a geometrical

More information

Exam 2, Form A CSE 231 Spring 2014 (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN.

Exam 2, Form A CSE 231 Spring 2014 (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN. Name: Section: Date: INSTRUCTIONS: (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN. (2) This exam booklet contains 30 questions, each of which will be weighted equally at 5 points each.

More information

Exam 2, Form B CSE 231 Spring 2014 (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN.

Exam 2, Form B CSE 231 Spring 2014 (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN. Name: Section: Date: INSTRUCTIONS: (1) DO NOT OPEN YOUR EXAM BOOKLET UNTIL YOU HAVE BEEN TOLD TO BEGIN. (2) This exam booklet contains 30 questions, each of which will be weighted equally at 5 points each.

More information

Introduction to Computer Programming for Non-Majors

Introduction to Computer Programming for Non-Majors Introduction to Computer Programming for Non-Majors CSC 2301, Fall 2015 Chapter 7 Part 1 The Department of Computer Science Objectives 2 To understand the programming pattern simple decision and its implementation

More information

CIS192 Python Programming

CIS192 Python Programming CIS192 Python Programming Iterators, Generators, IO, and Exceptions Harry Smith University of Pennsylvania February 15, 2018 Harry Smith (University of Pennsylvania) CIS 192 Lecture 5 February 15, 2018

More information

learning objectives learn about variables, their types and their values learn about different number representations

learning objectives learn about variables, their types and their values learn about different number representations programming basics learning objectives algorithms your software system software hardware learn about variables, their types and their values learn about different number representations learn boolean algebra

More information

GIS 4653/5653: Spatial Programming and GIS. More Python: Statements, Types, Functions, Modules, Classes

GIS 4653/5653: Spatial Programming and GIS. More Python: Statements, Types, Functions, Modules, Classes GIS 4653/5653: Spatial Programming and GIS More Python: Statements, Types, Functions, Modules, Classes Statement Syntax The if-elif-else statement Indentation and and colons are important Parentheses and

More information

Introduction to Computer Programming for Non-Majors

Introduction to Computer Programming for Non-Majors Introduction to Computer Programming for Non-Majors CSC 2301, Fall 2016 Chapter 7 Part 2 Instructor: Long Ma The Department of Computer Science Quick review one-way or simple decision if :

More information

CS558 Programming Languages

CS558 Programming Languages CS558 Programming Languages Winter 2017 Lecture 4a Andrew Tolmach Portland State University 1994-2017 Semantics and Erroneous Programs Important part of language specification is distinguishing valid from

More information

Introduction to: Computers & Programming: Exception Handling

Introduction to: Computers & Programming: Exception Handling Introduction to: Computers & Programming: Adam Meyers New York University Summary What kind of error raises an exception? Preventing errors How to raise an exception on purpose How to catch an exception

More information

Flask Web Development Course Catalog

Flask Web Development Course Catalog Flask Web Development Course Catalog Enhance Your Contribution to the Business, Earn Industry-recognized Accreditations, and Develop Skills that Help You Advance in Your Career March 2018 www.iotintercon.com

More information

Date Version Revision

Date Version Revision Installing Simphony v2.5 on an ipad Introduction This document outlines the process for installing the Simphony v2.5 Client on an ipad device. Included in the document are step by step instructions on

More information

CSE450. Translation of Programming Languages. Lecture 11: Semantic Analysis: Types & Type Checking

CSE450. Translation of Programming Languages. Lecture 11: Semantic Analysis: Types & Type Checking CSE450 Translation of Programming Languages Lecture 11: Semantic Analysis: Types & Type Checking Structure Project 1 - of a Project 2 - Compiler Today! Project 3 - Source Language Lexical Analyzer Syntax

More information

CS558 Programming Languages

CS558 Programming Languages CS558 Programming Languages Fall 2016 Lecture 3a Andrew Tolmach Portland State University 1994-2016 Formal Semantics Goal: rigorous and unambiguous definition in terms of a wellunderstood formalism (e.g.

More information

Continuous delivery of Java applications. Marek Kratky Principal Sales Consultant Oracle Cloud Platform. May, 2016

Continuous delivery of Java applications. Marek Kratky Principal Sales Consultant Oracle Cloud Platform. May, 2016 Continuous delivery of Java applications using Oracle Cloud Platform Services Marek Kratky Principal Sales Consultant Oracle Cloud Platform May, 2016 Safe Harbor Statement The following is intended to

More information

Protect your apps and your customers against application layer attacks

Protect your apps and your customers against application layer attacks Protect your apps and your customers against application layer attacks Development 1 IT Operations VULNERABILITY DETECTION Bots, hackers, and other bad actors will find and exploit vulnerabilities in web

More information

Python Essential Reference, Second Edition - Chapter 5: Control Flow Page 1 of 8

Python Essential Reference, Second Edition - Chapter 5: Control Flow Page 1 of 8 Python Essential Reference, Second Edition - Chapter 5: Control Flow Page 1 of 8 Chapter 5: Control Flow This chapter describes related to the control flow of a program. Topics include conditionals, loops,

More information

Unit 6 - Software Design and Development LESSON 4 DATA TYPES

Unit 6 - Software Design and Development LESSON 4 DATA TYPES Unit 6 - Software Design and Development LESSON 4 DATA TYPES Previously Paradigms Choice of languages Key features of programming languages sequence; selection eg case, if then else; iteration eg repeat

More information

Test #2 October 8, 2015

Test #2 October 8, 2015 CPSC 1040 Name: Test #2 October 8, 2015 Closed notes, closed laptop, calculators OK. Please use a pencil. 100 points, 5 point bonus. Maximum score 105. Weight of each section in parentheses. If you need

More information

Introduction to Computer Programming for Non-Majors

Introduction to Computer Programming for Non-Majors Introduction to Computer Programming for Non-Majors CSC 2301, Fall 2016 Chapter 7 Part 1 Instructor: Long Ma The Department of Computer Science Objectives---Decision Structures 2 To understand the programming

More information

Python The way of a program. Srinidhi H Asst Professor Dept of CSE, MSRIT

Python The way of a program. Srinidhi H Asst Professor Dept of CSE, MSRIT Python The way of a program Srinidhi H Asst Professor Dept of CSE, MSRIT 1 Problem Solving Problem solving means the ability to formulate problems, think creatively about solutions, and express a solution

More information

Alan Nichol Co-founder and CTO, Rasa

Alan Nichol Co-founder and CTO, Rasa BUILDING CHATBOTS IN PYTHON Virtual assistants and accessing data Alan Nichol Co-founder and CTO, Rasa Virtual assistants Common chatbot use cases: Scheduling a meeting Bookling a flight Searching for

More information

Curriculum Catalog

Curriculum Catalog 2017-2018 Curriculum Catalog Career and Technical Education Series 2017 Glynlyon, Inc. Table of Contents FUNDAMENTALS OF DIGITAL MEDIA COURSE OVERVIEW...1 UNIT 1: INTRODUCTION TO DIGITAL AND ONLINE MEDIA

More information

Getting the most out of Spring and App Engine!!

Getting the most out of Spring and App Engine!! Getting the most out of Spring and App Engine!! Chris Ramsdale Product Manager, App Engine Google 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission. Whatʼs on tap today?

More information

Lecture 1. basic Python programs, defining functions

Lecture 1. basic Python programs, defining functions Lecture 1 basic Python programs, defining functions Lecture notes modified from CS Washington CS 142 Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0

More information

Can it connect to database used for NEO reports?

Can it connect to database used for NEO reports? Q&A Oct 2018 Can it connect to database used for NEO reports? Yes it can connect to the same database as NEO. It uses the same code as NEO. As part of the installation process you need to get a compatible

More information

PYTHON DATA SCIENCE TOOLBOX II. List comprehensions

PYTHON DATA SCIENCE TOOLBOX II. List comprehensions PYTHON DATA SCIENCE TOOLBOX II List comprehensions Populate a list with a for loop In [1]: nums = [12, 8, 21, 3, 16] In [2]: new_nums = [] In [3]: for num in nums:...: new_nums.append(num + 1) In [4]:

More information

IGL S AND MOUNT NS. Taking AKKA to Production

IGL S AND MOUNT NS. Taking AKKA to Production IGL S AND MOUNT NS Taking AKKA to Production THIS TALK Hello! I m Derek Wyatt, Senior Platform Developer at Auvik Networks! and author of Akka Concurrency Scala, Play and Akka form the foundational triad

More information

Developing with Google App Engine

Developing with Google App Engine Developing with Google App Engine Dan Morrill, Developer Advocate Dan Morrill Google App Engine Slide 1 Developing with Google App Engine Introduction Dan Morrill Google App Engine Slide 2 Google App Engine

More information

Lab 2 Third Party API Integration, Cloud Deployment & Benchmarking

Lab 2 Third Party API Integration, Cloud Deployment & Benchmarking Lab 2 Third Party API Integration, Cloud Deployment & Benchmarking In lab 1, you have setup the web framework and the crawler. In this lab, you will complete the deployment flow for launching a web application

More information

Introduction to PyObjC

Introduction to PyObjC Author Bob Ippolito Conference Introduction to PyObjC PyCon DC, March 2005 Intended Audience Python developers using Mac OS X 10.3 or later Spies from the Linux and Win32 camps Hopefully a GNUstep porter/maintainer

More information

DevOps Online Training

DevOps Online Training DevOps Online Training IQ Online training facility offers Devops online training by trainers who have expert knowledge in the Devops and proven record of training hundreds of students. Our Oracle Devops

More information

Alastair Burt Andreas Eisele Christian Federmann Torsten Marek Ulrich Schäfer. October 6th, Universität des Saarlandes. Introduction to Python

Alastair Burt Andreas Eisele Christian Federmann Torsten Marek Ulrich Schäfer. October 6th, Universität des Saarlandes. Introduction to Python Outline Alastair Burt Andreas Eisele Christian Federmann Torsten Marek Ulrich Schäfer Universität des Saarlandes October 6th, 2009 Outline Outline Today s Topics: 1 More Examples 2 Cool Stuff 3 Text Processing

More information

Microservices. SWE 432, Fall 2017 Design and Implementation of Software for the Web

Microservices. SWE 432, Fall 2017 Design and Implementation of Software for the Web Micros SWE 432, Fall 2017 Design and Implementation of Software for the Web Today How is a being a micro different than simply being ful? What are the advantages of a micro backend architecture over a

More information

CS Programming Languages: Python

CS Programming Languages: Python CS 3101-1 - Programming Languages: Python Lecture 5: Exceptions / Daniel Bauer (bauer@cs.columbia.edu) October 08 2014 Daniel Bauer CS3101-1 Python - 05 - Exceptions / 1/35 Contents Exceptions Daniel Bauer

More information

Introduction to Computer Programming for Non-Majors

Introduction to Computer Programming for Non-Majors Introduction to Computer Programming for Non-Majors CSC 2301, Fall 2014 Chapter 7 Part 2 The Department of Computer Science Quick review one-way or simple decision if : two-way decision

More information

1 Lecture 6: Conditionals and Exceptions

1 Lecture 6: Conditionals and Exceptions L6 June 16, 2017 1 Lecture 6: Conditionals and Exceptions CSCI 1360E: Foundations for Informatics and Analytics 1.1 Overview and Objectives In this lecture, we ll go over how to make "decisions" over the

More information

7401ICT eservice Technology. (Some of) the actual examination questions will be more precise than these.

7401ICT eservice Technology. (Some of) the actual examination questions will be more precise than these. SAMPLE EXAMINATION QUESTIONS (Some of) the actual examination questions will be more precise than these. Basic terms and concepts Define, compare and discuss the following terms and concepts: a. HTML,

More information

Internal Classes and Exceptions

Internal Classes and Exceptions Internal Classes and Exceptions Object Orientated Programming in Java Benjamin Kenwright Outline Exceptions and Internal Classes Why exception handling makes your code more manageable and reliable Today

More information

Serverless and APIs: Rethinking Curriculum in Higher Education. Munir Mandviwalla and Jeremy Shafer Temple University

Serverless and APIs: Rethinking Curriculum in Higher Education. Munir Mandviwalla and Jeremy Shafer Temple University Serverless and APIs: Rethinking Curriculum in Higher Education Munir Mandviwalla and Jeremy Shafer Temple University Serverless Serverless computing refers to the concept of building and running applications

More information

Extending Jython. with SIM, SPARQL and SQL

Extending Jython. with SIM, SPARQL and SQL Extending Jython with SIM, SPARQL and SQL 1 Outline of topics Interesting features of Python and Jython Relational and semantic data models and query languages, triple stores, RDF Extending the Jython

More information

BEAMJIT, a Maze of Twisty Little Traces

BEAMJIT, a Maze of Twisty Little Traces BEAMJIT, a Maze of Twisty Little Traces A walk-through of the prototype just-in-time (JIT) compiler for Erlang. Frej Drejhammar 130613 Who am I? Senior researcher at the Swedish Institute

More information