1.
Company Profile
1.1 Introduction
Udemy is the world’s largest marketplace for teaching and learning. Tens of thousands of expert
instructors have published online courses on Udemy on everything from programming to yoga,
marketing to guitar, photography to cake decorating, and much more. Millions of students in
190+ countries are taking these courses to advance their careers and pursue their passions. Each
course is available on-demand, 24 / 7, via the iPhone, iPad, Android and Web. Organizations al-
so use Udemy for Organizations (UFO), a corporate online learning platform that provides train-
ing solutions to thousands of companies.
Key Facts
• The top 10 Udemy experts have earned over $10 million teaching online (as of January
2014)
• Over 50 experts have earned $50,000 or more teaching on Udemy (as of January 2014)
Udemy is a global marketplace for learning and teaching online where students are mastering
new skills and achieving their goals by learning from an extensive library of over 80,000 courses
taught by expert instructors.
Page 1
1.2 Some Clients of Company
In addition to being the world’s largest online learning marketplace, we’re the learning solution
that organizations choose for employee up-skilling and development. We help people at compa-
nies like Lyft, PayPal, Century21, MetLife, and Volkswagen do whatever comes next through a
curated collection of top-rated business and technical courses.
Few of company clients are listed below:
1. Pinterest
2. Malwarebytes
3. TBC Corporation
4. Ellation
5. PayPal
6. Adidas
7. Mercedes Benz
Page 2
1.3 Company Services in Technology
Udemy’s tech stack includes: AngularJS, Bootstrap, Cloudflare, Comodo SSL, Datadog, Django,
Elasticsearch, Fastly, GlobalSign, HTML5, Jenkins, jQuery, Memcached, MySQL, nginx, PHP,
Python, Raven.js, Redis, Sentry, Symantec SSL, Zencoder.
And products which Udemy uses internally:
Support & Sales: Elucify, InsideView, Intercom, Salesforce Sales Cloud, Qualaroo,
Zendesk
Marketing: AddToAny, Affliate Window, Buffer, Oracle Marketing Cloud, Postmark,
SendGrid, Yesware
Product & Design: Asana, Google Fonts, Trello
Analytics: Hotjar, Optimizely
HR: AngelList Jobs, Greenhouse
Finance & Accounting: Expensify, Sift Science, Stripe
Productivity & Operations: Box, Citrix GoToMeeting, DocuSign, Dropbox, G Suite,
Microsoft Office 365, Slack
Page 3
2. TECHNOLOGY
Python is an interpreted high-level programming language for general-purpose programming.
Created by Guido van Rossum and first released in 1991, Python has a design philosophy that
emphasizes code readability, notably using significant whitespace. It provides constructs that en-
able clear programming on both small and large scales. Python features a dynamic type system
and automatic memory management. It supports multiple programming paradigms, includ-
ing object-oriented, imperative, functional and procedural, and has a large and comprehen-
sive standard library.
Features and Philosophy
Python is a multi-paradigm programming language. Object-oriented programming and structured
programming are fully supported, and many of its features support functional program-
ming and aspect-oriented programming (including by metaprogramming and metaobjects (magic
methods)). Many other paradigms are supported via extensions, including design by con-
tract and logic programming.
The language's core philosophy is summarized in the document The Zen of Python (PEP 20),
which includes aphorisms such as:[49]
Beautiful is better than ugly
Explicit is better than implicit
Simple is better than complex
Complex is better than complicated
Readability counts
Development Environments
Most Python implementations (including CPython) include a read–eval–print loop (REPL), per-
mitting them to function as a command line interpreter for which the user enters statements se-
quentially and receives results immediately.
Other shells, including IDLE and IPython, add further abilities such as auto-completion, session
state retention and syntax highlighting.
Page 4
Applications for Python
Python is used in many application domains. Here's a sampling.
The Python Package Index lists thousands of third party modules for Python.
Web and Internet Development
Python offers many choices for web development:
Frameworks such as Django and Pyramid.
Micro-frameworks such as Flask and Bottle.
Advanced content management systems such as Plone and django CMS.
Python's standard library supports many Internet protocols:
HTML and XML
JSON
E-mail processing.
Support for FTP, IMAP, and other Internet protocols.
Easy-to-use socket interface.
And the Package Index has yet more libraries:
Requests, a powerful HTTP client library.
BeautifulSoup, an HTML parser that can handle all sorts of oddball HTML.
Feedparser for parsing RSS/Atom feeds.
Paramiko, implementing the SSH2 protocol.
Twisted Python, a framework for asynchronous network programming.
Page 5
Scientific and Numeric
Python is widely used in scientific and numeric computing:
SciPy is a collection of packages for mathematics, science, and engineering.
Pandas is a data analysis and modeling library.
IPython is a powerful interactive shell that features easy editing and recording of a work
session, and supports visualizations and parallel computing.
The Software Carpentry Course teaches basic skills for scientific computing, running
bootcamps and providing open-access teaching materials.
Education
Python is a superb language for teaching programming, both at the introductory level and in
more advanced courses.
Books such as How to Think Like a Computer Scientist, Python Programming: An
Introduction to Computer Science, and Practical Programming.
The Education Special Interest Group is a good place to discuss teaching issues.
Desktop GUIs
The Tk GUI library is included with most binary distributions of Python.
Some toolkits that are usable on several platforms are available separately:
wxWidgets
Kivy, for writing multitouch applications.
Qt via pyqt or pyside
Platform-specific toolkits are also available:
GTK+
Microsoft Foundation Classes through the win32 extensions
Page 6
Software Development
Python is often used as a support language for software developers, for build control and
management, testing, and in many other ways.
SCons for build control.
Buildbot and Apache Gump for automated continuous compilation and testing.
Roundup or Trac for bug tracking and project management.
Business Applications
Python is also used to build ERP and e-commerce systems:
Odoo is an all-in-one management software that offers a range of business applications
that form a complete suite of enterprise management applications.
Tryton is a three-tier high-level general purpose application platform.
Page 7
Libraries Used
1. Datetime — Basic date and time types: The datetime module supplies classes for manipulat-
ing dates and times in both simple and complex ways. While date and time arithmetic is sup-
ported, the focus of the implementation is on efficient attribute extraction for output formatting
and manipulation. For related functionality, see also the time and calendar modules.
The datetime module exports the following constants:
datetime.MINYEAR
The smallest year number allowed in a date or datetime object. MINYEAR is 1.
datetime.MAXYEAR
The largest year number allowed in a date or datetime object. MAXYEAR is 9999.
A date object represents a date (year, month and day) in an idealized calendar, the current Gre-
gorian calendar indefinitely extended in both directions. January 1 of year 1 is called day number
1, January 2 of year 1 is called day number 2, and so on. This matches the definition of the “pro-
leptic Gregorian” calendar in Dershowitz and Reingold’s book Calendrical Calculations, where
it’s the base calendar for all computations. See the book for algorithms for converting between
proleptic Gregorian ordinals and many other calendar systems.
class datetime.date(year, month, day)
A datetime object is a single object containing all the information from a date object and
a time object. Like a date object, datetime assumes the current Gregorian calendar extended in
both directions; like a time object, datetime assumes there are exactly 3600*24 seconds in every
day.
Constructor:
class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]).
Page 8
2. Tkinter: The Tkinter module (“Tk interface”) is the standard Python interface to the Tk GUI
toolkit. Both Tk and Tkinter are available on most Unix platforms, as well as on Windows sys-
tems. (Tk itself is not part of Python; it is maintained at ActiveState.)
Running python -m Tkinter from the command line should open a window demonstrating a sim-
ple Tk interface, letting you know that Tkinter is properly installed on your system, and also
showing what version of Tcl/Tk is installed, so you can read the Tcl/Tk documentation specific
to that version.
class Tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1)
The Tk class is instantiated without arguments. This creates a toplevel widget of Tk
which usually is the main window of an application. Each instance has its own associated
Tcl interpreter.
Changed in version 2.4: The useTk parameter was added.
Tkinter.Tcl(screenName=None, baseName=None, className='Tk', useTk=0)
The Tcl() function is a factory function which creates an object much like that created by
the Tk class, except that it does not initialize the Tk subsystem. This is most often useful
when driving the Tcl interpreter in an environment where one doesn’t want to create ex-
traneous toplevel windows, or where one cannot (such as Unix/Linux systems without an
X server). An object created by the Tcl() object can have a Toplevel window created (and
the Tk subsystem initialized) by calling its loadtk() method.
3. JSON: JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC
4627) and by ECMA-404, is a lightweight data interchange format inspired by JavaScript object
literal syntax (although it is not a strict subset of JavaScript [1] ).
json exposes an API familiar to users of the standard library marshal and pickle modules.
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True,
cls=None, indent=None, separators=None, encoding="utf-
8", default=None, sort_keys=False, **kw)
Serialize obj as a JSON formatted stream to fp (a .write()-supporting file-like object) us-
ing this conversion table.
If skipkeys is true (default: False), then dict keys that are not of a basic type
(str, unicode, int, long, float, bool, None) will be skipped instead of raising
a TypeError.
Page 9
If ensure_ascii is true (the default), all non-ASCII characters in the output are escaped
with \uXXXX sequences, and the result is a str instance consisting of ASCII characters
only. If ensure_ascii is false, some chunks written to fp may be unicode instances. This
usually happens because the input contains unicode strings or the encoding parameter is
used. Unless fp.write() explicitly understands unicode (as in codecs.getwriter()) this is
likely to cause an error.
If check_circular is false (default: True), then the circular reference check for container
types will be skipped and a circular reference will result in an OverflowError (or
worse).
If allow_nan is false (default: True), then it will be a ValueError to serialize out of
range float values (nan, inf, -inf) in strict compliance of the JSON specification.
If allow_nan is true, their JavaScript equivalents (NaN, Infinity, -Infinity) will be used.
If indent is a non-negative integer, then JSON array elements and object members will be
pretty-printed with that indent level. An indent level of 0, or negative, will only insert
newlines. None (the default) selects the most compact representation.
4. Requests: Requests allows you to send organic, grass-fed HTTP/1.1 requests, without the need
for manual labor. There’s no need to manually add query strings to your URLs, or to form-
encode your POST data. Keep-alive and HTTP connection pooling are 100% automatic. Re-
quests is the perfect example how beautiful an API can be with the right level of abstraction.
Nike, Twitter, Spotify, Microsoft, Amazon, Lyft, BuzzFeed, Reddit, The NSA, Her Majesty’s
Government, Google, Twilio, Runscope, Mozilla, Heroku, PayPal, NPR, Obama for America,
Transifex, Native Instruments, The Washington Post, SoundCloud, Kippt, Sony, and Federal
U.S. Institutions that prefer to be unnamed claim to use Requests internally.
Armin Ronacher, creator of Flask—
Requests is the perfect example how beautiful an API can be with the right level of ab-
straction.
Matt DeBoard—
I’m going to get Kenneth Reitz’s Python requests module tattooed on my body, somehow.
The whole thing.
Daniel Greenfeld—
Nuked a 1200 LOC spaghetti code library with 10 lines of code thanks to Kenneth Reitz’s
Requests library. Today has been AWESOME.
Kenny Meyers—
Page
10
Python HTTP: When in doubt, or when not in doubt, use Requests. Beautiful, simple, Py-
thonic.
Requests is one of the most downloaded Python packages of all time, pulling in over 400,000
downloads each day. Join the party!
If your organization uses Requests internally, consider supporting the development of 3.0. Your
generosity will be greatly appreciated, and help drive the project forward into the future.
Beloved Features
Requests is ready for today’s web.
Keep-Alive & Connection Pooling
International Domains and URLs
Sessions with Cookie Persistence
Browser-style SSL Verification
Automatic Content Decoding
Basic/Digest Authentication
Elegant Key/Value Cookies
Automatic Decompression
Unicode Response Bodies
HTTP(S) Proxy Support
Multipart File Uploads
Streaming Downloads
Connection Timeouts
Chunked Requests
Requests officially supports Python 2.7 & 3.4–3.7, and runs great on PyPy.
5. OS: This module provides a portable way of using operating system dependent functionality. If
you just want to read or write a file see open(), if you want to manipulate paths, see
the os.path module, and if you want to read all the lines in all the files on the command line see
the fileinput module. For creating temporary files and directories see the tempfile module, and
for high-level file and directory handling see the shutil module.
Notes on the availability of these functions:
Page
11
The design of all built-in operating system dependent modules of Python is such that as
long as the same functionality is available, it uses the same interface; for example, the
function os.stat(path) returns stat information about path in the same format (which hap-
pens to have originated with the POSIX interface).
Extensions peculiar to a particular operating system are also available through
the os module, but using them is of course a threat to portability.
All functions accepting path or file names accept both bytes and string objects, and result
in an object of the same type, if a path or file name is returned.
An “Availability: Unix” note means that this function is commonly found on Unix sys-
tems. It does not make any claims about its existence on a specific operating system.
If not separately noted, all functions that claim “Availability: Unix” are supported on
Mac OS X, which builds on a Unix core.
6. PRETTYTABLE: PrettyTable is a simple Python library designed to make it quick and easy to
represent tabular data in visually appealing ASCII tables. It was inspired by the ASCII tables
used in the PostgreSQL shell psql. PrettyTable allows for selection of which columns are to be
printed, independent alignment of columns (left or right justified or centred) and printing of
“sub-tables” by specifying a row range.
PrettyTable is a Python library for generating simple ASCII tables. It was inspired by the ASCII
tables used in the PostgreSQL shell psql. We can control many aspects of a table, such as the
width of the column padding, the alignment of text, or the table border. We can sort data.
We can also choose which columns and rows are going to be displayed in the final output. Pret-
tyTable can read data from CSV, HTML, or database cursor and output data in ASCII or
HTML.
PrettyTable installation:
$ sudo pip3 install PTable
We use the pip3 tool to install PrettyTable.
Generating PrettyTable:
A table can be created with add_row() or add_column() methods.
Page
12
3. PROJECT WORK
3.1 PROJECT 1: CRYPTOCURRENCY PORTFOLIO
3.1.1 Objective: Crypto currency Portfolio is a console application which provides user the in-
formation related to the price of various cryptocurrencies in which he has invested some certain
amount along withit, it also shows the user the information about variation in the value of those
cryptcurrency in past 1 hour, 1 day and 1 week.
The objective of maintaining the portfolio is to provide the user a comfortable environment in
which he can get the information regarding amount of cryptocurrency he has invested in without
sacrificing his details and whereabouts.
3.1.2 Scope: The crypto currency market has returned over 900% since the beginning of 2017 (at
the time of writing this). You cannot find these kinds of return on investments in the stock mar-
ket or anywhere. That’s why this portfolio helps a lot in keeping an eye on your investment.
Cryptocurrency is a growing decentralized currency which gives higher and safer returns than
stock market, due to which it is better to invest in for getting better returns. User can keep an eye
on the worth of his investment without going to any other party.
Technologies Used:
Python
Atom text editor
Coinmarketcap API
Page
13
3.1.3 Output Screen and Coding:
Output Screen
Code
import os
import json
import requests
from datetime import datetime
from prettytable import PrettyTable
from colorama import init, Fore, Back, Style
init(convert=True)
convert = 'USD'
Page
14
listings_url = 'https://api.coinmarketcap.com/v2/listings/?convert=' + convert
url_end = '?structure=array&convert=' + convert
request = requests.get(listings_url)
results = request.json()
data = results['data']
ticker_url_pairs = {}
for currency in data:
symbol = currency['symbol']
url = currency['id']
ticker_url_pairs[symbol] = url
print()
print('MY PORTFOLIO')
print()
portfolio_value = 0.00
last_updated = 0
table = PrettyTable(['Asset', 'Amount Owned', convert + ' Value', 'Price', '1h', '24h', '7d'])
with open('portfolio.txt') as inp:
for line in inp:
Page
15
ticker, amount = line.split()
ticker = ticker.upper()
ticker_url = 'https://api.coinmarketcap.com/v2/ticker/' + str(ticker_url_pairs[ticker]) + '/' +
url_end
request = requests.get(ticker_url)
results = request.json()
currency = results['data'][0]
rank = currency['rank']
name = currency['name']
last_updated = currency['last_updated']
symbol = currency['symbol']
quotes = currency['quotes'][convert]
hour_change = quotes['percent_change_1h']
day_change = quotes['percent_change_24h']
week_change = quotes['percent_change_7d']
price = quotes['price']
value = float(price) * float(amount)
if hour_change > 0:
hour_change = Back.GREEN + str(hour_change) + '%' + Style.RESET_ALL
else:
Page
16
hour_change = Back.RED + str(hour_change) + '%' + Style.RESET_ALL
if day_change > 0:
day_change = Back.GREEN + str(day_change) + '%' + Style.RESET_ALL
else:
day_change = Back.RED + str(day_change) + '%' + Style.RESET_ALL
if week_change > 0:
week_change = Back.GREEN + str(week_change) + '%' + Style.RESET_ALL
else:
week_change = Back.RED + str(week_change) + '%' + Style.RESET_ALL
portfolio_value += value
value_string = '{:,}'.format(round(value,2))
table.add_row([name + ' (' + symbol + ')',
amount,
'$' + value_string,
'$' + str(price),
str(hour_change),
str(day_change),
str(week_change)])
print(table)
Page
17
print()
portfolio_value_string = '{:,}'.format(round(portfolio_value,2))
last_updated_string = datetime.fromtimestamp(last_updated).strftime('%B %d, %Y at
%I:%M%p')
print('Total Portfolio Value: ' + Back.GREEN + '$' + portfolio_value_string +
Style.RESET_ALL)
print()
print('API Results Last Updated on ' + last_updated_string)
print()
Page
18
3.2 PROJECT 2: CRYPTOCURRENCY ALERTS
3.2.1 Objective: This is also a console based application, in which user will set a certain value at
which he aims to sell his assets to get an alert message when any cryptocurrency will hit certain
value, at which user wants to sell his assets.
3.2.2 Scope: The crypto currency market has returned over 900% since the beginning of 2017 (at
the time of writing this). You cannot find these kinds of return on investments in the stock mar-
ket or anywhere. So it will be very favorable if you will get notified when the cryptocurency hits
the desired value.
Technologies Used:
Python
Atom text editor
Coinmarketcap API
Page
19
3.2.3 Output Screen and Coding:
Output Screen
Code
import os
import json
import time
import requests
from datetime import datetime
convert = 'USD'
listings_url = 'https://api.coinmarketcap.com/v2/listings/?convert=' + convert
url_end = '?structure=array&convert=' + convert
Page
20
request = requests.get(listings_url)
results = request.json()
data = results['data']
ticker_url_pairs = {}
for currency in data:
symbol = currency['symbol']
url = currency['id']
ticker_url_pairs[symbol] = url
print()
print('ALERTS TRACKING...')
print()
already_hit_symbols = []
while True:
with open('alerts.txt') as inp:
for line in inp:
ticker, amount = line.split()
ticker = ticker.upper()
ticker_url = 'https://api.coinmarketcap.com/v2/ticker/' + str(ticker_url_pairs[ticker]) + '/'
+ url_end
Page
21
request = requests.get(ticker_url)
results = request.json()
currency = results['data'][0]
name = currency['name']
last_updated = currency['last_updated']
symbol = currency['symbol']
quotes = currency['quotes'][convert]
price = quotes['price']
if float(price) >= float(amount) and symbol not in already_hit_symbols:
os.system('say ' + name + ' hit ' + amount)
last_updated_string = datetime.fromtimestamp(last_updated).strftime('%B %d, %Y at
%I:%M%p')
print(name + ' hit ' + amount + ' on ' + last_updated_string)
already_hit_symbols.append(symbol)
print('...')
time.sleep(300)
Page
22
Data Flow Diagram
Submit Value
Run Program
SYSTEM USER
Enter Input
Requests API API Output
Page
23
5. Requirement & Analysis
5.1 PERT Chart
Presentation Midterm Final Presen-
Presentation tation Final
Product
Start
Project Code
Learn Python Simulator
Research Crypto Design Ar- System
currency chitecture Testing
Resources Compile
Code
Create Revise
Schedule Schedule
Page
24
Gantt Chart
1st Week 2nd Week 3rd Week 4th Week
Research
Presentation
Schedule
Design
Code
Testing
Final Product
Page
25
5.2Software and Hardware Requirement
Software :
1. Python 3.6 (2.5 or above) version.
2. Pip Pre-installed
3. Atom Text-editor
Hardware :
1. Any Windows operating system
2. 32 or 64 Bit Architecture
3. 4 Gb Ram
Page
26
6. References
1. Udemy Courses
2. Stackoverflow.com
3. Geeksforgeeks.com
Page
27