├── cit592 ├── cheatset.pdf └── cheatset.tex ├── Discord ├── bots │ ├── rolebot.txt │ ├── dadJokes.py │ ├── welcomebot.py │ ├── kanyeWest.py │ └── descriptions.py ├── requirements.txt └── rules.md ├── requirements.txt ├── .gitignore └── README.md /cit592/cheatset.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bexxmodd/OnlineMCIT/master/cit592/cheatset.pdf -------------------------------------------------------------------------------- /Discord/bots/rolebot.txt: -------------------------------------------------------------------------------- 1 | -rolemenu create -nodm 2 | 3 | -rolemenu create -nodm -m 4 | 5 | 6 | *Please read the rules and select the role to start using this channel.* 7 | - By selecting a role, therefore, you agree to the server rules. 8 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.7.4 2 | async-timeout==3.0.1 3 | attrs==19.3.0 4 | certifi==2020.4.5.2 5 | chardet==3.0.4 6 | discord-timers==0.1.0 7 | discord.py==1.3.4 8 | idna==2.9 9 | multidict==4.7.6 10 | python-dateutil==2.8.1 11 | python-dotenv==0.13.0 12 | pytz==2020.1 13 | requests==2.24.0 14 | six==1.15.0 15 | urllib3==1.26.5 16 | websockets==9.1 17 | yarl==1.4.2 18 | -------------------------------------------------------------------------------- /Discord/requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.7.4 2 | async-timeout==3.0.1 3 | attrs==19.3.0 4 | certifi==2020.4.5.2 5 | chardet==3.0.4 6 | discord-timers==0.1.0 7 | discord.py==1.3.4 8 | idna==2.9 9 | multidict==4.7.6 10 | python-dateutil==2.8.1 11 | python-dotenv==0.13.0 12 | pytz==2020.1 13 | requests==2.24.0 14 | six==1.15.0 15 | urllib3==1.26.5 16 | websockets==9.1 17 | yarl==1.4.2 18 | -------------------------------------------------------------------------------- /Discord/rules.md: -------------------------------------------------------------------------------- 1 | # Rules 2 | 3 | ***No-Nos:*** 4 | 5 | :no_entry: NO Threatening/Bullying/Harrassment of fellow members 6 | 7 | :no_entry: NO Illegal/Offensive/Discriminatory/Pornographic/NSFW content 8 | 9 | :no_entry: NO Piracy 10 | 11 | :no_entry: NO Spaming 12 | 13 | :no_entry: NO Advertisement of other servers/channels 14 | 15 | :no_entry: NO self-advertisement 16 | 17 | ------- 18 | 19 | ***Do-This:***: 20 | 21 | :heavy_check_mark: Keep all the conversations in the appropriate channel -------------------------------------------------------------------------------- /Discord/bots/dadJokes.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import random 4 | 5 | # def search(): 6 | # cust_inp = str(input('Let me tell you a joke! Give me a word: ')) 7 | # return cust_inp 8 | 9 | def request(*args): 10 | resp = requests.get( 11 | 'http://icanhazdadjoke.com/search', 12 | headers={"Accept": "application/json"}, 13 | params={'term': args} ).json() 14 | return resp['results'] 15 | 16 | def joke(*args): 17 | joke_return = request(args) 18 | return [i['joke'] for i in joke_return] 19 | 20 | def choosing_joke(*args): 21 | jokes = joke(args) 22 | if len(jokes) > 1: 23 | return random.choice(jokes) 24 | elif jokes == []: 25 | return('Gimme\' another word') 26 | else: 27 | return jokes 28 | 29 | 30 | if __name__ == '__main__': 31 | print(choosing_joke()) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specific to the project 2 | *.[oa] 3 | *~ 4 | venv 5 | .ipynb_checkpoints 6 | *.pkl 7 | *.csv 8 | *.exe 9 | credentials.txt 10 | test.py 11 | rolebot.txt 12 | *.env 13 | mcit-welcome.pem 14 | 15 | # Byte-compiled / optimized / DLL files 16 | __pycache__/ 17 | *.py[cod] 18 | 19 | # C extensions 20 | *.so 21 | 22 | # Distribution / packaging 23 | .Python 24 | exp/ 25 | env/ 26 | build/ 27 | develop-eggs/ 28 | dist/ 29 | downloads/ 30 | eggs/ 31 | .eggs/ 32 | lib/ 33 | lib64/ 34 | parts/ 35 | sdist/ 36 | var/ 37 | *.egg-info/ 38 | .installed.cfg 39 | *.egg 40 | 41 | # PyInstaller 42 | # Usually these files are written by a python script from a template 43 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 44 | *.manifest 45 | *.spec 46 | 47 | # Installer logs 48 | pip-log.txt 49 | pip-delete-this-directory.txt 50 | 51 | # Unit test / coverage reports 52 | htmlcov/ 53 | .tox/ 54 | .coverage 55 | .coverage.* 56 | .cache 57 | nosetests.xml 58 | coverage.xml 59 | *,cover 60 | 61 | # Translations 62 | *.mo 63 | *.pot 64 | 65 | # Django stuff: 66 | *.log 67 | 68 | # Sphinx documentation 69 | docs/_build/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Additions 75 | rolebot.txt 76 | kanye-bot.tar.gz 77 | welcome-bot.tar.gz 78 | Dockerfile 79 | new-key.pem 80 | dockerRunCmd.txt 81 | -------------------------------------------------------------------------------- /Discord/bots/welcomebot.py: -------------------------------------------------------------------------------- 1 | # bot.py 2 | import os 3 | 4 | import discord 5 | from dotenv import load_dotenv 6 | 7 | 8 | load_dotenv() 9 | TOKEN = os.getenv('DISCORD_TOKEN') 10 | GUILD = os.getenv('DISCORD_GUILD') 11 | 12 | client = discord.Client() 13 | 14 | @client.event 15 | async def on_ready(): 16 | guild = discord.utils.get(client.guilds, name=GUILD) 17 | print( 18 | f'{client.user} is connected to the following guild:\n' 19 | f'{guild.name}(id: {guild.id})' 20 | ) 21 | 22 | # Greets the newly joined members in the welcome channel 23 | @client.event 24 | async def on_member_join(member): 25 | print("Recognized that " + member.name + " joined") 26 | msg = f'Hello <@{member.id}>! Welcome to the UPenn Online MCIT Discord Server. Please head to the <#722617468622733385> and read the instructions to start using the server.' 27 | channel = client.get_channel(722612886924427357) 28 | await channel.send(msg) 29 | print(member.name + " was greeted") 30 | 31 | # When a member leaves the server, 32 | # send the message into the Admin's channel. 33 | @client.event 34 | async def on_member_remove(member): 35 | print(member.name + " left the channel") 36 | msg = f'{member.name} left the server' 37 | channel = client.get_channel(723583513563234344) 38 | await channel.send(msg) 39 | 40 | client.run(TOKEN) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![logo](https://i.imgur.com/UxNRyV6.png) 2 | # Online MCIT Discord channel bots 3 | 4 | This is an open-source project and all MCIT students are encouraged to contribute to developing useful and playful bots for the server. 5 | Currently, we have two bots: 6 | 7 | **Welcome bot** - greats new members and directs them to the rules section. Also notifies Admins when someone leaves the server 8 | 9 | ![welcome-bot](https://i.imgur.com/Q6i2UIk.png) 10 | 11 | **Kanye West** - Our special guest. Who loves to share his thoughts and tell jokes. He also provides basic information about the Online MCIT program. Our goal is to expend him to be more interactive and answer frequently asked questions regarding the program. 12 | 13 | ![kanyeWest](https://i.imgur.com/oDSr83i.png) 14 | 15 | If you want to contribute to the project: 16 | 17 | 1. Open the New Issue with a description of what functionality you plan to add to the bot: 18 | ![new-issue](https://i.imgur.com/KEmcDxY.png) 19 | 20 | 2. Fork the project 21 | 22 | ![fork](https://i.imgur.com/ZGGFHpE.png) 23 | 24 | 3. Using a terminal, clone the repo to your local git by typing: 25 | ``` 26 | git clone https://github.com/bexxmodd/OnlineMCIT.git 27 | ``` 28 | _P.S. Automatically new repo will be named as OnlineMCIT and will be copied where your present working directory is. If you want it to be cloned somewhere else type the path after the GitHub link._ 29 | 30 | 4. Go into the cloned project's directory: 31 | ``` 32 | cd OnlineMCIT 33 | ``` 34 | 35 | 5. Set up the remote repository, which will allow you to fetch the changes and updates introduced to the project: 36 | ``` 37 | git remote add upstream https://github.com/bexxmodd/OnlineMCIT.git 38 | ``` 39 | 40 | 6. Create a branch which you will use to create the functionality you described in the `New Issue` 41 | ``` 42 | git checkout -b 43 | ``` 44 | _P.S._ `checkout -b` _allows us to create a branch and switch to it._ 45 | 46 | Similarly you can use: 47 | ``` 48 | git branch 49 | git checkout 50 | ``` 51 | 52 | 7. After you are done with the functionality, add and commit changes 53 | ``` 54 | git add 55 | git commit -m "type what you have done" 56 | git push origin 57 | ``` 58 | 8. In your repository on *GitHub*, you'll see the `Compare & pull request` button. Click on it and then click submit. 59 | 60 | 9. Go to the Issues again and close the issue you opened in the beginning with the note what was pushed on the project 61 | 62 | ![final](https://i.imgur.com/kNxB8LB.png) 63 | -------------------------------------------------------------------------------- /cit592/cheatset.tex: -------------------------------------------------------------------------------- 1 | 2 | \documentclass[12pt]{article} 3 | \usepackage{lingmacros} 4 | \usepackage{tree-dvips} 5 | \usepackage{amsfonts} 6 | \usepackage{xcolor} 7 | \begin{document} 8 | 9 | \section*{LaTeX and Discrete Math Cheatsheet} 10 | 11 | \subsection*{Special Sets} 12 | 13 | \begin{itemize} 14 | \item $\emptyset$ -- The empty or aka null. \textcolor{blue} {$\backslash$emptyset}. 15 | \item $\mathbb{U}$ -- The uiniverse set. The set will all the elements. \textcolor{blue} {$\backslash$mathbb\{U\}} 16 | \item $\mathbb{N}$ -- The set of natural numbers. $\mathbb{N}=\{1,2,..\}$. \textcolor{blue} {$\backslash$mathbb\{N\}} 17 | \item $\mathbb{Z}$ -- The set of integers. Positives. $\mathbb{Z}^+=\{1, 2, 3,..\}$; Negatives $\mathbb{Z}^-=\{..,-3, -2, -1\}$. \textcolor{blue} {$\backslash$mathbb\{Z\}} 18 | \item $\mathbb{Q}$ -- The set of rational numbers. (a number that can be express as the ratio of two integers). \textcolor{blue} {$\backslash$mathbb\{Q\}} 19 | \item $\mathbb{R}$ -- The set of real numbers. Combining the set of rational numbers and the set of irrational numbers. \textcolor{blue} {$\backslash$mathbb\{R\}} 20 | \item $\mathcal{P} (A)$ -- The power set of any set A is the set of all subsets of A. \textcolor{blue} {$\backslash$mathcal\{P\}} 21 | \end{itemize} 22 | 23 | 24 | \subsection*{Set Theory Notation} 25 | \begin{itemize} 26 | \item $\{,\}$ -- To enclose the elements of the set. 27 | \item $:$ -- "such that"; For example $\{x: x > 2\}$ reads as, for $x$ such that $x$ is greater that two. 28 | \item $\in$ -- An element of; $2 \in \{1,2,3\}$ asserts that 2 is an element of the set $\{1,2,3\}$. \textcolor{blue} {$\backslash$in} 29 | \item $\notin$ -- Is not an element of; $4 \notin \{1,2,3\}$ asserts that 4 is not an element of the set $\{1,2,3\}$. \textcolor{blue} {$\backslash$notin} 30 | \item $\subseteq$ -- Is a subset of; $A\subseteq B$ asserts that every element in A is an element in B. \textcolor{blue} {$\backslash$subseteq} 31 | \item $\subset$ -- Is a proper subset of; $A\subset B$ asserts that every element in A is an element in B but $A\neq B$. \textcolor{blue} {$\backslash$subset} 32 | \item $\cap$ -- Intersection ("and", "both true"); $A\cap B$ is the intersaction of A and B. \textcolor{blue} {$\backslash$cap} 33 | \item $\cup$ -- Union ("or"); $A\cup B$ says we have a union of A and B. \textcolor{blue} {$\backslash$cup} 34 | \item $\times$ -- \textbf{Cartesian Product}; For $A=\{1,2\}$ and $B=\{3,2\}$, we'll have $A\times B$ as $\{1,3\}, \{1,2\}, \{2,3\}, \{2,2\}$. \textcolor{blue} {$\backslash$times} 35 | \item $\setminus$ -- Set-minus; $A\setminus B$ says that we have set with all elements of A minus B. \textcolor{blue} {$\backslash$setminus} 36 | \item $\overline{A}$ -- The complement set of A; a set pf every element which is not in set A. \textcolor{blue} {$\backslash$overline} 37 | \item $|A|$ -- \textbf{Cardinality} (size) of A; The number of elements in the set A. \$\textbackslash in\$ 38 | \end{itemize} 39 | 40 | 41 | 42 | \subsection*{Logical Connectives} 43 | \begin{itemize} 44 | \item $\wedge$ -- \textbf{Conjuction}. Similar as "and". \textcolor{blue} {$\backslash$wedge} 45 | \item $\vee$ -- \textbf{Discjuntion}. Similar as "or". \textcolor{blue} {$\backslash$vee} 46 | \item $\Rightarrow$ -- \textbf{Implication}. Similar as "if-them". \textcolor{blue} {$\backslash$Rightarrow} 47 | \item $\neg$ -- \textbf{Negation}. simply "not". \textcolor{blue} {$\backslash$neg} 48 | \item $\iff$ - \textbf{Equivalent}. "If and only if". 49 | \end{itemize} 50 | 51 | \subsection*{Qualifiers} 52 | \begin{itemize} 53 | \item $\exists$ -- \textbf{Existential qualifier}. Reads "there is"; $\exists x(x<0)$ reads as "there is number $x$ that is less than zero". \textcolor{blue} {$\backslash$exists} 54 | \item $\forall$ -- \textbf{Universal qualifier}. Reads "for all" or "every"; $\forall x(x>0)$ reads as "for every number $x$ that is more than zero". \textcolor{blue} {$\backslash$forall} 55 | \end{itemize} 56 | 57 | 58 | 59 | To use {$\backslash$mathbb} notations please first add the package \textbf{amsfonts} at the top of you document. 60 | 61 | \end{document} -------------------------------------------------------------------------------- /Discord/bots/kanyeWest.py: -------------------------------------------------------------------------------- 1 | # kanyeWest.py 2 | import os 3 | import random 4 | import requests 5 | import random 6 | import json 7 | import datetime 8 | import dadJokes as dj 9 | import descriptions as d 10 | from discord.ext import commands, timers 11 | from dotenv import load_dotenv 12 | 13 | # Loads Discord keys using dotenv module 14 | load_dotenv() 15 | TOKEN = os.getenv('DISCORD_TOKEN2') 16 | 17 | # Defines prefix which will be used to call bot for action. 18 | bot = commands.Bot(command_prefix='!', description='Kanye West himself!') 19 | bot.timer_manager = timers.TimerManager(bot) 20 | 21 | @bot.event 22 | async def on_ready(): 23 | print('Logged in as') 24 | print(bot.user.name) 25 | print(bot.user.id) 26 | print('------') 27 | 28 | """ 29 | Gets a quote from Kanye REST API and posts in the channel 30 | """ 31 | @bot.command(name='preach', help='-Kanye shares his wisdom.') 32 | async def kanye_wisdom(ctx): 33 | quote = requests.get('https://api.kanye.rest?format=text').text 34 | await ctx.send(quote) 35 | 36 | """Prints Kanye West's bio.""" 37 | @bot.command(name='bio', help='-Learn who is Kanye from Kanye') 38 | async def kanye_bio(ctx): 39 | await ctx.send('I\'m an American rapper, singer, songwriter, record producer, composer, entrepreneur and fashion designer and Special guest @OnlineMCIT.') 40 | 41 | """Tells a dad joke. Takes string(s) as an argument.""" 42 | @bot.command(name='joke', help='-Kanye tells you a dad-joke based on a given word(s)') 43 | async def kanye_joke(ctx, *args): 44 | await ctx.send(dj.choosing_joke(args)) 45 | 46 | """Kanye provides information regarding the programm.""" 47 | @bot.command(name='demographics', help='-Gives the Student Demographics') 48 | async def deadline(ctx): 49 | await ctx.send( 50 | 'Countries Represented: 32' \ 51 | + '\nUS States/Territories Represented: 41' \ 52 | + '\nAge range: 20s-60s' \ 53 | + '\nUS Citizens: 49%' \ 54 | + '\nInternational Students: 51%' \ 55 | + '\nWomen: 38%' \ 56 | + '\nMen: 62%' \ 57 | + '\nTotal Program Enrollment: 626' \ 58 | + '\nIncoming Class Size: 250-350' 59 | ) 60 | 61 | """Provides info about the courses""" 62 | @bot.command(name='list', help='-Lists core and currently available elective courses') 63 | async def courses(ctx): 64 | await ctx.send( 65 | 'Core:\n' \ 66 | + 'CIT 591 Introduction to Software Development;\n' \ 67 | + 'CIT 592 Mathematical Foundations of Computer Science;\n' \ 68 | + 'CIT 593 Introduction to Computer Systems;\n' \ 69 | + 'CIT 594 Data Structures & Software Design;\n' \ 70 | + 'CIT 595 Computer Systems Programming;\n' \ 71 | + 'CIT 596 Algorithms & Computation;\n' \ 72 | + 'Electives:\n' \ 73 | + 'CIS 515 Fundamentals of Linear Algebra & Optimization (Math for ML);\n' \ 74 | + 'CIS 547 Software Analysis;\n' \ 75 | + 'CIS 549 Wireless Communications for Mobile Networks and Internet of Things;\n' \ 76 | + 'CIS 550 Database & Information Systems;\n' \ 77 | + 'CIS 581 Computer Vision & Computational Photography;\n' \ 78 | + 'ESE 542 Statistics for Data Science;' 79 | ) 80 | 81 | @bot.command(name='course', help='-Gives description of a specific course. Exmaple: !course cit591') 82 | async def course_info(ctx, course_number): 83 | if course_number.lower() == 'cit591': 84 | await ctx.send(d.cit591()) 85 | elif course_number.lower() == 'cit592': 86 | await ctx.send(d.cit591()) 87 | elif course_number.lower() == 'cit593': 88 | await ctx.send(d.cit593()) 89 | elif course_number.lower() == 'cit594': 90 | await ctx.send(d.cit594()) 91 | elif course_number.lower() == 'cit595': 92 | await ctx.send(d.cit595()) 93 | elif course_number.lower() == 'cit596': 94 | await ctx.send(d.cit596()) 95 | elif course_number.lower() == 'cis515': 96 | await ctx.send(d.cis515()) 97 | elif course_number.lower() == 'cis547': 98 | await ctx.send(d.cis547()) 99 | elif course_number.lower() == 'cis549': 100 | await ctx.send(d.cis549()) 101 | elif course_number.lower() == 'cis550': 102 | await ctx.send(d.cis550()) 103 | elif course_number.lower() == 'cis581': 104 | await ctx.send(d.cis581()) 105 | elif course_number.lower() == 'ese542': 106 | await ctx.send(d.ese542()) 107 | 108 | @bot.command(name='remind', help='-Sets up reminder. The date must be in ``Y/M/D`` format.') 109 | async def remind(ctx, time, *, text): 110 | try: 111 | date = datetime.datetime(*map(int, time.split("/"))) 112 | await ctx.send(f"I'll remind you: *{text}* on: {date}!") 113 | bot.timer_manager.create_timer("reminder", date, args=(ctx.channel.id, ctx.author.id, text)) 114 | except: 115 | await ctx.send('Error: after command first indicate time, then reminder msg. ' \ 116 | + 'The time format should be in 24-h format with `Y/M/D/h/m/s`, where `h/m/s` is optional') 117 | 118 | @bot.event 119 | async def on_reminder(channel_id, author_id, text): 120 | channel = bot.get_channel(channel_id) # grab the channel where bot will post the reminder 121 | user = bot.get_user(author_id) # grab the user where bot will post the reminder 122 | await channel.send(f"Hey, <@{author_id}>, remember to: **{text}**") 123 | await user.send(f"Hey, <@{author_id}>, remember to: **{text}**") 124 | 125 | bot.run(TOKEN) -------------------------------------------------------------------------------- /Discord/bots/descriptions.py: -------------------------------------------------------------------------------- 1 | def cit591(): 2 | return '**CIT 591 Introduction to Software Development**' + \ 3 | '\nThis course is an introduction to fundamental concepts of programming and computer science for students who have little or no experience in these areas. Includes an introduction to programming using Python, where students are introduced to core programming concepts like data structures, conditionals, loops, variables, and functions. Also provides an introduction to basic data science techniques using Python. The second half of this course is an introduction to object-oriented programming using Java, where students are introduced to polymorphism, inheritance, abstract classes, interfaces, and advanced data structures. Students will also learn how to read and write to files, connect to databases, and use regular expressions to parse text. This course includes substantial programming assignments in both Python and Java, and teaches techniques for test-driven development and debugging code.' 4 | 5 | def cit592(): 6 | return '**CIT 592 Mathematical Foundations of Computer Science**' \ 7 | + '\nThis course introduces students to math concepts that form the backbone of the majority of computer science. Topics covered include sets, functions, permutations and combinations, discrete probability, expectation, mathematical induction, and graph theory. The goal of the course is to ensure that students are comfortable enough with the math required for most of the CIS electives.' 8 | 9 | def cit593(): 10 | return '**CIT 593 Introduction to Computer Systems**' \ 11 | + '\nPrerequisite: This course does not have prerequisites, but CIT 591 is a co-requisite.' \ 12 | + '\nThis course provides an introduction to fundamental concepts of computer systems and computer architecture. Students learn the C programming language and an instruction set (machine language) as a basis for understanding how computers represent data, process information, and execute programs.' 13 | 14 | def cit594(): 15 | return '**CIT 594 Data Structures & Software Design**' \ 16 | + '\nPrerequisite: Students in this course are expected to have completed or waived CIT 591.' \ 17 | + '\nThis course focuses on data structures, software design, and advanced Java. The course starts off with an introduction to data structures and basics of the analysis of algorithms. Important data structures covered include arrays, lists, stacks, queues, trees, hash maps, and graphs. The course also focuses on software design and advanced Java topics such as software architectures, design patterns, and concurrency.' 18 | 19 | def cit595(): 20 | return '**CIT 595 Computer Systems Programming**' \ 21 | + '\nPrerequisite: CIT 593' \ 22 | + '\nThis course is a continuation of CIT 593 and introduces students to fundamental concepts in computing systems. The course is divided into two parts. The first half of the course introduces important concepts in modern operating systems: processes, scheduling, caching, and virtual memory. The second half of the course provides an introduction to fundamental concepts in the design and implementation of networked systems, their protocols, and applications. The course will use the C program language, and will develop your knowledge on C system calls, and libraries for process/thread creation and manipulation, synchronization, and network communication.' 23 | 24 | def cit596(): 25 | return '**CIT 596 Algorithms & Computation**' \ 26 | + '\nPrerequisite: CIT 592 Co-requisite: CIT 594 (Taking concurrently is allowed but taking beforehand is preferred).' \ 27 | + '\nThis course focuses primarily on the design and analysis of algorithms. It begins with sorting and searching algorithms and then investigates graph algorithms. In order to study graph algorithms, general algorithm design patterns like dynamic programming and greedy algorithms are introduced. A section of this course is also devoted to understanding NP-Completeness.' 28 | 29 | def cis515(): 30 | return '**CIS 515 Fundamentals of Linear Algebra & Optimization (Math for Machine Learning)**' \ 31 | + '\nPrerequisites: Calculus. Suggested prerequisite: Undergraduate course in linear algebra (helpful but not required)' \ 32 | + '\nThere are hardly any machine learning problems whose solutions do not make use of linear algebra. This course presents tools from linear algebra and basic optimization that are used to solve various machine learning and computer science problems. It places emphasis on linear regression, data compression, support vector machines and more, which will provide a basis for further study in machine learning, computer vision, and data science. Both theoretical and algorithmic aspects will be discussed, and students will apply theory to real-world situations through MATLAB projects.' 33 | 34 | def cis547(): 35 | return '**CIS 547 Software Analysis**' \ 36 | + '\nPrerequisites: CIT 592, CIT 594, CIT 595. Specifically: – Assignments involve programming in C++ using the LLVM compiler infrastructure. – Lectures and exams presume basic knowledge of algorithms' \ 37 | + '\nThis course provides a rigorous and hands-on introduction to the field of software analysis — a body of powerful techniques and tools for analyzing modern software, with applications to systematically uncover insidious bugs, prevent security vulnerabilities, automate testing and debugging, and improve our confidence that software will behave as intended. Topics covered include dynamic analysis, random testing, automated test generation, dataflow analysis, constraint solving, type inference, and symbolic execution. Lectures present software analysis concepts and algorithms in a language-independent manner, while weekly programming labs involve realizing them concretely in C++ using the LLVM compiler infrastructure. This course will enable you to become a better software engineer or security analyst by learning a rich repertoire of software analysis ideas and know-how to apply them to specific scenarios in practice.' 38 | 39 | def cis549(): 40 | return '**CIS 549 Wireless Communications for Mobile Networks and Internet of Things**' \ 41 | + '\nPrerequisites: CIT 593 and CIT 595' \ 42 | + '\nThis course covers today’s state-of-the-art wireless technology 4G LTE, the next-generation wireless technology, 5G NR, and Wi-Fi technologies. Internet of Things (IoT) and the network slicing technologies in the 4G and 5G mobile networks, which are the parts of the main drivers for 5G, and the Docker container and Kubernetes will be also covered. Students will use an end-to-end LTE and Wi-Fi application performance simulation platform to analyze network protocols and analyze the impact on end-to-end application performance over the wireless network. Students will also build a simple IoT service with an IoT client device emulator and a real IoT server platform on the Internet. The course starts with the fundamental wireless technology background and networking topics with hands-on projects to help students build a foundation for the course, and the course includes contemporary research paper readings, assignments to utilize the simulation platform and implementation projects. The simulation platform provides network protocol stacks and base source code.' 43 | 44 | def cis550(): 45 | return '**CIS 550 Database & Information Systems**' \ 46 | + '\nPrerequisites: CIT 591, CIT 592; Corequisite: CIT 596' \ 47 | + '\nStructured information is the lifeblood of commerce, government, and science today. This course provides an introduction to the broad field of information management systems, covering a range of topics relating to structured data, from data modeling to logical foundations and popular languages, to system implementations. We will study the theory of relational data design; the basics of query languages; efficient storage of data, execution of queries and query optimization; transactions and updates; and “big data” and NoSQL systems.' 48 | 49 | def cis581(): 50 | return '**CIS 581 Computer Vision & Computational Photography**' \ 51 | + '\nPrerequisites: CIT 591, CIT 592, CIT 593 and CIT 594. Students may take CIT 595 and/or CIT 596 concurrently with this elective.' \ 52 | + '\nThis is an introductory course to computer vision and computational photography. This course will explore four topics: 1) image feature detection, 2) image morphing, 3) image stitching, and 4) deep learning related to images. This course is intended to provide a hands-on experience with interesting things to do on images/pixels.The world is becoming image-centric. Cameras are now found everywhere: in our cell phones, automobiles, and even in medical surgery tools. In addition, computer vision technology has led to innovations in areas such as movie production, medical diagnosis, biometrics, and digital library. This course is suited for students with any engineering background who have a basic understanding of linear algebra and programming, along with plenty of imagination.' 53 | 54 | def ese542(): 55 | return '**ESE 542 Statistics for Data Science**' \ 56 | + '\nPrerequisites: CIT 592 and Programming background' \ 57 | + '\nIn this course, students will learn a broad range of statistical and computational tools to analyze large datasets. This course provides a solid foundation of data science, statistics and machine learning to make data-driven predictions via statistical modeling and inference. Using case studies and hands-on exercises, the student will have the opportunity to practice and increase their data analysis skills using Python. The objective of these case studies is to identify and implement appropriate modeling and analysis techniques in order to extract meaningful information from large datasets.' 58 | --------------------------------------------------------------------------------