#TIL

    Apple Silicon M1/M2 맥북 Display Link 사용때, 디스플레이 초기화로 문제를 해결하는 법

    한줄요약 https://www.synaptics.com/products/displaylink-graphics/downloads/macOS-display-persistence-reset 에서 스크립트 받아서 실행하면 됨. 좀더 자세히 M1 macbook air를 사용중이라 Display link로 듀얼모니터를 사용중이다. 근데 피벗 설정이 꼬여서, 한 모니터의 해상도가 아무리해도 이상하더라. (추측컨데 Display Link로 연결하던 모니터를 일반 디스플레이 케이블로 꼽고 왔다갔다하는데, 모니터 회전 설정을 이리저리 바꾸면 생기는 문제같다. 왜냐면 Display Link에는 자체적으로 디스플레이 회전 기능이 있기에 이것이 맥OS 자체의 기능이랑 충돌하는거 아닌지 추측만 한다.) 인터넷 찾아보면 디스플레이..

    Jackson 관련 어노테이션을 여러개 묶어 쓰려면 @JacksonAnnotationsInside 이 필수

    서론 JacksonAnnotation을 많은 클래스에 붙여야 할 때가 있다. 근데 우선 하나가 아니라 굉장히 번잡해보이고, 변경할 때 다같이 바꿔줘야하니 힘들고, 무엇보다 나열된 어노테이션만 봤을때 이게 왜 쓰여야하는 어노테이션인지 한번에 알기 힘들다. 처음에는 class에만 붙이면, nested class 에 자동 적용되는 그런 것이 있을까 검색해보다 없는거같아 포기하고, Custom annotation을 만들어서 해보려 했는데, 적용이 안되더라. 자바 알못이라 커스텀 어노테이션에 어노테이션 여러개 붙여두면 알아서 unwrap 될 줄 알고 그랬다. (이때까지 쓰던 annotation들이 unwrap을 해주던거지, 이건 아니더라.) 그래서 찾아보니 @JacksonAnnotationsInside 라는 어노..

    신비로운 C++의 세계 (feat. vector와 I64d)

    요약 long long을 size_t에 넣지 말자 long long을 받을때 %I64d안되면 %lld를 써보자 resize를 하던가 생성자에 갯수를 넘기던가 하나만 하자. 오늘은 PS(알고리즘 문제풀이)를 하면서 만난 신비한 현상을 공유한다 현상 https://www.acmicpc.net/problem/1916 다음 문제를 제출했는데, 무려 메모리 초과가 나왔다. 단순한 다익스트라 구현에 메모리 터질 일이 없는데? 그렇게 한시간동안 헤맸다. 이렇게 해맨건, 로컬에서는 발생안하고(VS2019) 오로지 백준에서만 메모리 초과가 발생했기 때문이다. 조사 결과, 문제를 일으킨 건 다익스트라 부분이 아니라 이 부분이였다. vector mat(n); mat.resize(n); for (int i = 0; i < m..

    테이블간의 Cardinality와 객체 내의 Attribute간의 Cardinality?

    Introduction 며칠 전 친구한테 질문을 받았다. 학교의 DB 과제였는데, DB 모델링시 테이블간의 Cardinality는 중요하게 여겨지는데, 한 테이블(Entity가 속하는) 안의 Attribute간의 Cardinality는 중요하게 여기지 않는 이유를 설명하라는 것이었다. 당연하게 걍 신경안써도 되는거 아님? 이라는 말을 하기 싫었다. 따라서 나름대로의 이유를 생각하고 조사해보았다. 이런 질문에 답하기 위해서는 Cardinality의 정의와 그러면 왜 테이블간의 Cardinality를 신경쓰는가?에 먼저 답하는 것이 중요하다. Cardinality의 정의 Cardinality는 집합론에서 사용하는 단어로, 집합의 크기를 뜻한다. the cardinality of a set is a measu..

    Flask + SQLAlchemy를 사용하며 배운것들을 정리

    migrate 변수는 뭘 하는거냐 Migrate 변수는 뭐하는 변수람 flask 에서 migration을 하는 코드를 보면 다음과 같은 코드를 볼 수 있다. migrate = Migrate(app, db) 역시나 이게 왜 필요한지 말 안해주는 사람이 많다. 그래서 찾아봤는데...커맨드를 입력하기 위해 필요한 변수였다. flask 공식문서 의 Command Reference를 보면. The following example initializes the extension with the standard Flask command-line interface: from flask_migrate import Migrate migrate = Migrate(app, db)이것까지 해야, db migrate를 실행시킬 수..

    C++의 Rule of Zero

    한참 전에 업무에서 C++을 사용하던, 평생 C++을 쓸 것 같았던 그 시절 공부했던 기록을 찾아서 남겨본다. Rule of Three, Rule of Five에 대해서 간단히 정리하자면... Rule of Three는 소멸자, 복사 생성자, 복사 할당 연산자 중 하나를 정의했다면 다른 것도 같이 정의해야 한다는 것이다. Rule of Five는 모던으로 넘어오면서 위의 3개에서 이동 생성자, 이동 할당 연산자를 추가 한 것이다. 단순히 무조건 기계적으로 만들어라라기 보다는, 저 중 하나를 만들었으면 다른 것에 대한 생각을 무조건 하고, 적절한 처리를 해야된다는 뜻이다. (포인터를 멤버로 가지고 있고 소멸자에서 그 포인터를 할당 해제 하는 클래스가 있을 때, 복사 생성자를 정의 안하면 복사된 인트선스와 ..

    Elixir의 Ecto에서 virtual 키워드가 의미하는 것

    처음에는 OOP의 virtual 개념이랑 헷갈려서 많이 혼동했던 부분. ecto에서 field를 정의할 때 virtual을 정해줄 수 있다. 여기서 virtual은 DB에 저장하지 않는 field라는 뜻이다. DB에 저장하지도 않은 테이블이 왜 필요하나면, 이것을 이용해서 유용한 처리를 할 수 있기 때문이다. 그 스키마와 연관된 값이지만 저장할 필요는 없는, 그런 값이 필요할 때가 있다. 공식 문서에서 발췌한 설명이다. 이 경우에서는 password 필드를 virtual로 하였다. password 필드는 평문 패스워드가 들어가는데 DB에 직접 들어갈 필요는 없다. 하지만 user와 관련된 값이기에 분리하기도 애매하다 virtual로 저장되기에 DB에 저장되지 않는다. changeset에서 이 값을 변환해..