Log Stash

as an Industrial Personnel

Note 14

임의의 구간에서 허밋 스플라인의 도함수

(Cubic Hermite Spline's derivative on an arbitrary interval) 최근에 일하다가 오랜만에 Hermite 스플라인을 건드릴 일이 있어서 간단 정리. 1. Hermite Spline 구하기 1.1. 제약조건 4가지 cubic (3차) 함수로 표현되니, 4개의 제약조건을 가질 수 있다. Hermite Spline은 시작점, 끝점의 위치와 속력(=기울기)를 사용함. 위에서 나열한 순서와는 다르게, 보통 g2와 g3을 바꿔 (위치, 속력, 위치, 속력) 순서로 쓰는데 (이러면 더 알아보기 쉽다) 예전에 노트에 정리해 둘때는 (위치 위치 속력 속력) 으로 정리해두는 바람에 그냥 이대로 진행함. 1.2. Blending functions 구하기 구하고자 하는 Hermite..

Note 2023.01.08

C#에서 Dictionary에 Enum을 써도 괜찮은것 같다

전에 이런 글에서 Dictionary에 Key값으로 enum을 넣으면 내부에서 boxing이 일어나는데, 그 이유는 Dictionary 내부에서 IEqualityComarer로 ObjectEqualityComparer를 사용하게 되기 때문이라고 했다. 4 버전대 이상 닷넷에선 EqualityComparer.CreateComparer()의 로직이 바뀌었고, 이젠 타입이 enum인지 아닌지를 봐서 EnumEqualityComparer라는 전용 비교자를 만들어 넘겨준다. 진짜 그런지 한번 들여다 본다. C# v.3.5 일단 닷넷 버전 3.5에서 진짜 boxing을 하는지 IL만 잠깐 살펴보도록 한다. 테스트 코드는 아래처럼 작성했는데, 아무래도 상관 없다. 어차피 mscorlib 안쪽만 볼 예정이다. clas..

Note 2019.12.23

TIL: 스칼라(jvm)에서 JS코드 실행하기

0. tl;dr JVM에 달려있는 ScriptEngine 클래스를 사용한다. https://stackoverflow.com/questions/36764639/how-to-run-javascript-code-from-within-scala-jvm 다만 메소드의 갯수나, 하나의 메소드에서 바이트 코드의 길이가 65536을 넘어가는 스크립트 코드는 저 클래스에서 돌릴 수 없다. 따로 방법을 찾아야 함. 1. Response 전부터 비정기적으로 크롤링을 하던 사이트가 하나 있었다. 그 사이트 특성상 한 페이지에서 ajax로 api 호출을 여러번 하는데, 그 단계중의 하나로 어떤 '좌표'값을 받아와 그 값들을 다음 api의 파라메터로 넘겨줘야하는게 있었다. 기존엔 '이래도 되나' 싶을정도로 간단하게 좌표값을 얻어..

Note 2017.10.09

TIL: 코루틴(Coroutine)에 대해 몇 가지

루아, 유니티에서 코루틴을 써먹기만 하다가, 예전에 그냥 궁금해져서 한 번 찾아봤었다. ‘코루틴(Coroutine)’은 서브루틴보다 좀 더 일반화된 루틴이라고 볼 수 있다. 다들 알다시피 서브루틴이 자기 자신의 로직을 전부 실행 하고나면 호출자에게로 돌아간다. 하지만 코루틴은 호출자에게로 제어권이 돌아가지 않는다. 서로 다른 코루틴에게로 각자 제어권을 양보(yield) 하는 형태로 로직이 구성될 뿐. 반대로 생각하자면 서브루틴은, ‘중간에 제어권을 양보하지 않으며 할 일이 다 끝나면 무조건 호출자에게로 제어권이 반환되는 코루틴’이라고 생각할 수 있겠다. 어떤 코루틴(A)가 다른 코루틴(B)로 제어권을 양보해 준 상태에서, B에서 다시 A로 제어권이 양보된다면 코루틴A는 루틴의 처음부터 시작하는게 아니라 ..

Note 2017.07.10

TIL: C#에서 enum이나 struct를 Dictionary의 Key값으로 사용하면 쓰레기가 생긴다

C#에서 enum값은 레퍼런스 타입이 아니다. 때문에 평소에 이리저리 값을 넘기고 받을 때 동적할당, 박싱/언박싱에대한 죄책감을 느끼지 않으며 쓰고 있었다. 하지만 알고보니 enum이 Dictionary의 키값으로 쓰이게 되면, Dictionary 내부에서 키값들이 같은지 비교할 때 enum을 박싱하면서 쓰레기가 생기게 된다. 예를 들면 이렇게 enum SomeType { None, Gold, Point, Cash, } Dictionary type2Asdf = new Dictionary(); 별 생각없이 Key자리에 enum을 넣어 왔었는데. 이렇게 하면 Dictionary내부에 쓰레기가 생긴다. Dictionary에서는 키값이 같은지 여부를 판별할때 IEqualityComarer라는 인터페이스를 사용한..

Note 2017.07.06

TIL: docker 컨테이너안에서 ip 바인딩은 localhost가 아니라 0.0.0.0으로 해야한다

요 며칠간 레일즈로 만들어진 웹앱을 도커 컨테이너 위에 deploy 시키려고 시도 했었었다. 결과적으로는 안돼서 그냥 때려쳤는데, 그 사이에 수 많은 삽질과 뻘짓 사이에 그래도 적어두면 괜찮을것이라고 생각되는게 하나 있어서 작성함.도커 컨테이너 안에서 레일즈 앱을 하나 배포 시켜놓고 포트 매핑까지 잘 해줬는데 외부에서 접속이 안됐다. 컨테이너 내부에서 localhost로 curl을 날려보면 html 내용물이 잘 보이는데, 컨테이너 바깥 호스트에서 날려보면 curl: (56) Recv failure: Connection reset by peer 이렇게 커넥션이 리셋되는 문제가 있었다. 그래서 스택 오버플로우를 찾아보니 localhost(127.0.0.1) 말고 0.0.0.0으로 ip를 바인딩 시키라고 하더..

Note 2017.07.02

TIL: Unity compares Objects to null implicitly

묵시적 형 변환 C,C++에서는 어떤 변수가 NULL인지 아닌지 검사하기위해 아래와 같은 조건문을 쓸 수 있다. Asdf* asdf = new Asdf; if (asdf) { // do sth } delete asdf; 이 동네에선 조건문 안에 있는 수식을 평가해서 나온 값이 0이면 FALSE, 그게 아니면 TRUE로 판단하기 때문이다. Java나 C#같은 고오급 언어에선 다르다. if 조건문 안에 bool 타입의 수식이 들어가야 한다. 그냥 C,C++에서 하던대로 쿨하게 if 조건 안에 변수 하나만 명시하는건 그 변수가 bool 타입이 아닌 이상 불가능하다. Asdf asdf = new Asdf(); if (asdf == null) { // do sth } if (asdf) { // error: Can..

Note 2017.06.29

TIL: git --fixup, --autosquash

요즘 계속 git이야기만 쓰게 되는것 같네. 요즘 회사 게임 내부 구조 관련된것만 보니까 어쩔 수 없긴 한데.. tl;dr git commit --fixup= 위 명령으로 현재 커밋을 하면서 특정 다른 커밋에 fixup할 것이라고 마킹을 해 놓고, git rebase -i --autosquash 인터랙티브 모드 rebase를 --autosquash 옵션으로 열면 fixup하고 싶었던 일을 알아서 해준다. todo를 보면, 달라 붙어야 하는 커밋은 자동으로 달라 붙을 커밋 아래줄로 옮겨져 있고, 'pick'대신에 'fixup'이 작성되어 있다. 물론 리베이스를 하는 커밋 범위내에 달라 붙을 커밋이 포함되어 있어야 함. (fixup 마킹해놓은 커밋은 HEAD로 부터 7커밋 떨어져 있는데 HEAD~3을 지정해..

Note 2017.06.23

TIL: git fetch가 실제로 원격에서 데이터를 받아온다

원격 저장소에서 남들이 올린 커밋을 받아올 때 보통은 별 생각 없이 git pull 또는 git pull -r로 받아왔었다. 보통은 별 문제 없이 이렇게 받아올 수 있는데, 다른 브랜치의 내용을 받아오고, 그 위로 rebase를 해야할 땐 좀 귀찮았다. 예를 들어, 내가 develop브랜치로 부터feature/something라는 새 브랜치를 만들어서 작업하고 있었다고 생각해보자. 내가 개인 브랜치 위에서 작업하는동안 누군가가 develop 브랜치에 새 커밋을 밀어 넣으면, 나는 아래처럼 내 피쳐 브랜치를 최신화 했다. git checkout develop git pull git checkout feature/something git rebase develop 순서대로, develop으로 체크아웃 하고,..

Note 2017.06.04

TIL: 윈도우에서 ALT+<아스키 번호> 조합으로 문자를 입력할 수 있다

오늘 안 것은 아니고 사실 예전에 초중딩때 어디서 주워들은건데, 은근 모르는 사람이 많더라.윈도우에서는 ALT 키를 누른 상태로, 키보드 오른쪽에 있는 숫자 패드에 있는 키를 이용해서 아스키 코드 번호를 입력한 다음, ALT키를 떼면 해당 아스키 코드와 대응되는 문자가 입력된다. 예를들어 커서를 입력 가능한 텍스트 박스에 위치 시킨 다음, ALT 키를 누르고 있는 상태에서 숫자패드 6, 5 키를 각각 눌렀다 떼고, 마지막으로 ALT키를 떼면, 아스키 코드 65에 해당하는 'A'가 입력된다. 중요한점은 키보드 위쪽에 있는 숫자키로는 불가능하고 무조건 키보드 오른쪽에 있는 숫자키로만 가능하다는점. 그래서 숫자 패드가 없는 노트북을 쓰거나 텐키레스 키보드를 쓰고 있으면 못 한다. 요즘은 키보드 입력을 받을 필..

Note 2017.05.31