NDC 소감
몇 개 세션을 안 들었는데
Lockless 게임 서버 설계와 구현
솔직히 제목만 듣고 갔다가 약간 낚인 감이 있다… 요약하자면 Lock이 생길 만한 부분은 아예 싱글스레드로 처리한다는 건데. 개인적으로는 카페24에서 클라우드호스팅 만들면서 겪었던 경험이 떠올라서 나름 재밌게 들었다.
내가 겪었던 문제는… 예를 들어 인스턴스를 생성할 때 VM이미지를 복사하게 되는데 이게 또 굉장히 딜레이가 길고(30초 이상) 또 생성한 후 여러 가지 작업(뭐 초기 세팅에 필요한…)을 거치다 에러가 났을 경우 예외를 던지고 롤백을 하고 재시도를 하게 되는데… 문제는 이게 동시에 여러 요청이 들어왔을 때 굉장히 골치아픈 상황이 일어나기 좋았다.
(참고로 Xen Cloud Platform은 API에서 제공해주는 메타데이터에 대한 신뢰도가 낮다. 메타데이터는 모든 작업이 끝난 뒤 갱신되기 때문에 사실은 용량이 없음에도 데이터는 용량이 있는 것으로 인식하고 생성을 시도한다던지 하는..)
그래서 인스턴스 생성되는 부분은 아예 통째로 Lock을 걸 필요가 있었고, 생각해보니 애초에 그럴 필요도 없어서 Queue Worker를 하나만 띄웠다. 아무튼 이 세션은 이런 구조적인 꼼수 얘기다.
그 외에 다른 얘기도 있었지만 별로 중요하지 않아서 생략. 차라리 내가 원했던 건 10시에 했던 Lock-Free 알고리즘 쪽이 아니었을까 싶다.
초보 프로그래머의 병렬 프로그래밍 도전기
뭐 그냥저냥 들을만 했다. DoD 얘기라던지, SSE얘기라던지. 아예 다른 커뮤니티의 얘기들이라 난 개념적으로만 알고 있었는데 실제로 코드라던지 데모를 준비해와서 지루하지 않게 봤다.
앨리샤의 게임 로그분석
‘컴파일러와 하드웨어에서 Lock-free 알고리즘까지’를 들으려다 사람이 많다고 쫓겨나서 대신 들었는데… 별로였다. 발표자 경험이 적은 것 같았다. 내용도 엉망이었다.
나머지 세션은 일이 생겨서 못 듣고 그냥 집에 갔다. 아무튼 재밌는 경험이었다. 흑흑 회사에서 이런 것 좀 보내주면 정말 좋을 텐데.
1일차와 3일차에서 고민하다가 오늘 갔는데, 사실 나머지 세션들도 다 들어보고 싶다. 슬프다.
less-python 하면서 느낀 것
LESS python implementation(lessipy)을 하면서 몇 가지 느낀 걸 적어봄.
CSS 스펙은 의외로 방대하고 복잡하다는 거… 내가 이 스펙의 한 1/3은 썼나 싶다. 헤헤 w3 형님들 죄송합니다.
LESS는 잘 만든 언어는 아닌 것 같다. 내가 언어를 처음 구현해보는 거긴 한데, 일단 declaration과 calling의 차이가 모호하다. 뭐 variable과 property가 유사한 declaration syntax와 유사한 calling syntax(accessor를 통한…)을 가지고 있음에도 parsing되는 결과가 전혀 다른 건 그렇다 쳐도(근데 이게 좋은 방법인지는 잘 모르겠다. variable의 declaration은 아예 다른 syntax로 빼는 게 낫지 않았을까? 어설프게 비슷하다보니 뭔가 혼동된다).
그리고 특히나 mixin이나 accessor가 진짜 좀 이상한게, mixin 같은 경우 일단 declaration syntax가 class selector 를 쓴 독립적인 ruleset declaration이랑 똑같다는 것(사실 그냥 최상위에서 .class { rules, … } 이런 식으로 정의한 class ruleset은 다 mixin인듯)이고…
그리고 accessor는 그냥 장애인이다. 아래의 코드를 보자,
element.class {
@var: 1px;
.class2 {
border : @var; // working
border : element.class[@var]; // not working
}
}
아오 미친 저게 왜 안돼… 하지만 또 이건 된다.
.class {
@var: 1px;
.class2 {
border : @var; // working
border : .class[@var]; // working
}
}
그렇다고 또 mixin만 되는 건 또 아니다. id selector로 선언된 ruleset도 accessor로 접근이 된다. 근데 또 child selector는 안된다. 해보진 않았는데 psuedo selector도 안 될 거다. 기준이 뭔지는 잘 모르겠다.
게다가 이것도 안됨
.mixin {
@var: 1px;
.class {
border : @var; // working
border : .mixin[.class[@var]]; // not working
}
}
결국 accessor를 활용할 수 있는 범위는 극히 제한된다. mixin이나 id selector로 선언된 최상위 ruleset이 가지고 있는 asset 중 depth가 없는 것. 아오 그럴 거면 왜 만들었냐.
이쯤 까고 다시 작업하러 가야지