2016년 12월 1일 목요일

안드로이드 앱 프로그래밍 기말 시험 안내 (12월 16일)

A,N반 합반 기말 시험 안내


일시: 12월 16일 오후7시50분
장소: 탐구관 504호 


A반 학생 중 부득이 해당 날짜에 시험을 볼 수 없는 학생은 9일까지 담당 교수에게 문의 바랍니다.

2016년 11월 30일 수요일

안드로이드 앱 프로그래밍 13주차 - 텀 프로젝트 발표

텀 프로젝트 발표


12월5일까지 이메일로 아래 내용을 제출한다

github 링크
팀 명단

발표

실제 동작 데모를 보인다.(프로젝트 요구사항인 4가지 액티비티를 보이면 됨)

기타

A반에서 수업 듣는 N반 수강생들은 N반 수업에서 발표함
나머지 사항들은 텀 프로젝트 설명 문서 내용 참고
https://docs.google.com/document/d/1T8JXQqaiJGoYev-6-zr5YRYGjTu8CGYrClsq0MWbmFg/pub




2016년 10월 31일 월요일

안드로이드 앱 프로그래밍 8주차(11/2, 11/4): 위치 기반 서비스

위치 기반 서비스


강의 슬라이드:

https://drive.google.com/open?id=0B5tRdB4hr8DfSTg0aUVDbUV1bUU

실습:

https://drive.google.com/open?id=0B5tRdB4hr8DfNFJ0R2xjQkc5V0k

스마트 프로덕트 프로젝트 IPCAM 최종 프로젝트

프로젝트

최종 발표:

12월 6일

프로젝트 내용:

지금까지 배운 내용을 바탕으로 라즈베리파이를 이용한 IPCAM을 제작한다.

요구사항:

지금까지 배운 내용을 최대한 활용하고,
다양한 기능을 갖출 수록 점수가 높음

기타:

* 별도로 기말시험은 없음
* 절대 평가

스마트 프로덕트 프로젝트 11/1 IP카메라 Motion JPEG

IP카메라 Motion JPEG


웹 브라우져에서 비디오 스트리밍을 하는 방법으로 WebRTC가 있음.
그러나 구현이 쉽지는 않고,

Flask를 이용하여 Motion JPEG을 간단히 구현할 수 있음

https://github.com/jyheo/ipcam/blob/master/mjpeg.py

2016년 10월 25일 화요일

스마트 프로덕트 프로젝트 10/25 IP카메라 모션 검출과 저장

IP카메라 모션 검출과 저장

1. Circular Stream이용한 저장

picamera의 circular stream을 이용하여 메모리에 최근 영상만 계속 저장
모션이 검출되면 별도 파일로 저장

https://picamera.readthedocs.io/en/release-1.12/recipes2.html#splitting-to-from-a-circular-stream

2. 모션 검출

http://www.ostafichuk.com/raspberry-pi-projects/python-picamera-motion-detection/


실습

- 2의 모션 검출 방법을 참고하여 1의 detect_motion() 함수 완성
- 저장 파일의 이름을 before.h264, after.h264가 아니라 현재시간.before.h264, 현재시간.after.h264로 저장할 것. 예를 들어 201610225091055.before.h264

2016년 10월 24일 월요일

안드로이드 A,N 중간 시험 합반 공지

안드로이드 A,N반 28일 금요일 오후7시50분 합반으로 시험 실시합니다. 장소는 탐구관 405호

2016년 10월 4일 화요일

스마트 프로덕트 프로젝트 10/4 IP카메라 웹기반 설정

IP카메라 웹기반 설정

실습 목표:

Python-Flask 기반의 웹 서버를 이용하여 IP카메라 설정을 변경하고, 캡쳐된 사진을 웹 브라우져로 가져와서 보여준다.



필요 기술:

웹: HTML5, Javascript, jQuery, Ajax, Flask
OS: 시그널

참고: 

쉘에서 시그널 보내기
$ kill -s SIGUSR1 PID

파이선에서 시그널 보내기
os.kill(PID, signal.SIGUSR1)

여기에서 PID는 프로세스ID

예제 코드

https://gist.github.com/jyheo/2bfba7a45cafff1c811a5c11c53160d4

2016년 9월 19일 월요일

안드로이드 앱 프로그래밍 3주차(9/21, 9/23): 액티비티와 인텐트

액티비티와 인텐트


강의 슬라이드

https://drive.google.com/open?id=0B5tRdB4hr8DfSDBEWkRYTnlzZUE

실습 자료

https://drive.google.com/open?id=0B5tRdB4hr8DfcldYODNldFNHS2s


동영상 강의:


스마트 프로덕트 프로젝트 9/20 캡쳐/비디오 전송

캡쳐/비디오 전송


캡쳐 - 스틸 이미지
비디오 - 연속적인 이미지, 동영상

캡쳐 전송

python Flask와 picamera의 이미지 캡쳐를 활용하여
http://라즈베리파이주소:5000/capture
주소를 입력하면 캡쳐된 이미지가 웹 브라우져에 나타날 수 있도록 만든다.

두 가지 방법으로 구현이 가능한데, 두 가지 모두 해볼 것!
1) 해당 URL 요청이 올 때마다 캡쳐하기
2) 주기적으로 캡쳐하는 프로그램을 만들고, 해당 URL 요청이 오면 미리 캡쳐된 화면을 전송하기


2016년 9월 6일 화요일

스마트 프로덕트 프로젝트 - 9/6 요구사항 분석

요구사항 분석


강의 슬라이드:

https://drive.google.com/open?id=0B5tRdB4hr8DfajFDSFZVeDZTUVE

과제:


  • IP 카메라 요구사항 분석서 작성
  • 개인 과제
  • 최소 2페이지
  • 요구사항 이름/내용을 표로 작성
  • 인터넷에서 요구사항 명세서 예제 참고
  • IP 카메라의 기본적인 기능들 위주로
  • 수업에서 배운 요구사항 작성 방법 다시 한번 생각해보고(특히 시나리오) 과제 하기
  • 다음 수업 전(9월12일)까지 이메일로 제출


2016년 6월 20일 월요일

2016년 1학기 중간/기말 성적

중간/기말 시험 결과입니다. 최종 등급은 종합정보시스템에서 확인 가능합니다.
본 게시물은 한달 후에 삭제예정입니다.


2016년 6월 9일 목요일

임베디드 OS 6/9 - 리눅스 파일 시스템

리눅스 파일 시스템


  • Virtual Filesystem
  • General characteristics of Ext2 filesystem
  • Ext2 disk data structures
  • Ext2 memory data structures
  • Ext2 methods
  • Managing Ext2 disk space
  • The Ext3 filesystem
  • The Ext4 filesystem
강의 슬라이드:

2016년 6월 7일 화요일

임베디드OS 6/7 - 파일 관리/시스템

파일 관리/시스템


  • 파일/파일 메타데이터
  • 디렉토리 트리 구조
  • 파일 블록 할당
  • 가용 공간(블록) 관리
  • UNIX 파일 시스템
  • Inode
  • VFS(Virtual File System)


https://drive.google.com/open?id=0B5tRdB4hr8DfbW5TUkNqclpwQVE

Java 6/7 - 13장 스레드와 멀티태스킹

13장 스레드와 멀티태스킹

스레드

Thread, Runnable

동기화

synchronized method
synchronized block

wait(), notify()
notifyAll()


실습

예제 13-5 따라해보기

2016년 6월 3일 금요일

기말 시험 시간/장소 공지

웹 프로그래밍 B반

6월 9일(목) 오후12시공학관 405호

자바 B반

6월 13일(월) 오후2시 탐구관 506호

임베디드OS A/N합반

6월 14일(화) 오전11시 탐구관 506호
 

2016년 5월 29일 일요일

Java 5/30 - 11장 기본적인 스윙 컴포넌트와 활용(실습)

11장 기본적인 스윙 컴포넌트와 활용(실습)

실습

예제 11-4

위의 소스를 수정하여 pull request할것

1. 과일의 종류를 다음과 같이 바꾸기.
String[] names = new String[] {"사과", "", "귤", "오렌지", "포도"};
JCheckBox[] fruits = new JCheckBox[names.length];

2. 가격을 아래와 같이 배열로 만들어서 사용하기.
int[] prices = new int[] {2000, 5000, 500, 1000, 3000};

3. 아래 그림과 같이 선택된 과일의 이미지가 나타나도록 하기.
Layout과 Panel은 적절히 사용할 것
과일 이미지들은 GridLayout을 이용


2016년 5월 23일 월요일

임베디드 OS 5/24, 26 - 리눅스 커널 모듈과 디바이스 드라이버

리눅스 커널 모듈과 디바이스 드라이버


웹 프로그래밍 5/24 - Bootstrap 기본

Bootstrap 기본


Get Started - http://www.w3schools.com/bootstrap/bootstrap_get_started.asp
Grid Basic - http://www.w3schools.com/bootstrap/bootstrap_grid_basic.asp
Jumbotron - http://www.w3schools.com/bootstrap/bootstrap_jumbotron_header.asp

Alert - http://www.w3schools.com/bootstrap/bootstrap_alerts.asp
Button groups - http://www.w3schools.com/bootstrap/bootstrap_button_groups.asp

Glyphicons - http://www.w3schools.com/bootstrap/bootstrap_glyphicons.asp
참고: Font Awesome http://fontawesome.io/icons/

Dropdowns - http://www.w3schools.com/bootstrap/bootstrap_dropdowns.asp
Navigation bar - http://www.w3schools.com/bootstrap/bootstrap_navbar.asp
Modal - http://www.w3schools.com/bootstrap/bootstrap_modal.asp
Tooltip - http://www.w3schools.com/bootstrap/bootstrap_tooltip.asp


실습

아래와 같이 자신의 포트폴리오 페이지를 바꿔보자.
기존에 index.html을 복사해서 index_bootstrap.html 이라고 만들어서 github에 올린다.
http://아이디.github.io/index_bootstrap.html 로 접속 가능해야 함.
grid를 잘 설계하여 자신의 포트폴리오 내용을 잘 배치해보기
navbar, jumbotron, glyphicon을 적절히 사용, 다른 bootstrap 요소들을 추가로 이용하여 꾸며도 좋음

힌트: 아래와 같은 CSS가 필요할 것임, 적용전후에 어떤 차이가 있는지 잘 비교해보고 이해해볼 것!
     <style>
        .navbar {
            background: rgb(255, 200, 255);
            margin-bottom: 0;
            border: 0;
        }
        .jumbotron {
            background: rgb(255, 200, 255);
        }
    </style>

Java 5/24 - 11장 기본적인 스윙 컴포넌트와 활용

11장 기본적인 스윙 컴포넌트와 활용


JButton, JLabel, JCheckbox, JRadioButton, JTextField, JTextArea, JList JComboBox, JSlider

2016년 5월 22일 일요일

Java 5/23 - 10장 자바의 이벤트 처리

10장 자바의 이벤트 처리

MouseAdapter

KeyListener

실습

마우스로 클릭한 위치에 물고기 추가.
https://github.com/jyheo/JavaExercise/blob/master/src/gui/LakeMouse.java

- 물고기를 클릭하면 물고기를 멈추게 하고, 멈춘 물고기를 클릭하면 다시 움직이게 만들기
- 물고기의 속도를 5-10 사이의 값으로 랜덤하게 지정하기

(5/23 첫시간) 실습
- JFrame에서 키를 입력받아 방향키에 따라 바위의 위치를 상하좌우로 5씩 이동하게 만들기
- 물고기가 바위에 부딛치면(겹치면) 물고기를 사라지게 하기
- 포식자 물고기 객체 하나 만들기. 일반 물고기 보다 크기를 크게 하거나 표시되는 글자를 다르게 하여 구분하도록 한다.
- 포식자 물고기와 일반 물고기가 부딛치면(겹치면) 일반 물고기를 사라지게 하기

2016년 5월 19일 목요일

임베디드 OS 5/19 - Python Flask Web Framework

Python Flask Web Framework





Raspberry Pi + Analog Sensor




Raspberry Pi + Analog Sensor + Web(Flask)



웹 프로그래밍 5/19 - CSS3 media

CSS3 media 

종합예제


CSS3 media

<style>
        @media screen and (max-width: 499px) {
            body { background: red; }
        }

        @media screen and (min-width: 500px) and (max-width: 799px) {
            body { background: green; }
        }

        @media screen and (min-width: 800px) {
            body { background: blue; }
        }
</style>

media type


  • all
  • print
  • screen
  • speech

<link rel="stylesheet" media="print and (max-width: 499px)" href="print.css">

실습

인쇄할 때만 Confidential 워터마크를 출력하기.
워터마크는 HTML 본문에는
<div id="watermark">
<h1>Confidential</h1>
</div>
CSS는
#watermark {
display: block;
color: red;
position: absolute;
left: 50%;
top: 50%;
width: 300px;
margin-left: -150px;
border: 2px red solid;
text-align: center;
-ms-transform: rotate(-20deg); /* IE 9 */
-webkit-transform: rotate(-20deg); /* Safari */
transform: rotate(-20deg);
}

2016년 5월 17일 화요일

웹 프로그래밍 5/17 - 11장 자바스크립트와 jQuery 응용 예제 (계속)

11장 자바스크립트와 jQuery 응용 예제 (계속)


  • 문서 객체 설정하기
  • 무한 스크롤
  • LightBox 플러그인
  • Masonry 플러그인
  • 갤러리 구현하기

실습

무한 스크롤 예제에서 스크롤바가 나타날만큼 컨텐트가 없다면 무한 스크롤이 동작하지 않음. 즉 아래와 같이 2개 정도의 <h1>태그만 만들면 스크롤바가 없기 때문에 무한 스크롤이 동작하지 않음.
var appendDocument = function () {
   for (var i = 0; i < 2; i++) {
   // 문서 객체를 생성합니다.
      $('<h1>Infinity Scroll</h1>').appendTo('body');
   }
};

스크롤바가 나타날 만큼 화면을 채우기 위해서는 어떻게 해야할까?
힌트: $(window).height()보다 $( 무엇 ).height()가 커질 때까지 컨텐트를 추가한다.

임베디드 OS 5/17 - 단일 처리기 스케줄링

단일 처리기 스케줄링


https://drive.google.com/open?id=0B5tRdB4hr8DfdFdPNGc3OXZEV0E

Java 5/17 - 9장 자바 GUI 기초, 10장 이벤트 처리

9장 자바 GUI 기초, AWT와 SWING

실습

https://github.com/jyheo/JavaExercise/blob/master/src/gui/Lake_GUI.java

1. Lake_GUI의 속성(필드) 중 width와 height를 제거한다.
MyObject의 속성(필드) 중 x와 y를 제거한다.

힌트: 그러면 x와 y, width, height 값은 어디에서 읽어 오는가?
JComponent의 getX()와 getY(), getWidth(), getHeight()를 사용한다.
JButton과 JFrame의 contentPane 모두 JComponent를 상속 한 것임

2. Lake_GUI의 속성(필드) 중 ArrayList<MyObject> objects를 제거한다.

힌트: JFrame의 contentPane에 속한 Component들을 어떻게 가져오는가?
JFrame의 getContentPane()이 리턴한 Container 객체의 getComponets()라는 메소드를 호출하면 JFrame의 contentPane에 속한 Component들의 배열을 가져올 수 있음.
즉,
getContentPane().getComponents()를 하면 Component 배열이 리턴됨. 이 배열을 사용!
단, 배열에 포함된 Component 중 MyObject 객체인 경우에만 new_move()를 부르도록 하시오.

3. MyFish의 경우 new_move()에서 x위치는 JFrame 경계에서 반대 방향으로 움직이도록 되어 있다. velocity_y 속성을 추가하여 y도 x와 동일하게 고쳐 보시오.

4. (추가 실습) MyFish에 velocity를 다르게 주는 방법을 만들고 속도가 다른 물고기를 두 마리 만들어 보시오.

10장 자바의 이벤트 처리

2016년 5월 16일 월요일

Java 5/16 - 9장 자바 GUI 기초, AWT와 SWING

 9장 자바 GUI 기초, AWT와 SWING


  • Container와 Component
  • JFrame
  • Layout

실습

예제 9-2 실습하기
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 를 주석처리하면 close 버튼 누를 때 어떻게 달라지는 확인해보기
- FlowLayout의 정렬 방식을 Right, Center로 하면 어떻게 달라지는, 프로그램 윈도우 크기를 변경하면 어떻게 바뀌는지 확인해보기

2016년 5월 11일 수요일

웹 프로그래밍 5/12 - 11장 자바스크립트와 jQuery 응용 예제

11장 자바스크립트와 jQuery 응용 예제


입력 양식 자동 초점 조절하기

프레임 애니메이션 만들기

실습

입력 양식 자동 초점 조절하기 예제를 jQuery를 쓰도록 고쳐보기
힌트: $('xxxx').keydown( function () { } );

프레임 애니메이션 만들기 예제를 고쳐보기
1. jQuery 라이브러리를 쓰도록 고치기
2. 이미지를 매 프레임마다 오른쪽으로 5px씩 움직이게 고치기
3. 이미지를 클릭하면 처음 위치(left=0)로 이동하게 하기

임베디드OS 5/12 - PWM, Servo Motor

PWM, Servo Motor


2016년 5월 10일 화요일

리눅스 페이지 교체 정책에 대해


리눅스 커널 페이지 교체 정책에 대해

Linux 2.4 page replacement changes in detail

[중략]

Page aging

[중략]

However, in some situations the LFU page aging of Linux 2.0 is known to have too much CPU overhead and adjust to changes in system load too slowly. Furthermore, research has shown that recency of access is a more important criteria for page replacement than frequency.

These two problems are solved by doing exponential decline of the page age (divide by two instead of substracting a constant) whenever we find a page that wasn't accessed, resulting in page replacement which is closer to LRU than LFU. This reduces the CPU overhead of page aging drastically in some cases; however, no noticable change in swap behaviour has been observed.

정리하면,

LFU방식인 page aging (교재에 나온 방법)이 리눅스 2.0에서 사용되었으나, 이는 오버헤드가 컸고, 2.4에서는 exponential decline(age를 2로 나누어서 줄임)을 적용하였는데, 이는 LFU보다는 LRU에 더 가까운 방법으로 보인다.
즉, LFU와 LRU방식이 모두 섞여 있다고 보면 됨.

출처:

https://www.usenix.org/legacy/event/usenix01/freenix01/full_papers/riel/riel_html/

임베디드 OS 4/26, 5/3, 5/10 - 가상메모리

가상메모리(Virtual Memory)

페이징

- 페이지 테이블
세그멘테이션

교체정책


강의 슬라이드:

https://drive.google.com/open?id=0B5tRdB4hr8Dfa1g0Z3V4TzZPbzQ

Java 5/10 - 8장 입출력 스트림과 파일 입출력(계속)

8장 입출력 스트림과 파일 입출력(계속)

버퍼 입출력


  • BufferedInputStream
  • BufferedReader

실습

예제 8-9, 8-10 파일 복사 예제

File 클래스


  • File(File parent, String child)
  • File(String pathname)
  • File(String parent, String child)
  • mkdir()
  • String[] list()
  • File[] listFiles()
  • length()
  • getPath()
  • getName()
  • isFile(), isDirectory()
  • exists()

실습

예제 8-8 FIle 클래스를 활용한 파일 관리
long t = f.lastModified(); 
System.out.printf("\t수정한 시간: %tb %td %ta %tT\n",t, t, t, t);
이 부분을 Date() 클래스를 사용하도록 고쳐서 실습해볼것

웹 프로그래밍 5/10 - 10장 jQuery(계속)

10장 jQuery (계속)

Effect


  • show/hide/toggle
  • slideDown/slideUp/slideToggle
  • fadeIn/fadeOut/fadeToggle

Animation


  • animate()
  • delay()
  • stop()

실습

목차 만들기


1. 수정하여 아래 그림과 같이 만들기(목차에서 제목과 차례는 빼기, 목록으로 보여주기)
















2. 차례를 누르면 목차가 slideDown/slideUp이 토글 되도록 고치기
힌트: click()과 slideToggle()을 이용

2016년 5월 9일 월요일

Java 5/9 - 8장 입출력 스트림과 파일 입출력

8장 입출력 스트림과 파일 입출력

InputStream(바이트 스트림) 상속 받은 클래스:


  • FileInputStream("파일명"):
  • BufferedInputStream(InputStream)
  • DataInputStream(InputStream):

Reader(문자(char) 스트림) 상속 받은 클래스


  • InputStreamReader(InputStream)
  • FileReader("파일명")
  • BufferedReader(Reader)

예시)

new InputStreamReader( System.in )
new FileInputStream( "파일이름" )
new BufferedInputStream( new FileInputStream("파일 이름") )
new BufferedReader( new InputStreamReader(System.in) )
new DataInputStream( new BufferdInputStream(System.in) )

실습

[예제 8-6 키보드 입력을 파일로 저장하기]에서, 파일에 쓰기 전에 무조건 대문자로 바꿔서 저장하기
힌트 - Character.toUpperCase() 를 사용

2016년 5월 3일 화요일

웹 프로그래밍 5/3 - 10장 jQuery

10장 jQuery

jQuery 사용, http://code.jquery.com/

<script   src="https://code.jquery.com/jquery-1.12.3.min.js"   integrity="sha256-aaODHAgvwQW1bFOGXMeX+pC4PZIPsvn2h1sArYOhgXQ="   crossorigin="anonymous"></script>

DOM 선택

$('선택자')

DOM 조작

$('선택자').attr()
$('선택자').css()

$('선택자').text()
$('선택자').html()

$('선택자').addClass(), removeClass(), toggleClass()

이벤트

$('선택자').hover()
$('선택자').click()
$('선택자').on()

실습

지난번 실습에서 자바스크립트로 만든 계산기를 jquery를 사용하여 수정하시오. 아래 파일을 참고


Java 5/3 - 7장 제네릭과 컬렉션 (계속)

7장 제네릭과 컬렉션 (계속)

Collections


  • ArrayList, Vector
  • LinkedList
  • HashMap

Collections static methods

Collections.sort, reverse, max, min, shuffle

실습

예제 7-7, HaspMap을 이용한 학생 정보 저장
마지막 while()문을 for (String name: names) 로 고쳐보시오.




2016년 5월 1일 일요일

인터넷시스템 5/2 - 3장 Transport Layer

3장 Transport Layer

3.1 Transport-layer services
3.2 multiplexing and demultiplexing
3.3 connectionless transport: UDP
3.4 principles of reliable data transfer
3.5 connection-oriented transport: TCP
3.6 principles of congestion control
3.7 TCP congestion control

전송 계층 서비스
멀티플렉싱/디멀티플렉싱
비연결 전송: UDP
신뢰 전송 방법

실습

UDP 실습: http://gaia.cs.umass.edu/wireshark-labs/Wireshark_UDP_v6.1.pdf

Java 5/2 - 7장 제네릭(generic)과 컬렉션(collection)

7장 제네릭과 컬렉션(Generic and Collections)

Collections


  • ArrayList, Vector
  • LinkedList
  • HashMap

언제 어떤 collection을 써야 하는가?

https://kaanmutlu.files.wordpress.com/2011/12/collections.png

실습

Lake에서 배열을 썼던 것을 ArrayList로 바꾼 것.
https://github.com/jyheo/JavaExercise/blob/master/src/collections/LakeAL.java

LakeAL의 drawables와 movables 속성 두개를 아래와 같이 ArrayList<MyObject> 하나로 바꿔서 코드를 수정할 것.
private ArrayList<MyObject> myobjects = new ArrayList<MyObject>();

2016년 4월 27일 수요일

웹 프로그래밍 4/28 - DOM 실습

DOM 실습

http://jyheo.github.io/javascript/exercise3.html

추가 버튼을 눌렀을 때 이미 동일한 이름의 동물이 존재하면 alert('동일한 이름이 존재합니다!')라고 경고창을 나타내고 추가하지 않도록 코드 추가

목록을 선택하면 아래와 같이 나타다도록 코드 추가


임베디드OS 4/28 실습: 라즈베리파이 2와 8x8 Dot Matrix LED

실습: 라즈베리파이 2와 8x8 Dot Matrix LED


2016년 4월 25일 월요일

Java 4/26 - 6장 패키지 개념과 자바 기본 패키지(실습)

6장 패키지 개념과 자바 기본 패키지(실습)

java.util.Calendar


실습:

https://github.com/jyheo/JavaExercise/blob/master/src/javalang/javalang.java

웹 프로그래밍 4/26 9장 문서 객체 모델(DOM)

9장 문서 객체 모델(Document Object Model, DOM)


실습+과제: 간단한 계산기 만들기

http://jyheo.github.io/javascript/calc.html

  • 뺄셈 버튼 동작하게 만들기
  • display_debug() 함수를 수정하여 debug_area의 스타일을 꾸며보기(보더, 배경색, 폰트 등을 지정해본다.)
  • 기타 다른 기능(예를 들어 곱하기, 나누기 등) 추가하기
  • 이런 저런 동작을 하다보면 버그가 있는데, 이 버그를 찾아서 수정해보기.

결과물 제출

1. 실습 결과는 자신의 github.io 페이지에 calc.html로 넣어두기. 즉 ID.github.io/calc.html 로 접속 가능해야 함.
2. 아래 목차로 실습 보고서(hwp, doc, pdf, html 모두 가능)를 작성하여 jyheo.report@gmail.com으로 보내기
목차
- 실습 개요
- 각 실습 지시에 대한 해결 방법 코드와 설명
- 결론(요약)

Java 4/26 - 6장 패키지 개념과 자바 기본 패키지

6장 패키지 개념과 자바 기본 패키지


패키지(package)

멤버 접근 한정자(member access modifiers) 

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

Object 클래스와 Wrapper 

Wrapper 클래스

java.lang.*

String, java.lang.StringBuffer

java.lang.Math

java.util.*

java.util.StringTokenizer

java.util.Calendar



2016년 4월 18일 월요일

인터넷시스템 4/18 - 2장 Application Layer (P2P, Socket Programming)

2장 Application Layer (P2P, Socket Programming)

P2P


  • BitTorrent
  • Distributed Hash Table

Socket Programming with Python

실습:

DNS실습
C:\> nslookup -type=NS hansung.ac.kr
C:\> nslookup -type=MX hansung.ac.kr
C:\> nslookup ns.hansung.ac.kr
C:\> nslookup antispam.hansung.ac.kr
C:\> ipconfig /flushdns

http://gaia.cs.umass.edu/wireshark-labs/Wireshark_DNS_v6.01.pdf


2016년 4월 15일 금요일

2016년 1학기 중간시험 안내.

2016년 1학기 중간시험 안내.


Java B반: 4월19일 화요일 5교시(오후1시) 공학관A 405호

임베디드OS A반: 4월19일 화요일 3교시(오후11시) 수업 강의실(공학관A 403호)
임베디드OS N반: 4월19일 화요일 야2교시(오후6시55분) 수업 강의실(학과사무실 옆)

웹프로그래밍 B반: 4월21일 목요일 4교시(오후12시) 공학관A 405호

2016년 4월 14일 목요일

웹 프로그래밍 4/14 - 자바스크립트(객체)

자바스크립트(객체)

자바스크립트에서 객체는 원소마다 이름을 붙여 놓은 집합
원소는 이름:값 의 쌍으로 되어 있음.
배열은 인덱스로 접근하나 객체는 이름으로 접근

var Array = [1, 2, 3, 4];
Array[0]

var Object = {first:1, second:2, third:3, fourth:4};
Object['first']
또는
Object.first


실습

http://jyheo.github.io/javascript/exercise2.html

obj_list를 아래와 같이 테이블로 나타나도록 바꾸기.

2016년 4월 10일 일요일

웹 프로그래밍 4/12 - 8장 자바스크립트(배열과 함수)

8장 자바스크립트(배열과 함수)


배열(Array)이란?

수학에서 배운 집합을 생각하면 되겠음.
단, 집합과 다른점이라면 중복 원소도 허용한다는 정도.

집합은 A = { 1, 2, 3, 4} 와 같이 쓴다면,
자바스크립트의 배열은
var A = [1, 2, 3, 4];
var a0 = A[0];    // 배열 A의 첫 번째 원소
var a1 = A[1];    // 두 번째 원소

예제)
http://jyheo.github.io/javascript/array.html

참고: 배열 다루기
http://www.w3schools.com/js/js_array_methods.asp

함수(function)란?

수학에서는...
f(x) = x + 3
f(2)는 5가 되고, f(3)은 6이 됨.

자바스크립트에서는...
function fname(x) {
    return x + 3;
}

var y = fname(2);

예제)
http://jyheo.github.io/javascript/function.html

실습

문자열 원소로 주어진 배열에서 특정 문자(대소문자 구분 없이)로 시작하는 단어를 골라서 리턴하는 함수를 작성한다.

http://jyheo.github.io/javascript/exercise1.html

getAwords(words) 함수는 words배열에서 'a'나 'A'로 시작하는 단어를 골라서 배열로 리턴.
getWordsBeginWith(words, begin_char) 함수는 words배열에서 begin_char로 시작하는 단어를 골라서 배열로 리턴. 단, begin_char가 'b'라고 하더라도 'b'와 'B'로 시작하는 모든 단어를 배열에 넣어서 리턴.

완성한 exercise1.html은 자신의 github 페이지에 넣어 둘 것.
ID.github.io/exercise1.html 로 접속 가능하도록

Java 4/11 - 5장 상속(추상 클래스와 인터페이스)

5장 상속(추상 클래스와 인터페이스)

추상 클래스

추상 메소드 - 선언은 했으나 내용이 정의되지 않은 메소드, 추상 메소드를 갖는 클래스는 무조건 추상 클래스가 되어야 함
추상 클래스 - 바로 객체 생성할 수 없고, 상속을 해서 추상 메소드를 정의한 후에 객체 생성이 가능하도록 하는 클래스, 추상 메소드가 없는 경우에는 상속만 하면 객체 생성이 가능해짐

abstract class AbsClass {
public AbsClass () { }
public abstract void abs_method(); // 추상 메소드
}

abstract class AbsClass { // 추상 메소드는 없지만 추상 클래스로 선언됨
public AbsClass () { }
public void abs_method();
}

http://www.tutorialspoint.com/java/java_abstraction.htm


인터페이스

- 모든 메소드가 추상 메소드임
- 상속 관계가 없는 객체에게 특정 동작(메소드)을 갖추도록 요구할 때 사용함.
예를 들어 호수에 물고기랑 플랑크톤, 다이버들 모두 '움직임'이란 메소드를 가질 수 있는데, 이들이 상속 관계라고 보기는 어렵다. 그런데, 공통 메소드를 갖는 객체들에 대해 처리하고 싶을때가 생긴다.

public interface AbsInterface {
        public void abs_method();
}

인터페이스는 상속이 아니라 구현(implements)을 통해 사용
class AbsImpl implements AbsInterface {
        public void abs_method() {}
}

한개 이상의 인터페이스를 상속하여 다른 인터페이스를 만들 수 있음
http://www.tutorialspoint.com/java/java_interfaces.htm

실습


1. Movable만 구현하는 Plankton 클래스와 Drawable과 Movable을 모두 구현하는 Diver 클래스를 만들어서 객체를 생성하여 Lake_If에 넣어보자.

다음 수업 첫 번째 시간 실습 내용(집에서가서 고민해보기)

2. 인터페이스 상속하기
Movable과 Drawable을 상속한 MoveDrawable interface를 만들고, 이를 이용하여 Lake_If에 addMoveDrawable(MoveDrawable md) 메소드를 추가하여 다음과 같이 main()이 가능하도록 해보자. 물론 MyFish도 약간 고쳐야 함.
        Lake_If lake = new Lake_If(80, 20);
        MyFish f = new MyFish("FIsh", "<#--<", 1, 1);
        lake.addMoveDrawable(f);
        lake.addDrawable(new MyRock("Rock", "(##)", 10, 10));

3. 메소드를 좀 더 심플하게!
Lake_If에 addObject(MyObject)라는 메소드를 추가한다. 그리고 인자로 받은 객체가 Moveable 인터페이스를 구현하고 있는지, Drawable 인터페이스를 구현하고 있는지 확인하여 해당 배열에 넣는 addDrawable()과 addMovable()을 적절히 호출한다.
힌트: instanceof 연산자 사용.

2016년 4월 7일 목요일

웹 프로그래밍 4/7 - 8장 자바스크립트 기본

8장 자바스크립트 기본

자료형(type)
변수(variable)

문자열

디버그 콘솔에 출력하기
console.log("출력 내용");

실습:

구구단 출력하기
<script>
var i;
for (i = 2; i < 10; i++) {
    for (j = 2; j < 10; j++) {
        console.log(i + "x" + j + "=" + (i*j));
    }
}
</script>

임베디드 OS 4/7 - 경쟁조건,상호배제 실습

경쟁조건,상호배제 실습

POSIX Thread 라이브러리를 사용하여 경쟁조건과 상호배제를 실습

경쟁조건(race condition)

https://github.com/jyheo/OperatingSystemExercise/blob/master/race_cond.c

상호배제(mutual exclusion)

https://github.com/jyheo/OperatingSystemExercise/blob/master/race_mutex.c

빌드&실행

$ gcc race_cond.c -o race_cond -l pthread

Makefile을 이용하기
https://github.com/jyheo/OperatingSystemExercise/blob/master/Makefile

해보기.

https://github.com/jyheo/OperatingSystemExercise/blob/master/race_cond_2.c

실행결과가 원하는 값 2000000이 나오지 않는 이유는?
해결하기 위한 방법은?

2016년 4월 4일 월요일

웹 프로그래밍 4/5 - 7장 CSS응용과 레이아웃(계속)

7장 CSS응용과 레이아웃

종합 예제


드랍메뉴 추가하기(CSS만으로)
.outer-menu-item:hover .inner-menu {
    display: block;
}

github에 자신의 홈페이지 만들기

  1. github.com에 계정 만들기
  2. 자신의ID.github.io 저장소(repository) 만들기
  3. 저장소에 index.html 만들기

실습

github에 홈페이지 만들고 자신의 포트폴리오 페이지를 만들어 보자.
예제)
http://chrispederick.com/
http://zachhoefler.com/

실습 후 자신의 github 아이디를 jyheo@hansung.ac.kr로 다음과 같이 보내기.

제목: 웹 프로그래밍 github 아이디
내용:
안녕하세요. IT응용시스템공학과 1학년 홍길동 입니다.
웹 프로그래밍 수업 실습과 관련한 아래 정보를 보내드립니다.
홍길동/ 학번 /github아이디

홍길동 드림

Java 4/5 - 5장 상속(계속)

5장 상속(계속)

이전 시간 실습

http://jylecture.blogspot.kr/2016/04/java-44-5.html

누군가의 실습 내용:

https://github.com/amdjd/JavaExercise/blob/110d54c2e5d0ccbe184ee9a57bef1ddcf4b11e41/src/classes/Lake.java

moveFish() 함수

    public void moveFish() {
        for (int i = 0; i < fish.length; i += 2) {
            fish[i].move(width, height);
        }
        for (int i = 1; i < fish.length; i += 2) {
            fish[i].move2(width, height);
        }
    }

상속을 이용해서 바꿔보기

https://github.com/jyheo/JavaExercise/blob/master/src/classes/Lake10.java

class FoolFish extends Fish { // 상속
    FoolFish(String name, String shape) {
        super(name, shape); // 부모 클래스의 생성자를 부름, super는 부모 클래스를 가리킴
    }

    public void move(int width, int height) { // 메소드 오버라이딩(overriding), 원래 메소드는?
        x++; // Fish의 x, y가 private int였다고 지금은 protected int로 바뀌어 있음. 왜?
        y++;
        if (x >= width)
            x = 0;
        if (y >= height)
            y = 0;
    }
}

public class Lake10 {
    private int width;
    private int height;
    private Fish[] fishes;

    public Lake10(int width, int height) {
        this.width = width;
        this.height = height;
        fishes = new Fish[10];
        for (int i = 0; i < fishes.length; i++) {
            if (i % 2 == 0)
                fishes[i] = new Fish("Even", "<#--<");
            else
                fishes[i] = new FoolFish("Odd", "<$--<"); // Fish 레퍼런스가 FoolFish를 가리킨다?
                                                          // 업 캐스팅(upcasting)
        }
    }

    public void moveFish() {
        for (Fish f : fishes)         //  f가 Fish 객체일 때도 있고, FoolFish일 때도 있는데,
            f.move(width, height);    //  move()는 누구의 move()가 불리는가?
    }                                 //  동적 바인딩(dynamic binding)


임베디드 OS 4/5 - 병행성,경쟁조건,상호배제

병행성,경쟁조건,상호배제


멀티프로그래밍 > 병행성 > 경쟁조건 > 상호배제

강의 슬라이드:

https://drive.google.com/file/d/0B5tRdB4hr8DfbTA3bGFOcFlaYkk/view?usp=sharing


2016년 4월 3일 일요일

Java 4/4 5장 상속

5장 상속

객체간의 관계

A has-a B: 객체 A가 객체 B를 가지고 있음, A가 B로 구성됨. A에 B가 포함됨. 자동차는 바퀴4개와 엔진을 가지고 있음.
A is-a B: 객체 A는 객체 B이다. 학생은 사람이다. B가 더 일반화된 객체임.

A has-a B

- composition: 자동차는 엔진을 가지고 있음. 엔진이 없으면 자동차는 의미가 없음.
- aggregation: 호수에 물고기가 있음. 물고기가 없어져도 호수는 존재함.

보통 B는 클래스 A의 필드(속성, 멤버 변수)로 표현됨.

Car has-a Engine

class Engine {
}

class Car {
    private Engine engine;
    Car() {
        engine = new Engine();
    }
    Car(Engine e) {
        engine = e;
    }
}

A is-a B

A는 B의 한정(전문, specialized)된 객체, B는 A의 일반(generalized)화된 객체
Java와 같은 객체지향 언어에서는 상속(inheritance)를 통해 표현됨.

Student is a Person

class Person {
    private String id_card;
}

class Student extends Person {
    private String student_id_card;
}

상속 받은 클래스를 서브클래스(subclass, 자식), 상속된 클래스를 슈퍼클래스(superclass, 부모)라고 함.
Person이 슈퍼클래스, Student가 서브클래스


실습 

호수의 물고기 시뮬레이션
Lake has-a Fish

1. Lake의 Fish를 10마리로 늘려보자.
Fish를 배열로 만들 것!

2. 10마리 Fish 중 홀수 인덱스는 원래 대로 랜덤하게 움직이게 하고, 짝수 인덱스 Fish는 x, y를 무조건 1씩 증가하도록 움직이게 해보자.
새로운 Fish2 클래스를 만들어도 되고, Fish 클래스에 새로운 움직임 메소드를 만들어도 됨.


2016년 3월 31일 목요일

웹 프로그래밍 3/31 - 7장 CSS 응용과 레이아웃

7장 CSS 응용과 레이아웃


실습


  • 상단 메뉴바는 고정(fixed) 임.
  • 메뉴 아이템의 크기는 100px로 지정하였고, 메뉴 텍스트의 내용이 커지면 ...으로 표시하도록 하였음(메뉴 - 1334... 와 같이)
  • 본문 내용의 가로 길이는 500px, 바탕색은 orange, 그리고 중앙 정렬하였고, padding은 20px을 주었음.



2016년 3월 29일 화요일

임베디드 OS 3/31 실습 - 크로스 컴파일과 원격 디버깅

크로스 컴파일과 원격 디버깅

이클립스를 이용하여 라즈베리 파이 타겟을 위한 프로그램을 크로스 컴파일하고 원격 디버깅하는 실습

Java 3/29 4장 클래스와 객체(객체 배열, 생성자, 오버로딩)

4장 클래스와 객체(객체 배열, 생성자, 오버로딩)

실습

사각형(Rectangle) 클래스 완성하기 - 교재 p.235 실습문제 2번 변형
아래 소스에서 TODO로 되어 있는 부분의 내용을 채워서, main()이 적절히 동작하도록 만드시오. equals(), in(), overlap()은 모두 true를 리턴하게 됨
https://github.com/jyheo/JavaExercise/blob/master/src/classes/Rectangle.java

  • setPoints() - 인자로 받은 x, y 좌표들이 모두 0보다 커야 함
  • getWidth() - 가로 길이(x좌표 이용)
  • getHeight() - 세로 길이(y좌표 이용)
  • getArea() - 면적
  • equals() - 인자로 받은 사각형과 위치와 크기가 동일하면 true리턴
  • in() - 인자로 받은 사각형 내부에 위치한다면 true리턴
  • overlap() -인자로 받은 사각형과 겹치는 부분이 존재한다면 true리턴

이론

https://github.com/jyheo/JavaExercise/blob/master/src/classes/Set.java

  • 객체 배열 -> 정확히는 객체 레퍼런스의 배열
    • Set[] sets = new Set[5];
  • this 레퍼런스
    • 객체 자신을 가리키기 위한 레퍼런스
    • this.array
    • this.size
  • 생성자(Constructor)
    • Set()
    • Set(int[] a)
    • Set(Set s)
    • 생성자에서만 사용 가능한 this()
  • 메소드 오버로딩
    • addElement(int )
    • addElement(int[] )
    • 생성자 3개도 오버로딩임
  • Garbage collection
    • 더이상 참조하는 레퍼런스 변수가 존재하지 않는다면, 즉 어떤 객체를 참조할 방법이 존재하지 않는다면, 쓰레기가 되어 자동으로 처리됨.
    • 자바에서는 new로 만든 객체의 소멸에 대해 신경쓸 필요 없음.

실습2


  • 앞의 예에서 System.arraycopy() 대신에 사용할 적당한 private 메소드를 만들어서 쓰시오.
  • public static Set intersection(Set A, Set B)를 구현하시오.
  • Set(int[]) 생성자의 내용에서 인자로 받은 배열을 그대로 복사하지 말고, 집합 원소 중복되지 않게 검사하면서 추가하도록 고치시오. addElement(int[])를 활용하면 됨


2016년 3월 27일 일요일

인터넷시스템 3/28 - 2장 Application Layer (Web and HTTP)

2장 Application Layer (Web and HTTP)


2.1 principles of network application

  • Application architecture:
    • clinet-server
    • p2p
  • addressing = IP + port
  • App-layer protocol

2.2 Web and HTTP

  • HTTP overview
  • Non-persistent/Persistent
  • HTTP message
    • request
    • response
  • Cookie
  • Web caching

실습

웹 프로그래밍 3/29 6장 CSS 속성

6장 CSS 속성


  • 5장에서 배운 CSS 선택자를 이용하여 HTML 요소를 선택하고, 그 선택한 요소에 대해 속성을 부여함
  • 속성에는 여러가지 속성들이 존재하며, 각 속성마다 명목형, 크기, 색, URL 등의 값을 줄 수 있음

속성의 값

  • 명목형(교재에는 키워드 라고 나와 있음): 속성 이름과 콜론을 쓰고 Webstorm에서 Ctrl+Space를 누르면 선택 가능한 값이 나열됨
  • 크기: %, em, px 등
  • 색: 색 이름, rgb(r, g, b), rgba(r, g, b, a), #RRGGBB
  • URL: url('/back.jpg') 

속성 들

  • 박스 속성: margin, border, padding, width, height
  • 박스 테두리 속성: border-width, border-style, border-color, border-radius http://www.cssmatic.com/border-radius
  • 표시 속성: display 
  • 배경 속성: background-image, background-size, background-repeat, background-attachment, background-position, background-color
  • 글자 속성: font-size, font-family, font-style, font-weight, text-align, line-height
  • 위치 속성: position, overflow
  • float 속성: float
  • 그림자 속성: text-shadow, box-shadow http://www.cssmatic.com/box-shadow
  • 그레디언트: css gradient generator http://www.cssmatic.com/gradient-generator

실습


  • 자기소개서 페이지의 항목을 플로팅 박스로 만들기
    .floating-box {
            display: inline-block;
            width: 300px;
            margin: 10px;
            border: 3px solid deepskyblue;
            float: left;
    }

  • 박스에 그림자 적용하기
  • <h1>에 그레디언트 컬러와 둥근 모서리를 적용하고, 글자를 중앙에 위치시키기
  • 특정 박스에 대해 스크롤바 적용하기(height를 지정하고, overflow-y 속성 이용), 아래 예시에는 '허준영' 박스에 대해 적용한 것임
예시)
브라우져 크기에 따라 2열로 표시되기도하고 3열로 표시되기도 함. inline-block의 응용


임베디드 OS 3/29 - 스레드

스레드


  • 프로세스와 스레드
  • 사용자 수준(User-level) 스레드와 커널 수준(Kernel-level) 스레드
  • 멀티코어와 멀티스레드, 암달(Amdahl)의 법칙

강의 슬라이드:

https://drive.google.com/file/d/0B5tRdB4hr8DfLTNuUVU1Q1NlbDg/view?usp=sharing

Java 3/28 4장 클래스와 객체(클래스, 객체 생성)

4장 클래스와 객체


객체지향의 3대 특징 (무조건 일단 외운다)

1. 캡슐화(encapsulation) - 클래스의 속성과 메소드(method), 접근지정자를 통해 실현
2. 상속(inheritance) - 클래스 상속을 통해 실현
3. 다형성(polymorphism) - 메소드 overriding(재정의) overloading(중복)으로 실현

클래스

객체를 정의하기 위한 틀
객체의 속성(상태, 필드, 멤버 변수)과 메소드(멤버 함수, 메시지, 행동, 액션)을 정의함
메소드는 객체의 속성을 변화시킴

예) 구구단 생성기

https://github.com/jyheo/JavaExercise/blob/master/src/classes/MultiplicationTable.java

  • 속성(필드): 
    • number 몇단?
    • max_number 최대 단 
  • 메소드:
    • setNumber() 단을 지정한다.
    • setMaxNumber() 최대 단을 지정한다.
    • printTable() 현재 단을 출력해라.

1. 캡슐화: 구구단 생성기를 사용하는 너는 구구단을 몰라도, 단을 입력하고 출력 명령만 내리면 구구단을 볼 수 있다.
2. 상속: 여기에서는 없음.
3. 다형성: 여기에서는 없음.

실습

구구단 예제를 2단부터 9단까지 출력하도록 고치시오.
단, main() 함수 내용만 수정할 것.
2x2=4
2x3=6
...
9x9=81

2016년 3월 23일 수요일

웹 프로그래밍 3/24 - 5장 CSS 선택자

5장 CSS 선택자(selector)

CSS 선택자(selector) - 스타일을 지정할 요소를 결정하는 방법
  • 기본 선택자  - 전체, 태그, 아이디, 클래스
  • 속성 선택자
  • 후손/자식 선택자
  • 반응 선택자 - 마우스 커서가 올라가거나 클릭하거나
  • 상태 선택자 - 체크, 포커스, 활성/비활성 여부
  • 구조 선택자 - 나열된 요소들의 첫 번째, 마지막, 반복 위치의 요소

참고: http://www.w3schools.com/cssref/css_selectors.asp

실습

교재의 예제 5-9를 아래와 같이 바꿔보기.
먼저 홀수칸의 배경색은 lightblue, 짝수칸의 배경색은 deepskyblue
그리고 마우스 커서가 홀수칸으로 올라가면 배경색을 black, 글씨 색은 yellow
짝수칸으로 올라갔을 때에는 배경색 black, 글씨 색은 white
힌트:
li:first_child:hover 와 같이 선택자를 사용할 수 있음


2016년 3월 22일 화요일

Java 3/22 - 3장 반복문과 배열, 예외처리 (2차원 배열, 예외처리)

3장 반복문과 배열, 예외처리 (2차원 배열, 예외처리)

실습

두 int[] 배열의 교집합과 합집합을 구해보자.
두 int[] 배열에 중복 원소는 없다고 가정한다.
실습용 소스:
완성한 소스는 pull request하세요.
(git사용법을 모르는 사람은 다시 fork하세요. 제대로 하려면 원본(upstream)과 sync하는 방법을 사용해야 함)

2차원 배열

int[][] iiArray = new int[2][5];
iiArray.length
iiArray[0].length
iiArray[1].length

2차원 배열은 1차원 배열의 배열임
int[][] iiArray = new int[2][];
iiArray[0] = new int[5]; // iiArray의 첫번째 원소가 1차원 배열
iiArray[1] = new int[3]; // 두번째 원소도 1차원 배열, 크기는 첫번째와 달라도 됨.

main()의 인자

public static void main(String[] args) {
    // args 배열에는 명령    
    for (String s : args)
        System.out.println(s);
}
java.exe Main apple android window 로 실행하면, 아래와 같이 출력됨.
apple
android
window

예외처리(Exception)

try/catch/finally

String[] strArr = new String[5];

try {
    strArr[6] = "hello";
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("array index oob exception!");
}

try {
    strArr[6] = "hello";
} catch (Exception e) {
    System.out.println("exception");
}

2016년 3월 21일 월요일

웹 프로그래밍 3/22 - 5장 CSS 선택자(selector)

5장 CSS 선택자(selector)

CSS는 HTML 문서 내용의 요소들에 모양, 위치와 같은 스타일을 추가하는 방법임.
보통 <style></style> 태그 내에 쓰거나 외부 파일로 연결하여 사용함.

CSS 선택자(selector) - 스타일을 지정할 요소를 결정하는 방법
  • 기본 선택자  - 전체, 태그, 아이디, 클래스
  • 속성 선택자
  • 후손/자식 선택자

참고: http://www.w3schools.com/cssref/css_selectors.asp

실습

교재의 종합예제1 HTML버전에 CSS를 간단히 추가하여 아래와 같이 각 요소들으 위치와 배경색을 변경해보시오.

2016년 3월 20일 일요일

임베디드 OS 3/22 - 프로세스 기술과 제어

운영체제 프로세스 기술과 제어

  • 프로세스(process)란?
  • 프로세스 상태(state)
  • 프로세스 기술(description) = PCB(Process Control Block)
  • 프로세스 제어
    • 모드 전환(Mode Switch), 커널 모드와 유저 모드
    • 프로세스 전환(Process Switch)
    • 프로세스 생성

강의 슬라이드

https://drive.google.com/file/d/0B5tRdB4hr8DfZ0FFa1pOQVdFdzg/view?usp=sharing

2016년 3월 19일 토요일

Java 3/21 - 3장 반복문과 배열, 예외처리(1차원 배열과 for-each)

3장 반복문과 배열, 예외처리(1차원 배열과 for-each)

이론:

  • 1차원 배열과 for-each

실습:

단어 5개를 입력받아서 역순으로 출력하는 프로그램을 작성하시오.
예)
감 배 사과 포도 수박
수박 포도 사과 배 감

2016년 3월 17일 목요일

웹 프로그래밍 3/17 - 4장 멀티미디어와 입력(form) 태그

4장 멀티미디어와 입력(form) 태그


  • audio, video 태그
  • form, input 태그
  • textarea, fieldset, legend

실습:

아래와 같이 입력(form) 페이지를 만들어 본다.
남여 라디오 버튼과 좋아요 라디오 버튼은 서로 다른 라디오 버튼 그룹임.
'다시' 버튼은 reset이고 '쓰기' 버튼은 submit 임
내용에 있는 textarea의 크기는 5행 80열 임.

임베디드OS 3/17 실습 - 우분투와 Raspberry Pi 툴체인 설치

우분투와 Raspberry Pi 툴체인 설치





Ubuntu 14.0.4 http://idisk.hansung.ac.kr:8081/api.link/3d_baLoAHb7eROUD_A~~.iso

2016년 3월 14일 월요일

Java 3/15 - 3장 반복문과 배열, 예외처리 (반복문, 1차원 배열)

3장 반복문과 배열, 예외처리 (반복문, 1차원 배열)


실습:


  • 가위바위보 게임 완성하기
  • 구구단 출력하기(교재 p.123 예제3-4 그대로 따라하기)
  • 구구단 확장하기(11단부터 19단 만들기)

이론:


  • 반복문, for, while, do-while
  • 1차원 배열, for-each 다음 시간에...

웹 프로그래밍 3/15 - 3장 HTML 기본태그 (목록, 테이블, 이미지, 공간 분할 태그)

3장 HTML 기본태그 (목록, 테이블, 이미지, 공간 분할 태그)


  • 목록 태그: <ul>, <ol>, <li>
  • 태이블 태그: <table>, <tr>, <th>/<td>
  • 이미지 태그: <img>
  • 공간 분할 태그: <div><span>
  • 시맨틱 태그: header, nav, aside, section, article, footer - [w3school

실습: 과목 목록과 시간표 만들기


임베디드OS 3/15 - 이론: 운영체제 개요

운영체제 개요

  • 운영체제란?
  • 운영체제 발전, 역사
  • 운영체제 요소

강의 슬라이드:

https://drive.google.com/file/d/0B5tRdB4hr8DfRnh6YjVhTk85cHc/view?usp=sharing

2016년 3월 12일 토요일

2016년 3월 9일 수요일

웹 프로그래밍 3/10 - 3장 HTML기본 태그 - 3.1 글자 태그

3장 HTML 기본 태그 - 3.1 글자 태그


3.1 글자 태그


  • 제목 글자 태그, h1, h2, h3, ...
  • 본문 태그 p, br, hr
  • 하이퍼링크 태그 <a href="">링크</a>
  • 글자 모양 태그 b, i , small, sub, sup, ins, del

임베디드OS 3/10 실습: 라즈베리 파이 사용하기

실습: 라즈베리 파이 처음 사용해보기





2016년 3월 8일 화요일

Java 3월 8일 - 2장. Java 기본

2장. Java 기본


실습

수의 개수를 임의로 임력받아 평균을 계산하기. 숫자를 모두 입력한 후에는 엔터와 Ctrl+D로 입력을 종료시켜야 함.

힌트:
Scanner의 nextInt를 좀 더 제대로 써서 실습하기
http://www.tutorialspoint.com/java/util/scanner_nextint.htm
hasNext()와 hasNextInt() 메소드를 활용, while, if문과 함께 사용

while(scanner.hasNext()) {
    scanner.nextInt()
}

이론

연산자
조건 if
switch/case

웹 프로그래밍 3/8 - 2장 HTML기본 구조와 작성법

2장 HTML기본 구조와 작성법


HTML, CSS, javascript 초간단 예제를 통해 기본 구조와 작성법을 배움.

실습:

다음과 같이 자기 소개서 페이지를 만들어보자. 내용은 자유롭게...


임베디드OS 3/8 - 임베디드 시스템 개요

임베디드 시스템 개요






  • 임베디드 시스템과 소프트웨어
  • 임베디드 시스템 개발 챌린지
    • 멀티 프로세서
    • 메모리 제약
    • UI
  • 임베디드 시스템 설계 구성
  • 소프트웨어의 비중 증대
  • 재사용 소프트웨어 요소
  • RTOS
  • 개발 단계
  • 단계별 디버거 사용

2016년 3월 3일 목요일

Java 3월7일 - 2장. Java 기본

2장. Java 기본

교재(명품 자바 프로그래밍) 2장 자바 기본 프로그래밍

강의 내용

  • 자바는 어디에서 프로그램이 시작되는가? 기본적인 구조
    • C언어에서는? main()
  • 자바에서 사용가능한 데이터 타입은? 기본 타입에 대해
    • C언어에서는? int, char, short, unsigned, long, float, double 등
  • 입출력은 어떻게 하는가? System.in/out
    • C언어에서는? printf(), puts(), scanf_s(), gets()
  • 입력을 좀 더 편리하게 하려면? Scanner
    • C언어에서는? scanf_s()

실습:

수 5개를 입력받아서 평균을 계산하는 프로그램을 작성하시오.
예시1)
3 4 5 6 7 (엔터)
5.0
예시2)
3.2 4.3 5.2 6.7 8.8 (엔터)
5.64

2016년 3월 2일 수요일

2016년 임베디드 OS 강의 소개

2016년 임베디드 OS 강의 소개

무엇을 배우는가?

임베디드OS, 운영체제 이론
- 학사과정 개편으로 운영체제를 듣지 못하였기 때문에 운영체제 이론을 포함하였음
리눅스 커널 내부 이해, 커널 모듈, 디바이스 드라이버 프로그래밍
라즈베리를 이용한 실습(외부 장치 연결, OS포팅)

무엇을 만들 수 있는가?

간단한 센서/엑츄에이터를 연결한 소형 네트워크 임베디드 시스템
이를 기반으로 다양한 임베디드 SW개발 기술 기초를 익힘

강의 교재

운영체제 내부구조 및 설계원리 8판, 윌리엄 스톨링 저, 프로텍 미디어
강의 블로그에 올라오는 슬라이드
참고 교재: 임베디드 소프트웨어의 모든 것, 콜린 월즈 저, 에이콘 출판사

일정

이론(화)실습(목)
03월 01일삼일절 휴강03월 03일강의 소개
03월 08일임베디드 소프트웨어03월 10일라즈비안 설치, 네트워크 설정, 원격 접속, 업데이트
03월 15일운영체제 개요, 프로세스03월 17일개발 환경/리눅스 설치(ArchiLinux), 사용하기
03월 22일스레드03월 24일크로스 컴파일과 디버깅
03월 29일리눅스 커널 프로세스와 스레드03월 31일리눅스 커널 프로세스와 스레드 (이론)
04월 05일병행성: 상호배제와 동기화04월 07일병행성: 상호배제와 동기화 (이론)
04월 12일병행성: 교착상태와 기아04월 14일병행성: 교착상태와 기아 (이론)
04월 19일중간시험04월 21일실습 없음.
04월 26일가상메모리04월 28일GPIO: 버튼과 LED
05월 03일리눅스 커널 가상 메모리05월 05일어린이날 휴강
05월 10일스케줄링05월 12일PWM: servo motor
05월 17일RTOS 스케줄링05월 19일Flask, 웹 서버로 주변 기기 제어
05월 24일입출력 관리05월 26일리눅스 커널 모듈 프로그래밍
05월 31일파일 관리06월 02일리눅스 커널 디바이스 드라이버
06월 07일리눅스 파일 시스템06월 09일리눅스 커널 디바이스 드라이버 ioctl
06월 14일기말시험06월 16일실습 없음.

시험 안내:

중간시험은 4월 19일 예정
기말시험은 6월 14일 예정

강의 평가

출석(10), 중간 시험(30), 기말 시험(30), 과제/실습(30)

실습 도구

VirtualBox, ArchiLInux(or Ubuntu), putty, gcc, notepad++, python 등