이 블로그 검색

2024년 4월 25일 목요일

c++ 알 수 없는 오류, 다른 소수에서 정의한 글로벌 value를 extern으로 가져와서 쓰는 문제.

 class 객체는 문제없이 가져오는 것을 확인함.


기본 데이터 클래스인 

문제 

extern const unsigned value에 대해서 문제가 생김 


분명히 정의 되어 있음에도 undefined reference error가 남.


해결방법

변수의 namespace를 주는 것으로


해결 기존 


const unsigned  CustomFlashTotalSectorNumber =30;


extern const unsgiend CustomFlashTotalSectorNumber;

사용  

->   에러 

2024년 4월 16일 화요일

[내점수는요] [사설] 비례 무효표 130만표 역대 최대, 이 선거법 폐지해야 (chosun.com)


다른 것은 모르겠는데, 이름을 잘 몰라서,  잘못 투표한게 문제란 이야기는 동의하기 어렵다.



자기가 지지하는 정당이 무엇인지도 제대로 확인을 안하고 선거하는 사람들의 표가 무효표가 된 게 아쉬울 것이 무엇인지 모르겠다. 


뭐 비례대표 방식이 문제가 많고 비판받을 부분이 많지만, 이름 몰라서 무효표가 생겼는데 그게 문제다라는건 좀... 


뭘 하자는 것인지 참. 

그냥 맨 마지막에는 일베에서나 쓰던 걸 정돈해다가, 매체에 올린거고 참.



내 점수는요.   30점입니다.  

한글 구사능력은 조선일보 답게 100점, 내용은 -100점 

독창성 30점 드립니다. 




2024년 3월 19일 화요일

이건... 피해자 변호사가 2차가해를 하는거 아닌가...


 피해 여성 변호를 맡았던 이은의 변호사는 황 씨 측의 2차 가해 등으로 주변인들과 단절되고 신원 노출에 대한 압박과 고립 등의 피해가 있다고 주장했습니다.


이 변호사는 "유포 이후 황 씨와의 만남을 알았거나, 알만한 주변인들과 단절됐다"면서 "황의조 측이 피해자 신상정보를 공개하는 등 2차 가해를 했는데, 포털에 피해자 이름 조회 수가 일시적으로 상승했음을 경찰에서 추가 조사를 받는 과정에서 알게됐다"고 말했습니다.
https://news.kbs.co.kr/news/pc/view/view.do?ncd=7916902&ref=D

카더라를 사실확인해주네...  
변호사가, 의뢰인의 피해 회복에 집중하는 것으로 보이지 않음.


이렇게 세상 자극적으로 알려도, 누군지 알아보고 싶지도 않네.


B양 O양 시절과 다른게, 웬만한 건, 저 지랄 같은 탑툰 광고보다 자극적이지 않아서 그런건지., 내가 늙어서 그런건지.
진짜 개허접스래기가 아니면 찾아볼 생각 같은 것도 안 할 것 같다. 

사람들이 찾기도 쉽고, 퍼지는 것도 쉽겠지만, 더 휘발성이 있는 것 같다. 자극적인 연예뉴스는...



2024년 3월 10일 일요일

[Memo] Magnetic quadrupole moment

 

Q_{ij}= \sum_{\text{ptls}}( s_i  r_j)   이 quadruple moment를 구하는 식. (dipole 방향, 입자의 위치 )


Tensor의 형태로 쓰이며, 세 가지의 오더파라미터로 구분. 다이폴 모먼트는 0이지만 완전히 다른 현상이 세분류라는 것으로 받아드려도 OK.


첫번째 

A = Trace [ Q_{ij} ]  굳이 해석하자면,   이므로 어떤 중심으로 부터 바깥으로 퍼져나가는 형태를 말함.   $ \sum_i \bm{S}_i \dot \bm{r}_i$

Dipole Moment는 0.  이산화 탄소의 각각 산소가 안쪽 방향 바깥 방향으로 편극이 있다면, 이 값은 나타날 것.


두번째, Traceless Symmetric part. 트레이스 없는 대칭 행렬 형태.

1/2[ Q +  Q^T -1/3 A ]     트레이스 없음. 


세번째, Traceless Anti-Symmetric part. 트레이스 없는 안티시메트리 파트(원래 없음..)

1/2[ Q_{ij} - Q_{ij}^T ]   

어디서 많이 본 부분이겠지만, Navier-Stokes에서도 비슷한 형태의 텐서를 보게되는데, 2차원 텐서가 나오면 일반적으로 하는 행동들.  

2024년 3월 7일 목요일

LG G8 후면 커버(지문 모듈포함,), 후면카메라 교체 셀프 DIY작업.

 과정

1. 열풍기로 후면 커버 한쪽을 가열한다. 권장 100도 30초.

2. 공기압 고정장치(?:화장실 벽 등에 고정시키는데 쓰는)로 후면커버에 고정시킨 후 들면, 후면커버에 부착된 점착제가 늘어나면서 공간이 생김. 그곳을 기반으로 벌리면서, 열풍기의 도움을 받아 후면을 제거함.

3. 열어보면, 전면쪽 보드에 후면카메라가 고정되기 때문에 보이는 모든 나사를 제거하고,
보이는 모든 메자닌 커넥터를 제거함( 안테나x2, 전면카메라, 측광센서, 옆면 버튼 보드 연결용, 배터리연결용 파워) 

4. 분리한 후 전면에 연결된 후면카메라용 메자닌 커넥터를 제거하고, 점착제로 붙어 있으므로, 1번의 방법을 사용하여 후면카메라를 분리 후, 새 후면 카메라를 장착함.

5. 보드를 다시 제자리에 놓고, 메자닌 커넥터를 살짝 당겨 보드 위쪽에 올라와야 하는 것들을 올림. (특히 파워와, 측면 버튼 보드 연결 선)

6. 메자닌 커넥터를 모두 연결하고 나사를 고정함. 보드가 살짝 뜨는 부위가 있으므로, 먼저 눌러준 후 나사를 고정해야함. 

7. 남은 점착제를 제거하여, 새 점착제가 잘 붙을 수 있도록 함.

8. 새 후면 커버에 이면 스티커를 제거하여, 점착제가 노출되도록 한 후, 뒷면 커버를 모양에 맞추어 씌운 후, 손에 힘을 주어 정확히 장착.

9. 부팅.


-----

알리발, 배터리 들이 믿을 수 있는지가 의문이긴한데, 믿을 수 있다면, 부품을 사다가 직접 교체하는 것도 나쁘지 않아보임. 

LG서비스 종료하면, 재고 없다고 점점 안해줄려고 할테니... 

메자닌 커넥터에 접점이 많이 있어서, 안전 모듈도 있는 것으로 보이며, 예전 배터리 교체형보다 점점이 많은 것으로 보아, 내부 배터리 교체하는게, 교체형 배터리 교체하는 것보다 안전해 보임. 

문제는, 물건이 정확한가인데, 노트북 배터리는 알리발은 아니지만, 이베이발은 사용해봤으니, 한번 이용해 볼 필요가 있으며, 혹시 모르니, 침실에서 이불 아래에 놓는 등 화재 위험은 조심할 필요가 있음. 

이건 심지어, 정품에도 문제될 수 있는 부분임.

2024년 3월 5일 화요일

vim 설치시, ./configure과정에서 tinfo ncurses 관련 오류가 뜬다면 방법은?

1) 패키지 설치 

관련 패키지를 설치해야한다. 
ubuntu의 경우는,
sudo apt-get install libncurses5-dev libncursesw5-dev libtinfo-dev
를 설치한다. 

이 과정을 거쳐도, 분명히 패키지가 있는데, 없다고 하는 경우가 허다하다. 

그렇다면, 

2) ./configure cache 삭제

configure과정에서 cache가 쌓여있는데, 실패를 했다는 사실을 cache를 해놓고 지우지를 않는 멍청한 일이 생기게 된다. 

> find -name "*cache*"
>> ./src/auto/config.cache
> rm ./src/auto/config.cache

위 과정을 거쳐 cache를 지우면, 해당부분 문제가 깔끔히 해결된다. 


3) 추가(python3 interp 활성

추가로 nvim나오기 전에 나온 수많은 vim패키지들은 python3로 작성되어 있으니,
python3 interpreter는 필수적으로 필요하다.  
./configure --enable-python3interp
로 활성화 해주자, 아직 여기서는 에러가 생기지 않아서 문서를 보강하지는 않는다. 

2024년 2월 27일 화요일

고민정은 자기 공천된걸로 만족하나본데... 그냥 최고위원 반납하고 자기선거에만 힘쓸 예정...

 


입은 털었으며, 선거 전에 자기 선거에 힘 쓸 수 있는 상황도 만들었고, 자기는 공천도 되었고,

지금까지 최고위원도 잘 해먹었고,


민주당 선거 이기면, 그냥 본인 지역구 보존한 걸로 만족하면서, 원내 대변인 자리라도 내놓으라고 또 입털면 되는거고,


민주당 지면, 이럴 줄 알았다면서, 총사퇴 시키고 비대위 체제에서 꿀 빨러 되겠지.

Flip Flop과 Latch에 대해 알아보자. (내 편한대로)

 플립플롭은 클럭 신호가 들어올 때마다, (종의 따라 posedge negedge 또는 둘 다 )

data 핀의 신호를 내부 레지스터에 저장하며

내부레지스터 값을 가지고 출력한다.  edge가 중요한 회로. 


다양한 종이 있으며, 클럭신호의 변화 시기에 값을 판단하므로, 반도체 회로를 만들 때, 

data 신호를 먼저 보내야 한다. (동시에 보내도 지연 때문에 괜찮음. 반클럭 이상 차이나면 .X)


.래치는 값이나 클럭이 변할 때, 클럭이 active라면,(low active or high active 소자 차이)

레지스터에 data를 저장한다. (그리고 출력이 정해진다. )


그러므로 클럭이 active일 때, 신호가 변해도 즉시 반영되는 차이를 가진다. 

2024년 2월 20일 화요일

임베디드에서 만나는 c스타일 함수 오버로딩.

 


원래 함수를 저장하고, 새로운 함수를 넣고, 기존 구조체를 사용해서, lcd 패널을 초기화 하는 기가 막힌 방법을 쓴다. 


아마도, c++ 오버로드가 이런식의 플레이로부터 도래한게 아닐까.

2024년 2월 13일 화요일

CPP> std::lock_guard 뮤텍스 활용법.

CPP은 직접 메모리를 할당하고 제어하다보니, 포인터를 사용하여 힙에 메모리를 할당한 후,
해당 주소를 반환해서 쓰는 경우가 많다.


그렇다보니, 잠깐 뭔가를 하는 경우에도, new로 클래스를 할당하고, 끝날 때 delete를 호출해야하는 경우가 발생했다. 

그런데, 이 delete를 호출하기전에, 중간에 return이 되는 경우와 같이 delete가 호출되지 않거나, 코드 작성자가 까먹거나 하는 일이 생기는데, 매번 new가 호출될 때마다, 메모리가 할당되므로

여러번 호출되는 함수에서 이런 실수가 발생하면 해당 프로세스가 메모리를 점점 잡아먹다가, 시스템을 먹통이 되게 만들거나, OS에서 해당 프로세스를 정지하거나 하는 등, 정상적인 작동을 하지 못하게 된다. 이것을 메모리 누수라고 부르는데, 

이 메모리 누수를 막기 위해, 보통의 지역변수들처럼, 스택에서 무언갈 하다가, 스택이 pop되면 delete를 자동 호출하기 위해, 스마트 포인터라는 것이 도입 되었다.  실제로는 굉장히 복잡하겠지만 간단히 설명하자면 다음과 같다. 
template<class T> 
class smart_p {
    public:
        T* ptr; 
        operator= (smart_p<T> a, T* b){
            ptr = b;
        }
        smart_p(T* b) {
            ptr = b;
        }
        void ~smart_p() {
            delete ptr;
        }
}
new에서 반환하는 메모리 주소를 받아다가 내부 메모리 주소를 저장하는 클래스를 만들고 클래스를 스택에 만들어 사용하는 것이다. 
그러면 스택에 끝에서 자동으로 메모리의 해제가 발생한다. 

시작이 있으면 반드시 끝이 있어야 하는 것 가운데에는 mutex라는 것도 있다.
mutex는 lock을 걸어주면 반드시 unlock을 걸어주어야, 다른 프로세스가 일하기를 대기하다가 일을 시작할 수가 있다, 

메모리 누수는 서서히 시스템이 죽어가지만 mutex를 unlock하지 않으면 그냥 시스템이 죽는다. 

mutex도 스마트포인터처럼 같은 스택에 클래스를 만들어 사용할 수 있다. std::lock_guard이 그와 같은 일을 한다.  스마트 포인터는 메모리 생성은 그래도 직접 new를 호출하는 방식을 많이 사용했는데, (아무래도 팩토리 방식을 쓸 수도 있으니까)

mutex는 lock_guard도 직접 거는 방식을 사용한다. 대략 간단히 쓰자면 다음과 같겠지.

template<class T> 
class lock_guard {
    public:
        T& m; 
      
        lock_guard(T& b) {
            m = b;  m.lock(); 
        }
        void ~lock_guard() {
            m.unlock();
        }
}

그 외,std::lock이라는  여러개의 mutex를 동시에 받아서 lock을 걸 수도 있다. 

문서를 읽어보자.

각각의 lock을 직접 건다면, 사용 방법에 따라, ABC, BAC 순인 lock이 걸릴 때,

상호간 무한 대기상태에 빠질 수 있으므로 이런 방법을 사용한다.
(두 항목들간 복사 같은 상황) 

실제 구현은 std::atomic 등을 사용해, 락을 동시에 거는 방법 등을 사용하는 것이 아닐까!,  추측한다. 

가장 많이 본 글