목록TIL (17)
정글에서 온 개발자
공부 동기쿼리를 통해 나온 결과를 엑셀 파일로 제공하는 기능을 개발하던 중, 일반화 프로그래밍을 위해 쿼리로 가져온 값을 배열로 일반화해야 했다. GPT는 go 리플렉션을 추천했는데 이전부터 공부하고 싶던 주제라 찾아봤다.리플렉션이란?프로그램 실행 중(런타임)에 자기 자신의 구조와 동작(클래스, 메서드, 속성)을 검사하거나 수정할 수 있는 능력동적으로 코드를 조작할 수 있음요약하면 객체의 메타적인 정보를 다루게 해준다사용되는 주요 사례프레임워크와 라이브러리JSON, XML 등 데이터 직렬화테스트 코드단점성능 저하 - 런타임에 메소드, 필드에 접근하기 위한 추가적 처리가 필요하기 때문코드 가독성 떨어짐예상치 못한 동작 - private 메서드 등에도 접근 가능하기 때문지원 언어자바, C#, 파이썬, 자바..
Linux System Service리눅스의 systemd가 관리하는 service를 system service라고 한다.systemd를 컨트롤하기 위해 systemctl을 사용한다.시스템 차원에서 등록한 service의 실행관리를 해준다.아파치나 mongodb, mysql을 직접 설치하고 돌릴 때, 모두 이 system service 가 실재 실행 파일을 찾아서 돌리는 것이였다.sudo systemctl start mongod와 같은 명령처럼, 내가 내 앱(파이썬이나 ,node.js, go로 만든) 서비스를 'myservice' 라고 지정했다면sudo systemctl start myservicesudo systemctl stop myservice와 같은 명령어로 쉽게 컨트롤 할 수 있다.시스템 서비..
앵귤러에서 위와 같은 동적 폼을 만들기로 한다.nz-zorro(Ant for Angular)도 같이 사용하였다.HTML @if(i!=0){ 삭제 } 추가동적으로 생성되는 그룹 (vacation-pickers)를 만든다.그 안에 vacations.controls의 수만큼 반복한다.i를 따로 선언해서 넘겨줘야 해서, @if 대신 *ngFor 디렉티브를 사용하였다.form으로 제출할 값을 바꿔주는 이벤트 리스너를 달아준다. (onCalendarChange)동적으로 추가된 요소를 삭제할 버튼을 만든다. (가장 첫번째 요소는 삭제하지 못하게 하였다.)추가 버튼으로 요소를 동적으로..
https://overthewire.org/wargames/bandit/bandit25.html Level Goal A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pin" data-og-host="overthewire.org" data-og-source-url="https://overthewire.org/wargames/bandit/bandit25.html" data-og-url="https://overthewire.org/wargames/bandit/bandit25.html" data-og-im..
https://spring.io/quickstart/ Spring | Quickstart Spring Quickstart Guide What you'll build You will build a classic “Hello World!” endpoint which any browser can connect to. You can even tell it your name, and it will respond in a more friendly way. Step 1: Start a new Spring Boot project Use start.s spring.io 강의를 보기 전에 공식문서 보고도 혼자 할 수 있지 않을까 해본 spring quick start. spring 말고 spring boot부터 해야하나?..
배경 void supplemental_page_table_kill (struct supplemental_page_table *spt); Frees all the resources that were held by a supplemental page table. This function is called when a process exits (process_exit() in userprog/process.c). You need to iterate through the page entries and call destroy(page) for the pages in the table. You do not need to worry about the actual page table (pml4) and the phys..
기존 mmap 코드 void * do_mmap (void *addr, size_t length, int writable, int fd, off_t ofs) { //에러 처리 void *va = pg_round_down(addr); if(length == 0 || addr == 0 || va != addr || fd == 0 || fd == 1){ return NULL; } struct file *file = thread_current()->fdt[fd]; //이 부분 off_t read_bytes = file_length(file); if(read_bytes 0) { /* Do calculate how to fill this page. * We will read PAGE_READ_BYTES bytes f..
에러 Anonymous, Stack growth를 통과했는데, page-linear를 돌리면 에러가 났다. 0x00000080042095f3: intr_handler (threads/interrupt.c:352) 0x0000008004209a11: intr_entry (threads/intr-stubs.o:?) 0x000000800421ad55: hash_clear (lib/kernel/hash.c:58) 0x0000008004221cb9: supplemental_page_table_kill (vm/vm.c:332) 0x000000800421c70c: process_cleanup (userprog/process.c:378) 0x000000800421c6a8: process_exit (userprog/pr..
배경 pintos vm에서는 page를 보조테이블에 uninit_page 로 미리 넣어놓고, 페이지를 읽을 때 lazy_load_segment로 물리주소에 할당한다. process를 시작할 때 읽어들이는 파일도 마찬가지인데, process_exec이 stack을 쌓고 do_iret()을 하면, 해당 rip로 가면서 rip가 가리키는 가상주소를 물리주소에 할당하기 시작한다. 그런데 위와 같이 잘 읽어들이다가 0을 가리키는 곳으로 빠졌다. 해당 fault가 특정 코드에서 나는 것이 아니기 때문에 fault 직전에 브레이크포인트를 잡고 디버깅할 수도 없어 이틀 정도를 헤멨다. 'addr : ' log는 page_fault_handler 진입하자마자 찍는 로그이다. 해결 기존 코드에서는 아래 두 코드가 빠져있었..
왜 less로 정렬하면 선입 선출이 안되는지? 배경 특정 조건의 순서대로 elem을 뽑으려면 뽑기 전에 리스트를 정렬하고 front나 back중 하나에서 뽑으면 될 것 같다. 넣을 때부터 정렬을 해도 donate등 다른 요인들로 정렬이 깨질 수 있기 때문에, 어차피 뽑기 전에 정렬을 한 번 더 해야 한다. 따라서 뽑기 전에’만’ 정렬을 하는 것이 효율적이다. 리스트에는 기존에 뒷쪽(list_push_back)부터 elem을 삽입해주고 있었다. 이 때 list에서 제공하는 함수에는 “less함수”, 즉 a,b의 property를 비교했을 때 a가 더 작은 경우 true를 반환하는 함수를 넣어주라고 한다. 이를 사용하기 위해 lesser_priority()를 이용해 오름차순으로 정렬하고 pop_back()을..