Lectures/IA/2019

From MCLab
Jump to: navigation, search

Contents

인터넷응용(캡스톤디자인) Class Overview

평가

  • 퀴즈 및 코딩시험 (25%)
  • 과제물 (50%)
    Exercises/Lab Reports - 매회 10점 만점
    Programming Assignments - 매회 20점 만점 (난이도에 따라 조정될 수 있음)
  • Team Project (24%) - (팀 성적 80% + 개인공헌도 20% 가 반영됨)
  • 출석 (1%)

조교

박지훈, phone: 010-9910-4510, [1]
류형오, phone: 010-2883-3130, [2]

공지사항

Installing Python 3 for Windows

Python 3.6 이상이 설치되어 있으면 이것을 사용하면 된다. (확인하기 위해 명령창에서 python --version 명령을 내려보자. Python 2가 설치되었다면, uninstall하거나 Python 3를 추가 install 하자. (혼동되지 않게 주의 필요)

  1. Download latest Python 3.x.x https://www.python.org/downloads/
  2. python 을 명령으로 만들기 위해 'Add Python 3.x.x to PATH'를 체크하라.
    참고: PATH 환경변수는 명령을 실행할 프로그램을 찾을 path들을 나열

PyCharm 설치

Python IDE 중 하나인 PyCharm을 설치한다. 무료로 이용하기 위해서는 Community Edition을 골라 download 받는다.

https://www.jetbrains.com/pycharm/ 으로 가서 화면 위편의 Download 버튼을 누른 후 Community 용으로 download.


강의자료

Python Programming

  1. Onto Python
  2. Control Flow
  3. Functions
  4. Interface Design
  5. Data Structures
  6. Generators https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/generator.ipynb
  7. Modules https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/modules.ipynb
  8. Files https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/files.ipynb
  9. Errors and Exceptions
    Exception hierarchy

Object-Oriented Programming

  1. Overview
  2. Classes and Instances https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/oop1.ipynb
  3. Magic methods https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/oop2.ipynb
  4. Inheritance and Composition https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/oop3.ipynb
  5. PyGame Example http://openbookproject.net/thinkcs/python/english3e/pygame.html
    PyGame official site https://www.pygame.org/docs/
    PyGame Tutorials http://pygametutorials.wikidot.com/
References
  1. The Python Tutorial, https://docs.python.org/3/tutorial/index.html
  2. How to Think Like a Computer Scientist: (Rhodes Local Edition) http://openbookproject.net/thinkcs/python/english3e/index.html
  3. 점프투파이썬, https://wikidocs.net/11
  4. Tutorials, Python Course https://www.python-course.eu/index.php
Manual

Advanced Python

  1. Regular expressions https://developers.google.com/edu/python/regular-expressions
    See also
    Regular expressions (PDF)
    https://www.python-course.eu/python3_re.php
    http://python-textbok.readthedocs.io/en/1.0/Useful_Libraries.html#matching-string-patterns-re
  2. Python and SQL: SQL Database Interfaces
    참고자료: Python with SQLite
    SQLite, MySQL https://www.python-course.eu/sql_python.php
  3. Multi-threaded programming
    threading — Manage Concurrent Operations Within a Process
    Threads, Lab. Threading
    https://www.tutorialspoint.com/python3/python_multithreading.htm
  4. Unit Testing with Python
    http://www.drdobbs.com/testing/unit-testing-with-python/240165163
  5. Functional Programming in Python
    https://github.com/jinpyohong/ia/blob/master/functional_programming.ipynb
  6. Decorators
    https://github.com/jinpyohong/ia/blob/master/decorators.ipynb
  7. Data Science using Anaconda
    numpy
    pandas
    Visualization with matplotlib
    Machine learning with scikit-learn
or download or clone for Jupyter notebook files: https://github.com/jinpyohong/data_science.git

Web Programming

Client-side

  1. HTML, CSS, JavaScript, http://www.w3schools.com/
  2. Fetching Internet Pages https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/urllib.ipynb
    HOWTO Fetch Internet Resources Using The urllib Package https://docs.python.org/3/howto/urllib2.html
  3. Web Crawling https://np.hufs.ac.kr/user/ias/notebooks/Public/Handout/webcrawling.ipynb
    Beautiful Soup Documentation https://www.crummy.com/software/BeautifulSoup/bs4/doc/
    참고: Python Crawling(2019 update) - by 한민규

Server-side

WSGI
Web Application Programming in WSGI
Download Web App Examples
Web Python http://wsgi.tutorial.codepoint.net/
Django Framework
- a high-level Python Web framework that encourages rapid development and clean, pragmatic design
Django tutorial, https://github.com/jinpyohong/ia/blob/master/django_tutorial.ipynb
Official documentation, https://docs.djangoproject.com/
Django project sample - by 한민규
Hosting Servers from Cloud
IaaS, PaaS
Amazon AWS 이해하기 - by 한민규
MS Azure

동영상 강의 참조

참고

Python Network Programming

Network Programming, Part 1: Introduction

Network Programming, Part 2: Clients

Network Programming, Part 3: Servers

Client/server for IoT - an example code

HTTP and HTTP client using socket

Sources

Clone or download from github: https://github.com/jinpyohong/np.git
  1. IoT application example: iot.zip
참고 자료
  1. Socket Programming HOWTO https://docs.python.org/3/howto/sockets.html
  2. socketserver module – Creating network servers https://pymotw.com/3/socketserver/index.html

Git - source version control for teamwork

Git workflow

Tools for Git

  • Remote repository services
    GitHub에서 public repository는 무료. 학생이면 private repository도 무료로 쓸 수 있다.
    GitHub Education - Student Development Pack 가입하기
    BitBucket은 public repository 무료, 5개까지 private repository 무료. https://bitbucket.org/
  • Git Clients
    Download Git Bash (command mode)
    PyCharm 등 IDE에서 git을 사용하기 위해 설치 필요함
    Git client with GUI: Download Sourcetree
    command를 몰라도 사용 가능
    널리 이용되고 있으며, github, bitbucket 등 여러 원격 저장소 서비스를 지원한다.
    GitHub에서 제공되는 GitHub Desktop도 있다.

PyCharm에서 Git 사용하기

git.exe가 설치되어야 한다. (Git Bash 설치하면 충분)

  1. git.exe 설치 확인
    File >> Settings >> Version Control >> Git: Git executable이 설정되었는지 확인.
  2. GitHub account 등록
    File >> Settings >> Version Control >> GitHub: GitHub 계정 등록 --> Apply, OK
  3. PyCharm project에 존재하는 source를 GitHub에 등록하려고 할 때:
    1. Local repository를 만든다
      VCS >> Import into Version Control >> Create Git Repository
      이후 Add, Commit 등을 사용한다: VCS >> Git >> git command들
    2. GitHub에 remote repository를 생성한 다음, push한다.
      VCS >> Import into Version Control >> Share Project on GitHub
      VCS >> Git >> Push
  4. GitHub의 remote repository를 가져올 때:
    1. VCS >> Checkout from Version Control >> git: clone할 remote repository를 선택한다.

Tutorials

  • Github로 학교 팀프로젝트 하기, 경희대학교, 2016, Slide Share [3]
  • 누구나 쉽게 이해할 수 있는 Git 입문 - 예제로 Tortois git client를 사용함.
  • Pro Git book, 2nd Ed. [4] - 상세한 내용은 이 책을 봐야.
  • 초심자를 위한 Github 협업 튜토리얼 (with 토끼와 거북이), [5]
  • 동영상 강좌: Sourcetree를 git 사용하기 [6]
  • 동영상 강좌, 지옥에서 온 Git [7]

Exercises

EX-1. Basic Python Syntax , Loop and Functions (3/8, 23:59)

다음 문제를 다운로드하여 PyCharm 이용하여 답하고 다음을 e-class에 올린다. 답안은 주석처리된 문제 바로 밑에 작성한다.

문제
EX-1. Basic Python Syntax, Loop and Functions
제출 요령
작성한 source file(py)과 실행결과(pdf)를 zip으로 압축해 제출

EX-2. Lists and String (3/20, 23:59)

List

http://openbookproject.net/thinkcs/python/english3e/lists.html#exercises 의 문제 5 ~ 10 에 대한 code를 작성하라.

String

http://openbookproject.net/thinkcs/python/english3e/strings.html#exercises 에서 문제 1 ~ 13 에 대한 code를 작성하라.

EX-3 Functions and Playing Cards (4/1)

다음 두 개의 notebook file을 download하여 주어진 문제에 답하라.

Functions https://np.hufs.ac.kr/user/ias/notebooks/Public/Exercise/EX_functions.ipynb
Playing Cards https://np.hufs.ac.kr/user/ias/notebooks/Public/Exercise/EX_Cards.ipynb
참고 개인 컴퓨터에서 Jupyter notebook의 사용
(Anaconda 패키지가 설치되어 있어야 함)
  1. Link를 click하면 Jupyter notebook 화면이 뜰 것이다. (처음이면 ias 계정으로 loggin) 다음 순서대로 수행하여 각자의 컴퓨터에 download 받고
    File >> Download as >> Notebook (.ipynb)
  2. 이 파일을 여러분 개인 계정 아래로(예: MyDocument 폴더) 옮긴다. (Jupyter Notebook은 자신의 계정 폴더 아래만 access하게 제한한다.)
  3. 여러분 컴퓨터에 설치된 Jupyter Notebook 서버를 실행한다. 그러면, 서버 창이 뜬 후, browser에 Jupyter 창이 뜬다. 여기가 Jupyter Home directory이다. 여기에서 해당 .ipynb 파일을 찾아 클릭하면, 새 tab에서 노프북 파일을 뜨게 된다.
결과물의 제출

결과가 노트북 파일 처음부터 끝까지 한번에 잘 실행됨을 보이기 위해 Kernel을 Retart하고 모든 Cell을 순서대로 run 시키자. 이 때의 file을 결과로 제출해야 한다.

Kernel >> Restart & Run All

주피터 노트북을 사용하려면 특수 키 몇 가지를 알 필요가 있다. Help >> Keyboard shortcut 참조

EX-4. Blackjack (4/12)

다음 주어진 Jupyter notebook을 완성하라.

https://np.hufs.ac.kr/user/ias/notebooks/Public/PA/cards.ipynb

Programming Assignments

PA-1. Game using Turtle Graphics (3/18까지, 2인 1조)

2인 1조로 random하게 조가 구성되어 있다. (e-class 팀프로젝트 참조) Turtle graphics를 이용하여 게임을 창안하고 구현하라. ....

PA-2 Word Frequency (3/28)

다음 문제에 답하라. (2인 1조로 새로 팀이 random하게 구성됨)

https://np.hufs.ac.kr/user/ias/notebooks/Public/PA/PA_Word_Frequency.ipynb

팀장만 제출할 수 있다. 팀장은 자율적으로 정해서 e-class에 등록하고 결과물을 제출한다.

PA-3 Client-side Web Programming: HTML, CSS, JavaScript (5/3)

W3School 사이트(http://www.w3schools.com/) 로 가서 HTML, CSS, JavaScript를 읽고,문제에 답하라. (2인 1조)

참고
  1. 환경변수와 http server 실행 - 정재원
  2. HTML, CSS, JavaScript 18/04/03 강의자료 - 정재원

PA-4 Web Crawlling (5/6)

중앙 일간지 하나를 골라서 최근 7일간 뉴스 제목란에 가장 hot한 단어(가장 빈도수 높은 단어) 10위까지를 찾아내라. (2인 1조)

Interactive하게 작업해야 하기 때문에 Jupyter Notebook이 편리할 것이다. 결과를 찾아 내기까지 Notebook으로 여러 시도를 해 보고, 결과를 발견해 보자.

PA-5 Getting Started with Django (5/13)

Django documentation에 있는 tutorial Writing your first Django app, Part 1 - Part 7까지 따라서 polls application을 완성하고, Django at a Glance page를 참고하여 news app도 추가하라.

참고: Part 1 - 7에 따라 완성한 Web application을 참고하세요.

제출요령
Web browser에 보이는 모든 browser 화면 전체를 screen shot을 캡쳐하고, 마지막에 git history 화면을 캡쳐하여 하나의 pdf 파일로 만들어 제출한다.
e-class에 GitHub repository URL을 적는다.

PA-6 IoT Client/Server (6/3)

임베디드 시스템(마이크로프로세서) 강좌에서 배운 Raspberry Pi와 Arduino sensor와 actuator를 활용한, IoT client와 server를 구현하라. server 뒤에는 DB가 있으며 sensor data들은 이 DB에 저장된다.

이 DB를 admin하고 검색 및 요약 정보를 보여주는 Web application server를 Django framework으로 구현하라.

조 구성
각 팀마다 2인 1조로 구성
제출물
source code: GitHub link만 eclass에 기재
IoT client/server가 잘 작동함을 보여주는 screen capture
Web application server의 작동을 보여주는 browser 화면 capture

Team Project

PyGame (4/11)

PyGame 모듈을 설치하고 이를 이용하여 새로운 게임을 창안하여 Class로 구현하라.

팀구성
3인 1팀으로 random하게 배정됨
제출물
source code (4/10까지)
발표 및 demo
4/11 강의실

More PyGame (4/17)

지난 PyGame 팀프로젝트와 다른 PyGame을 구현하되 다음 사항을 따라야 한다.

  • 또 다른 PyGame을 구상하고 class로 우선 구현해 본다.
  • Refactoring: 지난 PyGame과 새로운 PyGame에서 가능한 재사용 가능한 공통부분을 최대한 도출하여 공통되는 super class를 작성한다.
  • Rewriting: 지난 PyGame과 새로 구현하는 PyGame을 super class에서 상속받고 재작성한다.

상기한 3개의 class는 각각 다른 모듈(파일)로 구현해야 한다. 각 모듈에는 해당 class를 testing하는 code를 작성해야 한다. 예시:

class XGame:
    ...

if __name__ == "__main__":
    # test code here
발표 및 데모
4/18일 수업시간

X Project

팀구성
4-5인으로 팀을 구성하여 Team Project를 진행한다. 주제는 제한이 없다.
팀명(영문), 팀원, 팀장을 e-class에 제출
평가요소
팀 평가와 개인평가는 4:1
팀 평가(80%): 제안서, 기술의 진보성, 프로젝트의 난이도, 완성도 및 활용가능성, 발표, 보고서의 품질 등
개인 평가(20%): 팀 공헌도 (상대평가)
제안서 작성 및 발표 (5/21)
PPT로 작성 제출
최종결과 발표 및 시연 (6/13)

최종보고서를 작성하여 발표하고 결과물을 시연하다.

제출물
  1. 최종보고서(PDF)
  2. 팀 GitHub respository: URL만 e-class에서 제출시 입력

활용 장비

Arduino

Arduino 강좌
아두이노 강좌 - 1-1강 소개와 프로그래밍 기초 https://www.youtube.com/watch?v=fiZc5avtMCw
Arduino H/W 및 IDE 설치
Getting Started with Arduino on Windows [8]
실험 따라하기
가치창조기술 wiki의 아두이노 강좌 [9]
기타 교육자료
Introduction to Arduino - from Spakrfun [10]
MIT Arduino Tutorial #1 동영상 [11]
Spooky Projects – Introduction to Microcontrollers with Arduino [12]
Arduino Tutorial - from Sparkfun [13]
Arduino 관련 부품
ArtRobot [14]

RaspberryPi 3

Download Media:RaspberryPi3.pdf 라즈베리파이 3 구성
라즈베리파이 개발환경

-->

과거 Team Project 결과물

2018 인터넷응용 Team Project 결과물

2017 인터넷응용 Team Project 결과물

2016 인터넷응용 Team Project 결과물