본문 바로가기

전체 글

(23)
1000번에 1번 발생하는 버그는 어떻게 해결할 것인가 (Core dump, 코어덤프, 예시 포함) 개발 과정에서 아주 간헐적으로 발생하는 버그를 해결하기 위해 코어덤프를 활용했는데, 코어덤프가 왜 필요했는지를 설명하기 위해 삽질의 과정을 포함했다. 코어덤프가 어떤 것인지 궁금한 독자들은 바로 코어덤프(Core Dump) 부분을 확인하길 바란다.삽질의 과정 사내 라이브러리를 개발하는 과정에서 유닛테스트가 간헐적으로 실패하는 것을 발견했다. "10번에 1번", "30번에 1번"을 거쳐, 결국 "1000번에 1번" Segmentation Fault가 발생하는 라이브러리 유닛테스트를 구현하게 되었다. 1000번에 1번 에러가 발생한다는 것을 증명하는 것은 생각보다 간단했다. Shell 스크립트를 작성해서 1000번 반복하게 하고, process의 return값이 0이 아닌 경우가 있으면 그대로 멈추도록 하..
ROS2 colcon: command not found sudo apt install python3-colcon-common-extensions 출처: https://endland.medium.com/ros2-ubuntu20-04-8241bfdf6a9f
Insprion-16-7620 Ubuntu 22.04 Freezing Issue Inspiron 16인치 노트북에 Ubuntu 22.04를 사용하면서 생긴 문제를 정리하려고 한다. 외장 모니터를 2개 연결해서 총 3개의 화면을 틀어놓고 사용하는 상황에서, 외장 모니터들의 화면들이 먼저 멈추고 내장 모니터의 경우에는 작동을 잘하거나(5%), 마우스 커서만 움직일 수 있거나(30%) 아니면 어떤 입력을 시도했을 때 같이 멈추는 현상이 있었다(> 60%). 여기서 멈춘다라는 현상은 멈춘 이후에 화면이 복구되지 않는 경우를 의미한다. 버벅임과는 관련이 없다. 디버깅 syslog를 확인하면서 찾아봤는데 chrome이 nvidia driver 관련 에러로그를 남기는 걸 알 수 있었다. chrome -> setting -> hardware acceleration을 disable시키고 사용하고 현..
Visual SLAM 이론에서 실습까지 (Visual SLAM From Theory to Practice) 연습문제 풀이, 3장 3D 강체 변환 1. 회전 행렬이 직교 행렬인지 증명하라. n차원이라 가정하면, n차원 좌표계에서 n개의 서로 다른 axis를 표현하는 벡터들의 집합 $V$를 다음과 같이 표현할 수 있다. $$V = \{v_1, v_2, ... , v_n\}$$ $$ v_1^T = [1, 0, 0, ...], v_2^T = [0, 1, 0, ...], ... , v_n^T = [0, 0, ... , 1]$$ 위 집합은 axis들의 집합이기 때문에 자명하게 직교집합이다. (직교집합은 모든 원소인 벡터들이 서로 수직 관계인 집합을 말한다) $V$의 원소벡터들을 임의의 n차원 회전행렬 $R_n$으로 회전시키면 다음과 같은 벡터 집합을 얻을 수있다. $$V_{rot} = \{R_nv_1, R_nv_2, ... , R_nv_n\}$$ 회전 행렬..
알고리즘 스터디 Week9 이진 검색 트리 검색트리 자료를 정렬된 상태로 저장하여 검색에 사용할 수 있는 트리 이진 검색 트리 검색 트리 중 가장 흔하게 사용됨 최대 2개의 자식 노드만을 가질 수 있음 (이진 트리의 정의) 왼쪽 자식을 루트로 하는 서브트리의 모든 노드들의 key값은 현재 노드의 key값보다 작음 반대로, 오른쪽 자식의 모든 노드들은 현재 노드의 key값들은 현재 노드의 key값보다 큼 탐색에서는 이진 탐색(binary search)의 아이디어를 위 특성에서 활용함 순회 중위 순회를 통해 정렬된 노드들을 접근할 수 있음 조작 정렬된 데이터를 사용하지 않고, 트리를 사용할 때 가장 큰 이점을 가지는 부분 삽입: 해당하는 leaf 노드를 생성 삭제: 해당하는 노드를 삭제하고 왼쪽 자식 서브트리의 가장 오른쪽 노드나 오..
알고리즘 스터디 Week8 트리의 구현과 순회 트리(tree)란? - 정의: 자료구조의 일종이며, 사이클이 없이 모든 정점이 연결되어있는 그래프이다. 사이클이 없는 그래프이므로 정점의 개수가 V개이면 간선의 개수는 V-1개이다. (출처) - 정의를 통해, 계층적 구조를 필연적으로 가지게 된다. 루트 노드를 제외한 노드들의 부모 노드는 한 개이다. 트리 구성, 특징 - 노드(node), 엣지(edge) - 연결된 노드들은 상하관계를 가짐, 그 중 상위 노드를 부모(parent), 하위 노드를 자식(child)라 함 - 모든 상위 노드들을 선조(ancestor)라 부르고, 모든 자식 노드를 자손(descendant)라고 함 - 최상위 노드를 루트(root), 자식이 없는 최하위 노드들은 리프(leaf) - 루트에서부터 몇 번을 거쳐야..
헤드 퍼스트 디자인 패턴(Head First Design Patterns) 요약 (0) 디자인 패턴 입문으로 매우 좋은 책이라는 추천글을 많이 보았는데, 책을 읽어가면서 리뷰를 하려고 한다. 이 책은 영문판으로 구했고, 부지런히 읽고 정리해야 할 것 같다. 그리고 책의 코드들이 자바로 작성되어 있다고 하는데, 이를 C++로 구현하여 깃허브에 공유할 예정이다. 깃허브 주소: https://github.com/lss0815/design_pattern_implementation
소프트웨어 빌드 시스템 원리와 활용 요약 (3) - 3. 프로그램 런타임 뷰 3. 프로그램의 런타임 뷰 - 이번 챕터에서는 타겟 머신에서 프로그램이 실행되는 구조와 프로그램의 어떤 파일들이 메모리에 올라가는지 설명한다. - 실행 프로그램: CPU에서 실행되는 명령 집합과 데이터값, 메모리에 로드되어 실행되는 코드 전체가 컴파일된 프로그램 - 라이브러리: 여러 프로그램에서 공통으로 사용되는 오브젝트 코드의 집합. 라이브러리 단독적으로 메모리에 로드될 수 없으며, 반드시 실행프로그램과 링크된 후 로드되어 사용된다. - 설정 파일과 데이터 파일: 명령으로 이루어지지 않은, 데이터와 설정 정보. 프로그램이 디스크에서 로드하여 사용 3.1 실행 프로그램 - 우리가 보통 프로그램을 작성하면 최종 산출물로써 생각하는 프로그램. - 네이티브 기계어 코드: C/C++로 만들어낸 머신코드로 이루어..