보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

1. ICMP Flooding

 

  스머프 공격(Smurf attack)이라고도 부르는 이 공격은 공공 인터넷 상에서의 Flood DoS 공격의 한 변종이다. 네트워크 장치 설정이 잘못되었을 경우, 어떤 특정 전산망의 방송 주소로 전달된 패킷이 망 상의 어떤 특정 컴퓨터가 아니라 망의 모든 컴퓨터에 전달될 수 있다는 점을 이용한다. 전산망은 이 경우 스머프 증폭기의 역할을 한다. 이러한 공격에서 가해자는 대량의 IP 패킷을 보내면서 그 발신 주소를 표적 주소로 한다. 전산망의 대역폭이 신속히 소진되어 정상 패킷이 목적지에 도달하지 못하게 된다. 인터넷 상의 DoS 공격에 대항하기 위해 스머프 증폭기 등록처와 같은 서비스에서 이용될 소지가 있는 잘못 설정된 전산망을 기록, 대응할 수 있도록 하고 있다. ICMP Flooding 공격 방법에는 Ping FloodingSYN Flooding 등이 있다.

 

1) Ping Flooding

 

  대상 시스템에 막대한 양의 ICMP 에코 요청 패킷(ping 패킷)을 보내는 방법이다. 유닉스 계열의 시스템에서는 ping 명령을 이용하며, ping 응답을 기다리지 않고 되도록 빨리 ICMP 패킷을 보내는 ping 옵션을 활용하는 것이 가장 효율적인 방법이다.

  대상 시스템에 부하를 일으키기 위해서는 ping을 보내는 쪽의 네트워크 대역폭이 대상 시스템이 확보한 네트워크 대역폭보다 더 크면 된다.

 

2) SYN Flooding

 

  막대한 양의 TCP SYN 패킷을 대상 시스템으로 보내서 시스템을 마비시키는 공격 방법이다.

  TCP는 연결을 맺을 때 3-way handshake를 시도한다. SYN 패킷에는 발신자의 IP 주소가 포함되어 있는데, 공격자는 SYN 패킷의 발신자 IP 주소를 잘못된 주소로 변조하여 대상 시스템에 보낸다. 대상 시스템은 수신한 SYN 패킷을 처리하기 위한 프로세스를 생성하고 SYN-ACK 패킷을 발신자에게 보낸다. 그런 후 생성된 프로세스는 발신자가 잘 수신했는지 ACK 패킷 응답을 기다린다. 하지만 SYN 패킷에 있는 발신자의 IP 주소는 잘못된 주소이므로 ACK 응답이 오지 않는다. 공격자가 IP 주소가 변조된 SYN 패킷을 계속 보내면 대상 시스템은 또 다른 프로세스를 생성하고 SYN-ACK을 보낸 후 ACK 패킷 응답을 기다리는 것을 반복한다. 



2. Ping of Death

 

  Ping of Death ICMP 패킷을 정상적인 크기(TCP/IP 명세가 허용하는 최대 크기)65535 바이트 보다 크게 만들어 전송하는 DoS 공격의 일종이다. (Windows 에서 전송할 수 있는 최대 크기는 65500, Lunux 에서는 65507 이다.)

 

  정상적인 ping 패킷은 56바이트이며, IP 헤더로 사용되는 경우에는 84바이트 크기이다. 그런데 일부 시스템은 정상 크기보다 큰 ping 패킷을 수신했을 때 제대로 처리할 수 없게 설계된 것도 있다. 이런 시스템에 정상 범위보다 큰 ping 패킷을 전송하게 되면 시스템 내에서 비정상적인 ping 패킷으로 조합되고 이로 인해 버퍼 오버플로우가 발생하여 시스템이 비정상적이 될 수 있으며, 이 때 공격자들은 악성코드를 주입시킬 수 있는 기회를 포착한다.

 

  Ping of Death TCP/IP 명세보다 큰 크기로 반복해서 ping을 보내어 대상 시스템을 그로기 상태에 빠뜨리기 때문에 Ping of Death 라고 불린다.



출처

 

https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B9%84%EC%8A%A4_%EA%B1%B0%EB%B6%80

_%EA%B3%B5%EA%B2%A9

 

http://blog.naver.com/PostView.nhn?blogId=infopub&logNo=220774512335&parentCategoryNo=43&categoryNo=

&viewDate=&isShowPopularPosts=false&from=postView

 

http://blog.daum.net/tlos6733/39

블로그 이미지

NCookie

,

  ICMP는 인터넷 제어 메시지 프로토콜Internet Control Message Protocol의 약자이다. ICMP는 인터넷 프로토콜 모음Internet Protocol Suite 중 하나로, IP 동작에서 네트워크 진단이나 제어 목적으로 사용된다. 또한 네트워크 상에서 오류가 발생했을 때 이에 대한 응답으로 만들어져 오류가 발생한 패킷을 보낸 IP 주소로 전송한다. 다음은 ICMP echo-request/reply 에 대한 취약점들이다.

 

 

1. ICMP Redirect (Sniffing)

 

  보통의 네트워크는 라우터나 게이트웨이가 하나이지만, 여러 개의 라우터를 사용할 수 밖에 없는 경우 로브 밸런싱(Load balancing)을 해야 한다.

 

  호스트가 특정한 목적지로 가야 하는데, 해당 목적지가 없거나 최단거리가 아닌 경우 ICMP 리다이렉트 패킷은 라우터를 통해서 호스트에게 최선의 경로를 알려주는데 사용된다. ICMP 리다이렉트 패킷을 공격자가 위조할 수 있다면 공격자는 호스트의 라우팅 테이블을 변경하여 특정한 트래픽이 의도하지 않은 경로를 경유하도록 만들 수 있게 된다.

 

  즉, 피해자가 DNS 서버로 접속을 하려고 할 때 라우터를 통하여 접속을 한다. 이 때 공격자는 피해자에게 자신의 경로를 경우하는 것이 최선의 경로라고 ICMP 리다이렉트 패킷을 보낸다. 이 패킷을 받은 피해자의 컴퓨터는 DNS 서버로 보내는 패킷을 공격자의 IP주소로 보내도록 라우팅 테이블이 변경된다. (공격자를 경우하는 것이 최선의 경로라고 알려주는 것이다.) 공격자는 이를 통하여 피해자의 패킷을 Sniffing 할 수 있게 된다. 이때 공격자는 받은 패킷을 포워딩 해주지 않으면 피해자쪽에서는 인터넷이 끊어지는 현상이 나타나기 때문에 Fragrouter를 해줘야 한다. (단순이 일방향으로 Fragmenting 하는 것)

 

2. ICMP Directed broadcast

 

  만약 라우터에 directed-broadcast 설정이 되어 있다면 외부에서 브로드캐스트 주소로 ping 과 같은 특정한 패킷을 발송할 경우 해당 패킷이 브로드캐스트 주소를 통해 내부의 모든 주소로 그대로 전달되게 된다. 이를테면 만약 내부에서 C Class를 사용하고 있다면 123.123.123.255 주소로 ping을 보냈다면 123.123.123.1 부터 123.123.123.254 까지 255개의 시스템에 그대로 전달된다는 것이다. 이는 일면 편리하게 사용될 수도 있는 기능이지만 DoS DDoS 공격으로 악용될 가능성이 매우 높기 때문에 반드시 사용하지 않도록 하여야 한다.

 

  정리하자면, 출발지 IP 주소를 공격대상자 IP주소로 소스 주소를 변경한 후 ICMP Echo를 보내면 공격대상자 주소로 icmp reply가 많이 날라가게 되어 공격대상자 서버가 다운되는 공격이 가능하다는 것이다. 이러한 공격을 스머프 공격(Smurf attack)이라고도 부르는 ICMP Flood 라고 한다.

 


출처

 

http://blog.daum.net/tlos6733/39

http://agz.es/Network/cdft.pdf

http://c8korea.blogspot.kr/2013/05/cisco.html

 


블로그 이미지

NCookie

,

[파이썬] 가변인자

파이썬 2016. 11. 17. 20:13

파이썬에서는 함수의 인자를 가변적으로 받을 수 있습니다.


만약 여러 개의 숫자를 함수의 인자로 받아 출력하려고 한다면 다음과 같이 코드를 작성할 수 있습니다. 


# -*- coding: utf-8 -*-


def print_num(*numbers):
    for number in numbers:
        print number,

print_num(1, 2, 3, 4)
1 2 3 4


그리고 가변인자는 뒤에 일반인자가 올 수 없으며 하나만 사용할 수 있습니다. 


가변인자를 * 한 개만 사용하여 받으면 튜플 형태로 전달되고 두 개면 딕셔너리 형태로 받아옵니다.


# -*- coding: utf-8 -*-


def print_num(*numbers, **name):
    for number in numbers:
        print number,

    print "\n{0}".format(name)

print_num(1, 2, 3, 4, name="Bob", name2="Julia")
1 2 3 4 
{'name2': 'Julia', 'name': 'Bob'}


블로그 이미지

NCookie

,

파이썬의 퍼스크 클래스 함수에 관한 글입니다. 


퍼스트 클래스 시민에 대한 글을 먼저 보고 오시면 좋을 듯 합니다.


In computer science, a programming language is said to have first-class functions if it treats functions as first-class citizens. Specifically, this means the language supports passing functions as arguments to other functions, returning them as the values from other functions, and assigning them to variables or storing them in data structures.
- 위키피디아


퍼스트 클래스 함수(First Class Function)란 함수를 퍼스트 클래스 시민(first-class citizens)으로 다루는 것을 의미합니다. 


즉, 변수에 담을 수 있고, 함수의 인자로 전달하고 함수의 리턴 값(return value)로 전달할 수 있는 함수입니다.



함수를 퍼스트 클래스 객체로 다룰 수 있게 지원하는 것은 함수형 언어의 특징이라고 합니다. 그렇다면 객체지향 언어인 파이썬(Everything is An Object)에서는 어째서 퍼스트 클래스 함수를 지원할까요?


그래서 주변에 물어봤는데 대부분의 답변은 다양하고 기발한 코딩이 가능하기 때문이라고 합니다. 그에 대한 예시로는 데코레이터, 익명 함수 등이 있을 것입니다.



퍼스트 클래스 함수는 후의 클로저(closure)라는 개념을 공부할 때 이어집니다.



출처


https://en.wikipedia.org/wiki/First-class_function


http://bestalign.github.io/2015/10/18/first-class-object/


http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8D%BC%EC%8A%A4%ED%8A%B8%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A8%EC%88%98-first-class-function/


http://blog.doortts.com/135


http://stackoverflow.com/questions/245192/what-are-first-class-objects

블로그 이미지

NCookie

,

위키피디아에서는 first-class citizen을 다음과 같이 정의하고 있습니다.


In programming language design, a first-class citizen (also typeobjectentity, or value) in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, and assigned to a variable.

- Wikikpedia


  프로그래밍 언어 디자인에서 프로그래밍 언어의 first-class citizen는 다른 엔티티가 일반적으로 사용할 수 있는 모든 작업들을 지원하는 엔티티라고 합니다. 이러한 작업들에는 객체 등을 함수의 인자로 넘기거나, 함수에서 반환하고 변수에 할당할 수 있는 것들이 포함되어 있습니다.



first, second class 객체의 개념은 1960년대 Christopher Strachey에 의해 소개되었습니다. 그는 실제로 용어를 엄격하게 정의하지는 않았지만 ALGOL에서 실제 수와 프로시져를 비교하였습니다.


그는 직접 변수에 할당할 수 있는 실수(real number)가 first-class citizen인 것과 달리 그렇지 못한 프로시저는 second-class citizen이라고 하였습니다.



일반적으로 1급 시민의 조건은 다음과 같이 정의한다고 합니다. (참고)

  • 변수(variable)에 담을 수 있다
  • 인자(parameter)로 전달할 수 있다
  • 반환값(return value)으로 전달할 수 있다



블로그 이미지

NCookie

,

[티스토리] 인용문

웹/기타 2016. 11. 17. 14:43

http://fav76.tistory.com/182


참고

' > 기타' 카테고리의 다른 글

Highlight.js 티스토리 Line Numbers 추가  (1) 2016.11.16
[웹] REST API란  (0) 2016.10.28
URL, URI 차이점  (0) 2016.10.24
블로그 이미지

NCookie

,

티스토리에 Highlihgt.js를 적용하는 방법은 


http://slaner.tistory.com/143


이 블로그에서 보고 하시면 될 것 같습니다.


제가 소개하려고 하는 것은 line number를 추가하는 것입니다.


hightlight.js에서는 기본적으로 line number를 지원하지 않기 때문에 fork 나 customizing된 소스를 사용해야 합니다.


그래서 방법을 찾다가 가장 간단한 방법을 소개하려고 합니다.




https://github.com/wcoder/highlightjs-line-numbers.js


여기에 들어가서 src/highlightjs-line-numbers.js 파일을 받습니다. 그리고 티스토리 HTML/CSS 편집에 들어갑니다. 


아마 위 블로그에서 따라했다면 highlight.js 파일을 불러온 html 코드가 있을 것입니다. 그 아래에 코드를 추가해줍시다.


script src="./images/highlight.pack.js"></script>
<script src="./images/highlightjs-line-numbers.js"></script>

<link rel="stylesheet" href="./images/darcula.css" />


<script>
	hljs.initHighlightingOnLoad();
	hljs.initLineNumbersOnLoad();
	$(document).ready(function() {
		$('code.hljs').each(function(i, block) {
			hljs.lineNumbersBlock(block);
		});
	});
</script>


css 부분에 아래 코드를 추가

.hljs-line-numbers {
    text-align: right;
    border-right: 1px solid #ccc;
    color: #999;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}


이제 html 모드에서 다음과 같이 하면 됩니다.

<pre>
<code class="[강조할 언어]">
[소스코드]
</code>
</pre>



' > 기타' 카테고리의 다른 글

[티스토리] 인용문  (0) 2016.11.17
[웹] REST API란  (0) 2016.10.28
URL, URI 차이점  (0) 2016.10.24
블로그 이미지

NCookie

,


데이터베이스 트랜잭션(Database Transaction)

 

1. 정의

 

  데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.

 

2. COMMITROLLBACK

 

1) COMMIT

 

- 한 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성을 유지하며, 이 작업 단위가 수행한 연산이 완료된 것을 알려주는 연산

- 작업결과는 데이터베이스에 반영

 

2) ROLLBACK

 

- 한 트랜잭션의 수행 중 어떤 부분에서든지 한 번이라도 문제(오류)가 발생하면 해당 트랜잭션을 모두 취소하는 연산

- 작업결과는 모두 취소되게 되어 데이터베이스에 영향을 미치지 않게 됨

 

3. 특성

 

  이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 영구성(Durability)을 보장한다. 이 성질을 첫 글자를 따 ACID라 부른다.

 

1) Atomicity (원자성)

 

- 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력

ex) 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안됨

 

- 트랜잭션은 분리할 수 없는 하나의 단위


- 작업이 모두 수행되거나 하나도 수행되지 않아야 함

 

2) Consistency (일관성)

 

- 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미

ex) 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단

 

- 이 일관성은 '잠금'과 관련이 있음

 

3) Isolation (격리성, 고립성)

 

- 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미

ex) 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없음

 

- 트랜잭션이 발생하기 이전 상태나 완료된 이후 상태를 볼 수는 있지만, 트랜잭션이 진행 중인 중간 데이터를 볼 수 없음 (이를 피해가는 방법도 있음)

 

4) Durability (영속성)

 

- 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미


- 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있음


- 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있음

 

4. 목적

 

- 데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성(integrity) 유지를 확신하게 한다.


- 단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다. 이 때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다. 예를 들면, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요하다.


- 트랜잭션은 서로 간섭하지 않아야 한다.

 

5. 종류

 

1) 자동 커밋 트랜잭션 (Autocommit transactions)

 

- 각 쿼리마다 자동적으로 BEGIN TRAN ... COMMIT TRAN이 붙여지는 것을 의미


- SQLServer'자동 커밋 트랜잭션'을 디폴트로 사용


update v_userTbl set addr='부산' where userid = 'JKW'; update v_userTbl set addr='대전' where userid = 'KMS'; update v_userTbl set addr='서울' where userid = 'PJH';

 

  위의 쿼리문에서 트랜잭션은 몇 번이나 발생했을까? UPDATE 3번 반복되었기 때문에 트랜잭션이 한 번만 발생했다고 생각할 수 있다. 하지만 사실은 내부적에서 자동으로 구문마다 각각 트랜잭션이 발생했다. , 트랜잭션을 명시하지 않으면 자동으로 발생하게 된다.

  mysql에서 자동 트랜잭션을 하지 않기 위해서는 ‘SET AUTOCOMMIT=0’ 구문을 실행한다. 만약 자동 커밋 기능을 OFF한 상태에서 COMMIT을 하지 않고 MySQL을 종료하면 그 작업 내용은 반영되지 않는다. ‘SELECT @@AUTOCOMMIT’ 구문을 실행하여 자동 커밋의 상태를 알 수 있다.

  DROP DATABASE, DROP TABLE, DROP, ALTER TABLE과 같은 명령어들은 자동으로 커밋이 되므로 이전의 상태로 되돌릴 수 없다.

 

2) 명시적 트랜잭션 (Explicit transactions)

 

- 직접 트랜잭션의 발생을 명시함

delimiter $$
begin
update v_userTbl set addr='부산' where userid = 'JKW';
update v_userTbl set addr='대전' where userid = 'KMS';
update v_userTbl set addr='서울' where userid = 'PJH';
end$$
delimiter ;

  mysql에서는 위와 같이 트랜잭션을 명시할 수 있다. 위 세 개의 UPDATE문은 하나의 트랜잭션으로 처리된다. 트랜잭션에서 COMMIT 또는 ROLLBACK을 사용하기 위해서는 직접 명령어를 입력해야 한다. 

  ‘DELIMITER $$’ 이 구문은 sql의 종료 문자를 $$로 변경한다는 의미이다. 따라서 위의 구문의 내용과 질문 내용을 간략히 정리하면, [명령어] ~~~~~~~~~~~~~~~~ END$$ 가 하나의 SQL문으로 작성됨을 의미한다.

 

 

데이터베이스 회복 (DB Recovery)

 

1. 정의

 

  데이터베이스 운영 중에 예기치 못한 장애(Failure)가 발생할 경우, 데이터베이스를 장애 발생 이전의 일관된 상태(Consistent state)로 복원시키는 것

 

2. 장애 유형

 

1) 트랜잭션 실패 : 내부적인 오류로 트랜잭션을 완료할 수 없거나, 시스템이 교착 상태(Deadlock)와 같은 상태에 도달하여 트랜잭션을 완료할 수 없는 경우

 

2) 시스템 손상 : 하드웨어 실패나 DBMS, OS 오류로 인한 장애

 

3) 디스크 고장 : 디스크 블록이 헤드의 손상이나 고장으로 인해 내용이 손실되는 경우

 

3. UNDOREDO

 

1) UNDO

 

  데이터베이스가 비정상 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만 COMMIT 기록이 없는 트랜잭션들의 작업을 취소함(UNDO)(, 로그를 이용하여 데이터베이스 내에서 해당 데이터 항목에 대해 이후 값을 이전 값으로 변경)

 

2) REDO

 

  데이터베이스가 비정상 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 COMMIT 기록이 있는 트랜잭션들의 작업을 재작업(REDO)(, 로그를 이용하여 데이터베이스 내에서 해당 데이터 항목에 대해 이전 값을 이후 값으로 변경)

 

4. 기법

 

1) 지연갱신 기법 (Deferred Update)

 



2) 즉시갱신 기법 (Immediate Update)

 


3) 그림자 페이지 대체 기법 (Shadow Paging Update)

- 갱신이전의 데이터베이스를 일정 크기의 페이지형태로 구성하여 각 페이지마다 복사본인 그림자 페이지로 보관하여 둔다.

- 실제 페이지를 대상으로 트랜잭션에 의한 갱신작업을 하다가 장애가 발생하여 트랜잭션을 ROLLBACK할 때 갱신 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복한다.

- UNDO, REDO, 로그 부분이 필요하지 않다.

 

4) 검사점 기법 (Check Point Update)

- 트랜잭션 실행 중에 특정단계에서 다시 실행 할 수 있도록 갱신 및 시스템의 정보와 함께 검사 지점을 두어 문제발생시 그 부분부터 다시 작업을 한다. (회복시간 단축)

 

 

출처

 

[트랜잭션]

 

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

http://egloos.zum.com/sweeper/v/3003805

http://whdudgn.tistory.com/28

http://www.tested.co.kr/board/Study/view/wr_id/14/sca/3

http://recoveryman.tistory.com/187

 

[Delimiter]

http://www.mysqlkorea.com/gnuboard4/bbs/board.php?bo_table=community_03&wr_id=3487

 

[회복]

 

https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwiIvJbw8avQAhUKT7wKHTN-DioQFggoMAI&url=http%3A%2F%2Fcfile6.uf.tistory.com%2Fattach%2F26539F3C51B7000A29EDE2&usg=AFQjCNGpbTZnG5uldq6tjx-oWvkJJ14G_w&sig2=nVvoKPH1649z_6rhkwvVFw&bvm=bv.138493631,d.dGc&cad=rja

http://middleware.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%9A%8C%EB%B3%B5%EA%B8%B0%EB%B2%95

http://abydos.tistory.com/37



'데이터베이스' 카테고리의 다른 글

[데이터베이스] FK의 사용  (0) 2017.01.12
우분투 16.04 msyql 설치 및 utf-8 설정  (0) 2016.12.20
[데이터베이스] mysql join  (0) 2016.12.05
회복 다시 정리  (0) 2016.11.29
블로그 이미지

NCookie

,

Printed copies of Python for Informatics are available for $10 or less from Amazon and $2 or less on Kindle:

  • Spanish: Amazon / Kindle (Python para Informáticos: Explorando la información)
  • Korean: Amazon ( 정보교육을 위한 파이썬: 정보탐색을 통한 데이터 과학자로의 여정 )

Here are free copies of the book in various languages:

Additional English versions:

You can download all of the sample Python code from the book from http://www.pythonlearn.com/code.zip, or individual files from the directory http://www.pythonlearn.com/code/

All of the book materials are available under a Creative Commons Attribution-NonCommercial 3.0 Unported License. The slides, audio, assignments, auto grader and all course materials other than the book are available from oer.pr4e.org under the more flexible Creative Commons Attribution 3.0 Unported License. If you are curious as to why the "NC" variant of Creative Commons was used, see Appendix D of the textbook or search through my blog posts for the string "copyright".


강좌링크

https://www.coursera.org/learn/python-data

https://www.coursera.org/learn/python-network-data

https://www.coursera.org/learn/python-databases

블로그 이미지

NCookie

,