분류 전체보기 594

The Linux Command Line: 28. Reading keyboard input - 1. Read command

28. Reading Keyboard Input 지금까지 만든 프로그램들은 interactivity가 없었다. interactivity: user가 프로그램과 상호작용 할 수 있는 기능 대부분의 프로그램은 interactive 할 필요가 없지만, 특정 프로그램은 사용자에게 input을 직접 전달받아야한다. 이전 챕터에서 작성했던 예시 스크립트를 보자. #!/bin/bash # test-integer2: evaluate the value of an integer. INT=-5 if [[ "$INT" =~ ^-?[0-9]+$ ]]; then if [ "$INT" -eq 0 ]; then echo "INT is zero." else if [ "$INT" -lt 0 ]; then echo "INT is nega..

카테고리 없음 2021.05.16

linux command line: branching - shell script로 flow control 하기

27. Flow control: branching with if 위에서 만든 스크립트에서 user의 권한에 따라 스크립트의 내용을 변경해야 한다고 생각해보자. programming 용어로 branch가 필요하다. If statement pseudo code로 아래와 같은 내용을 생각 X = 5 If X = 5 then: Say "X equals 5." Otherwise: Say "X is not equal to 5"shell에서는 이를 if/else문을 이용해 나타낼 수 있음. x=5 if [ "$x" -eq 5 ]; then echo "x equals 5." else echo "x does not equal 5." fi이는 command line에서도 동일하게 사용할 수 있다. $ x=5 $ if [ ..

카테고리 없음 2021.05.09

The linux command line 26장: Shell script (top-down design)

26. Top-down design 프로그램이 점점 커지고 복잡해지면, 디자인하고 유지보수하기가 점점더 어려워짐. top-down design: 상위의 단계부터 정의하고 디테일한 단계로 내려오는 방식을 얘기함 크고 복잡한 작업을 작고 간단한 작업으로 쪼갤 수 있음 쉘스크립트를 포함한 많은 프로그램을 디자인할 때 쓰이는 방법 Shell functions 이전 블로그 포스트에서 만들었던 report program은 다음 단계로 쪼갤 수 있따. Open page. Open page header. Set page title. Close page header. Open page body. Output page heading. Output timestamp. Close page body. Close page 다음 ..

카테고리 없음 2021.05.02

linux: shell script로 프로그램 만들어보기

25. Starting a project 해당 챕터에서는 실제 프로그램을 만들어봄. report generator: system과 status에 대한 다양한 통계를 HTML 포맷으로 생성해주는 프로그램 First stage: minimul document Page body. 간단한 html을 만들어보자. (foo.html) 이 파일의 경로를 입력하면 firefox나 chrome 등의 브라우저에서 열 수 있다. (file://hoem/username//foo.html) 프로그램의 첫번째 스테이지는 standard output으로 이 HTML 파일을 보내게 하는 것이다. ~/bin/sys_info_page라는 파일을 만들고 수정해보자. #!/bin/bash # Program to output a system..

tools/linux 2021.04.25

Nand2tetris: 03. Memory

3.1. Sequential Logic Combinational Logic 지금까지는 시간에 대한 문제는 생각하지 않았음 input이 있고, output은 그냥 intput의 function 계산 이전에 다른 일들이 발생할 일이 없음 "즉시" 계산됨 -> 이를 "Combinational Logic" 이라고 함 하지만, 실제 세상에서는 "time"을 고려해야함 Hello, Time 크게 두가지를 고려해야됨 같은 hardware를 사용함 input은 변하고 output은 따라와야됨 ex. for loop State를 기억해야함 memory counters ex. for loop에서 sum을 계속 더할때 The Clock Physical time 실제 세상에서의 시간 컴퓨터 세상에서는 이런 복잡한 physic..

리눅스 프로세스 (Linux Process) - ps, aux, stat, top

10. Process 모던 os 는 보통 multitasking이다: 빠르게 프로그램을 스위칭하면서 한 가지보다 더 많은 일을 하고 있게 환상을 만드는 것 커널은 이를 process를 통해 관리: 프로세스는 리눅스가 CPU에서 다른 프로그램을 해당 순서까지 기다리게 관리해줌. 시스템이 시작되면 커널은 init이라는 프로그램을 실행시키는 프로세스를 시작함. (/etc에 있는 몇몇의 init script들을 실행) 대부분의 서비스들은 daemon program (유저 인터페이스 없이 백그라운드에서 실행되는 프로그램) 다른 프로그램을 실행시킬 수 있는 프로그램 (parent process가 child process를 생성함) 커널은 각각의 프로세스들이 정렬되게 정보를 유지함. ex) 각각의 프로세스는 proc..

카테고리 없음 2021.04.19

count files in linux: wc 명령어

count files in linux wc wc는 word count의 줄임말로 사용자가 지정한 행, 단어, 문자 수를 세는 프로그램. $ wc [-clmw] [file...]wc 옵션 파일명으로 사용되며 파일 이름을 적지 않으면 standard input으로 정보를 받아들여서 계산한다. 옵션은 다음과 같음 -l: line -w: word -c: character예시 주로 파일 안의 line을 읽을 때 사용한다. wc -l를 사용하여 디렉토리의 파일의 개수를 셀 수 있음. # 현재 디렉토리 내부의 파일 개수 ls | wc -k # find 한 파일의 개수 (서브 디렉토리안의 파일을 포함한 현재 디렉토리 안의 모든 파일 개수) find . -type f | wc -kex. /var/log 디렉토리에 확장자..

카테고리 없음 2021.04.11

알고리즘 기초: 이진트리 (Binary Search)란? (+파이썬코드)

Binary search 순차탐색: 특정 데이터를 찾기 위해서 앞에서부터 확인하는 방법 이진탐색: 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시작점, 끝점, 중간점 ex. 이미 정렬된 10개의 데이터 중 값이 4인 원소를 찾는 예시 시작접: 0, 끝점: 9, 중간점 4 (index) 중간점을 기준으로 다시 끝점, 중간점을 옮김 시간복잡도: logN (단계마다 탐색범위를 2로 나누는 것) 이진탐색 소스: 재귀적 구현 def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 중간점 인덱스 반환 if array[mid] == target: return mid # 중간점..

알고리즘 기초: 그리디 (Greedy) 알고리즘이란? (파이썬코드)

Greedy algorithm 현재 상황에서 지금 당장 좋은것만 고르는 방법 문제를 풀기 위한 최소한의 아이디어 정당성 분석: 이 방법으로도 문제가 제공하는 최적의 해를 구할 수 있는지 일반적인 상황에서 그리디 알고리즘으로는 최적의 해를 보장하지 못할 때가 많음 문제 거스름돈 문제 (500, 100, 50, 10) 정당성 분석 큰 단위가 항상 작은 단위의 배수이기 때문에 작은 단위의 배수가 아니라면 최적의 해를 보장해주지 못함 (i.e. 500, 400, 100...) 시간복잡도 화폐의 개수에 따라 증가하므로 O(K) (화폐가 K개일때) n = 1260 count = 0 coins = [500, 100, 50, 10] for coin in coins: count += n // coin n = n % co..

Nand2tetris: 02 boolean arithmetic and the alu

2.1. Binary numbers 2진법에 대한 간단한 설명. 자세한 내용은 생략 2.2. Binary addition 이진법을 더하는 법. 10진수처럼 더하면 된다. 다만 할당된 비트 (ex. 8bit + 8bit)를 넘어서는 carry는 overflow로 처리된다. 3가지 형태의 adder를 만들어볼 예정 Half adder 두 bit를 더함. a, b를 더해서 sum(값)과 carry가 나옴 | a | b | sum | carry | | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 0 |Full adder 위의 half adder에서 이전 계산에서 나온 carry도 받는 adder a, b, c(이전 carry)를 받아서 s..