Log Stash

as an Industrial Personnel

til 9

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: 코루틴(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: 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: 윈도우에서 ALT+<아스키 번호> 조합으로 문자를 입력할 수 있다

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

Note 2017.05.31

TIL: Visual studio에서 텍스트를 ctrl + U 로 lowercase화 시킬 수 있다

요즘 일이 몰려서 바쁘니까 짧게. C++ 프리셋 기준, visual studio에서 텍스트를 블록 지정한 다음, ctrl + U 조합을 누르면 선택된 텍스트가 전부 소문자로 바뀐다. 반대로, ctrl + shift + U 버튼을 누르면 전부 대문자로 바뀜.오타 없이 상수 리터럴, 변수명, 프로퍼티 값을 만들거나 붙여넣을때 유용하다. 회사 일 할때도 서버에서 받아오는 값을 이름에 따라 변수를 대응 시켜줘야 하는데 그럴때 많이 사용함. 참조 https://blogs.msdn.microsoft.com/zainnab/2010/04/10/make-selection-uppercase-or-lowercase/

Note 2017.05.26

TIL: macOS나 iOS에는 텍스트 읽기 기능이 있다

오늘도 회사 컴퓨터에 붙여놓은 포스트 잇중에 하나 골라잡아서 날로 먹으려 했지만 진짜 TIL이 생겨버렸다. 별거 아니지만.맥이나 iOS에선 블록 지정한 텍스트를 소리내어 읽어주는 기능이 있다. 사실 ios에서는 좀 전부터 쓰던 기능이긴 했는데 맥에서도 있는지는 오늘 알았다. 영어 원서 읽을때 집중하기에 좋음. macOS설정에서 어떻게 들어가는진 모르겠고, 스폿라이트를 띄우고 'speech'라고 찾으면 '받아쓰기 및 말하기' 라는 창이 열린다. 기본적으로 '키를 눌렀을 때 선택된 텍스트 말하기' 옵션이 비 활성화 되어 있는데, 이것만 켜주면 된다. 아마 한국어 맥을 쓴다면 '시스템 음성'이 Yuna로 되어있을텐데, 드롭다운 메뉴를 열어서 원하는 언어와 목소리를 선택하면 된다. 그러고나서 적당히 텍스트 선택..

Note 2017.05.24

TIL: docker 컨테이너에서 bash 쉘을 여는 방법

설정파일을 수정한다던가의 이유로 도커 컨테이너 내부의 쉘을 열어야 할 때가 종종 있는데, 그땐 간단하게 attach 명령으로 해결 할 수 있다. sudo docker attach 하지만 만약 컨테이너 쉘 위에서 블로킹 작업을 하고 있을 경우엔 쉘을 열더라도 아무일도 할 수가 없다. (나는 컨테이너에서 아파치를 굴리고 있었더니 그랬다) 그럴땐 다른 쉘 인스턴스를 실행시켜 열어주면 된다. sudo docker exec -it bash 이렇게.예전에 삽질한거 하나씩 기억해서 옮겨 적어야지.

Note 2017.05.22

TIL: git rebase의 --autostash옵션은 자동으로 stash를 해준다

사실 예전부터 알고 있던거긴 하지만...feature브랜치 위에서 작업하다보면 팀원 전체가 공유하는 공통 브랜치(develop)의 내용이 바뀌어서 커밋 내용을 따라 잡아야 할 일이 빈번하게 생긴다. 이 때 나는 머지 커밋이 생기는게 보기 싫어서 merge 대신에 rebase를 사용하는데, merge는 충돌만 없으면 별 말 없는 반면에 rebase는 마지막 커밋 이후에 커밋하지 않은 작업물이 남아 있으면 걔네들 때문에 리베이스 못 하겠으니 먼저 커밋하거나 stash해서 치워두라고 말하고 종료한다.그래서 지금까지는 git stash git rebase develop git stash pop 이렇게 rebase 전후로 stash push, pop을 해 가면서 썼었다. 이게 또 문제가 있는게 stash pop하..

Note 2017.05.21