base.htmlchild.htmlapp.pyindex.htmlapp.py: render_template( <렌더링할 페이지>, key=value, key=value, ...)~.html: {{ key }}{{ key | filter }} 형태로 사용한다safe:
pymongo.errors.OperationFailure: command find requires authentication, full error: {'ok': 0.0, 'errmsg': 'command find requires authentication', 'code
정해진 양식(template)에 데이터(data)를 조합하여 html 파일을 제작하는 소프트웨어자주 쓰이고 반복되는 부분을 Template로 만들어 사용한다.Rendering, 쉽게 말해 페이지를 그려내는 역할을 server에서 담당한다Server는 사용자의 요청에 따
매일 매일의 일과가 이메일을 읽는 거였습니다.특별히 하는 일도 없고, 매일 수행하자는 일과표는 책상 끄트머리에 던져둔지 오랩니다오늘 티타임 가지면서 와닿았던 부분인데, 고민하느라 움직이지 않는다는 것.헤메고 지그재그로 왔다갔다 해도 사실은 그게 가장 빠른 길이라는 것오
solve: n개의 정수가 들어있음이 list에 포함된 모든 정수의 합을 구해야 한다.
else 부분에서 들여쓰기(indent)가 for문과 같은 걸 볼 수 있다.else 조건문은 if-else 문에서 사용하는 걸로 알고 있지만for-else 문 처럼 활용할 수 도 있다.이는 for문이 완전히 작동했으면 else문이 수행되고, 중간에 break되면 다음
실행결과
이전에 놓은 queens와 충돌하는지 판단하는 방법 -> y = |x| 그래프에 대응하는지 판단https://www.acmicpc.net/blog/view/109알고리즘의 목적: 정렬된 list에서 매우 빠른 탐색Checklist결정 구간의 경계선이 lo, h
이진 탐색을 공부하면서 ~T / F~에 너무 집중한 나머지 범위 지정의 중요성을 놓쳤다.이진 탐색중 사용되는 lo, hi값은 정답이 될 수 있는 값이 존재하는 범위에 해당한다.이 문제를 풀면서 이진 탐색의 결과를 '공유기를 설치할 위치'로 지정했다.하지만 이렇게 해서는
비교를 통해 정렬하는 알고리즘의 통칭버블정렬, 선택정렬, 삽입정렬, 병합 정렬, 퀵 정렬 등비교를 통한 정렬을 구현하는 과정에서 시간복잡도는 O(nlogn)을 넘을 수 없다는 점이 증명되었다.의사 결정 트리를 활용해보자.https://mathcenter.oxf
list로 queue를 구현하게 되면 가장 왼쪽의 원소를 빼주어야 하기 때문에 pop(0)를 사용하게 된다.하지만 deque로 queue를 구현하게 되면 popleft()를 사용할 수 있게 되는데 deque.popleft()의 속도가 훨씬 빠릅니다.이유는 list.po
이진 검색 트리를 구성 한 뒤 postorder로 출력하는 코드이 코드는 시간초과 발생전위 순회를 바로 후위순회로 바꿔 출력하는 풀이첫 번째 풀이는 보편적으로 시간초과가 발생한다.물론 같은 기수 동료 중 한명이 이 방법으로 성공했지만 나는 실패했다.dictionary를
정점들이 두 그룹으로 나뉜다는 개념을 정확히 이해하지 못했다.'두 그룹으로 나뉜다' 라는 부분에서 '두 정점이 맞닿을 때 두 정점은 항상 서로다른 그룹이다' 라고 이해하는 편이 더 낫겠다고 생각했다.내가 현재 위치한 노드에서 다음 노드로 탐색하기 전에 서로 다른 그룹인
백준 풀이 1916 최소비용 구하기 접근 최단거리 최소비용 탐색 알고리즘인 다익스트라(Dijkstra) 활용 dfs를 통해 완전탐색을 수행하고 그 과정에서 소요된 cost를 계산하는 방식으로 접근했다.
위상 정렬 문제인 백준 그래프 수정 문제을 풀면서 했던 고민을 작성합니다.해당 문제에서의 핵심은V1 -> V2 간선이 있을경우 V1 > V2 이다1 ~ N 각각의 노드가 바뀐 숫자를 순차적으로 출력할 때 결과값이 사전식 순서에서 가장 앞에 와야한다.위상정렬을 수행하고
caching이란 자주 접근하는 데이터를 빠른 접근이 가능한 공간(주로 cache memory)에 저장해두고 이를 반복적으로 사용하는 것을 말한다.내가 웹서핑을 하면서 네이버 홈페이지, SW사관학교 정글 github 주소 등을 북마크에 저장해두고 사용한다고 하면북마크(
Traceback (most recent call last): File "/Users/nekote42/Desktop/swjungle/baekjoon/week03/16500-문자열 판별.py", line 48, in <module> solution2(tu
정말 어렵게 다가왔다.DP문제이다 보니 dp테이블을 만들어서 써먹으면 되겠다! 라는 틀 안에서 벗어날 수가 없었다.풀이는 해당 블로그에서 참조했다.마지막 Matrix\[start]\[0] \* Matrix\[pivot]\[1] \* Matrix\[start + term
이분탐색을 사용하면 내가 원하는 값을 logN의 횟수로 알아낼 수 있다.중요한 포인트는 전제조건 밑 범위에 있는데 1\. 원하는 값이 lo, hi 안에 들어갈 수 있도록 범위를 잘 설정해야하고2\. 찾으려는 값이 오름차순 혹은 내림차순으로 정렬되어있어야 한다.오늘 백준
포인터를 공부하다 보면 '무엇을 가르키는 변수' 라는 표현을 자주듣는다.나는 이러한 표현을 좋아하지 않는데, 무엇을 가르킨다고 해서 특별한 취급을 받는것처럼 보이지만 실로는 그렇지 않다고 생각하기 때문이다.어디까지나 특수한 목적을 위해 사용되는 '변수'일 뿐이지, 결국
이 내용은 Introduction to Algorithm 책에나온 목차순으로 정리하기 위해 작성했음을 알립니다.레드-블랙 트리는 각 노드가 추가 bit의 정보를 가지는 이진탐색트리이다. 각 노드의 색: 레드-블랙 둘중 하나. root-leaf의 simple path에
우리 프로젝트에서는 makefile 을 통해서 프로젝트를 빌드하고 실행하게 됩니다.이 프로그램을 디버깅 하기 위해서는 자체적으로 컴파일 하고 실행하는 과정이 아닌 실행파일을 미리 만들어 놓고 gdb를 통해서 실행하는 과정이 필요합니다.따라서 현재 존재하는 실행파일을 바
git commit 명령어를 사용하면 커밋 메세지를 에디터로 편집할 수 있다.기본 에디터는 nano로 설정되어있는데 불편해서 vim 에디터로 바꾸려고 한다.git config --global core.editor "vim" 명령어를 통해 vim으로 편집할 수 있도록 변
Virtual Memory Address. 가상 메모리 시스템에서 사용하는 가상 주소를 뜻한다.가상 메모리 -> 페이지 테이블 -> 물리 메모리이렇게 접근을 하면서 우리가 사용하는 가상 메모리 주소(VA라고 칭한다)는 물리 메모리 주소(PA라고 칭한다)로 변환된다.각
32bit OS 기준 데이터 타입은 여러가지가 있지만 대표적으로 char, int, long, double 등이 있다.여기서 long long, double은 8byte 크기를 가진다.malloc으로 메모리를 할당받을경우 8byte를 하나의 alignment(할당 단위
pintOS 주차가 끝나고 알고리즘 주차를 진행중입니다.https://leetcode.com/problems/kth-largest-element-in-an-array/description/sort로 가볍게 넘어갈 수 있는 문제지만 다른 접근법을 찾아봤습니다.s
mongoDB의 trigger는 transaction의 일부로 포함되는가? mongoDB는 자체적으로 auto increment를 지원하지 않기 때문에 추가적인 컬렉션을 사용해서 구현해 줘야한다. 구현하는 방법에 대한 내용은 공식 페이지를 참조하도록 하자. 내가 가
mongoDB를 사용하는 게시판은 게시글 id를 사용할 때 주로 \_id (object_id)를 사용한다.자체적으로 unique한 string을 만들어주기 때문인데, 이를 활용하면 별도의 auto_increment를 사용할 필요없이 unique한 id를 얻을 수 있게
2023-12-16(토) 크래프톤 본사에서 나만의 무기 만들기 최종발표를 진행했다. 우리팀은 DoWith - 펫과 함께하는 TODO LIST 프로젝트로 참가했다. 아쉬운점도 많았고, 만족스러운 부분도 많았다. 나만의 무기 만들기 일정을 따라서 쭉 회고해보겠다. 11
listenfd의 file descriptor를 3으로 추측하는 이유는 0(stdin), 1(stdout), 2(stderr)를 제외하고 3번이 유력하기 때문이다.connfd가 적어도 file descriptor 3이 아닌 이유는 file descriptor은 원칙적으
p. 970 csapp.c 내용을 보면 hints.ai_family = AF_INET을 설정하는 부분이 없다.해당 코드는 IPv4를 사용하겠다는 hint를 제공하기 위함인데 왜 사용하지 않았을까?답은 hints.ai_flags |= AI_ADDRCONFIG 에 있다.해
왜 사용한 client socket을 재사용하지 않을까? 비효율적이라고 생각했는데 합리적인 이유가 있을까? 하는 생각에 정보를 찾아보았다.다음은 chatGPT의 답변이다.하나의 클라이언트 소켓을 여러 호스트의 IP 주소로 연결 시도하는 것은 가능하지만, 실패 시마다 소
socket통신은 기본적으로 blocking으로 작동한다.요청이 들어오기 전까지 계속 대기상태에 있다가 (while을 통한 무한루프, busy waiting) 데이터가 들어오면 읽기를 수행하는 방식이다.하지만 무한루프를 매번 실행하는건 시스템 자원을 너무 소모하고 의미
원인은 HTTP response header에 있었다.HTTP/1.0 은 헤더의 대소문자를 구분하는데 나는 "Content-Length"에서 Length의 L을 소문자로 작성해서 발생한 문제였다.클라이언트는 Content-Length에 대한 내용을 받지 못하고, 모종의
프록시 서버를 구축하는 과정에서 에러가 발생했다.간헐적으로 데이터를 제대로 전송하지 못해서 발생하는 에러였다.특히 html 파일을 전달받을 때 데이터 용량은 동일했지만 html file이 아닌 binary 파일로 인식하는게 가장 큰 문제 였다.이를 해결하기 위해서 &l
https://casys-kaist.github.io/pintos-kaist/appendix/synchronization.html 파트 정리 @로 시작하는 문장은 내가 이해를 했는지 기록하기 위한 내용이다. 본문과는 전혀 관련 없으니 주의해서 읽어주길 바란다. 동기
핀토스의 메인 data structure는 struct thread 이다. threads/thread.h 에 정의되어 있다.이 구조체는 user process 또는 thread를 표현한다. 이 ㅂ프로젝트에서는 당신은 당신의 members를 struct thread 에
busy wait 방식으로 thread_sleep으로 구현된 코드를 바꾸기 위해서 작성한 로직blocked_list 를 생성해서 sleep 상태인 스레드는 block(status = blocked, blocked_list에 추가) 처리한다.매 timer_interrup
MUTual EXclusive 상호 배제한쪽이 1 이면 반대쪽은 반드시 0, 그의 반대도 항상 성립해야 한다.lock을 구현할 때 도입되는 개념이다. 하나의 스레드가 어떠한 값에 mutex를 걸었을 경우(0으로 세팅했을 경우) 다른 스레드는 해당되는 변수 혹은 값에
pintOS를 공부하면서 Interrupt에 대해 작성해봤다. 인터럽트의 privilege DPL: Descriptor Privilege Level (2bit) 인텔에서는 주로 Ring 0, Ring 3 두 가지를 사용한다. 인터럽트 호출시점 interentr
핀토스를 바꾸는 이유 -> 64비트 -> 32비트 chat gpt의 등장으로 인해 집단지성이 생겼다.코드 가독을 해준다.프로그램을 하나하나 이해하는게 맞나? 아닌거 같다.코드를 같이 짜면서 생산성을 올리는게 목표였다..ext binary 로딩하는 과정을 공부해두면 좋다
다음 pintOS 코드에 따르면 처리하는 vec_no는0 ~ 19 + 0x20 ~ 0x30 (0x27, 0x2f 제외) 이다.다음과 같이 Intel software developer manual에 따르면 0 ~ 21 까지 사전 예약된 vec_no가 존재하는데 왜 20,
현재 file_name 은 인자를 포함한 형태 “test a b c” 이다.filesys 를 통해서 file을 읽어들여야 하는데 공백을 기준으로 파일명 (예시에서는 "test")를 분리해야 한다.이를 parsing 해서 실행 파일은 test, 인자로 a, b, c 를
lib/user/syscall.h 를 기반으로 기초적인 형태만 구축하면 다음과 같이 에러가 발생한다.switch 문을 사용해서 system call number에 대해 처리를 수행한다.해당 내용은 include/lib/syscall-nr.h 에 enum으로 선언되어 있
lib/user/syscall.h 를 기반으로 기초적인 형태만 구축하면 다음과 같이 에러가 발생한다.switch 문을 사용해서 system call number에 대해 처리를 수행한다.해당 내용은 include/lib/syscall-nr.h 에 enum으로 선언되어 있
pintOS 기준 argument passing을 수행하기 위해서는 Stack Alignment를 준수해야 한다.
pintOS에서는 Palloc 기능을 제공합니다. 이는 4kb 페이지크기 만큼 메모리를 할당해서 전달하는 방식입니다. thread에 사용할 메모리를 할당받거나, 일부를 쪼개서 system call 의 malloc에 활용하기도 합니다.OS는 가용가능한 메모리 정보를 BI
variadic function (가변 인자 함수)https://en.wikipedia.org/wiki/Variadic_functionFile descriptorhttps://en.wikipedia.org/wiki/File_descriptorThe L
32-bit 레지스터를 사용하던 시절엔 사용이 간단했다. 페이지 크기에 맞게 하위 12bit를 걷어내고, 남은 20bit 를 10, 10 으로 쪼개서 각각 Page Directory, Page Table로 운용해서 사용했다.이를 통해서 총 2^32 bytes, 4GB의