Lectures/NP/2014

From MCLab
Jump to: navigation, search

Contents

네트워크프로그래밍및실습 Class Overview

공지사항

과제물 제출요령
별도의 명기 없으면 PDF 파일로 e-class에 제출하세요. (보통 강의 전날 자정에 마감됨)
A+, A0, ...D0, F 로 평가되며, 10점 만점 점수로 환산하면 10, 9, ..., 3, 0 (미제출인 경우 F)
지각제출을 허용하는 경우 지체한 1일당 한 등급씩 낮아짐. (만점이 10% 하락)
계정 신청 (3/11일까지)
수강신청자 전원에서 np.hufs.ac.kr에 계정이 부여되니 신청하세요. ID는 자동적으로 지정되며, 개인이 입력한 password는 기억해 두세요. 추후 SVN server의 ID와 password도 동일하게 부여될 것입니다.
List 버튼을 눌러 계정이 만들어졌는지 확인하세요. status='created'나 'exists'이면 사용할 수 있습니다. ssh나 Xshell(Windows에서)로 접속해 보세요.
SVN 계정 생성 및 Repository(저장소) 제공
개인별로 SVN repository를 할당했습니다. Repository URL은 'http://np.hufs.ac.kr/svn/<ID>', password는 np login 계정의 암호와 동일합니다.
Eclipse 설치 후에 사용하게 됩니다.
평가방법
report : assignment : team project = 1 : 2 : 4
결석 -1%/100%, 지각 -0.5%/100%

강의자료

  1. UNIX Network Programming (PDF)
  2. More on Threads (PPT)
  3. Python Tutorial, tutorialspoint (PDF)
    Python 2 기반 tutorial
  4. Python GUI Programming using Tkinter
    1. Using Tkinter - python3
    2. Python Tkinter - python2
  5. SocketServer – Creating network servers
  6. HOWTO Use Python in the web
  7. Django: a high-level Python Web framework that encourages rapid development and clean, pragmatic design
  8. Google App Engine: Platform as a Service
참고
Python 2 vs Python 3

Python

Official Documentations

Python 3.3: https://docs.python.org/3.3/

Books

Fundamental Python Programming

Advanced Python Programming

  • 웨슬리 천, Core Python Applications Programming, 에이콘, 2014 - Python 2 기반 서적(번역판)
  • 데이비드 비즐리, Python Cookbook, O'Reilly, 3rd Ed., 2014 - Python 3 기반 서적(번역판)
  • Mark Lutz, Proramming Python, 4th Ed., O'Reilly, 2011
  • John Goerzen and Brandon Rhodes, Foundations of Python Network Programming: The comprehensive guide to building network applications with Python

Tutorials

Tools

Related Links

실습

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

Lab 1. (3/6) Making Your Own Ubuntu Machine on a PC

Report-1 (3/9일 까지)
VirtualBox를 띄워 여러분이 만든 VM의 구성을 보여주는 화면을 캡쳐하고, VM을 수행시켜 browser로 강의 홈페이지를 띄운 화면을 캡쳐하여 하나의 PDF 파일로 제출하시오.

Lab 2. (3/6) Stevens' UNIX Network Programming Library

Report-2 (3/9일 까지)
여러분의 project directory에서 daytimetcpcli를 build하고 실행시킨 화면을 PDF로 제출하시오. (make; ./daytimetcpcli 203.253.70.30 으로 명령내린 결과)

Lab 3. (3/13) Echo Client and Server

Report-3 (3/16일 까지) tcpcli01@localhost - tcpserv04@np.hufs.ac.kr 실행

np.hufs.ac.kr에서 tcpserv04를 실행시키고, local machine의 별도의 창에서 tcpcli01을 실행한다. client/server의 접속 상태를 보여주는 'netstat' 명령 결과와 zombie가 생기지 않았음을 보이는 'ps' 명령 결과를 캡쳐하여 제출하시오.

준비사항: 실습 이후에 남은 부분을 모두 수행해야 Report가 가능하다.

Lab 4. (3/20) Client-Server Development Environment

Report-4 (3/23일까지)

Local machine에 있는 자신의 echo client를 np.hufs.ac.kr의 echo service daemon (203.253.70.30:7)과 시험해 보고, np.hufs.ac.kr에서 echoserv를 빌드 한 후 local machine의 echo client와 연결하여 시험하고 캡쳐하여 제출하라.

Lab 5. Installing Eclipse IDE on Ubuntu for Java, C/C++, and SVN

각자 install해서 3/27일 실습시간에 미리 준비해 오세요. 이것을 가지고 실습할 예정임.

Lab 6. (3.27) How to Use Eclipse for Network Programming

Lab 7. (3/27) Source Version Control

SVN repository 사용할 수 있게 수정했습니다.

Report-5 (3/27일까지)
'wc' project를 Eclipse workspace에 import해서 만들고, SVN repository에 등록하라. Web browser로 SVN repository를 보여주는 web browser 화면을 capture해서 e-class에 제출하라.

Lab 8. (4/3) I/O Multiplexing Echo cli/serv Source분석과 Simple Chatting 준비

Lab 9. (4/30까지) Installing Python on Windows and Linux

Lab 10. (5/22) Arduino Programming

Lab 11. (5/29) Web Server and CGI

실습 준비사항
VirtualBox로 Windows 가상머신을 만들고, APMSETUP을 활용하여 Apache2 web server, PHP, 그리고 MySQL DBMS를 install하자.
Report-6 (6/4까지)
html로 간단한 홈페이지를 작성하고, Ass 9의 user ID와 password를 신청하는 form을 만들라. (cgi 프로그램을 만들 필요는 없다.)
홈페이지와 form을 보여주는 화면을 캡쳐하여 제출하라.
참고: html로 홈페이지 작성하기

Programming Assignments

Ass 1. Getting Started: Word Counter (3/23까지)

Ass 2. Simple Chatting (4/7까지)

Ass 3. Chatting with Protocol (4/13까지)

Ass 4. Chatting with Protocol using Threads (5/2까지)

중간고사를 이 Assignment로 대체함.

Ass 5. Starting Python Programming (5/7까지)

Chatting client에서 정의된 user command들을 입력으로 받아 request message를 생성하는 python module을 완성하라.

Ass 6. Handling pchatcli Response Messages (5/11까지)

Ass 3에서 정의한 response message를 받아 처리하는 python module pchatcli.py를 완성하라.

제출요령
문법에 맞는 response message 뿐 아니라 문법이 틀린 response message에 대한 test 결과도 함께 제출해야 한다.

Ass 7. Python Class(5/21까지)

Student class와 Course class를 재량껏 만들고 수강신청과 평가하는 기능을 구현하라.

이 source를 참고하세요. Media:person.zip

Ass 8. Arduino Programming(5/26까지)

온도센서와 조도센서를 이용해 온도가 높을 경우 보라색, 밝기가 낮을 경우 노란색이 출력되도록 구현하라.

  • 온도값과 조도값을 Serial monitor를 통해 1초마다 확인 가능하도록 한다.

Ass 9. Chatting Client/Server in Python using GUI and DB(6/1까지)

Ass. 4를 python으로 다시 쓰고(using multi-threading and class), client의 user interface는 tkinter GUI를 사용하라. Server는 사용자 ID와 password를 sqlite3 DB에 저장해 뒀다가, login시에 대조해야 한다. Eclipse를 써서 개발하고, svn에 올린 source도 함께 제출해야 한다.

추가사항
user name과 chatting message에 한글도 가능해야 한다. (encode해서 보내고, 받을 때 decode하면 된다.)
password도 'USER' request message에 실릴 수 있도록 확장하고, 'invalid user or password' response message를 추가한다.
USER <id> <password>
531 Invalid user or password
server는 user의 <id>와 <password>를 파일에 보관하여 login시 대조해야 한다. 단, password는 암호화해서 보관해야 한다. (login 시 보내온 password를 암호화 한 후 이걸 등록한 (암호화 된) password화 같은지 확인하면 된다.)
암호화: encrypted = crypt.crypt(passwd, "22")
주의
한글 encoding은 Windows에서는 MS 독자적인 ms949이고, UNIX는 utf-8이 default다. Python IDLE은 Windows에서도 utf-8이다. 즉, 영문만으로 구성된 source file은 encoding 방법이 달라도 또 같지만, 한글인 경우는 다르게 저장된다. 따라서 Windows와 Unix machine 둘 다에서 돌아갈 프로그램을 개발한다면 source file에 대한 encoding 방식을 utf-8을 통일 시키는 편이 좋다. (Web, svn 등에서도 utf-8을 사용한다.)
Eclipse에서 한글을 사용하는 경우 source 파일 encoding을 utf-8으로 하면 혼란이 없으며, svn과 Linux machine에서 프로그램 run하는데 문제가 없다.
PyDev pluggin을 install한 다음, python 프로그램 개발용 workspace를 별도로 생성하자.
launch Eclipse >> Windows: Preference >> General: Workspace >> Text file encoding: UTF-8 >> Apply

Team Project

3인으로 팀을 구성하여 Team Project를 진행하라. 주제는 제한이 없다.

평가요소
팀 평가와 개인평가는 7:3
팀 평가(70%): 제안서(10%), 프로젝트의 난이도(15%), 완성도 및 활용가능성(30%), 발표(5%), 보고서의 품질(10%)
개인 평가(30%): 팀 공헌도 (상대평가)
제안서 제출
(6/1까지) e-class에 제출
팀을 자율적으로 구성하게 되어 있으니 e-class에서 팀 생성하고 팀원을 입력하세요. (3명/팀, 10팀)
최종결과 발표 및 시연 (6/12)
최종결과를 시연하면서 발표한다.
제출물: PPT, 보고서(PDF), source code, SVN history (e-class에 6/11까지 제출)
팀 SVN respository
SVN repository (모든 버전의 소스 저장소)로 Google Code를 누구나 이용할 수 있습니다. 공짜로 이용할 수 있지만 등록된 source는 누구에게나 open됩니다.
모든 사람은 google code의 id를 받되, 한사람만 팀용 repository를 만들기 바랍니다.

참고자료

Ubuntu

Apache, MySQL, and PHP