Log Stash

as an Industrial Personnel

전체보기 56

Using Linq in Unity3d

애플의 64비트 정책으로 ios에선 il2cpp를 필수로 사용해야 한다는 점 덕분에 유니티 엔진에서 Linq를 사용할 수 있게 되었다. (Thanks apple) 예전에 안드로이드 앱 개발을 할 때 '비동기 로직을 동기처럼 사용할 수 있다'는 말에 홀려 RxJava를 접했던 적이 있었다. 그 당시엔 내가 Promise, Future나 함수형 프로그래밍에 대한 필요성이나 개념이 없어서도 그랬지만, 당시엔 Rx에 대한 튜토리얼이나, Best practice 관련된 문서가 거의 없었기 때문에 (물론 내가 못 찾았을 수도 있지만) 지금 보면 아주 괴상망측한 코드를 만들어 냈었다. 이후에 'Funtional thinking' 책을 읽고, 자바스크립트에서 Promise 패턴을 써보면서 내가 이전에 어떤식으로 코드를..

프로그래밍 2017.10.29

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

쿼터니온(Quaternion) 정리

EDIT 2023-02-16: 개요에서 불필요한 부분 삭제 및 정리. 아래 오일러 각, 짐벌락 내용 추가. 0. 개요 3D 공간에서 회전, 방향을 표현하는 방식에는 여러가지가 있다. 많이 쓰이던 방식으로 오일러(Euler) 각을 통한 표현법이 있고, 오일러각에서 발생할 수 밖에 없는 짐벌락(Gimbal Lock) 문제를 해결하기 위해 요즘은 쿼터니온을 많이 사용한다. 이것들에 대해서 정리 해보도록 한다. 1. 정의 복소수처럼 실수부와 허수부의 조합으로 이루어짐. 대신 사원수는 허수 \(i,j,k\)의 3개를 사용한다. 이 허수들 사이에는 다음과 같은 관계가 성립한다. $$i^2 = j^2 = k^2 = ijk = -1$$ 여기서 중요한 점은 곱셈의 교환법칙이 성립하지 않는다는점. 위의 식을 정리해보면 \..

프로그래밍 2017.08.28

밀스 3.0 체험팩 후기

tl;dr지난 5 영업일에 걸쳐 밀스 3.0 체험팩을 다 먹어봤다. 결론부터 이야기 하자면, 괜찮다. 제일 염려했던 포만감도 충분했고 지속시간도 짧지 않았다. 두 번째로 중요시 했던 맛에 대한 평가도 마찬가지. 적어도 나에겐 다섯가지 맛 전부 먹을만 했다. 그리고 가장 괜찮았던 두 가지 맛으로 재 구매했다. 점심식사 나는 회사를 다니면서 항상 점심식사에 쓰는 돈이 아까웠다. 직장인들이 밥먹는곳이 다 그렇지만 지금 내가 통근하고 있는 판교도 밥값이 싼 편은 아니다. 물론 내가 비싸다고 생각하는 비용의 기준선이 다른 사람에 비해 꽤나 낮기 때문일지도 모르겠다만. 아무튼 그래도 아깝긴 아까우니 어쩔 수 없다. 그래서 최근까지는 될 수 있으면 저렴하고 접근성이 좋은 옵션으로, 회사 건물 식당에서 점심식사를 해결..

잡글 2017.08.09

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

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

Note 2017.07.10

렌더링 파이프라인에서 왜 동차 좌표계를 쓸까

용책을 비롯한 각종 DirectX책, 3D 수학책들을 보면 대부분 렌더링 파이프라인 내부에서의 좌표계 변환을 필수적으로 설명하고 있다. 아마 이런 책들을 봤으면 이동변환이나 투형변환을 설명 할 때, 벡터의 마지막 성분(w)을 1로 하나 추가한다, 이것 때문에 3차원 벡터지만 변환행렬은 4x4 크기를 가진다, 0이면 벡터고 1이면 점이다, 등의 설명과 '이게 동차 좌표계와 관련이 있다' 라는 말도 들어봤을 것이다. 나는 이게 이해하기가 어려웠어서 처음 책을 봤을땐 하나도 알아듣지 못하고 그냥 대충 '아.. 그냥 선 위의 점들을 한 평면으로 몰아넣는구나' 정도로만 이해하고 넘겼었다. 그러다 갑자기 이유없이 그냥 대체 왜 동차좌표계라는걸 쓰는지 궁금해져서 찾아보게 되었다. 사실 나름 찾아본다고 찾아보긴 했는데..

프로그래밍 2017.07.09

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

최근에 지른것들

1. 짝퉁 무인양품 USB선풍기 무인양품 선풍기가 너무 이쁘고 맘에 들어서 심각하게 살지말지 고민하다가 약간 비싼것 같아서 안 샀는데, (일본 가격만큼만 했으면 바로 질렀을 정도로 맘에 들었다..) 인터넷에 보니 똑같은 짝퉁을 1/3 가격으로 팔고 있어서 짝퉁 버전으로 샀음. 성능은 괜찮음. 맨날 뺏어쓰던 옆자리 친구의 샤오미 선풍기 스틱은 반납했다.이거 외에도 18650배터리로 동작하는 휴대용 선풍기도 하나 장만해야할듯. 같은 판형으로 찍어냈는지 몰라도, 똑같다. 심지어 포장 박스까지 거의 똑같을 줄이야. (글자만 약간 다르다) 2. 책 대학교 2학년때 감명깊게 들었던 '컴퓨터 구조' 수업에서 교수님이 학기중에 이 책도 같이 보면 좋을것이라고 하셔서 학교 도서관에서 빌려서 봤던 책. 다루는 내용이 개인..

일상 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