어디서 맥북에어는 2개의 외장모니터까지 지원한다는 것을 보고(레퍼런스 찾기가 귀찮네 나중에 찾으면 추가)

트리플 모니터를 사용하려고 시도해봤다.


맥북 에어를 덮고 큰 화면 더블로 써도 좋고, 그냥 트리플로 해도 좋으니...


에어에는 썬더볼트 포트가 1개 뿐이고, 별도의 tv-out 은 없으므로 별도의 액세서리가 필요한 상황.


선택지는


1. 애플 시네마 디스플레이

2. 썬더볼트 허브


3. USB to HDMI/DVI Adaptor





4. Mini DP Displayport to DVI VGA HDMI Adapter 3 in1



5. Splashtop streamer 와 같은 앱 사용



1번과 2번은 비싸서, 3번은 아무래도 속도가 느리지 않을까란 생각에 보류.


5번은 다른 목적으로 쓸려고 둔 아이패드1으로 사용해보니,

생각보단 괜찮았지만 뭔가 불편한 점이 많았다.




음... 사진 첨부를 하지 말걸 그랬나.. 모자이크를 하다보니 영...



여튼,,


난 4번을 사봤다.

국내에선 딱히 팔지도 않는것 같고 해서 해외직구...


며칠전에 와서 테스트를 해보니..

으... 생각처럼 되진 않더라.


DVI 와 HDMI 를 꼽을 경우 같은 화면이 나온다. 하나로만 인식을 하는 듯.

그리고 DVI, HDMI 와 RGB 를 동시에 사용할 수 없다. RGB 가 죽음..


고로

1. HDMI, DVI, RGB 중 한개만 사용

2. HDMI, DVI 를 동시에 꼽아서 같은 화면을 두개의 모니터에서


이렇게만 된다.


아마 이게 썬더볼트가 아니라 display port 라서 두개의 모니터로 인식을 못하는 듯...ㅠㅠ


가격이 크게 비싸지 않아서 그냥 어댑터 한개 샀다는 마음으로...ㅠㅠㅠ

IPC, Inter Process Communication..


말 그대로 프로세스 간에 통신을 위한 방법이다.

예전에 deVbug 님 글에 몇가지 소개가 있었는데 ... IPC (Inter Process Communication) in iOS


나도 이것에 대해 잠깐 끄적여 볼까 한다..

BeeKeyboard 의 온갖 버그의 주범이자, BeeKeyboard 가 iOS7 대응하는데 2달이나 걸리게 한 장본인이기도 하다.. orz


IPC 자체에 대해 쓰기보다는, iOS7 의 강화된 샌드박스에 의해 IPC 를 제대로 사용하지 못하면서 생긴 문제와 그를 풀어갔던 삽질.. 에 대해서 써볼려고...

BeeKeyboard 업데이트 일기..? 의 느낌으로 써보려 했으나 글의 목적에 어긋나는 것 같아 

BeeKeyboard 보다는 IPC 자체의 삽질에 좀더 초점을 맞춰보려 한다.

일대기.. 식으로 회상하면서 써내려 갈 거임!! ㅋㅋㅋ


시작하기 전에 IPC 에 대해 잠깐 정리.

- mach_msg : 기본적으로 모든 IPC 는 mach_msg 라는걸 기본으로 한다. 그런 만큼 얘는 매우 low level 이고, 메세지 하나 보내는데 20줄 가까이를 요구한다.. 래핑하지 않으면 더럽게 쓰기 어려운 녀석이지.. Ryan Petrich 의 LightMessaging 이 얘를 래핑했다. 나의 경우 BoatMessaging 이라는 녀석으로 래핑해서 사용 중.

- CFMachPort : mach_msg 에 쓰이는 mach_port_t 를 위한건데.. 한단계 래핑했다기 보다는 그냥 같이 쓰인다

- CFMessagePort : 좀 쓸만하게 래핑된 프레임워크. 양방향 메세징을 지원하며 내가 주로 사용했다ㅋㅋ

- CPDistributedMessagingCenter : 마찬가지로 양방향 메세징을 지원하며, CFMessagePort 보다 한층 더 쓰기 쉬우나, 자질구레한 문제가 많이 일어난다. 내가 제대로 못써서 그런거일 수도 있고...BeeKeyboard 의 iOS5 시절에 사용했었다.


뭐 이정도..? 당연히 더 있지만 일단 지금 글에선 필요없다.



1. iOS7 의 강화된 샌드박스

그냥 더 많은게 안된다. 시스템 로그를 보면, 앱스토어 앱이나 시스템 기본 데몬들도 sandbox 에 의해 좌절하는 로그를 무수히 쏟아낸다...

특히 CFMessagePort 의 경우 본래 앱스토어 앱에선 사용 못할텐데 맥 레퍼런스에서

"This method is not available on iOS 7 and later—it will return NULL and log a sandbox violation in syslog."

라고 친절히 알려주기 까지 한다..  ( 출처: 애플 레퍼런스 )


2. 근데 왜 제목에서 with Evais0n??

사실 BeeKeyboard 는 본래 iOS7 탈옥이 나오기 전에 winocm의 opensn0w 를 이용한 아이폰4 반탈로, iOS7 에 대한 대응이 되어 있었다.

탈옥할 때 탈옥툴 개발자들이 sandbox 를 깨주는데(그래야 트윅이 사용가능 하므로) 이 작업을 evais0n 탈옥팀은 뭔가 반틈만 한게 아닌가.. 라고 생각하고 있다. 물론 1번의, Apple 의 강화된 샌드박스도 한 몫할 것이고.


3. 삽질의 시작.

진짜 처음엔 답이 없어보였다.. 자고 깨고 자고 깨고(일이 잘 안풀리면 급격히 졸려서 1~2시간쯤 자고 일어난다)를 반복하며 1주일 가까이를 헤맸었던 것으로 기억한다.(심지어 이땐 RocketBootstrap 이 없거나, 개발 중이였다)

요즘 오전 6~7시에 취침 하고 오후에 일어나는, 6시간쯤 비틀린 삶을 사는데 그 원인이 여기에 있나니...

여튼 sandbox 에 의해 막히지만, privileged process, 즉 backboardd 나, SpringBoard, 혹은 Preferences 같은 시스템 앱들은 정상 사용이 가능하다. 하지만 난 일반적인 앱 모두에서의 사용을 필요로 했다. 단방향이 아닌 양방향.


4. XPC, WaveMessaging!

처음으로 가능성의 빛을 본 건 xpc. iOS5 정도 부터 iOS 에 들어간 것으로 보이고, 맥에서 IPC 로 애플이 추천하는 방법이다.

양방향 통신도 가능하고... 데이터형을 모두 xpc_object_t 를 사용해서 변환작업이 있다는 것만 제외하면 쓸만했다.

하지만 이 방법의 단점은 plist 에 특정 이름을 쓸거라고 미리 지정을 해 줘야 한다. 그렇지 않으면 사용할 수 없음...

launchd 가 관리하기에 후킹도 불가능하다...

그래서 난 원래 시스템이 사용하는 xpc 를 빌려, 적절히 후킹해서 사용하기로 했다.

그 결과물이 WaveMessaging. 좀더 자세한 방법은 써봤자 모를테니 패스..

open source... 지만 쓸 일 없을거다.. 써서도 안되고. 혹시나 xpc 를 쓸 일이 있으면 참고가 되려나? 

소스: https://github.com/iolate/WaveMessaging


5. Optimo의 리젝...orz

SimulateTouch, BeeKeyboard, QuickKakao 프로토버전 등, IPC 가 필요한 앱에 모두 이식을 해 보았다.

결과는 대 성공! 모두 정상작동 하고 큰 문제도 없어보였다.

일단 WaveMessaging 패키지만 먼저 BigBoss 에 업로드 하였으나 돌아온 대답은 No!

이미 RocketBootstrap 이라는, 같은 목적의 패키지가 있으니 이것과 합치는 방향으로 가라는 것이다.

당시 RocketBootstrap 은 SpringBoard 를 기반으로만 작동하였고, LightMessaging 이 사용하는, mach_msg 와 이미 문제때문에 사용하지 않는 CPDistributedMessagingCenter..정도만 지원하였기에 나의 경우엔 쓸 수 없었다.

Optimo 에게 요구해 보았지만, 돌아온 대답은 "Ryan 과 잘 얘기해서 RocketBootstrap 으로 합치거라."


6. Ryan 의 CFMessagePort 지원

Ryan 은

1. CFMessagePort 혹은 xpc 를 지원하고 2. daemon 등에서도 사용가능 하게 해주겠다.

면서 몇일만 기다려 달라고 했다.

별 수 있으리.. 기다렸다. 며칠 후 RocketBootstrap 은 CFMessagePort 를 지원하였고, 잘 작동하는 듯 보였다.

하지만 일이 이렇게 쉽게 풀렸으면 이 글을 시작하지도 않았다..ㅠㅠ

일반 App -> SpringBoard, backboardd 는 정상적으로 사용이 가능해 졌지만, SpringBoard, backboardd -> App 은 사용이 불가능 했다!

App 위에서 CFMessagePort 의 서버를 돌렸는데 mach_lookup 뿐만 아니라 mach_register 까지 sandbox 에 의해 막히면서 크래시....

SimulateTouch 의 경우 이정도 만으로 충분히 사용이 가능했지만, BeeKeyboard 와 후에 만들 빠른 답장 트윅에선 곤란했다.

Ryan 에게 요구했으나 이건 자기도 어쩔 수 없다며, 다른 방법을 찾으라고 했다..


7. 결국 mach_msg

Ryan 이 나에게 왜 그런 기능들이 필요하냐고 물었다. 그래서 나는 BeeKeyboard 의 동작 원리와, 후에 만들 빠른 답장 류의 앱에 대해 간략히 설명해줬다. 음.. 여기는 말로 풀어내기 복잡하니 대충 건너뛰고 결론은

1. timeout 기능은 mach_msg 로 가능하다

2. xpc 또한 mach_msg 로 만들어 졌다. 니가 xpc 에서 사용하던건 mach_msg 로 구현이 가능하다


.... 별 수 있나.. mach_msg 로 시도했다.

xpc 를 떠올리며 최대한 흡사하게 흉내낸 후, 결과는 성공.

Ryan 의 LightMessaging 의 소스를 많이 참고하였지만, 그래도 생각보다 쉽게 해결되서 상당히 허탈했던 기억이....

Ryan 에게 확인을 구하니 접근은 정확하게 맞았고, 방법에 약간의 수정을 가하면 된다고 하였다.

이렇게 해서 mach_msg 로 내가 원하는 기능을 정확히 구현...

위에 말했듯이, mach_msg 를 그대로 사용하는건 토나오므로, BoatMessaging 이라는, CPDistributedMessagingCenter 와 CFMessagePort 의 사이.. 정도 수준으로 래핑한 스태틱 라이브러리를 만들었다.


이걸로 IPC 해결!!!



이렇게 까지 오는데 한달 넘게? 거의 두달? 여튼 엄청난 시간을 쏟아 부었던 것 같다..ㅠㅠ

BoatMessaging 의 소스나 하다못해 라이브러리라도 어디 올릴까 했지만,

살짝 꼼수스러운 라이브러리이기도 하고, 레퍼런스 등을 만들기 귀찮아서 일단은 그냥 나 혼자 쓰고 있다.


혹시나 필요하시면 연락주세요..ㅋㅋㅋ 기쁜 마음으로 공유해드립니다! ㅋㅋㅋ

이래봤자 요구할 만한 사람은 상당히 한정되어 있지만....

탈옥 개발자에, 한국어 사용자.. 몇이나 되겠어? 


만들 당시 Source Control 켜서 쓰고 있었길래 그냥 그대로 github 에 올렸다.

주소는 https://github.com/iolate/BoatMessaging

static library 에,, rocket bootstrap 을 필요로 하므로, 사용하려면 LDFLAGS 에 -lboatmessaging -lrocketbootstrap

둘다 해줘야 함...


여튼,, 수능이 끝난 잉여로운 고3이였기에 해결이 가능했던 것 같다..

워낙 엉망에,, 복잡하기도 하고... 지금의 나랑 밀접한 연관(?)이 있는 부분이라 정리해봤다..ㅋㅋ

참고로 작성 날짜는 2014년 1월 28일.

법이란게 워낙 자주 바뀌어서 말이지..ㅋㅋ


----------

선거법 개정으로 선거 연령이 내려갔지만, 직접적인 수정은 하지 않음. - 2019.12.30

----------


열심히 썼지만, 안읽는거 다 안다! ㅋㅋ

=======================================

간략 정리!!

일반적으로 수능친 학생

- 1월 1일이 지나면 술, 담배, 찜질방 가능

- 고등학교 졸업 후 노래방, PC방 등 청소년 유해업소 10시 이후 출입 가능

- 생일 이후 완전한 성인(계약, 선거 등 가능)

빠른년생

- 1월 1일이 지나도 할 수 있는거 없음ㅋ

- 생일 지나고 고등학교 졸업 후 노래방, PC방 등 청소년 유해업소 10시 이후 출입 가능

- 다음해 1월 1일이 지나야 술, 담배, 찜질방 가능

=======================================


밑에는 읽고 싶은 사람만 읽거라~~

형법이나 근로 조건 등에 관한 사항도 많지만, 딱히 필요 없을테니 생략한다..ㅋㅋ


아, 잘못된 내용 태클 받습니다!!! ㅋㅋ


만나이, 세는나이

우리나라가 전세계에서 거의 유일하게 세는나이(태어나자마자 1살)를 사용한다고 해도,

언론과 법조문 등 모든 공식적인 문서에서는 만나이를 사용한다.

마찬가지로 법과 관련해서 '만' 이 생략되어 있어도, 만나이라고 생각하면 됨.


이 만나이란건 한 해가 기준이 아니라 내가 태어난 날이 기준이다.

3월~12월 생으로 빠른/조졸없이 학교에 입학하고 수능을 치고, 해가 지나 1월을 맞았다면 보통 한국식 세는 나이로 20살.

하지만 만나이로 따지면 18년 +n개월을 살아온 것이기 때문에 만 18세가 된다.


나이 제한 3단계

이 나이 즈음해서 각종 법적 나이제한에 걸리는 것은 3단계가 있다.

1. 청소년 보호법의 1월 1일부터 제외

2. 각종 법령에서 청소년을 직접 정의하면서 생긴 고등학교 재학 중 제한

3. 그냥 성인(민법상 성인)


충분히 복잡하긴 하지만, 만20세던 민법상 성인이 만19세로 개정되면서 그나마 조금 쉬워졌다..ㅋㅋ


1. 청소년 보호법

청소년 보호법 제2조제1항

공중위생관리법

유해(?)한 것으로부터 청소년"을 보호" 하는 법령이다. 대표적으로 제한되는 것이 술, 담배.

수능이라는 우리나라 사회적 특성상, 예외적으로 특이하게 만19세가 되는 해의 1월 1일부터 이 법에서 정의하는 청소년에서 제외된다. 물론 다른 법에서 이 법을 다시 참조하지 않는한, 다른 법령과는 상관없다.


술, 담배는 워낙 유명해서 다들 잘 알겠지만,, 또 술 담배 외엔 딱히 청소년 보호법이 풀리면서 가능해지는게 잘 없다..

각 법령에서 다시 청소년을 정의해버려서;;;

찜질방 정도가 여기에 해당된다.


빠른 년생 중에 대학교 1학년 생일이 지나면 술,담배를 할 수 있는 것으로 착각하는 친구들이 있는데,

생일이 지난다고 해서 부모 동의하에 결혼이 가능해질 뿐, 달라질 건 없다. 1년 더 기다리거라...ㅋㅋㅋ


2. 고등학교 재학 제한

영화 및 비디어물의 진흥에 관한 법률 제2조제18항 (극장)

음악산업진흥에 관한 법률 제2조제14항 (노래방)

게임산업진흥에 관한 법률 제2조제10항 (PC방, 오락실)


아무생각없이 극장을 넣었는데, 극장은 청소년 유해업소가 아니다...ㅋㅋㅋㅋ

노래방, PC방, 오락실 등 흔히 '청소년 유해 업소, 10시 이후 출입 제한' 으로 알고 있는 것들이 여기에 해당된다.

각 업종을 정의하는 법령에서 청소년을 정의할 때 청소년 보호법을 끌어 쓰지 않고,

"청소년"이라 함은 18세 미만의 자( 초.중등교육법 제2조의 규정에 따른 고등학교에 재학 중인 학생을 포함한다)

이런식으로 직접 정의해 버린다.

고로 일반적인 고3의 나이지만 고등학교에 다니지 않는 학생이 생일이 지나면 출입이 가능하고,

  수능친 후 1/1 이 지났더라도 2월달 졸업하기 전인 학생은 10시 제한에 걸린다.

빠른 년생의 경우엔 졸업한 후에 노래방, PC방은 10시 이후 출입이 가능하다는 장점이 있다ㅋㅋ

만18세 제한이 있지만, 빠른년생이라면 졸업하고 나면 생일은 다 지나있겠지?


이렇게 복잡하게 따지지 않고 1월 1일이 지나면 그냥 봐주는 곳도 많다지만, 법은 그렇다.

참고로 당구장은 청소년 유해업소가 아니다. 고등학교 재학 중에도 10시 이후에 상주 가능! ㅋㅋ


3. 민법상 성인

민법 제4조

우리나라 민법상 성인 나이는 만19세. 고로 수능친 직후라면 아직 민법상 성인은 아니다.

(결혼해서 성년 의제되지 않았다면) 민법상 성인이 되지 않으면 휴대폰 구매 등 각종 계약은 직접 할 수 없다.

(깊게 들어가면 복잡하니 여기까지)

생일이 지나 만19세가 되면 그냥 성인이다. 투표도 할 수 있고, 결혼도 자유고... 더이상 딴지 걸릴 것이 없음..




사실 이런걸 알아도 막상 써먹으려면 머리아프다..ㅋㅋ

업주가 거부해버리면 답 없기도 하고....

젤 좋은건 그냥 생일이 빨리 지나버리는거....


하지만 늙기 싫어..ㅠㅠㅠㅠㅠ




⑴ 공중위생관리법 시행규칙 제7조

→ 별표 4 공중위생엽업자가 준수하여야 하는 위생관리기준 등(제7조관련)

2-라-(10) ..생략.. 청소년(청소년보호법에서 정한 청소년을 말한다. 이하 같다) ..생략..

'기타' 카테고리의 다른 글

dd-wrt dns 설정  (1) 2015.01.15
Facebook 전체공개 게시물 댓글달기 권한  (1) 2015.01.08
티스토리 RSS 설정  (6) 2013.12.05
오픈소스 라이센스  (0) 2012.01.22
마인크래프트 논리 게이트  (1) 2011.01.20

+ Recent posts