Lectures/IA/2016

From MCLab
Jump to: navigation, search

Contents

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

평가

  • 퀴즈 및 코딩시험 (20%)
  • 과제물 (75%)
    Lab Reports - 매회 10점 만점
    Programming Assignments - 매회 20점 만점 (난이도에 따라 조정될 수 있음)
    Team Project - 300점 만점 (팀 80% + 개인공헌도 20%)
    개인과제(Programming Assignment), 실습과제, Team Project, 시험은 실기로 1회 실시
  • 출석 (5%)

조교

박경수, phone : 010-2592-0887, ks08_18@naver.com, 공대 425호

공지사항

과제물 제출요령
별도의 명기 없으면 PDF 파일로 e-class에 제출하세요. (보통 강의 전날 자정에 마감됨)
A+, A0, ...D0, F 로 평가되며, 10점 만점 점수로 환산하면 10, 9, ..., 3, 0 (미제출인 경우 F)
지각제출을 허용하는 경우 지체한 1일당 한 등급씩 낮아짐. (만점이 10% 하락)

Coding Exam

4/23(토) 10:00 -, 301호실

Exam-4 HTML

5/9(월) 13:35 - 13:50 (15분간)
다음 site에서 HTML Tutorial, HTML Forms를 자습하여 시험을 준비한다. 읽어 보면서 'Try it Yourself'를 해 보면 쉽게 익힐 수 있다. (특히, HTML Forms를 잘 익힐 것.)
http://www.w3schools.com/html/default.asp
중간에 나오는 Exercises를 풀어보기 바랍니다. 많은 문제들이 여기에서 출제됩니다.

프로젝트 팀 구성(5/2)

5인 1팀으로 프로젝트 팀을 구성하라. 자세한 사항은 e-class 팀프로젝트 참조하여 등록한다.
5인 1팀으로 총 9개팀.

서버 계정 신청 (click)

수강신청자 전원에서 np.hufs.ac.kr에 계정이 부여되니 신청하세요. ID는 자동적으로 지정되며, 입력한 password는 이 서버에 login하기 위한 password이니 기억해 두세요.
List 버튼을 눌러 계정이 만들어졌는지 확인하세요. np가 'created'나 'exists'이면 사용할 수 있습니다.
계정이 만들어졌으면, ssh나 Xshell(Windows에서)로 접속해 보세요

강의자료

Introduction to Python Programming

Handouts
  1. Python Programming - Part I -- updated!!
  2. Python Programming - Part II -- updated, 3/25/2016
  3. Python Programming - Part III -- updated, 4/3/2016
참고자료
  1. Computer Networks Chapter 2 Application Layer
  2. Appendix B. Reference Tables in Core Python Application Programming
  3. Python 2 vs Python 3
On-line Books
  1. Allen Downey, Think Python, O'Reilly. On-line free book, 한글 번역판 (편집 중)
  2. 점프 투 파이썬
  3. 왕초보를 위한 Python 2.7
On-line Tutorials
  1. Python Tutorial, tutorialspoint http://www.tutorialspoint.com/python/index.htm
    PDF version
  2. Official Tutorial https://docs.python.org/2/tutorial/index.html
Manual

Advanced Python Programming

Handouts
  1. Tkinter GUI
  2. Useful Modules, 한글처리
  3. Regular Expressions
Unit Testing with Python

Python Network Programming

Handout
  1. Network Programming - Introduction
    download Lab. NP - Introduction (ZIP)
  2. Client-side Programming
    download Lab. Clients
  3. Threads
    download Lab. Threading
  4. Server-side Programming - updated in 5/25/2016
  5. SQL Database Interfaces
참고 자료

Web Application: Server-side Programming

Handout
  1. Web Application Programming in WSGI
    Download Web App Examples
Web
Web Applications

특강(5/30)

특강 주제
Bitbucket-SourceTree
Android 개발이슈
강사
(주) 퍼니셀 한민규 대표이사

특강(6/2) 18:00-20:00

특강 주제
Django Framework
준비사항 - 미리 install하세요.
Download and install django
Django REST framework QuickStart http://www.django-rest-framework.org
동영상 강의 참조
강의자료
DjangoFramework
강사
(주) 퍼니셀 한민규 대표이사

Socket API and UNIX Network Programming in C

Handouts
UNIX Network Programming (PDF)
참고자료
POSIX Thread Programming, https://computing.llnl.gov/tutorials/pthreads/
Multithreaded Programming, http://randu.org/tutorials/threads/

Python Books and Sites

실습/숙제/팀프로젝트 환경

Lab

Lab 1. Onto Python (2/29)

Step 1. Setup Python
  1. Python 2.7이 설치되었으면 skip한다.
    명령창에서 'python' 명령을 입력해 보라. (Ubuntu 등 Linux machine은 기본적으로 설치됨)
  2. 옛날 버전이 설치되었으면 제거한다. 최신버전을 설치하자.
    Installing Python on Windows
Step 2. Run Python Interpreter
Handout 참조
Step 3. Run Python Script
Handout 참조

Lab 2. Basic Python Syntax (3/3)

수강하며 IDLE shell을 이용하여 calculator 처럼 사용하면서 Python 기초 문법을 익힌다.

Report - 3/3 자정까지
문제를 다운로드하여 답하여 e-class에 올린다: Lab 2. Basic Python Syntax (DOCX)
IDLE에서 문제를 풀고, 이를 copy하여 word 파일에 paste하여 답하고, PDF 파일로 변환 저장하여 e-class에 첨부파일로 upload한다.

Lab 3. Loops and Funcions (3/7)

수업 시간에 다루었던 Loop와 Function을 활용하여 Python 프로그램을 작성한다. 과제 제출 시 파일 이름을 '학번_이름'으로 하여 PDF로 변환한 뒤 제출한다.

Lab 4. String and List (3/10)

위 문제에 대해 Python Program을 작성하라.

  • 스크린 캡쳐하지 말고 코드와 실행결과를 함께 copy하여 문제 파일에 복사한다.
  • PDF로 변환하지 말고, DOCX 파일명만 고쳐 제출하면 충분하다.

질문이 많아 문제를 보다 명확하게 정의했으니 다시 다운로드 받으세요. (3/10 11:47)

Lab 4-1 Simple URL Parser (3/14)

Lab 5 Sorting and Dictionaries (3/17)

Lab 6 List Comprehensions (3/17)

Lab 7 Playing Cards (3/21)

updated n 3/14/ 11:28

Lab 8. Functions (3/24)

Lab 9. Files - Word Frequency (3/28)

주어진 파일의 word의 빈도수를 구하라. 자세한 내용은 다음의 source를 참고. 같이 첨부된 파일 small.txt와 alice.text 각각에 대해 시험해 보자.

Command line에서 text file name과 option을 passing해야 하므로 다음과 같이 명령창에서 실행시켜야 한다.

$ python wordfreq.py small.txt --count
$ python wordfreq.py alice.txt --count
$ python wordfreq.py small.txt --topcount
$ python wordfreq.py alice.txt --topcount
제출요령
source file과 명령창에서 실행한 결과를 갭춰한 PNG 파일을 포함한 zip 파일
  • zip 파일명은 Wordfreq-성명.zip 으로

Download wordfreq.zip (ZIP 파일)

  • wordfreq.py - source to be completed
  • small.txt - small text file
  • alice.txt - big text file

Lab 10. Modules (3/31)

질문이 많아 문제를 보다 명확하게 정의했으니 다시 다운로드 받으세요. (3/31 13:20)

Lab 11. Install Anaconda - Open Data Science Platform

참고. Install Eclipse for Python

Lab 12. Functional Programming (4/4)

Lab 13. Classes (4/4)

Lab 14. Set Objects (4/7)

Starting source: File:Setwrapper.zip

Lab 15. Card and Deck Class (4/7)

(rank, suit) tuple 로 표현했던 card를 class를 이용하여 만들어 보자. card_cmp 함수는 __cmp__ method로 대치할 수 있다. __cmp__ method는 Python 3에서는 없어진 것이므로 __lt__, __gt__, ... 등의 method로 정의하라. indexing과 slicing이 가능하도록 __getitem__, __setitem__ method도 정의해야 할 것이다. index가 out of bound 이면 IndexError를 발생시켜야 한다.

Deck는 52장의 card로 만들어진다. Deck class를 정의해 보자. Deck는 Card들의 list이므로 list에서 subclassing하는 편이 좋을 것이다. 왜냐하면, list의 모든 attribute를 상속받을 수 있으니까. shffle가 추가되어야 하면, pop method는 list.pop()을 다음과 같이 overriding하자.

Deck.pop: If deck is empy, make another deck and shulffle it.
Starting source
card.py (ZIP)

Lab 16. GUI Programming (4/14)

Lab 17. NP - getting started (4/28)

Download echocli.py, echoserv.py (ZIP)

Lab 18. Regular Expressions (5/9)

updated in 5/9/2016

Lab. To display Linux GUI on Windows

  1. Download and install Xming X Server for Windows, https://sourceforge.net/projects/xming/
    Xming server를 background로 실행
  2. Download and Install XShell 5, Xftp, https://www.netsarang.com/download/free_license.html
    XShell에서 등록정보>연결>터널링에서 X11 전달... 체크, X DISPLAY 선택
    XShell에서 gedit, idle 등 GUI application 실행이 가능하게 된다.

Programming Assignments

PA-1. English Composition (3/16까지)

쇼핑 바구니에 쇼핑한 과일들을 묘사하는 완전한 영어 문장을 완성하여 return하는 함수 ‘sentence(basket)’을 작성하라. 단수, 복수를 구분하여야 하고, 단수일 경우 'a'와 'an'을 영문법에 맞게 구분해야 한다.

Examples
print sentence(['apple', 'orange', 'pear', 'pear', 'orange', 'banana'])

will print as:

There are two oranges, two pears, an apple, and a banana in the basket
print sentence(['apple', 'orange', 'orange', 'orange','pear', 'orange'])

will print as: (say ‘many’ for 4 or more)

There are many oranges, a pear, and an apple in the basket.
Hint
  1. Lab 2-8와 같이 과일 개수를 세는 dict을 만든다.
  2. 먼저 다음과 같은 list를 만들자: [‘two oranges’, …, ‘a peer’]. 이 list의 마지막 element를 ‘and’를 추가한다. 1개인 경우 모음으로 시작하면 ‘an’
  3. 이 list 를 ‘, ‘ 으로 분리된 string으로 변환한다. – join() method 참고
제출요령
실행시킨 결과를 보여주는 IDLE Shell 화면을 캡쳐해서 *.png 파일포맷으로 저장하고
소스파일과 *.png 파일 두개를 각각 e-class에 첨부파일로 올린다.

PA-2. Poker Hand (3/30까지)

주어진 source 중에 pass statement에 여러분의 code를 작성하면서 프로그램을 완성하라. Unit test할 수 있게 test case도 제공되어 있다.

card_cmp function
Lab과 달라졌다. rank가 같아도 suit이 다르면 다른 것으로 간주한다. (sorting후 배열을 항상 동일하게 유지하기 위함)
즉 ('9', 'C') < ('9', 'D') (suit은 문자 그대로 여겨 비교하면된다. --> cmp()를 사용하면 되겠다.
Poker hand
카드는 rank와 suit 쌍 (rank, suit)으로 표현된다. Suit은 Club, Diamond, Heart, Spade 4종류이고, 각 suit 마다 A (highest), K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2 (lowest) 등 13개의 rank를 가지고 있다.
Dealer는 포커 게임에 참여하는 player에게 5장 이상의 card를 나눠주면, player가 손에 쥔 카드 중에서 가장 좋은 5장을 골라 승부를 결정하게 된다. 패의 높고 낮음은 소위 '족보'(poker hand)로 결정된다. 자세한 사항의 다음을 참조 바람.
List of poker hands
find_X function
다양한 poker game마다 나눠주는 card의 장수는 다르다. 따라서, 각 function에 argument로 넘겨지는 cards의 갯수는 5장 이상이다.
아래 문제 중에서 패(poker hand)가 X임을 찾아내는 find_X function들은 패가 되는 card들만 골라 새로운 list를 만들어 return하는 함수이다. 예를 들어, flush이면 flush인 패 5장을, one pair이면 2장을 포함한 list를 return해야 한다. 발견할 수 없으면 empty list를 return한다.
find_multiples function

Sorting된 cards에서 rank가 같은 card가 2장(pair), 3장(triple), 4장(four card)이 되는 조합을 list로 만들어 return한다. ranked_dict() function에서 return되는 'ranked' dictionary에서 ranked[rank], 즉 같은 rank의 card들의 list의 length가 4이면 four card, 3이면 triple, 2이면 pair이다. 설명을 쉽게 하기 위해 사용될 list를 다음과 같이 정의하기로 한다.

  • pairs: pair들의 list
  • threes: triple들의 list
  • fours: four card들의 list

예를 들어, cards = [('2', 'C'), ('5', 'S'), ('5', 'C'), ('K', 'C'), ('2', 'D'), ('9', 'C'), ('K', 'S')]일 때, 다음의 값을 return해야 한다.

pairs = [[('5', 'C'), ('5', 'S')], [('2', 'C'), ('2', 'D')]]
threes = []
fours == []

이 function은 다음과 같이 return한다.

return (pairs, threes, fours)

PA-3. Poker Ranking (4/3까지)

PA-2에서 완성한 poker_hand 모듈을 이용하여 HAND_RANKS dict로 주어진 poker 족보를 이용하여 가장 높은 패를 구성하는 5장의 card를 선택하고 ranking(int value)을 구하는 poker_ranking.py를 완성하라.

Download Media:poker_ranking.zip -- unit tester 포함
참고
PA-2에서 완성한 poker_hand.py 파일과 같은 폴더 밑에 위 소스파일을 위치시키면 poker_ranking 모듈에서 이를 import 할 수 있음. (모듈은 current directory 부터 찾으니까)
PA-2에 제공된 소스파일명에 오타가 있으니 poker_hand.py로 rename할 것
poker_hand.py 시험이 완료되었다면, debug variable을 False로 재설정하자. poker_ranking 모듈 시험에 집중하기 위해.

PA-4. Fast-food Order Simulation (4/10)

PA-5. Poker - class implementation (4/13)

  • Download tester poker.py (ZIP) -- 엉뚱한 파일 올려놓았기에 고쳐 올려 놓음 6/11/2016 18:35

PA-6 Blackjack (4/27)

Coding Exam-3 주어진 문제들을 완성하라. 그리고, 3-1 ~ 3-4 중간결과는 생략하고 최종 source와 함께 Exam-3-5에서 주어진 대로 bob과 tom이 2 round만(game.start(); game.start())을 겨룬 결과를 제출한다. 그리고, 1,000불을 지참한 여러분도 bob과 tom과 함께 join하여, 여러분이 몇 라운드까지를 버텼는지도 보고하라.

주의사항
  • BJCards.__repr__은 다음 예와 같이 현재까지의 hit한 card들과 possible sums이 반드시 보여지게 해야 한다. Possible sums에는 21을 초과하는 수를 포함하면 안된다.
    BJCards([BJCard('9S'), BJCard('JC'), BJCard('AD')]) = set([10, 20])
  • 또한, dealer의 패는 다음과 같이 2번째 카드와 possible sums가 감춰지도록 __repr__를 작성해야 한다. Dealer가 showdown할 때 비로소 드러나게 되어 있다.
    예) BJCards([BJCard('9S'), ?, BJCard('AD')])
  • Game.repeat에 있는 'pass' statement에 code를 채우지 말라. 필요한 pass이니까.
참고
Blackjack class design

PA-7. Get File with URL(5/4)

URL을 parsing하여 웹서버와 연결하고, 지칭된 파일을 가져와 저장하는 client getw.py를 작성하라. 단, web server는 80번 port이다.

http URL
http://<host name or IP address><path>
example) http://mclab.hufs.ac.kr/test/index.html
host name은 mclab.hufs.ac.kr, path는 /test/index.html이고 이 path의 basename은 index.html이다.
Procedure
  1. Derive host name(or IP address) and path from the given URL. Also, get basename from the path
  2. Connect to the Web Server (mclab.hufs.ac.kr, port 80)
  3. Make http GET request message and send it to the server
  4. Read and store the received message until FIN is received (recv() returns ) (current directory에 basename 파일명으로 저장)
    HTTP protocol에서 아래와 같이 'Connection: close' header를 지정하면 web server는 파일을 보낸 후에 server가 connection을 close한다.
HTTP GET request message 예
 GET /test/index.html HTTP/1.1<CR><LF>
 Host: mclab.hufs.ac.kr<CR><LF>
 Connection: close<CR><LF>
 <CR><LF>
  • <CR>은 '\r', <LF>는 '\n' character이다.
Hint
use shutdown(SHUT_WR) to notify end of messgage to the web server (half-close)
then, receive the response message until server closes the connection (i.e. receiving response message)
finally, close the socket

PA-8. Networked Blackjack Game with GUI (5/15까지)

Teamwork을 다지는 warm up project. (팀 평가 그대로 개인평가 점수를 받을 것임)

지금까지 만든 Blackjack 관련 class들을 이용하여 client와 server로 만들고 client의 사용자 인터페이스는 Tkinter GUI로 구현한다. 52장의 card 그림은 다음을 참고 바란다.

http://opengameart.org/content/playing-cards-vector-png
Hint
지금까지 구현한 것 대부분은 server측에 존재하게 될 것이며 client 쪽에는 사용자 인터페이스 제공을 위한 기능만으로 줄이는 편이 좋을 것이다.
Dealer가 server의 중심이 될 것이며, Dealer의 subclass로 DealerServer class로 생각할 수도 있겠다.
왕도는 없고 설계는 art이니 팀워크를 살려 잘 고안해 보세요.

PA-9. Message Passing through Queue (5/18)

하나의 메시지는 인터넷 메일과 유사하게 다음과 같이 정의한다.

To: <receiver-1> <receiver-2> ... <receiver-n><LF>
From: <sender><LF>
<message body><LF>
.<LF>

<sender>와 <receiver>는 user를 지칭하는 <user_id>는 영문자 대소문자, 숫자, '-_'로 구성되는 string이며, <message body>는 다국어를 포함할 수 있다. 메시지는 '<LF>.<LF>'로 끝을 표시한다. 이 메시지는 "To' header에 있는 모든 receiver의 mbox에 저장되어야 한다. 사용자는 후에 자신의 mbox에 있는 메시지들을 가져옴으로써 확인할 수 있다.

등록된 사용자에 대해 user_id, name, mbox(mailbox)를 가지고 있으며, mbox는 자신에게 도착한 메일을 순서대로 저장된다. 사용자는 자신에게 도착한 최신 메시지를 mbox에서 가져올 수 있다. 등록된 사용자에 각각은 다음과 같은 dictionary로 표현할 수 있기 때문에 shelve module을 사용하면 persistent storage로 저장할 수 있다. <user-id>로 휴대전화번호로 표시할 수도 있다.

Client-server는 추후에 생각하기로 하고, threading과 Queue 등을 이용한 메시지의 저장과 가져오기 기능만을 집중하고, 필요한 기능은 각자의 자유로운 상상에 맡긴다. 따라서, 여러분은 source code와 함께 여러분이 설계한 모델을 잘 설명하는 보고서를 제출해야 한다.

PA-10. Kakaotalk-like SNS (not supporting GUI) (5/25)

PA-9에서 수행한 것들은 서버에 포함될 것이다. 이를 기반으로 Kakaotalk과 같이 1:1 또는 다자간 메시지 교환할 수 있는 Client-Server를 설계하고 구현하라.

문제를 단순화하기 위해, id를 새로 등록하는 기능은 생략해서 서버에 이미 사용자의 id가 등록되었다고 가정하라.

PA-11. Kakaotalk-like SNS - GUI version (5/29)

PA-10에 GUI를 추가하라.

Team Project

팀구성
5인 내외로 팀을 구성하여 Team Project를 진행한다. 주제는 제한이 없다.
팀명(영문), 팀원, 팀장을 e-class에 제출
평가요소
팀 평가와 개인평가는 7:3
팀 평가(70%): 제안서(10%), 프로젝트의 난이도(15%), 완성도 및 활용가능성(30%), 발표(5%), 보고서의 품질(10%)
개인 평가(30%): 팀 공헌도 (상대평가)
최종결과 발표 및 시연 ()
최종결과를 시연하면서 발표한다.
제출물: PPT, 보고서(PDF), source code, project history (e-class에 제출)
팀 소스관리 repository
Download Media:RaspberryPi3.pdf 라즈베리파이 3 구성
라즈베리파이 개발환경

팀 구성(5/2)

5인 1팀으로 프로젝트 팀을 구성하라. 자세한 사항은 e-class 팀프로젝트 참조하여 등록한다. 5인 1팀으로 총 9개팀.

Networked Blackjack Game with GUI (5/16까지)

Teamwork을 다지는 warm up project. (팀 평가 그대로 개인평가 점수를 받을 것임.) 지금까지 만든 Blackjack 관련 class들을 이용하여 client와 server로 만들고 client의 사용자 인터페이스는 Tkinter GUI로 구현한다. 52장의 card 그림은 다음을 참고 바란다.

Hint

지금까지 구현한 것 대부분은 server측에 존재하게 될 것이며 client 쪽에는 사용자 인터페이스 제공을 위한 기능만으로 줄이는 편이 좋을 것이다. Dealer가 server의 중심이 될 것이며, Dealer의 subclass로 DealerServer class로 생각할 수도 있겠다. 왕도는 없고 설계는 art이니 팀워크를 살려 잘 고안해 보세요.

제안서 발표(5/23)

updated in 5/18/2016

인터넷(IoT 포함)으로 가능한 서비스를 고안하고 구현할 Networked Applications(client, server)의 개념 설계를 하여 제출하고 발표한다.

제출
제안서(PPT 양식) - 5/22 자정까지
발표
5/23일 수업시간
배점
30점
  • 5/4 현재 팀에 소속되지 않은 3명은 5/9일까지 팀을 찾아 합류할 것.

Team Project source 관리 (6/2)

팀프로젝트를 수행할 repository를 Bitbucket에 만든 결과와 팀원들이 이를 cloning한 결과 화면을 제출하라.

공지사항
6/2 저녁 6:00 - 8:00 특강 실시

Python 기반 web application framework인 Django 특강이 실시됩니다. 6/6일이 공휴일이라 정규시간외에 강좌를 엽니다. 여러분의 팀 프로젝트에 매우 도움될 내용이니 전원 수강바랍니다. (출석도 체크함) 강사: (주) 퍼니셀 한민규 대표이사

특강 참석전 준비사항

  • Download and install Django
  • 강의 홈페이지 참고하세요.

최종발표 및 시연 (6/13)

발표
팀별 10분
시연회
발표가 모두 끝난 후 15분간
제출물
보고서 (맨 마지막 장은 부록으로 source code list 첨부)
버전관리 이력
동료평가 실시

2016 인터넷응용 Team Project 결과물

참고자료

Cygwin

Ubuntu

Apache, MySQL, and PHP

WireShark Protocol Anaylzer

  • WireShark download [1]:
  • WireShark 사용법 [2]