디스코드 한/일 번역봇 제작 과정기

일본인과 대화를 하기 위해 번역봇을 만들었다. 언어 선택은 C#으로 하였고 그 이유는 다음과 같다. 언어가 굉장히 이쁘다 C#을 좀 더 잘쓰고 싶어서 이다. 이 간단한 이유로 C#으로 선택하였고 프레임워크는 Discord.Net을 사용하였다. 이 두가지의 스펙을 정하고 번역 API는 대표적이라고 말하는 구글 API 사용하였다. 만들고보니 두가지의 반응이 있었다. 다른 외국어도 번역이 되도록 만들어 달라 위 사진처럼 번역봇이 소개 더보기 디스코드 한/일 번역봇 제작 과정기[…]

리눅스 인터럽트 핸들러 부팅과정 분석

리눅스에서는 인터럽트를 호출되기 위해서는 최소한 한번의 등록이 필요하다. 이는 부팅과정에 이루어지며 인터럽트의 예는 USB나 키보드 입력등이 흔한 예다. 아래는 부팅중에 하나의 인터럽트의 코드중하나이다. https://github.com/raspberrypi/linux/blob/rpi-4.19.y/drivers/usb/host/dwc_otg/dwc_otg_driver.c 인터럽트를 등록하는 함수는 request_irq이며 안에는 request_threaded_irq을 호출하는거말구 아무것도 안한다. 부팅중의 IRQ의 등록을 확인하기 위하여 위에 코드에 if문을 추가해 콜스택을 출력해주는 함수를 작성하고 리눅스 컴파일을 하여 재부팅을 시켜주자. 재부팅이 완료되면 /var/log/kern log을 소개 더보기 리눅스 인터럽트 핸들러 부팅과정 분석[…]

비동기..? 동기, 블록, 논블록 도대체 뭔대!

최근 한 후배가 나에게 비동기 블록킹 이런식으로 이야기를 많이 해주었는데 이 위에 있는 차트를 보고 그런식으로 말했다고 한다. 위그림은 잘못된 지식으로 만들어졌고 이로 인해서 공부하는분조차 블록킹 논블록킹 동기를 헤갈리게 만든다. 어째서 select가 비동기에 블록이라는건가. 이는 비동기를 매우 매우 잘못알고 있는 뜻이라는 것이다. msdn이나 linux조차도 동기라고 문서에 적혀있다. 도대체 그럼 블록,논블록가 무엇이고 비동기,동기는 무엇인가? 라고 물어보시는 소개 더보기 비동기..? 동기, 블록, 논블록 도대체 뭔대![…]

[리눅스커널] 커널의 특정 함수 어셈 확인하기

리눅스 커널을 컴파일하게되면 System.map이라는 폴더가 나옵니다. 위 파일을 리눅스 커널에 들어 있는 심벌에 대한 정보를 담고있습니다. 한 예로 sys_sigreturn_wrapper라는 함수의 코드를 확인해볼려고합니다. sys_sigreturn_wrapper의 범위는 0x80101834~0x80101840까지입니다. 그러면 다음과 같은 커맨드를 입력해줍니다.

오일러의 각에서 짐벌락

오일러의 각은 X,Y,Z 축을 따로따로 곱하게되어 축자체가 사라지는 현상이 발생한다. x -> y -> z순으로 계산할때 x축 회전시 y축 z축 동시에 회전하게되고 y축 회전시 z축도 같이 회전하게 된다. 이러한 문제때문에 x축과 z축이 겹쳐지는 발생한다. 이를 회피하는 방법으로는 회전을 한번에 계산하는 쿼터니언을 사용하면 된다. 아래를 영상을 참조하면 좀더 이해할수 있다.

MBCS에서는 한글을 어떻게 인식할까?

우리가 알고있는 아스키 코드는 위와 같지만 비주얼 스튜디오에서 아래와 같은 코드를 치게되면 한글이 나오는걸 확인할수있다. 어떻게 윈도우는 이를 인식할까? 답은 0x80이 넘는 값들은 자국에서 사용하는 언어를 덧붙이게 된다. 이를 코드페이지라고 하며 한국인 경우 EUC-KR이고 다음과 같은 언어 세트가 있다. EUC-KR, EUN-CN, EUC-JP 이를 멀티바이트라고 말하고 이를 하나로 바꾼것이 유니코드이다.

redis 만료키 삭제

대부분의 DB가 만료키를 삭제하는 로직이 있습니다. 이 기능을 활용하는 것들이 많죠. 근데 TTL같은 경우 redis에서 가장 자주쓰여서 코드를 확인해보았습니다. redis에서 삭제하는로직입니다. 해당코드는 redis서버내에서 Cron을 주기적으로 돌려 해당코드를 실행합니다. 해당 주기는 redixServer에 hz 멤버변수를 사용합니다.. 본론으로 들어와서 만료된 키는 따로 자료구조에 저장합니다. 그 자료구조는 멤버변수를 expires 포인터로 관리합니다. 이 곳에 데이터가 있으면 한번에 최대 20개를 제거시도를 소개 더보기 redis 만료키 삭제[…]

V언어

금일 페북에 V언어라는게 자주 올라왔습니다. 그래서 사이트를 가보고 소개글을 보고 이런언어가 있어? 라는 생각을 하게되었습니다.. 여튼 일단 1년두 안된 프로젝트여서 얼마나 대단한지 큰 기대를 가주고 코드를 직접 보았습니다. 근데… 코드를 까보니 사실상 언어긴합니다만.. V 코드를 C로 바꾸고 GCC로 컴파일합네여.. 이말은.. 걍 C입니다. 클린 C… 예로 다음과같은 코드가 있습니다. println(‘hello wolrd’) 을 입력받으면 바로 아래와 같은 소개 더보기 V언어[…]