2015년 12월 26일 토요일

20151227 시간은 흐르고... & 호주의 헝그리잭스 이야기.

벌써 이직 후 시간이 이렇게 지났는데, 이직 후로는 개인적인 시간을 내지 않아서(게으름) 포스팅을 거의 하지 못했습니다.ㅠㅠ 반성!

뭐 첫째로. 기계식 키보드야 어렸을 때 많이 써봤지만 지금 새롭게 오래? 써보니 역시 사람 욕심이라는게... ㅎㅎ 욕심을 부리긴 해도 되는데 적당히를 모르니 어려운 것 같습니다.
쨋던 기계식 키보드는 갈축말고 적축을 다시 살 수도 있을 것 같기도 하고. 청축은 반드시 사고! ㅎㅎ

둘째로. 이제 프로젝트를 새롭게 들어가는데 동시에 자기계발도 좀 해야할 것 같고 시간 분배의 미묘한 설정을 잘 해야할 것 같습니다.

요즘 회사에서 마음이 맞는 동료를 만난것 같은 기분이 드는데, 서로 윈윈 할 수 있으면 좋겠습니다.

어쨋거나 오늘 새롭게 알게된 사실은.

호주에는 버거킹이 없고 헝그리잭스가 있는 EU!
지금까지 호주에는 영 연방국가?라서 왕이라는 호칭을 사용할 수 없는것으로(소문) 알고 있었는데... 사실 호주에는 이미 버거킹이라는 레스토런트가 있었기 때문에 그 이름을 쓸 수 없었다고 합니다. 그래서 헝그리잭스로, 그리고 이름 소송을 해서 이겼지만 이미 모든 호주사람들이 헝그리잭스로 알고 있었기때문에 그냥 그대로 이름을 사용하도록 결정했다고 하네요. 이것 역시 카더라지만 왠지 신빙성있는.. ㅎㅎㅎ 그나저나 처음 상호에 KING이 못들어간다고 했던 그 분은 살아는 계신지. 참 신기하고도 그럴듯한, 믿을만한 이야기로 지어내주셔서 재밌게 잘못된 지식을 가지고 있었네요 ㅎㅎ

그나저나... 연휴... 참 좋네요.
너, 나, 우리, 나를 아는 사람들, 내가 아는 사람들 모두 병신년부터는 더 많은 복과 행복(같은 복이긴 하군요) 원하는 것, 돈! 모두모두 받고 이뤄지고 가지시길!

2015년 12월 5일 토요일

20151205 마느님이 하사하신 첫 기계식 키보드! 레오폴드 900R 갈축!

키보드를 자꾸만 고민을 했는데, 옆에서 보던 마느님이
  = 살려면 사라~
  - 55555!!! 감사합니다!
오늘 용산 기계식 키보드 타건할 수 있는 매장 3군데를 모두 돌았습니다.

저같은 쪼랩과 숫기 없는 사람에게는 사람이 와도 관심을 주지 않으시는 주인장님이 너무나 감사했습니다. 그런데 이런걸 싫어 하시는 분도 있고 뭐 개취니까요?! ㅎㅎ 쨋든 모든 주인장님들이 그래주셔서 감사했습니다.

여기저기 돌아다니며 이것저것 쳐봤는데
1. 오! 느낌 괜찮은데? 마느님도 저도 모두 사고싶었던 종류 불문 청축! 특유의 딸깔딸깍소리와 판에 닿는 느낌. 너무나 좋더군요. 마느님도 나중에 우리 피씨 생기면 꼭 청축을 써보고 싶다고 ㅋㅋㅋ 이제 집에 청축 2개를 똭! 놓고 게임방처럼 꾸미기로 했습니다. 아마도 10년 안에... ㅡㅜ 그러나 회사에선 쓸수 있겠지만(지금 회사가 굉장히 시끄럽습니다) 역시나 거슬려 하실 분들이 계실것 같으니 패스했습니다. 청축 진짜 사고싶습니다. ㅠㅠ

2. 오?! 의외로 괜찮네? 했던 한성 어떤 키보드 적축! 느낌이 좋더군요. 그리고 반발력이 좀 있어서 느낌이 좋았던것 같습니다. 쪼랩에 초짜라 키보드명 그런거 모릅니다. 하지만 역시 가성비의 한성이라는 느낌이 많이 왔습니다. ㅎㅎ

3. 원래 사고싶었던 레오폴드 750r 텐키리스 적축! 타건도 할 수 없었던 기억인것 같습니다? 타건은 했나? 암튼 그다지 생각보다 매력적이지 않았던것 같았습니다. 너무 기대를 하고 가서그런지... ㅎㅎ 그리고 리니어 흑축도 쳐보고 싶었는데 그냥 막 돌아다니면서 생각도 없이 키보드 타건해보느라 모르겠습니다.

4. 진리의 레알포스! 마느님도 쳐보더니 아~ 왜 비싼건지 조금은 알겠다~ 안누르는 것 같아~! ㅎㅎㅎ 뭐... 가격이 가격이니 그냥 넘겼습니다(마느님 왈 = 살꺼면 그냥 한번에 좋은거 사!!). ㅎㅎㅎ 사랑합니다 마느님!!!

5. 계획에도 없던 레오폴드 FC900R 갈축, 으아니?! 이거 뭐야!! 느낌이 좋잖아?!!! 게다가 마느님이 오른쪽 숫자 키 패드 없으면 불편할껄?! 해서 그냥 생각에도 없는 900R을 ㅎㅎㅎ 그냥 질렀습니다. 솔직히 구산넷컴에서 한 30분 망설이면서 막 키보드만 뚜들기니까 마느님이 그냥 빨리 질르라고 ㅎㅎㅎ 역시 마느님은 진리입니다. 혼자 갔으면 그냥 안사고 왔을거 같아요.

지금 구입한 첫 기계식 키보드로 글을 남기고 있습니다. 느낌이 좋고 설레네요. ㅎㅎ
이제 기계식 입문했으니 다음에는 청축 2개를 지르면 키보드는 더이상 네이버!
전 직장에서 쓰던 팬타그래프 키보드가 너무 좋았어서 그것을 샀으면 좋았을 것을 단종이 되어서 너무큰 지출을... ㅠㅠ 이번달 벌써 300을 넘게 썻네.....
버는건 150인데 맨날 적자..ㅠㅠ

어쨋거나 그럼 오늘은 키보드를 안고 자야겠습니다.
20000!!

2015년 12월 3일 목요일

20151203 이직 후 한달이 지났다!

모든게 완벽할 수는 없습니다.

1. 계속 욕심이 생깁니다.
2. 당분간 안드로이드, 서버API, php를 주로 MySQL과 함께 다룰 예정입니다.
3. 회사를 그만 두는것을 힘들게 하는 사람들이 있습니다. ㅠㅠ 
4. 역시 의사소통이 어렵습니다. 남의 부탁을 들어주기 힘든것은 기저에 깔린 생각. 즉, 귀찮아서 하기 싫다 인것 같습니다. 항상 sosang횽처럼 내 시간도 기꺼이 남을위해 사용할 줄 아는 사람이 되어야지 하고 다짐합니다.
5. 아마도 새로운 프로젝트를 시작하면 비슷한 흐름대로 얼티메이텀 케이스 메니져를 시작해볼 수 있지 않을까 합니다. 그러니까 지금부터 공부를 열심히 해야하는데 발렌타인 17뇬산을 들고 헤롱대고 있으니까 저는 힘이 듭니다.
그나저나, 30년산은 얼마나 맛날지 꼭 먹어보고 싶습니다.ㅎㅎ
한 두 어병 사고싶습니다.

내년에는 좀더 발기찬 외톨이가 되어야겠다 생각합니다.

방문 숫자도 20000을 돌파해 기분이 좋습니다.!
키보드도 사야합니다...?

끗-

2015년 11월 18일 수요일

20151119 결국 같은 짓을 해버렸군

목적이 불순했기에 더 티가 났던것 같습니다.
이제 그냥 조용히 있어야 할 듯.

만화나 봐야지!
이번달은 쉬고 다음달 부터!

2015년 11월 12일 목요일

20151113 근태와 지각 그리고 매력

SNS에 쓰려다 이 곳(일기장)에 쓰는 게 몇 번째인지...
똥 무서워서 구더기 못담군다더니... 정말이네요. 무서워요 SNS에 글쓰기.
어휴... 그나저나 근태에 지각이 추가된다면 반드시 정시 퇴근도 넣어주세요!

-----
근태? 지각에 대해서 많이 생각한 한 달이었습니다.

근태에는 지각은 포함되지만, 정시 퇴근은 포함되지 않는 게 현실인가 싶기도 하고,
지각 끽해야 몇 분 늦는 건데 사정이 있어 좀 늦을 수 있지 하는 부분도 이해가 갑니다.

일단 저는 대학을 제외하고 초, 중, 고, 3번의 회사 생활 중 지각한 횟수가 2번 정도인 것 같습니다.
첫 지각은 첫 회사에서 짤릴(?) 당시 전날 술을 너무 많이 마셔서 '어차피 짤릴 거 걍 잠이나 더 자자' 하고 느지막하게 출근을 했었습니다. 아마 그만두는 당일 날이었던 것 같습니다. 물론 사수님의 심기를 불안하게 해드린 죄를 지금도 가슴 아파하고 있습니다. 죄송해요! ^_<

그리고 두 번째 지각은 지금 회사,
출근 둘째 날, 지하철 지연 + 버스 막힘으로 인해 약 3분 정도 지각했는데 책임 직급을 가진 분에게 굉장히 혼이 났습니다. 걸어와도 15분인 거리를 막힌다고 늦는 게 말이 되느냐며... 어?! 뭐 변명이야 많지만 늦은 건 늦은 거니까요.

기본적으로 저는 출'퇴'근 시간은 약속이라고 생각합니다.
이런 '공기 같은 약속'마저도 쉽게 생각하고 왕왕 어긴다면, 신뢰할 수 없는 것이 어쩌면 당연하겠습니다.

추가로, 시간약속 안 지키는 친구 굉장히 굉장하게 싫어합니다. 근데 이런 친구는 보통 좀 매력적이죠. 근데 매력도 없는 사람이 그런 식이라면 굉장히 사양하고 싶습니다. ^^;

저는 속도 좁고 멍청하기 때문에 수 없이 인맥 정리를 하며 살고 있습니다.
그 중 한명이 오늘 역사속으로 사라집니다. ^^; 곧 잊혀지겠죠?
안녕히 가세요... 어쩔 수 없이 뵙게되면 인사는 해 드릴게~

20151113 나의 목표와 핫 이슈 메거진

어렸을 때 구디를 지나가면 핫 이슈 메거진을 들고 서있는 노숙인 재활자를 보며 최소한 내 목표를 달성하면 내 꼭 한 권은 사 드리리라 결심했던 적이 있습니다.
이제 곧 제 목표가 달성 됩니다. 긴 긴 시간 오랜 여정을 하며 돌고 돌아 작은 목표를 하나 이뤄냈다는 기쁨, 동시에 앞으로 핫 이슈 메거진을 가끔 사드린다는 책임도 스스로 부여하고자 합니다.

물론, 연예인 가십에는 전혀 관심이 없습니다...

담배를 끊고 콜라를 끊고(물론 가끔 한 잔?) 뭔가 결심할 땐 주변에 알려야 하듯 이번에도 소소하게 선언아닌 선언을 해봅니다.

약간은 다른 의미의 영상이지만 잊고 있던 기억을 꺼내게 해 주어서 참 고마운 영상입니다.

http://www.hefty.kr/homeless-experiment/

마지막 코멘터리가 인상 깊은데, 예전에 제가 싸이월드(쵸재깅?!)ㅎㅎㅎㅎ 시절에 썻던 대문 글?을 마지막으로 이 글을 끝마칩니다.


내가 기억하는 사람.
나를 기억하는 사람.
느낀대로 행동하기...

2015년 11월 11일 수요일

20151112 두 번째 수능일.

지금 동네에 살게 되면서 두 번째 수능일을 맞았습니다.

역 주변에 진을 치고있는 경찰, 자원 봉사자, 경찰차, 바이크, 택시들을 보면 아직도 따듯하다는걸 느끼게 됩니다.

문득, 짜증났던 사건 하나가 떠오르는데, 언급하자면 왠지 언젠가 당사자가 알 것같고...
결론적으론 제가 조팝나무인게 열받는 그런 이야기입니다. 본인은 본인 잘난맛에 살고 있겠지만, 당한 저로서는 갱장히 갱장하게 짜증나는... 뭐 쨋든. 앞으로 안 보면 그만이니까.

오늘도 분수()인증! 이얍!

2015년 11월 10일 화요일

20151111 바닥을 훑으며 구직해보기 #3

바닥을 훑으며 구직해보기 #2 에서 이야기 했듯
1. 왜 중견, 대기업을 포기하고 늦게 정글러가 되었는가?
2. 이직할 때는 무슨 생각을 했는가?
에 대해서 키보드로 배설을 해보려 합니다.

먼저, 1번
저는 멍청하기 때문에 시험에 한 번 떨어지면 '아! 이 길은 내 길이 아니구나.' 라고 생각하고 다시는 그 시험을 안보는 스타일입니다.
제가 대학을 다닐 때, 보험 계리사라는 자격 시험을 준비했었습니다. 한 1년 넘게 준비했던 것 같고 나름 열심히 했습니다. 멍청하기 때문에 남들은 한 번 볼거 2~3번 보고 그랬던 것 같습니다. 이해력도 딸리고 뭐... 암튼.
졸업을 하던 해에 시험을 쳤고 시원하게 말아 먹었습니다. 모든 과목에서 1~3문제 차이로 낙방한거죠. 더 해도 안될안!이란 생각 때문에 그냥 깔끔하게 접었습니다.
그로부터 몇 달 후.
고등학교때 정말 공부 안하던 친구가 인서울의 상급 학교에 수학과에 편입에 성공했고 xx 직군에 지원했는데 떨어졌다는 이야길 하더군요. 그런데...
떨어진 다음날 전화가 왔더랍니다. 다시 면접보러 오라고 부서는 계리부서라고. 그리고는 면접에 합격. 신입인데도 '3년에 1억씩 저금할 수 있도록 계획을 짜놨다.' 라고 하더군요. 사실 저는 학교 후배들과 계리사 붙어도 취직이 안될꺼란 걱정을 하곤 했는데 역시나 될놈될에 학교의 네임벨류가 참...
뭐 저보다 더 노력했을테니. 어쨋든 부럽더라구요. 그리고 깔끔하게 대기업을 포기하게 되었습니다. 이 때 나이가 방년 28세...어?! ㄷㄷㄷ 너무 늙었...ㅠㅠ
그리고는 중견이 뭔지 몰라도 중견중견 하길래 '에이 드럽게 드럽네, 안가! 쉬봐!' 하고선 중소기업에 이력서를 마구 뿌렸습니다. 무조건 집에서 가까운 곳으로 ㅎㅎ
친구가 말하길 '미친놈아 무슨 가까운걸 선택해 뽑아주면 가야지'라고 했는데 그 때는 무조건 집 가까운게 짱이라는 원칙 하나로 첫 번째 회사에 입사하게 됩니다.
무려 집에서 5분거리. -_-;;; 여기서 sosang횽을 만났고 뭐 그런 이야긴 많이 썻던거 같으니 패쓰.

사실은 이 때 면접도 좀 골때렸습니다.
이력서는 쥐뿔도 없이 나이는 많지.
면접 때 영어로 자기소개를 하라고 시키고(해외지원팀 입성 ㄷㄷㄷ) 한 주 후에 임원 면접에서는 노래를 시키질 않나 -_-(물론 노래 안불렀...)
음... 노래 시킬땐 아찔하더군요. 아... 나도 드디어 인터넷에 글 올릴 거리가 생긴건가... 이런 생각도 하고 '아 슈발 노래 안해 입사 안해 슈발슈발' 이런 생각도 했던게 명확히 기억납니다. ㅎ ㅔㅎ ㅔ
그리고 집에 돌아와선 당연하게도 '아... 슈발... 노래 부를껄...'

뭐 그렇게 첫 사회생활을 시작하고 빠르게 두번째 사회생활을 시작하게 되었습니다.
두번째 사회생활을 준비하던 중 기억에 남는 면접은
  = '님하 요즘 과세 문제가 뜨거운 감자인데 정부가 잘하는 거 같애?'
  - '아 몰라 취준생이 무슨 그런거 신경써 어짜피 매년 바뀌는건데 그리고 정권 바뀌면 또 바뀔꺼고 글고 내가 세금에 신경쓸 만큼 소득이 많지도 않잖아 아 몰랑! 글고 정부 이상해'
  = '헐 정부를 싫어하는 구만?'
  - '기업이나 정부 좋아하지 않겠어?' ... 어?! 내가 무슨말을!
  = '어쨋거나 주 6일에 2300이야. 합격하면 알려줄께. 가라'
뭐 어쨋거나 다른 내용들도 약간의 사상검증? 하는거 같았고, 면접 후 빠르게 집으로 돌아가고 있었습니다.만,
따르르르르르르릉
  = '님 내일 면접보러 올래? 왜 전화를 안받음?'
  - '아 면좁 보는 중이었음 낼 가겠음 어딘지 문자로 좀 남겨주셈'
그렇게 두번째 회사(정글이라던) 팀장님과 첫 전화를 끝냈습니다.

그리고 다음날,
  => '왜이리 일찍왔어 -_- 앉어있어'
그렇게 20분 정도를 기다리니 다른 지원자 2명 더 오고 사장이란 사람이 들어옴.
  = '자기소개 해봐'
  - 블라블라
  = '회사가 뭐라고 생각함?'
  - 출퇴근 같은 기본적인거 지키면서 일하면 되는 곳 아님?
  = '회사가 학교냐?'
  - 어? 학교가 아니니까 더 잘지키겠다는 거라고 학교라고 생각하면 나 근태 안지킴. ㅇㅋ?
아마도 사장은 이익을 내는 어쩌고 라는 대답을 기대했던 것 같고 저는 못배운 놈이기 때문에 그런걸 잘 모릅니다. 암튼 면접이 좀 길었고 딴에는 압박면접이라고 생각했는지 슬슬 빡침을 느끼기도 했습니다.
면접을 보고나니 팀장님은 갱장히 이쁜 여성 지원자와 말을 하면서 연락줄테니 가라고 이야길 해줬고, 저는 한번 더 인사를 하기위에 어물쩡 거리다가 휩쓸려 내려갔습니다.

아... 아까붙터 뭔가 우주의 기운때문에 글에서 못배운 티가 나면서 횡설수설 하고 있네요...

머 암튼 그 담주에 팀장님에게 전화가 와서는 출근하라고,
출근했더니 너 안뽑을려고 했는데 사장한테 대드는것 같은 모습에 뽑았다고...
ㅡ,.ㅡ?,...제가요? 네?!

머 암튼 그렇게 법무팀에서 일하게 되었습니다.

여기서도 제가 못배우고 밑바닥이기에 가능한 경험을 했었습니다.
1. 회사원 1에게 개무시 당해서 깊은 빡침을 당한 이야기.
2. 회사원 2에게 '선배라고 부르세요.'라는 말을 듣고 호칭을 안한 이야기.
3. 회사원 2가 팀장님에게 본인보다 늦게 입사했단 이유로 'xx씨'라고 불렀다던 이야기를 들은 이야기.
4. 회사원 2가 속한 팀장에게 불같이 화낸 이야기.
등등...
에피소드가 좀 있네요.

아무튼 이런 저런 바닥을 경험해봐도 도저히 적응이 안됩니다.
아... 쓰고싶은게 또 갑자기 많아져서...
이번 이야기는 여까지 하고 접는걸로!

다른 제목으로 위 에피소드 부터 근황등의 이야길 풀어봐야겠네요.
머 아무튼 다시한번 하고 싶은 이야기는.
- 하위 소속된 틴구들이여 힘을 내자.
- 무서울거 없어! 그냥 들이대자!
- 그래도 무서우니 몸을 사리자. 지금 한국 사회에선 경력이 짧은게 여러개면 굉장히 위험에 처한다고 한다!
- 아... 갈팡질팡 뭐라는 거야.


음... 아 몰랑. 우주의 기운을 느낀다! 그럼 20000!
-------------------------------
바닥을 훑으며 구직해보기 #1
바닥을 훑으며 구직해보기 #2

20151111 바닥을 훑으며 구직해보기 #2

아... 오늘이 삐엣삐엣로 데이라니... -_-

쨋든.
바닥을 훑으며 구직해보기 #1
이전 글에 이어서...

그런 몇남 몇녀의 몇번째 어쩌고 하는 문장을 쓸리 없다는 거죠. 제 생각엔... 적어도.
정말 저 문장을 사용하시는 분들에게는 어쩌면 저도 복받은 사람으로 보일 수 있다는 상대적 관점에서 죄송하다는 말을 남겨봅니다.

그래서 하려던 말은 마음가짐이였습니다.

1. 어짜피 이 바닥(?)에 들어왔으니.
  - 여기 말고도 갈 곳 많습니다~!
  - 2번째 직장이었던 모 회사의 법무팀. 팀장님과 저 단 둘이었던 작은 회사입니다. 이 때 팀장님이 해주신 말씀 '이 바닥은 정글이야'

2. 그럼에도 꼭 일하고 싶습니다.
  - 갈 곳이 많긴 하지만 여기서 일해야 겠습니다.
  - 솔직히 갈 곳이 많긴 하지만 내 자리가 없는게 현실이기도 하죠. 한 때 구디의 수 많은 사무실을 보며 왜 내자리는 없을까 힘들어 했던 적도 있었습니다.

구디 이야기를 하니 2번째 직장이였던 곳도 구디.
참 야화가 많지만, 그중에 단연 최고는 연봉이 1800이었다는. ㅋㅋㅋ
저는 이런 사람입니다. 연봉 1800짜리 입니다. ^^;
이 때, 첫 회사의 사수였던 sosang횽의 전화가 아니였다면 IT쪽으로는 생각도 안했을 것 같습니다.

연봉 1800 시절의 어느 날...
  = 님하 요즘 모하셈?
  - 법무팀 일해요 ㅡ.ㅜ 보고싶어요~! 엉엉
  = 우리 컴터나 배워볼래?
  - 오오! 굳굳 고고!!
솔직히 sosang횽과 같이 하는거라 시작한건데... 아직까진 그냥저냥 할 만 함. 재미를 느낀다고 생각하도록 스스로 되새김질 하고 있습니다.

머 암튼, 그렇습니다.
지금까지 내용을 정리해보자면.

저는
늦게 중견, 대기업을 포기하고 중소(정글)를 전전하기로 마음을 먹었습니다.
그런만큼 경력도 아주 보잘 것 없습니다.
솔직히 경력도 아니고 이게 뭔가 싶습니다.
그래서 이직을 하기로 했는데, 결론적으론 그냥 하위 50% 얼빵한 신입일 뿐입니다.

쓰다보니 다음 글에선
1. 왜 중견, 대기업을 포기하고 늦게 정글러가 되었는가?
2. 이직할 때는 무슨 생각을 했는가?
정도를 써보겠습니다.

그럼 바로!
------------------------------------
바닥을 훑으며 구직해보기 #1
바닥을 훑으며 구직해보기 #3

20151111 바닥을 훑으며 구직해보기 #1

이전에 몇 번 글을 작성했지만, 저는 잡다한 취업 2번 + IT 취업 1번 총 3번의 구직자 노릇을 경험했습니다.

처음 회사에서 워낙 소중한 인생의 터닝 포인트를 경험했기에 지금까지 올 수 있었습니다.
쨋든, 이 바닥에서 저는 이렇게 했다는 것을 기록으로 남겨두려 합니다.

두 가지 이유가 있습니다.
1. 잘 나가는 사람의 이야기는 너무 많다. 꼭 잘 나가는 사람만 이런 글을 작성해야 하느냐?
2. 분명 나같이 하위 50%에 속하는(빽, 돈, 머리, 여유, 친구 등이 없는) 사람도 있을텐데 일종의 공감을? 나눠보자.

저는 이렇게 생각했습니다.
  - 어짜피 소기업 들어갈 거 마음 가짐이나 잘 가지자.

저로서는 중견, 대기업 들어갈 능력이 없이 평생 소기업이나 쓸고다닐 것 같은 느낌이 들었습니다. 그나마 있는 친구의 조언은 일찍 일이나 시작해서 경력이나 쌓으라는 것.
지금까지는 맞는 소리 같습니다. 가지도 못할 곳 처다보느라 자격증 딴다고 시간낭비 돈낭비 할 바에야 그냥 일 시작해서 경력 쌓는게 좋겠다. 하고 생각했습니다.

그래서 이력서를 오만군데 다 뿌리고 면접에 오라는 족족 다 참여했습니다.
지금까지 3번의 구직자 노릇에서는 이력서를 정말 한국식(대기업 양식 혹은 문방구에 파는 이력서 등)으로 작성했었습니다. 뭐 특별할 것도 없고 누가봐도 3초도 안보고 버릴 이력서와 내용이겠죠.
물론, 굉장히 많은 조언글들을 봤습니다(이력서도 글로배운...).
제일 말도 안될것 같은 조언이 "저는 몇남 몇녀의 뭐로서"라는 말을 쓰지 마라고 하는 조언들인데 정말 저렇게 쓰시는 분이 계셔서 하는 말일지 그 조언조차 옛날부터 C+P했기 때문에 남아있는 조언인지도 모르겠습니다.

엄한 요청이 와서 나중에 이어 써야겠네요. ㅠㅠ

------------------------
바닥을 훑으며 구직해보기 #2
바닥을 훑으며 구직해보기 #3

2015년 11월 1일 일요일

20151102 문득 든 생각

오늘 문득 이 블로그를 일기가 아니라 누구(내 앞, 옆 등)라도 읽을 수 있다는 사실을 새삼 깨달았습니다. ㄷㄷㄷㄷㄷㄷㄷㄷ

그나저나 이직을 더 늦게 해도 되는데 섣부른 판단이 아니었나~ 하는 생각도 하고,
지금 회사가 중요한거 빼곤 다 좋은데 하는 아쉬움도 있고 뭐 그런 생각이 들기도 합니다.

어쨋든 신중에 신중을 기해야 앞으로 더 수월하지 않을까 생각합니다.
그럼 다이어트 마냥 신중은 내일부터 하는걸로 해야겠네요.
어?!

그리고 생각해보니...
벌써 친구들은 5~6년차... 빠른 친구들은 10년을 바라보는 경력을 가지고 있는데...
이제 1년밖에 못했다니... 참 갈길이 머네요.

하소연 아닌 하소연을.... 깔루아 밀크나 한잔!

2015년 10월 27일 화요일

20151028 자꾸 후회가 드는 이유 그리고 시작하지 못하는 이유

생각 바꾸기 + 생각 버리기
= 생각 (바꾸면서 버리기)
= 생각 (버리기 + 바꾸기)
= (버리기 + 바꾸기) 생각
= 버린 생각 + 생각 바꾸기
= 버린생각 바꾸기
생각을 계속 생각 생각 거리니 생각이란 단어가 무척이나 이상하게 느껴지네요.

쨋든. 죽은 아이 fireEgg 만지기 랄까?...
미미하게 나아가는 것 같지만 정말 미미해서 미칠지경 ^^;

2015년 10월 25일 일요일

20151026 이직 전 마지막 면접

일단 마지막 면접을 실시하고,
합리적 선택을 할 수 있게 도와줬으면 좋겠지만,
보통은 생각한 것과 다르게 흘러가기 때문에
그저 웃픈 일화로 마무리 될 것같은 느낌입니다.

@_@ 이런느낌?

2015년 10월 19일 월요일

20151020 학동의 스타트업 면접 후기

오늘은 학동의 스타트업에 면접을 다녀온 후기입니다.

일단 제가 도착한 시간이 7시 3~40분 인데 개발팀만 야근을 했던 분위기로 보아 일은 많은 것 같습니다. 지금 목말라 하는 부분이 일이 없는건데 웃픈 느낌이 들었습니다.

CTO분이 일단 회사 소개를 해주셨고, 어플이나 웹을 방문한 적이 있으시냐 물으셨지만 저는 면접보러 가는 회사의 앱은 굳이 사용해보지 않습니다; 자격 미달의 지원자 인가요?

그리고 CTO분은 대외활동을 많이 하시는 것 같고, 내년 목표가 팀원들이 자기 분야에서 대외활동(발표)을 하는 것이라고 했습니다. 이 부분도 긍정적인 요소가 되었습니다.

글 쓰는 중 합격 전화를 받고 왔습니다.. ^^; 쨋든.

다만 면접 중간중간 그리고 방금 롤이 백엔드 고정이 아닐 수 있다고 이야기를 조금씩 하시는데 이 부분이 조금 걸리기도 합니다.

이 부분과 연봉 이야기는 오늘 중 대표님?과 협의 후 다시 이야기 한다고 합니다.

어쨋거나. 저도 마음이 살짝 뜬 상태이고, sosang횽도 긍정적으로 봐주시고 이런 저런 것들이 잘 맞아서 이직했으면 좋겠다는 마음이 들기 시작합니다.

일단 지금 출퇴근 시간이 40~50분 인데 학동까지 간다면 1시간~1시간 10분 정도 걸릴 것 같습니다. 지금은 통근 버스가 있고 아침(1~2천원) 점심, 저녁이 모두 제공되지만, 학동은 야근시 석식 점심비는 일정? 지원해주는 것 같습니다. 연봉의 경우는 현재 굉장히 저 수준의 신입연봉?을 받고 있지만 그곳에서는 제가 생각했던 신입연봉?을 받을 수 있기를 바래봅니다.


---- 받은 질문

  • Node.js의 단점은?
  • 다형성이란?
  • Callable, Runnable의 차이
  • 싱글톤에 대해 설명
  • Scala의 특징은?
  • Ajax (Asynchronous Javascript Xml) 스펠링?! 동기와 비동기의 차이
더 이상 기억이 안남...ㅡ.ㅜ 순서없이 리스트 업.


====== 최종 합격 통보 받음.
그런데 약간의 고민거리가... ^.ㅜ

2015년 10월 6일 화요일

20151006 여러가지 일들.

1 . 루비 온 레일즈를 사용하는 예제를 따라했습니다. 루비의 경우 MVC가 매우 명확하고 ORM 개념을 사용하기 때문에 새로운 경험을 하게 되었습니다. 요즘 핫한(나온지는 10여년이 지났지만) Spring JPA와 하이버네이트 등을 사용하는 것 역시 새로운 것을 공부하는 즐거움을 가질 수 있을것 같습니다.

2. 뭐든지 깊게 익히지 못했기 때문에 프로젝트 하나를 진행해야 하는데 게으름이 문제입니다. 후딱 결정해서 후딱 진행해보고 싶습니다.

3. Node.js 진영의 재단에 합류했습니다.
Thank you for purchasing a Node.js Foundation membership. Your membership will allow you to vote in the Foundation's annual elections via a secure online voting system.

4. 집중하기가 굉장히 어렵습니다. 이미 마음이 떳기도 하고 머리가 나쁜것도 원인이지만 결론적으로 회사에 집중하기가 너무 힘이 듭니다. 가장 큰 이유는 일이 없기 때문입니다. 집중하고 싶습니다. 시간이 너무나 아깝다는 생각을 부쩍 많이 하지만... 역시 생각뿐입니다. ^^;

5. 간간히 이력서를 내고 있지만, 이력서 내는것도 귀찮습니다. 나를 증명하며 팔아야 하는 일련의 행동들이... 하지만 구직자라면 반드시 거쳐야 하는 관문이기 때문에 오늘도 힘겹게 진행하고 있습니다.

6. 객체지향의 사실과 오해라는 책을 읽기 시작했습니다. 집중해서 읽고싶은데 머리가 나쁨 + 산만함 + 지하철에서의 집중의 힘듦 등의 오만가지 이유로 또 이런 글이나 쓰고 있습니다. 내일부턴 다시 집중해서 읽기!

7. 힘듦. 레알. 진짜. 정말. 친구랑 한 잔 하고싶습니다.
근데 난 친구가 1도없는듯... 역시 마느님이 최고!

2015년 9월 27일 일요일

20150928 불공평을 느끼는데 움직이지 않는다.

흔히들 말하죠 세상은 불공평하다고,
그 기저에는 서로 평가하고 이익을 계산하는 얄팍한 간사함이 있는게 아닌가 합니다.

왜 '당신이 유명해지면 똥을 싸도 사람들이 박수쳐 줄 것이다'라는 말을 했는지 조금씩 느껴갑니다.
당연한 듯 사람들은 어떤 사람이 유명하기 전과 후로 대하는 태도가 달라지겠지만, 그걸 나쁘게 보는 당사자도 수양이 부족한게 아닌가 하는 말도 안되는 어이없는 논리가 막 전개될려고 합니다.

그냥 항상 변하지 않았으면 좋겠습니다.

추석 당일 주유소에서 직원과 다툼이 있었습니다.
양쪽 말 다 들어봐야 알겠지만, 적어도 위협을 받은 상황이었는데
견찰은 와서 하는 소리가 쌍방을 운운합니다.

그냥 하하 웃고 집에 왔습니다.

도둑 들어도 그냥 눈뜨고 지켜봐야 하는 대한민국이신데 오죽 하시겠습니다.
제가 고귀하고 영롱한 대한민국에 살고 있어 죄송합니다.
견찰관님들 귀찮게 해드려서 죄송합니다. 제가 존나 죄송합니다.

뻐킹 헬조선!

어쨋든 이럼에도 불구하고,
그냥 존나 가만히 있는게 참... 싫네요.

2015년 9월 23일 수요일

20150924 안양 스타트업 면접 후기

1차 기술 면접에서는 어려운 문제는 없었고, 저 같은 쪼랩도 풀 수 있는? 정도의 문제들이 나왔던 것 같습니다. 기술 면접은 확실히 기본을 다지고 가야 좋은것 같습니다.

2차 임원? 면접에서는 그다지 유쾌하지 않은 면접을 봤습니다. 어른의 느낌이 나고 제 미래를 많이 걱정해 주셔서, 혹시 합격 하더라도 가지 않을 생각입니다. 음, 합격할 리가 없긴 하지만 ㅋ 그리고, 미리 최종 결과에 관계없이 다른 회사를 알아보겠다. 말씀하신대로 더 좋은 회사와 경력을 위해 신중한 선택을 하겠다는 메일을 보낼까 말까 하루종일 고민하다가 그냥 무시하기로 했습니다.

뭐 100% 다 맞는 회사를 고를 수 있겠냐마는 극도로 지양하는 어른 느낌을 받고와서 1차 때 좋았던 기분은 다 사라져 버렸습니다. 스타트업이 아니고 그냥 소기업 냄새가 심하게 나서... 쨋든, 더 길게 쓰기도 싫네요.
땅땅땅. 이상!

2015년 9월 9일 수요일

20150910 Spring 없이 ActiveMQ 사용해보기!

검색 능력이 미천한데다가, 이해를 잘 못해서 또 남겨 놓게 되었습니다.

대부분의 ActiveMQ를 알려주는? 블로그?들은 Spring에서 사용하기 때문에
Spring과 관련된 포스팅을 해 놨습니다.
저는 실무에서 웹을 다루지 않기 때문에 늦는 느낌이지만,
어쨋든 ActiveMQ 사용법 without Spring을 남겨놔 봅니다.

가장 먼저,
http://activemq.apache.org/ 를 방문해 헤더 아래의
Download ActiveMQ 5.12.0 Today! 를 클릭합니다. (http://activemq.apache.org/download.html)

2. ActiveMQ 5.12.0 Release 를 클릭 합니다.
저는 윈도우 환경이니 apache-activemq-5.12.0-bin.zip를 다운로드 했습니다.

3. 저는 바탕화면에 풀었습니다.

4. 콘솔에서(윈도우키 + R -> cmd) ->풀어진 폴더/bin 으로 이동한 후
activemq start를 입력 후 엔터!

5. http://127.0.0.1:8161/admin 접속 후 아이디와 비밀번호 모두 admin을 입력합니다.

여기까지 기본 작업이 끝났습니다. 
아래는 스프링 없이 큐를 이용해 메시지를 쌓고 꺼내고 를 하는 소스입니다.

ProducerQ.java 를 만들고 main메소드를 생성 후 아래 코드를 붙여 넣습니다.
public class ProducerQ {
public static void main(String[] args) {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection conn = null;
Session session = null;
try {
conn = cf.createConnection();
session = conn.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = new ActiveMQQueue("queueName");
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setText("Hello ActiveMQ world!");
producer.send(message);
} catch (JMSException e) {
} finally {
try {
if(session != null) { session.close(); }
if(conn != null) { conn.close(); }
} catch (JMSException ex) {}
}
 
}
}

1. 커넥션 팩토리 생성. 이때 자동 설정된 ActiveMQ의 포트 61616으로 접속도록 설정 해줍니다.
2. 데스티네이션을 내가 만든 큐 (이름은 queueName)으로 설정합니다.
3. 해당 큐로 프로듀서를 생성합니다. 앞으로 보내는 메시지는 이 프로듀서를 이용해 큐에 쌓게 됩니다.
4. 보낼 메시지를 생성합니다(여기는 TextMessage 이고, 여러 종류의 Message가 가능합니다).
5. 프로듀서에게 메시지를 전달합니다.
6. 그럼 큐에 쌓이게 되고 아까 접속했던 어드민 페이지의 Queues 탭에서 확인 할 수 있습니다.


같은 방법으로 ConsumerQ.java도 마찬가지로 붙여 넣습니다.
public class ConsumerQ{

public static void main(String[] args) {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection conn = null;
Session session = null;
try {
conn = cf.createConnection();
session = conn.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = new ActiveMQQueue("queueName");
MessageConsumer consumer = session.createConsumer(destination);
conn.start();
Message message = consumer.receive();
TextMessage textMessage = (TextMessage) message;
System.out.println("From Queue: " + textMessage.getText());
} catch (JMSException e) {
System.out.println(e);
} finally {
try {
if(session != null) { session.close(); }
if(conn != null) { conn.close(); }
} catch (JMSException ex) {}
}
}

}

여기서는 프로듀서 대신 컨슈머를 생성해 큐에 쌓인 메시지를 받고(큐의 이름이 같아야 합니다) 해당 메시지를 출력하므로써 소모합니다.

이제 기본이 되었으니 좀더 심화해서 공부해야겠습니다.


2015년 9월 6일 일요일

20150907 ...

나이가 많아질 수록 삶의 무게가 무거워 지는 것을 느껴갑니다.
나만 생각할 수 없는 그 무게를 감당하고 계신 부모님께 너무나 죄송한 마음이 커져갑니다.
살아가는게 이렇게나 힘들지 몰랐습니다. 놓고 싶다고 생각한게 한 두 번이 아닙니다.
저는 이제 막 사회에 눈을 떠 힘든것을 알았는데, 오랜시간 무게를 견뎌오신 부모님께 너무나 죄송합니다.
돈을 못 벌어서 죄송합니다.
효도를 못해서 죄송합니다.
일하지 않고는 못살게 해드려서 죄송합니다.

... 죄송합니다.


많은게 느껴지는 글입니다.
내 이야기 같네요. 왜일까요?

아무튼 일단 블로그를 생성할 서버, 그리고 메일을 받을 수 있게 메일 서버 등을 만들어 봅시다.

힘냅시다.

덧. 구직 경험이 쌓이다 보니 역시 경력이 중요한게 아니고 경험이나 능력이 중요하구나 하는걸 다시 느끼게 되었습니다.

2015년 9월 2일 수요일

20150902 아... 부끄럽다.

앞으로 그래도 이력서 한 번 내보세요. 하는 곳에는 지원하지 말아야겠습니다.

부끄럽습니다. ^^*

그나저나, 상처를 지료해줄 사람 어디없나. ㅎㅎ
집에가서 마느님이 해주신 밥을 잡숴야겠네요.


근데 글 쓴 것들 보면 저도 인또 같네요.. 터넷 라이. ㅎㄷㄷ 조심해야지!

2015년 8월 31일 월요일

20150901 쉬고싶다.

아무것도 안하는 시니빈데, 에너지가 쭉 빨린 느낌입니다. 지난 주 갑자기 힘들더니 오늘까지 @_@;;

휴가를 가야하나...
그만 두고싶다.
다 놓고 싶다... 등등

많은 생각을 하다가도 결국 3시 반에 산책이나 가자...

글로는 표현 못하는 많은 감정들이...

쉬고 싶습니다. 안 선생님!

덧, 오늘 보낸 메일에 오늘 답장을 받을 줄이야. 제발 대박나세요! 감사합니다.

2015년 8월 23일 일요일

20150824 제발 불합격 통보를 좀 해주세요. ㅠㅠ

하루하루 말라가고 있습니다.
이력서 보낸지 대략 2주가 훌쩍 넘었는데,
불합격 통보가 온곳이 한 곳도 없습니다.

말라갑니다.

떡하니 1주일 내에 결과를 알려준다던 신생 스타텁은 3주가 다 되어가도 연락이 없네요.
미리 연락온 회사는 약속을 밥먹듯이 안지키질 않나...
참... 저혼자 약속에 목메고 사는 을인가 봅니다. ㅠㅠ

제발 희망 고문을 하지 말아주세요. ㅠㅠ
근데 저 혼자 이러는 듯. ㅎㅎ 정작 해당 회사는 제 이력서 버리고 신경끈지 오래겠죠? ㅠㅠ

아... 멋지게 성공하고 싶다. 에잇 더러웡 구직자 신세!

20150825. 하나 씩 오는 것 같다. 불합격 통보. 두둥!
20150827. 저 하나가 마지막인것인가....

2015년 8월 16일 일요일

20150817 광복절 맞이 GopherCon Korea 2015 아주 짧은 후기!

일단 누구나 예상할 수 있듯 엄청 일찍 도착했습니다.
준비 위원회? 분들은 밖에서 끽연을 하고 계셧구요... ㅎㅎ
그리고 내려가 화장실에 들렀다 입성! 무려 3, 4등을 했습니다.

Go라는 언어가 있다는 것을 알고 있었지만 어떤식으로 사용하시나, 어느정도 대중화 되어있나 등등 모든 것이 궁금했기에 삼성역으로 향했었고, 생각보다 적은 사람(연휴라서?)에 살짝 놀랬습니다. 그래도 대략 120~150명 정도 참여하지 않았나 싶습니다.

처음에는 GopherCon 2015 유툽 영상을 조금 보며 시간을 기다렸고(13시 시작) 사람들이 들어 차면서 약 13시 5분 즈음 시작했습니다. 일단 처음부터 제가 개인적으로 설레하는 외국에 다녀온 이야기를 들어서 굉장히 만족했습니다. 해외에서 Go는 어떤 위치이며 작년 컨퍼런스와 올해와의 비교 만났던 사람들에 대한 이야기들... 참 멋있다. 나도 참여하고 싶다는 생각이 마구마구 들었습니다.

그리고 다음 발표자 분은 Go로 서비스 하면서 주의해야 할 점을 GopherCon 2015 에서 사용된 슬라이드를 사용해 발표해 주셨습니다. 개인적으로 생각없이 갔다가 소기의 목적을 달성하게 된 계기가 되었습니다. 물론 문법의 이해가 없었고 그냥 듣기만 했습니다.
이러다 '듣기만 하기, 읽기만 하기'가 저의 전공이 될것 같습니다..ㅡ.ㅜ.

어쨋든 불의의 사고로 발이 너무나 아픈 관계로 3시간 밖에 참여하지 못하고 왔지만 그래도 즐거웠고 다음에는 아프지 않은 몸을 이끌고 즐겁게 참여하기로 마음을 먹고 집으로 돌아왔습니다.

그리고 신기하게 '라 스칼라 코딩단'의 TH님을 뵙게 되어서 마음의 안정을 약간 찾았습니다. ㅎㅎ 해맑게 웃으시며 인사해주셨는데, 저는 발이 아픈관계로 4가지 없이 앉아서 인사를... ㅠㅠ 말도 못해드리고, 다음에 라 스칼라 코딩단 가면 해명아닌 해명을 해야겠습니다.

그럼이제... untold를 들으러... 슉!

---
Untold를 다 들으니... 마치 드라마의 "다음 화에 계속됩니다." 느낌을...
절정에서 '안알랴줌'의 느낌이 들었습니다!
어쨋든 너무 자세하고 입문자도 알기 쉽게 상세히 설명 해주셔서 보는 것만으로도 유익하네요. 라고 쓰고 따라 해보지 않는 게으름... ㅠㅠ

그리고 페북에도 썻지만,
Frame work 라는 용어가 IT나 회계에서 어떤 의미로 사용되는지 최근 조금씩 감이 오는 것 같습니다.
정의(약속?)된 곳에 정해진(약속된?) 것을 넣으면 결과가 나온다! 이런 느낌이랄까?
여전히 와꾸가 안 잡히지만 재미있습니다. ㅎㅎ 와꾸라니... ㅋㅋㅋㅋㅋㅋ
어쨋거나 내일은 뭐 공부할 지 또 이너넷 세계를 탐방 해야겠습니다. 뿅!

개인적으로 KV LEE님같은 사수가 있었으면!!! 좋겠다~!는 생각!

2015년 8월 14일 금요일

20150815 쇼셜 넷웍을 꺼려하는 eu - 2탄!

아.. 역시나 사람이 많으면 보기 좋지 않은 글들이 매우 많네요...
지금은 GopherCon Korea 2015 가기 1시간 전입니당. ㅎㅎ

아.. 어디부터 시작해야 할까요...
요지(이쑤시...?!)는 신입이고 인턴이고를 싸잡아 비판하는 어느 유명한(?솔직히 유명한지는 모르겠고 기술좀 아는?) 개발자 이야기 인데... 생각이 많아야 할 나이인데 가르쳐 준것만 한다는 글을 봤고, 진짜 존나게 건방지다는 생각을 잠깐 해봤습니다. 본인은...? 그랬나? 그건 모르겠고~ 혹여 본인은 아니였어도 성급한 일반화 아닐까 하는... 신입 및 인턴의 입장에서 생각을...

저는 혹시라도 뛰어난(? 설마.?!) 개발자가 되면 저따위로 건방져 지지는 않기로 다짐했습니다. 물론 목표는 sosang횽이구요. 지금 다니는 회사에서도 느낀게 많지만 이번에도 느끼네요... 이러다 너무 느껴가지고 느끼해지는..ㅡ.,ㅡ

어쨋거나 저는 저런 사수가 있었으면 좋겠습니다. 가르쳐주고 걱정해주는 사수라니..ㅠㅠ
부럽다... 그 신입과 인턴들...

사람말은 둘다 들어봐야 하지만요! 어쨋든 그렇습니다. 오늘도 뿌직!

2015년 8월 13일 목요일

20150813 정신적 승리, 내가 소셜 넷웍을 꺼려하는 eu.

오늘은 정신적 승리를 거둬서 기쁜 날입니다.
뭔지는 안 알랴줌~ 아몰랑~!

어쨋거나,
이미 여러차례 홍역을 치룬 바 있는 넷 상의 저는 갱장히 말 많은 사람이고,
실제로 저는 말을 많이 하지는 않는 사람 같습니다.
생각을 하긴 하는데 굳이 입 밖으로 꺼내지 않는?!
아무튼 저런 이유는 미뤄두고
  1. 타인의 행복은 나를 초라하게 만든다.
  - 사실 저는 행복하게 잘 살고 있습니다만, 비교 대상이 행복한 모습들만 올리는 넷 상의 사진들이라면 참 비참해 집니다. 그런 느낌이 너무 싫습니다. ㅠㅠ

  2. (2*5) 소리를 쌍 바위골 사이로 싸 재끼는 게 아니고 두 순() 사이로 싸 지르는 부류가 너무나 꼴 듣기 싫습니다(뭐라고 쓴거지?).
  - 물론 자동 차단 대상이 되긴 하지만 그런 노력까지 해 가면서 걸러 내고 싶지도 않고, 1촌이 아닌 2촌 3촌인 경우... 아... 진정 No Answer!

그래서 오늘을 마지막으로 당분간 또 쇼셜 네트워크는 눈으로 핥는 것도 자제할 듯 합니다.
앞으로는 블로그에 일기도 좀 심도있고 통찰력 있는 글 들을 쓰도록 노력하고 싶기도 하다는 생각을 끝으로 퇴근까지 1시간 남았는데 직무유기라고 할 수 있지만 직무가 없어서 그냥 놀고있습니다... 에휴 공부나 해서 남이나 줘야지!

2015년 8월 1일 토요일

20150802 배워야 할 것이 너무 많아 행복하다!

^.ㅜ

2일간 자바 8 깊숙히 동영상을 보면서 참 이해가 깊은 사람들이 많다는 것을 또 알게 되었습니다. 단순히 '사용'에 촛점을 맞춘게 아니고 '이해'를 바탕으로 응용하는 방법을 더 배울 수 있었으면 좋겠습니다.

처음부터 많이 생각하고 다짐했지만, '나는 신입이 아니다.' 라는 생각을 계속 인지하며 생활하고 있습니다. 누구나 처음은 있겠지만, 나는 신입이니까 못해~ 아몰랑~ 뭐 이런 생각들은 안하려고 최대한 노력하고, 나도 나름 전문가다! 생각하고 행동하려고 노력하고 있습니다.

앞으로 어떤 방향으로 머리를 향할 지 확신할 수 없지만 그 방향도 좋은 방향이었으면 좋겠습니다.
지금 걸어온 발자취 만큼요.

덧. 웨비나는 온라인 세미나를 가르키는 말이었군요.

2015년 7월 28일 화요일

20150729 Tech Talk @ 판교 13회 후기 - 그루터, 아파치 타조!

이번에도 의례 그렇듯 가장 먼저 참석했습니다.;;

이번에는 jy이형의 옛 회사 그루터에서 정재화 수석님이 발표를 해주셨습니다.

사실 저는 빅데이라 같은걸 알기에는 너무나 꼬꼬마긴 하지만, 남는시간 뭐하나... 해서 그냥 멍때리고 앉아있더라도 참석하는걸 강행했습니다.

그루터는 아파치에서 지원하는 타조를 운영합니다.
기존의 관계형 디비처럼 쓸 수 있고 하둡처럼 빅데이터 처리에도 장점을 보인다고 합니다.
하둡과의 가장 큰 차이점은 테스트 환경을 구축하기 쉽다는 것인데 이런 장점을 가지고 있으면서도 속도도 빠르다고 합니다. 서버의 확장도 쉽고 이론상 몇 천대의 서버로 확장을 해도 무리가 없다고 합니다. 이미 SK에서는 500대 정도의 서버를 그루터의 타조를 이용해 운영한다고 합니다. 어떤 슬라이드를 보여주시며 타조(주)와 스파크(보고용)를 이용해 운영된 사례를 설명해주셨는데 외국인들은 믿지 않았다고 합니다.

어쨋든 지금 당장은 공부해볼 생각도 안나는 뷕 데이라! 사실 위에 쓴 내용도 1도 이해가 안갑니다; 그래도 IT세계가 어떻게 돌아가는지 SQL들의 이름도 들어보고 AWS위에서 운용하는 방법이 있다는 것도 알고 나름대로 쬐끔은 건질 수 있었다고 생각합니다.

저도 언젠가 원하는 세미나에서 발표자가 말하는 대부분의 것들을 이해할 날이 오겠죠?!

2015년 7월 25일 토요일

20150725 아... 자기?소개서?에 왠지 잘못쓴게....

지각을 해도 업무시간에 쇼핑을 해도 할당된 휴가를  쓰고 아프다고늦잠 잤다고 나오지 않아도 여름 휴가를 위해 2일을  주고 아무튼 자유롭습니다물론 야근도 절대로 없습니다. 6 5분 즈음 회사 사람들을 찾으려고 하면 보통은 없습니다.

저는 지각을 싫어합니다. ㅡ.ㅜ
쇼핑도 홈플러x 가서 장보는 것만 좋아하구요.
휴가를 다 쓰지도 않았고,
늦잠 잤다고 지각하지도 않구요,
물론, 휴가를 다 쓰지 않았기 때문에 휴가를 다 쓴 사람들이 받는 추가 휴가도 못받구요...ㅠㅠ
야간에 남아서 업무를 한 적도 없습니다. 그냥 저녁 먹고 삐대면서 책이나 한자 볼까 했던게 있을 뿐...

쓰고보니 저 3줄은 제가 그랬다는 것 처럼 써버렸네요...
앞으로 바꿔서 써야겠어요!

2015년 7월 24일 금요일

20150724 월급 밀리는 회사.

개인적으로 월급은 빚내서라도 줘야한다 라고 생각하는 주의입니다.
사업을 안해본 시닙이라서 그럴 수 있습니다.

최근에 몇 달째 월급을 밀리고 있습니다.

얼마 전, 월급 받아야 하는 최소 퍼센트(금액)을 적어 내랍니다.
100% 적어 냈습니다. 솔직히 연봉 2200... 월급 얼마나 됩니까?
입금 100만원.

저는 분명히 100% 적어 냈는데, 100만원... ^^;
메일로 하는 말은 급전이 필요하신 분 위주로 먼저 줬다.

음... 모든 이야기는 양쪽 말 다 들어봐야 한다지만.
아... 참...

거... 진짜 좀 그렇네요.

경력 1년 만들기 힘드네요...

아... 진짜... 술이나 먹어야지... 수박, 변신, 자랑.

자... 월급이 밀리는 순간 이직준비들 하세요.

2015년 7월 21일 화요일

20150722 뭘 해야되나?

남는 시간은 아니지만 요즘 남는 시간에 뭘 해야 할지 초조해 지고있습니다.

이를테면,
9시 출근인데 7시 50분에 도착하면 뭘 하지?
6시 퇴근인데 7시에 퇴근 할 예정인디 1시간 동안 뭐 하지?

물론 밥을 먹긴 합니다;; ㅋ

어느덧 입사한지 10개월이 훨씬 넘었는데, 초반 1주일 길이 익숙치 않아 이길 저길 이 버스 저 버스 타보면서 지각 1회를 경험한 후로 애지간하면 일찍오기로 마음먹고 남들보다 이른 출근을 하고 있습니다.
물론 회사에서 살고 계시는 듯한 다른 회사 분(7시 40분에 와도 자리에 계심 -_-)을 제외하곤 보통 회사 문을 처음으로 열고 들어옵니다.

안그래도 최근 이런 불안감이 불안한 행동으로 표출되어 스프링 부트, 노드js, iojs 번역 등 약간 일관되지 못하게 중구난방으로 공부?를 하고 있는데, 뭔가 방향을 잡아줄 맨토나 한 줄기 빛과 소금이 필요한데 일단은 혼자니까 혼자 생각해야 되는데 선택장애가 있는듯 해서 그게 참 어렵습니다.

더 큰 문제는 당장 맡고 있는 일이 없으니, 알고리즘을 공부하고 있긴 한데...
뭐...

일단, 멘토를 찾고 멘토가 하는걸 따라하고 싶은 요즘입니다. 저는 너무 뒤늦게 뛰어들었고 내공도 없으니 보고 배우고, 뭐 ... 암튼.

이직 생각도 간간히 하다보니... 그리고 병원을 매일 들락날락하니...
뭔가 날씨도 꾸리한게
힘든 7월이네요.

2015년 7월 17일 금요일

20150717 아무리 곱씹어 봐도... 내가 이력서를 삐딱하게 쓴 이유.

솔직히.
합류할 수 있다면 합류하고 싶습니다.
현재 논란이 많은 그 부분은 신경쓰지 않습니다.
내 기술을 위해서는 그 정도 욕은 먹을 수 있습니다.

그런데,

입사 지원을 하기위해 웹에 접속을 했습니다.
항목이 참...
뭐라 할말이... 갑자기 의욕이 조금 떨어지더군요.
하지만 썻습니다. 왜냐면 저는 기술쟁이가 되기로 마음먹었기 때문입니다.

앞으로,

이력서 형식이 이상하게 정해진 곳은 다시는 지원하지 않을 생각입니다.
생각입니다. 생각... 할 수 있죠 ㅎㅎ

어쨋든...
저는 갑입니다. 제가 회사를 고르는 입장입니다.
회사도 사람을 고르겠지만 저도 마찬가집니다.
라는 생각을 좀 하고 살아야 하는데 결국 저는 약자이고 함께 살아야 하는 마느님과... 아...ㅠㅠ 눈에서 땀이.

아몰랑!

2015년 7월 16일 목요일

20150717 멘붕

근 1주일간 알고라이듬과 씨름을 했습니다.
풀리지 않습니다.

머리 좋은 사람들이 너무나 부럽습니다.
그냥 눈으로 딱 보면 보이는 걸 왜 컴퓨타를 시키면 지 맘대로 움직이는 걸까요?
아... 진짜 힘드네요. 머리 좋은 사람이 부럽습니다!

오기도 사라져 가는 알고리즘! 에잇!

2015년 7월 15일 수요일

20150715 건강, 피키캐스트

병원은 정말 안 좋아하는 공간 중 한 공간입니다. 병문안 생각에 심장도 벌렁벌렁...ㅠㅠ
제발 탈 없이 퇴원하셔서 금방 회복하셨으면 좋겠습니다.
모두들 건강했으면 좋겠습니다.

---

합류하고 싶은 피키캐스트.
성의도 없고, 별볼일도 없는 특별하지도 않고 평범하지도 않은 이상한 나라의 엘리스같은 나지만 욕심이 나긴 합니다.
뭐 저는 마음이 곱지 않아 100퍼센트 만족을 모르긴 하지만, 화살은 이미 날아갔고, 과녁과는 조금 멀리 떨어진 곳에 떨어지지 않을까 생각하는 이상한 헛소리를 12시가 다 되니 졸려서 그런것 같습니다.

그럼.
2만 빠2.

2015년 7월 13일 월요일

20150713 Spring Boot 교육 후기 및 근황

사실 누가 보는지도 모르고
근황을 알릴 사람 하나 없는 인간인데! 왜 남기고 있나 싶습니다만...
각설하고.

2015.07.11일(토) 로또 및 당첨 복이 별로 없는 저는 아주 우연하게 Spring boot 교육 대상자에 선정 됩니다. 수십대 일의 경쟁률을 뚫고 당첨이 되었습니다.

핸즈온랩, KSUG 박용권님이 진행해 주셨고 스텝 분들도 진행에 도움을 주셨습니다. 다시 한 번 모든분들에게 감사드립니다.

Spring을 학원 교육 받을 때 잠깐 듣고 이게 뭔가... 인터페이스는 왜 사용하는 건가... 뭐 하나도 모르고 졸업 후 입사. 앞으로 스프링을 쓸 일이 있을지도 모르지만 일단 무슨 기술인지 어떤 것들인지 듣고싶어 참석했습니다.

대부분이 신입~2년차? 정도 되었던 것 같습니다.
가장 기억하고 싶은건 RESTful과 JPA를 구경하고 왔다는 것입니다.
가끔 공부를 할 때, 혹은 인터넷 글을 읽을 때에 잘 읽히지 않고 누가 설명해줬으면 좋겠다 하는 아주 궁금한 개념을 실습을 통해 그리고 라이브 코딩을 통해 잘 일견하고 왔다고 생각합니다.

Node.js도 살포시 경험하고 있는데 대체적으로 요즘 프레임워크는 경량화에 단순화를 목표로 매진하는 것 같은 느낌을 많이 받았습니다. JPA에 대해서는 매우 놀랬구요.

그리고 사실 Json을 많이 사용해 보지 않았는데, 제가 경험한 몇몇 강의에서 Json을 이용했습니다. 그리고 Json을 이용하여 데이터(String)을 주고 받음으로 써 서버의 할 일이 끝난다고 표현을 많이 하시던데 (물론 게시판 예제) 좀 더 경험을 하고 코딩을 해 봐야 알것같습니다. 어떤 느낌인지는 한번 핥았는데 씹어보고 뜯어보고 해야 좋을것 같습니다.

끝으로, 진지하게 박용권님의 팬이 되었습니다.

요즘에는 자그마한 알고리즘을 작성하고 있는데... 저에게는 갱장히 까다롭구,
설계의 중요성 이랄지... 두뇌의 명석함을 탓하는 일도 많고, 재미도 있고 머리도 아프고 시간이 마구 지나갑니다.

제일 걱정되는건 눈 건강입니다. 매일 10분 : 50분으로 쉬고 모니터보고를 반복해야지 다짐하면서 정신차리면 밥 먹을 시간이고 정신차리면 집에 갈 시간입니다... 좋아해야 하는건지... 좀 더 똑똑해져서 시간을 더 많이 활용하고 싶은데... ㅎㅎ

그리고 영어 공부도 다시 처음부터 진득하게 시작할 예정?입니다.
지금까지는 매번 뭐 동명사가 어쩌고 주어 목적어가 어쩌고 이런말 배우기도 쓰기도 싫어서 공부를 열심히 안하고 중구난방으로 주먹구구로 살았는데, 좀 체계적이여야지 않나 싶기도 합니다. 물론 또 미드나 몇 화 보고 말겠지만요.

올 남은 하반기도 제가 아는 저를 아는 모든 사람들이 무탈하면 좋겠습니다.

---0714
1. 상황이 좋지는 않지만. 제발 무탈하셨으면 좋겠습니다...
2. 또 결정장애의 한심함이... 최대한 기초, 기본을 쌓아야겠습니다.

하아... 오랫만에 끽연생각이.

2015년 6월 19일 금요일

20150620 Mikeal Rogers로부터 Nodejs organization에 초대 받다!

뭔가 거창한것 같지만,
저처럼 먼지만큼의 관심과 기여?가 있다면 모두 초대하는게 아닐까.. 하는 추측을 하고 있습니다.

 Mikeal Rogers는 iojs로 분사?해 나왔을 때부터 구심점 역할을 하고 iojs를 위해 대외로도 많이 활동한 사람이라고 생각하고 있습니다.
일종의 수장이랄지... 솔까말 잘 모르겠습니다;;

뭔가 신기해서 스샷까지 넣어가며 포스팅을 해 보겠습니다...만,
이번 번역에 참여하면서
깃허브를 배우면서
많은 도움을 받았음에도 불구하고
뭔가 제 생각대로 안되고
남들과 똑같은 결과가 나오지 않는 이유는 아직 잘 모르기에
포크했던 레파지토리를 지우고 새로 포크한 슬픈 현실이
나를 슬프게 하는 현실들...
은 각설 하고,

이 이야기는 한 통의 메일로부터 시작하빈다.
초대 메일이...!!!

링크로 가서 사실인지 확인!

고민이 뭔가요? 먹는 건가요?!

사실 이런걸 가지고 뭐 포스팅이냐 할 수 있지만
저는 첨이라 신기하고 기억속에 남기고 기록으로도 남기고 싶어 포스팅 해봅니다.

그리고 언젠가 홈피를 하나 만들어서 글들을 이사시킬 때 또 한번 기억나지 않을까... 하는 생각도 들기도 한다고 생각합니다.

쨋던 즐거운 주말 + 월요일 휴가를 즐겨보러 20000! ㅎ ㅔㅎ ㅔ

2015년 6월 11일 목요일

20150612 이클립스 단축키 & 모든 java 소스파일에서 원하는 문자열 찾기

이클립스 단축키를 자주 까잡숴서 아예 글을 써봅니다.
preference -> general -> keys 에 단축키가 정리되어 있습니다.

모든 java 소스파일에서 원하는 문자열 찾기
예를들어 로그에
this is (    )...
이런식으로 this is 라는 구문은 확실히 사용되는데 어디서 로그를 찍는지 모르겠다!
그럼 아무 파일에 this is 를 써 넣고 블럭을 잡은 후 ctrl + alt + G 를 누르면 찾아줍니다.
좋습니다. ㅎ ㅔㅎ ㅔ

2015년 6월 5일 금요일

20150605 메르스, 감기, 숙주

아... 제발 감기 걸린 사람들...
입 좀 가리고 남한테 기침의 영향이 있겠다 싶으면 알아서 바닥으로 쏘던가 합시다...

뒷통수에 맞았더니 바로 감기 걸림...(직접적 영향은 아니더라도.)

모두 감기 걸린사람 조심합시다.
메르스는 더 위험하구요.

한국이 이 사태가 지날 동안 멈췄으면 좋겠네요.

물론 그 시기에 위에서 닭똥같은 눈물을 흘리는 10조류들은 다 사라졌으면 좋겠고요.

이민이 답이다! 이민가자! ㅠㅠ

2015년 5월 21일 목요일

20150522 스칼라, 리버싱 핵심원리...

스칼라 저자 특강도 봐야하고,
Programming in Scala도 봐야하고,
이번에 갑자기 궁금해진 리버싱이란 분야?에 좋다는 책 리버싱 핵심원리도 샀고,
아이고,
할 일 많고!
시간 없고!
의지 없고!

2015년 5월 18일 월요일

20150518 두 번째 번역!과 Pull Request Can't automatically merge??

http://nodejs.github.io/iojs-ko/articles/2015/05/15/Growing-Up/

두 번째 번역을 마쳤습니다. 뿌듯 합니다.
근데 iojs와 nodejs가 곧 합칠거여서 약간은 애매한 시기에 번역을;;
어쨋든 기술적인건 잘 모르지만 앞으로 관심을 가져보도록 해야겠습니다.

그리고,

머지를 하는 도중에 컨플릭트가 발생했는데,
이를 해결하는 방법을

http://blog.michelemattioni.me/2013/01/29/what-do-i-do-when-my-pull-request-does-not-merge-automatically-in-master/
여기서 참조했지만.....

결국 marocchino 님이 원격?으로 해결해주심 ㅎㅎ
강제로 헤드를 옮기고 다시 머지하는 과정을 도와주셨습니다.

1. upstream/master 를 최신으로
2. 나의 마스터 브랜치로 이동
3. upstream/master랑 merge(개발을 할 때는 항상 새로운 브랜치를 생성해서 개발합시다)
4. 나의 feature 브랜치로 이동(개발 브랜치)
5. 나의 마스터 브랜치를 머지 (feature 브랜치 속으로)
6. 충돌 해결 (solve all the conflicts: this is where you decide how to integrate the conflicting files, and this can be done only by you because you know what you did, you can figure out what happened in master, and pick the best way to integrate them.)
7. 충돌 해결 후 모두 커밋
8. 내 origin으로 개발 브랜치 푸쉬: 풀 리퀘스트가 자동으로 반영 될 것임

뭐 이런 순서라고 합니다.

2015년 5월 17일 일요일

20150517 깃 허브 이용시 다른 사용자와 같은 부분을 수정해 충돌이 일어난 상황!~

깃 허브 이용시 다른 사용자와 같은 부분을 수정해 충돌이 일어난 경우
이렇게 해결 했습니다.

리베이스로 해결한 방법.
먼저 최신 remote 브랜치랑 제 작업이 끝난 브랜치를 리베이스한 후 푸시

사실 그림과 함께 기록해야 하는데;
워낙 순식간이라 기억을 더듬어..
다음에 비슷한 상황이 나와도 또 어리버리하겠... ㅡ.ㅜ

2015년 5월 15일 금요일

20150516 오픈소스 계속 참여하기

1. 먼저 포크를 한다.
2. 수정을 한다.
3. 커밋 & 푸쉬
4. 풀 리퀘스트

여기까지가 제가 아는 전부였고, 이 후로 계속 활동하고 싶었습니다.
다른 사람이 풀 리퀘스트한 것을 저도 반영하고,
저 또한 수정을 하고 다시 풀 리퀘스트하는 그런 순환적인 순환을 기대했습니다만,
할 줄을 모르니 또 iojs에 질문을 했습니다(지금 참여하고 있는 번역 오픈소스?).

다행이도 marocchino님이 친절하게 설명해주셔서
콘솔 명령 -> 이클립스로 해석하기 를 시전했고, 성공적으로 다른 사람의 수정사항을 저에게도 반영할 수 있었습니다.

marocchino님이 알려주신 방법
git checkout master
git remote add nodejs git@github.com:nodejs/iojs-ko.git
git pull nodejs master
git push origin master

을 토대로 저는 이클립스에서
리모트의 fetch from 메뉴에서 다시 custom uri - iojs의 주소를 써 넣었습니다.
이후 로컬과 머지(혹은 리베이스)하고 로컬과 싱크로나이즈 했습니다.

덕분에 오늘도 깃에대해 하나 더 알게 되었습니다. ㅎ ㅔㅎ ㅔ

2015년 5월 14일 목요일

20150515 두 번째 구글 피드백

구글 피드백이 은근히 보내기 힘들면서 피드백의 피드백도 없는듯?!;;

오늘은 그냥 일반 의견

www.google.com 을 들어가면 오늘 스승의 날이라 칠판에 수학 식을 써놓고 풀어가는데 보통 5(2) 라고 안쓰고 5 x 2 정도로 쓰지 않나요?
일반적인 의견을 보내봅니다. 즐거운 하루 되세요!

라고 보내봄. ㅎㅎ

올해 안엔 보겠지? ㅡ.ㅜ

20150515 Fusetools!

처음 영어 발표자가 발표한 영어 발표를 들었다?! ㅎㅎ

Fuse의 CEO anders님의 Fusetools의 히스토리와 특징 및 라이브 코딩까지!
물론 영어라서 그냥 남들 웃을 때 웃고 박수칠 때 박수치고 그랬지만, 내가 소화할 수 없는 영역의 것들이여서 멍때린 느낌?!

어쨋거나 좋은 경험이니 앞으로도 쭈욱!

기억나는 몇가지
Uno = C# - .net
유노 (제 생각에는 you know? 에서 오지 않았을까? 하는 ㅋ)라는 언어를 맹글었는데
샤프하게 볼 수있는 것에서 점 4개를 뺀 언어라고 합니다.

유노를 이용해서 서브라임 텍스트(IDE)에서 라이브 코딩을 했는데 Fuse만의 IDE를 만들 계획은 없다고 합니다. 대신 플러그인을 쓸 수 있게 한다고 합니다(혹은 만들어서 기부해주세요?).

쨋던 Uno로 xml?을 코딩하면 알아서 android나 ios 등에 맞춰 c++코드로 변형되고 실행된다고 했던것 같은데 오래되고 영어라 ㄱ이 1도 안납니다.

그리고 Fuse는 OpenGL?의 도사들이 많아서 기기의 베터리 소비나 효율 등이 운영체제가 소비 하는 만큼만 아주 쬐끔 적절하게?  암튼 그렇다고 합니다.

쨋던 후기를 아주 잘 쓰신분이 계시기 때문에 그 분 블로그를 보시면 더 정확히 알 수 있으실 것 같고,

https://www.youtube.com/channel/UCPizp_2dBkLlXRFnbieG3Qw
이 곳을 참조하셔도 좋을 것 같습니다.

가슴을 설레게 하는 시간을 보낸 것 같네요!


2015년 5월 12일 화요일

20150513 오픈소스 참여 그 두번째

이 번에는 블로그 글 번역을 시도하는데,

처음 주간 소식 번역의 난이도의 10배 쯤은 어려운 듯 합니다.
저는 우리말도, 영어도 능숙하지 못하기 때문에... 난항이 예상되지만.

도전! 중 입니다!

20150513 저자 특강 청강중! Functional Programming Principles 2주차

지난 주, 라스칼라 코딩단의 태환님이 알려주신 저자 특강!
Functional Programming Principles in Scala
with Martin Odersky
저자 특강을 청강하고 있습니다.

책을 읽었는데도 수업 내용을 잘 못따라 가는 eu는 아마도 english때문일 꺼라고
강하게 추측해 봅니다.
Defining and using functions, recursion and non-termination, working with functions as values, reasoning by reduction. 
1주차에는 기냥? 기본 환경 설정
2주차에는 함수를 정의하고 다루는 법과 재귀의 방법 및 call by name 과 call by value의 차이점 등을 설명합니다.

2주차 까지 봤는데 동영상 재생 시간보다 두배는 봐야 그나마 따라가는 시늉이라도 된다는 불편한 진실이....ㅠㅠ

2015년 5월 7일 목요일

20150508 iojs 한국 커뮤니티

http://iojs.github.io/iojs-ko/

뭔가 첫 참여(미미하지만 ^^;)한 느낌이 좋다!(5/1)

2015년 5월 6일 수요일

20150507 SWT, JFACE를 이용한 tableviewer를 excel 파일로 내보내기

http://stackoverflow.com/questions/13988909/exporting-swt-table-data-to-a-excel-spreadsheet
이 글을 참조했는데,

1. 시트의 이름은 겹치지 말자.
2. 시트의 이름에는 길이 제한이 있다.
정도는 신경써야 할 것 같다.

20150506 오픈소스 참여하기(깃허브) #2

지금까지 한 작업.
  1. 일단 프로젝트를 포크해서 클론을 했습니다.
  2. 클론을 한 후 작업을 위한 브랜치를 새로 만들었습니다.
  3. 업데이트를 위해 파일을 만들고 수정 했습니다.
  4. 파일 작성을 완료했습니다.
앞으로 할 예정인 것들은
  1. 커밋 & 푸쉬 -> 풀 리퀘스트
  2. 다른 분들의 리뷰(?)를 반영한다.
  3. 리뷰를 계속 반영해 커밋 & 푸쉬를 한다(자동으로 풀 리퀘스트된 브랜치에 업데이트가 됨).

오픈소스를 무작정 참여해보고 싶었는데, 방법을 몰라 조금씩 저장하고 있습니다.
뭐 ... 모르면 물어물어 해결하자 생각한 게 주효한 방법인듯합니다.

2015년 4월 29일 수요일

20150430 GDG 서울 4월 정기 밋업 후기!

나는 길치가 되었다...

사실 나는 고등학교 때 배달의 민족이였고,
이 때문에 방향 감각이나 지도 읽기, 주소로 집 찾기 등이 매우 발달했다고 믿고 있었다.
근데 최근 몇 번의 건물 찾기에 한 번에 찾기를 실패했고, 종로에서 종묘를 어떻게 가냐고
묻는 외국인에게 큰 실수를 했다.
내가 알려준 방법대로 가면 월담을 해서 들어가야 하는 불상사가...ㅠㅠ
나는 입구가 알려줬어야 한다는 생각을 못한채 지도에서 보이는데로 알려주기만 했던...
아... 생각하기 싫다.

어쨋거나 이번에도 어두룩 컴컴한 길눈 덕분에 5분 늦을껄 30분이나 늦어버렸다.

첫 세션의 발표자분이 발표하시는 건 거의 듣지도 못하고 며루치 삼각김밥을 신나게 먹었다.
세미나나 모임을 많이 나간건 아니지만 아직까지 구글의 정기 모임이 제일 좋다.
첫 참석때는 무려 서브웨이!!! 그 이후로도 꾸준히 삼각김밥을 제공하고 있는데
생각해보니 삼각김밥이 아니고 오니기리? 뭐 그런거 인듯한데 암튼 먹을걸 줘서 좋다!ㅎㅎ

그리고 다음 세션부터 sosang횽과 함께 앉아 나머지 발표를 듣게 되었다.

두 번째 발표는 에버노트팀 한국지사의 마케팅 담당자분이었다.
내가 늦게가서 그분 옆옆옆?! 자리에서 삼각김밥을 먹으면서 와... 저 여자분도 뭔가 발표하시나보다
하고 생각했었다. ppt같은것을 켜놓고 계셨기 때문이고, 알고보니 그 옆에 두 분도 에버노트팀!
내 옆에 앉았던 분은 노트북을 꺼냇는데 맥북! 어떤 케릭터가 사과를 먹는 모양으로 스티카를 붙이신..
머 어쨋거나 발표도 참 재밌게 잘 하셧다.
에버노트의 한국지사엔 4명의 직원이 있는데 굉장히 후리하게 일하신다고..
생각나는 것은
  - 비록 4명이지만 우리를 믿어주기 때문에 업무공간도 어느정도 후리하게 업무도 어느정도 후리하게 함
이런 느낌이다.

지금 내가 있는곳은 사내망으로 연결되어 있어서 아마도 외부에서 일할 수 없는 구조가
아닐까 생각한다. 여기서 일을 해본적이 없어서 모르겠다 -_-... 6개월이 지났...

어쨋거나 마지막 발표는 한국 최초의 구글 엔지니어분이 하셨는데
많이 유익했다. 여기서도 마찬가지로 비슷한 느낌을 받은게
  - 할당된 업무는 무조껀 잘하자
이런 느낌?! 그럼 그 외에 자유를 얻을 수 있다.. 뭐 이런 느낌이었다.
그리고 한국의 생태계?와 실리콘 벨리의 생태계?를 농사와 야생 숲?으로 빗대어 말씀 하셨는데
어느정도 공감하면서도 공감하지 못하는 꽁기꽁기한 느낌이 들었다.
가장 기저에 있는 애매함은 내가 한국에서도 실리콘 밸리에서도 사회의 일원으로 그리고
회사의 일원으로 부딪쳐 본적이 없기 때문이 아닐까 싶다.

끝으로,
몇몇 블로거들을 보면 부러움반 자격지심반이라 슬프긴 한데 글들을 보며 드는 생각은
본인들의 환경이 나쁘지 않았음에도 심지어 좋았음에도 본인들은 그걸 모르는지 무시하는지 
누릴대로 누려놓고 입바른 선비소리를 해대는 것이다.
그러다가도 내 생각에 나를 부러워 하는 사람들도 있을까? 하며
위, 아래, 위, 위, 아래 를 생각해 보면서 역시 나의 그릇은 참 좁다는 생각으로 끝을 마쳤다.

나는 하루빨리 그분의 글들을 읽고싶다.
정말 밑바닥에서 아무 재능없이, 학연, 지연, 혈연 없이 본인의 힘으로 자수성가한.
그런 분의 글...

20150430 오픈소스 참여하기(깃허브) #1

나는 어떤 오픈 소스든지 초반에 참여하길 원했다.
하지만 내 기술적 지식이나 기술의 이해도가 낮다고 판단해서 한동안 보류했었다.

그리고 한참 시간이 흘러 최근에 아웃사이더님의 블로그를 구경하던 중
iojs에 관한 사항들을 번역한다는 글을 읽고서
영어와 기술이 쪼렙이지만서도 무식하면 용감하다고 도전해보기로 했다.
물론 맨땅에 헤딩!

어쨋든 이런 식으로 뭔가 참여할 꺼리를 찾게 되었다.

깃허브 주소로 들어가서 참여 의사를 표현했고, 거의 곧 바로 참여할 수 있었다.
일단 깃 허브의 방에 들어가긴 했다.
이제 참여를 해야 하는데 그 방법이 참 궁금했다.

얼마 전 나는 이런 요지의 글을 읽었다.
  - 오픈소스 참여 후 바로 풀 리퀘스트를 하는 행동은 예의에 어긋난것 같다.

사실 내가 깃을 쬐끔 공부했을 때의 흐름은 이랬다.
  - 포크(내 경우엔 클론) -> 수정 -> 커밋 & 푸쉬
내가 공부했을 때 풀 리퀘스트는 어디에도 없었다...ㅠㅠ

그래서 또 온라인이라고 쫄지않고 무작정 아웃사이더님께 궁금한 것을 물어봤다.
일면부지에게 아주 친절한 답변을 보내주셨고 내가 이해한 내용은
  - 수정부분을 커밋, 푸쉬 한 후 "수정부분을 반영해 주세요" 라는 요청이 풀 리퀘스트 입니다.

아! 그래서 리퀘스트구나... ㅎㅎ 라고 생각했다.

어쨋거나 이제 참여할 일만 남았다.
근데 또 참여를 하긴 하는데 새로운 그룹에 들어갔으므로 그 그룹에 맞는 양식으로
무언가 작업을 해야 한다...

이건 차츰차츰 또 물어가며 배워야지...
데헷 ㅎ ㅔㅎ ㅔ -ㅅ-!

2015년 4월 20일 월요일

20150421 JAVA로 짠 채팅 프로그램(저도 초보라...)

github에 올렸습니다.
https://github.com/freenice12/ChatRoomForJAVABeginner

뭐 그냥 참고정도로 보셔야 합니다.

나름대로 열심히 하긴 했지만 초, 중, 고수들의 눈에는
저걸 왜 저렇게...?
라는 의문이 가득할 것 같네요..

아무튼! 그렇습니다. 저도 첨 만들어 본거라! ㅎㅎ

소스를 받으신 후 안되면 되게! ㅎㅎ
채팅 프로그램에 대한 몇 가지 잡담들은 이미 게시해둔 글들을 보심 알 수 있습니다.

마지막으로 적용한게 db적용이라  ㅎㅎ 걷어내셔도 되구요.

2015년 4월 7일 화요일

20150408 디자인 패턴, 잘 적용해 신기한 경험을!!

학원에서 수련할 때, 디자인 패턴이란게 있더란다~ 라고 이야길 들은 기억이 있었다.
어렴풋이 그 때 기억을 더듬어 몇 달전 헤드퍼스트 디자인 패턴을 한 번 읽었다.

많은 디자인 패턴들을 이야기 하고 있고, 완전히 이해하긴 힘들구나... 하고 생각했는데,
이번에 1인 프로젝트를 하면서 몇몇 패턴들을 사용할 기회가 있었다.

물론 완벽히 구현해 내지 못했겠지만,
기억에 남는 두 가지 패턴에 대해 곱씹어 본다.

1. 옵저버 패턴
  옵저버 패턴의 경우 HF(헤드 퍼스트)에서는 기상 관측소에서 데이터 변화가 있을 때 마다
데이터 변화가 궁금한 옵저버들에게 데이터변화를 알려준다(수치도 함께).
이때 관측소는 주제(subject)가 된다.

나도 마찬가지로 옵저버 패턴을 구현하려 했는데,
사실 데이터의 변화에 따른 데이터 값 갱신을 목표로 하는 프로젝트가 아니어서
조금 애매하게 구현을 했다.
옵저버 패턴에는 객체가 데이터를 보내주능 방법과 옵저버가 데이터를 가져가는 방법
두 가지가 있는데, 나는 보내주는 방법을 사용한 것 같다...?!

그리고 양쪽에서 서로 객체가 될 수 있는 상황이 발생했기 때문에
그리고 옵저버도 자동으로 등록하고 싶어 일종의 전략(Strategy) 패턴도 구사 해 봤으나
뭐 그럭저럭 구사된 듯 하다.

사람들이 이야기 하길(혹은 책에서) 디자인 패턴은 수 많은 사람들의 고민의 공통적인
부분을 일반화해서 해결하려 했기 때문에 내 상황에 맞춰 구현하기도 까다로우며
이해하기 또한 쉽지는 않다고 카더라...
그래서 최초의 목표는 이런게 있구나 하고 알고, 대충 이해하고 넘어가는 것이었고
나쁘지 않은 생각 같았다.

2. 싱글톤 패턴
  학원에서 선생님의 말을 기억해 더듬어(*-_-*) 보면 일종의 셋팅 객체(?)
즉, 상태를 저장하는 변수가 여기저기 난립해 있다면 항상 같은 상태를 보여줄 수 없기
때문에 이러한 상태를 저장하는 객체는 프로그램상에 하나만 있어야 한다! 라고
말씀해 주신것 같다. 라고 생각한다.

이번에 싱글톤을 구현하면서 멍충이처럼 잘못 구현해서
이 객체를 호출할 때 마다 매번 데이터를 읽어오는 불상사가 발생했다.
원래의 의도는 싱글톤 객체가 생성될 때, 데이터를 가지고 있고 나는 그 데이터를
읽어서 불러오는게 아니라 그냥 부르기만 하면 되도록(무슨 소리지?) 구현하고 싶었다.

결과적으로 객체를 호출할 때 마다 부르는 잘못된 경우에는
프로그램 실행 시 '이게 언제 다 불러와서 화면에 보여주려나...' 라는 생각을 해야 했다면
싱글톤을 제대로 구현한 경우는 '이게...' 라고 생각한 순간 화면에 출력된 경험을 할 수
있었다.

구체적인 시간을 측정하지는 않았지만, 이 글을 쓰면서 게을러지기 싫어
직접 측정한 뒤 시간을 쓴 후 글을 마무리 지어야겠다.

System.currentTimeMillis();를 이용해 측정
이상한 싱글톤(3494)
싱글톤(402)

이정도면 뭐... ㅎㅎ 신기한 경험!


암튼...

난 논리적이지도, 똑똑하지도 않기 때문에 앞으로도 삽질을 많이 하겠지만...
원숭이처럼 까먹지 않고 기억을 계속 해 낸다면 좋겠다.

2015년 4월 2일 목요일

20150403 TechTalk@판교, GDG Seoul 정기 모임 후기.

기술자(?)의 삶을 시작하면서 가장 먼저 갔던 모임은 GDG seoul 모임이다.

사실 그 때나 지금이나 연사님들이 말하는 내용을 제대로 이해하지는 못한다.
근데 그 모임의 냄새가 좋다.

나같은 뉴비부터 기골이 장대한 올드비까지...
모임에는 수많은 사람들이 참여하는 것 같다.
내가 가장 좋아하는 부분은 바로 간식(?)을 제공해 주는 것이다.
IT 깡패 구글이 멋있게 보였다! ㅎㅎ

각설하고 먼저 테크타크엣판교 부터 간략하게 되 짚어보면...
생각했던 것보다 사람이 적었던 모임이었다.
sosang횽의 제안으로 급 참여하게 되었고, 주최자가 다름아닌 자바 챔피언(깡패?)
양수열님 이였다. JY횽이나 sosang횽에게 이야기를 몇 번 들어서 얼굴을 뵙고자
갔던것 같다.

물론 가장 중요한건 sosang횽의 제안이었기 때문이다. 오랫동안 만나지 못하기도 했고...

일단 모임의 주제는 창업 관련된 이야기 였던듯. 연사님도 굉장히 저명하시고
스타트업 영역에서는 대부분 알고 계신분인듯 하다.
물론 나는 뉴비이기 때문에, 그분을 알지도, 내용을 잘 이해하기도 쉽지 않았다.

sosang횽과 나는 이야길 들은 후 각자 다른 결론을 내렸는데,
'대학생들 상대로 했어야 하는 강의(?)다.' 와
'학무모를 대상으로 했어야 한다.' 는 결론으로 갈렸다.

근데 지금와서 종합해보면 우리 둘다 대상은 아니였던듯?! ㅎㅎ

가장 기억에 남는 말은 "중국은 우리가 따라잡아야 할 대상이 되었다."인데,
중국어를 계속 공부할 껄 하는 아쉬움이 째끔 남았다. ㅎㅎ

뒷풀이(?)에서도 한 스타트업의 대표님을 만났는데, 굉장히 유쾌하신 분이셨다.
짐짓 '싸이코 론'을 강의 하시면서 너도 나도 쟤도 싸이코들이라는 이야길 하셧는데
너무나 재밌었고, 충분히 공감할 수 있는 내용도 있었다.

아. 그리고 이날 뵜던 분중 개발자 2분을 다음날 있던 GDG seoul 모임에서 뵌것 같다.
하지만 나는 용기가 없었... 던 것도 있고, 타이밍도 잘 맞지 않아서 인사는 못드렸다.
이럴 때 대처를 잘 못하는 게 선천적 선택장애 덕택이 아닐까 싶다. ㅎㅎ

쨋던, 그 이튿날 저녁 회사에서 칼퇴란 무엇인가?를 몸소 실천한 후 바로 GDG seoul
모임으로 달려갔다. 덕분에 늦지 않고 5~10분 정도 일찍 도착할 수 있었다.

두번째 모임이라 그런지 처음보다 많이 편안하게 행동했던 것 같다.
모임의 주최이신(레진 코믹스 다니시는듯?) 분을 기억해 내고 제대로 찾아온 것을
확신한 후 주먹밥(첫 모임땐 써브웨이!!!!) 4개를(약을 먹어야 했다.^^)섭취했다.

이번에도 3분이 발표?를 하셧는데, 앞의 두분은 live cording을 하셨고,
어쩌면 내가 좀 궁금해 했던 부분도 해결할 수 있었던 시간이 되지 않았나 하는
생각이 들기도 하면서 그 시간을 열심히 듣지 않고 보낸 아까운 마음이 들기도 하는
그런 이상한 생각을 하면서 글을 쓰다보니 라임이 하나로 모이는데 그건 하는
이라는 말도 안되는 이상한 글을...;;; 뭐지?

마지막 발표자 분은 구글의 마케팅? 에디터? 암튼 뭐 그런데 다니시는 분인데
처음부터 혀를 과하게 굴리셔서 미국 본토에 오래 사신분인가 했는데
발표를 너무 재밌고 조리있게 잘 하셔서 '첫 번째 와우'를 날렸고,
Q&A 시간에는 순간 판단, 재치 등 역시... 하면서 '두 번째 와우'를 선사했다.

마켓 앱의 UX/UI 권장사항에 대해 이야기 했는데, 권!장!사항권장사항을 잘 구분해
내가 혹시라도 앱을 만들면 꼭 적용해야 할 것 같았고 많이 유익했던 것 같다.
이 내용은 sosang횽도 함께 들었다면 좋지 않았을까 하는 아쉬움이 있었다.

결과적으로 후기아닌 후기를 썻는데, 기억이 잘 안날 것 같은 내용은 글로 남기고,
생생하게 기억나는 모든 내용들은 내 머리속에 간직하고 있다.

어쨋거나 저쨋거나 조금더 분발해서, 내 목표 2개중 하나는 반드시 이뤄내고 싶다.
그러기 위해선, 앉으나 서나 공부를................아.... 참.......

머리가 Jhon nae 좋았으면 좋겠다...! 센스나 기타 etc. 그리고 영어...ㅠㅠ 젠장.

2015년 3월 27일 금요일

20150327 일정 예상하기

지금 하고있는 공부는 xml을 파싱해서 swt/jface를 이용해 GUI를 구성하는 일인데...
사실 정확한 목적을 모르니 약간 오래걸리는 것 같음.

그리고 제일 중요한건 이정도는 어느정도 시간이면 해결할 수 있겠다 하고 감이 와야되는데...
뭐 하나 기능을 할려고 해도 하루 이틀이 그냥 지나가니 답답하기만 하고 시간은 가고...
정신 차리면 코드리뷰........ 어쩌야 하는거지...

techtalk 판교 와 GDG서울 3월 정기모임 갔다온 후기도 써야하는데..
빨리 시간을 내서 써야겠음!

아.. 요즘은 그냥.. 진짜 멍때리면서 멍때리고 싶은 하루 하루.....
힘들고 지친다...................................ㅠㅠ

2015년 3월 18일 수요일

20150319 해야될게 많다고 느끼는 신입의 고충?

1. 아래 게시한 채팅 프로그램부터 정리해야 하는데... 시간을 핑계로... ㅎㅎ
2. 일을 하려면 알파벳 정도는 알고 시작해야 하는데 AB나 ABC정도도 모르고 있다는...
3. 근데 정작 중요한건 아직도 일이 없다-_-?...
4. 정성적인 평가는 사회에선 있을 수 없다.
5. 신입들은(대겹 말구) 언제나 박봉이다.
6. 사람들은 자신의 입장에서 생각하는데 도가 텃다.
7. 일부로 그들에게 나에대한 잘못된 선입견을 바로잡지 않는다.
8. 말 할 수록 나는 나를 깍아내린다.
9. 조용히 할 일이나 제대로 처리할 수 있는 기술을 배운다.
10. 결론은 직장생활은 별로 재미가 없다... 떠나고 싶다.

2015년 3월 9일 월요일

20150310 남의 프로젝트 가져다 쓰기

문득 " 제가 만든 B유틸(프로젝트) 있으니까 가져다 쓰셔도 됩니다. "
라는 말을 들었을 때...
나는 이클립스에서 A 프로젝트를 진행중이고
B라는 프로젝트의 유틸이 필요하다면...?

내가 제일 먼저 떠올린 방법은 프로젝트를 통째로 복사해서(B를 A로) 가져다 쓰라는 말인가?... 싶었다.
근데 그렇게 비효율 적으로 가져다 쓰라고 하지는 않았을 것 같았다.

두번째로 떠올린건 jar파일로 변환 후 추가....

점점 산으로 가는 생각들....
뭐지 이건???? ㅎㅎ

그래서 남들은 어떻게 하나 구글링 해봤더니
두둥!
A프로젝트에서 properties 의 java build path 에 project탭에 그냥
B라는 프로젝트를 추가하기만 하면 소스를 가져다 쓸 수 잇던 것이었다....

이렇게 하는 거 맞겠지? ㅡ.,ㅡ;
걍 옆에 물어보면 되는데... 그냥 혼자 해보련다!

2015년 2월 25일 수요일

20150226 Scala start

Programming in Scala를 읽으면서
가~~끔 메모를 했는데
앞으로는 꾸준히 하기 위해서 기록을 남기기로 결정했다.

지금까지 메모 한 것을 뭉탱이로 던지고,
앞으로는 조금 정리해서 쓰도록 할 예정!



------------------------------------------------
스카라는 이뮤터블(final). 병행성 문제가 나타나지 않는다!
스카라는 statically typed 의 랭기쥐 이다.




unit function = retrun 타입이 void인것?!인듯?!

스칼라에 set, map은 immutable 과 mutable 이 있는데 immutable 이 기본이고 mutable을 사용하려면
scala.collection.mutable.HashMap
scala.collection.mutable.Map
등을 사용하자

import scala.collection.mutable.Map
val treasureMap = Map[Int, String]()
의 경우 factory method에 인자가 없으므로 타입을 [ ] 안에 명시해 줘야 하지만

val romanNumeral = Map(
1 >
"I", 2 >
"II", 3 >
"III", 4 >
"IV", 5 >
"V"
)
의 경우 factory method에 인자가 있으므로 스칼라 compiler 가 타입 추론을 하고 따라서 타입을 명시해줄 필요가 없다.

val형의 타입만 있는 경우가 바로 펑셔널 스타일이다!(즉 var가 없어야 한다 -> 모든게 final이다?!)

If you’re coming from an imperative background, such as Java, C++, or
C#, you may think of var as a regular variable and val as a special kind of
variable. On the other hand, if you’re coming from a functional background,
such as Haskell, OCaml, or Erlang, you might think of val as a regular variable
and var as akin to blasphemy.

하지만 스칼라는 val이나 var이나 모두 중요한 거라고 생각하니깐 이런 생각의 전환을 잘 하도록 한다.

스칼라의 side effect 는 해당 변수나 인자를 가지고 뚝딱하지 않으면 side effect 라고 부르는듯?
side effect :
def printArgs(args: Array[String]): Unit = {
args.foreach(println)
}

no side effect :
def formatArgs(args: Array[String]) = args.mkString("\n")


PIS 8.9 tail recursive
언뜻 이해가 되지 않아 이너넷 검색 후 결과를 남김

tail recursive는 외관상으로 차이가 이렇다
맨 마지막(결과?리턴?)값이 function() 이면 tail recursive
function() 외에 다른 연산?이 들어가면 그냥 재귀 ex) function()*2 등...
둘 중에 더 안정적이고 사용스러운?것은 tail recursive이다
이유는 그냥 재귀함수의 경우는 함수 호출시 스택에 push를 계속 하고 결과가 나와야 pop이 되어 스택에 새로운 함수가 계속 누적된다(스택오버 플로우가 날 수 있음)
하지만 tail recursive의 경우 부모 함수는 사라지고 자식함수를 호출하기 때문에 스택오버 플로우가 나지 않는다.
즉, 최초 부모 함수가 실행 된 후 재귀 구문을 만나면 함수는 사라지고 재귀함수가 부모가 된다
부모1 - 자식1
부모(자식1) - 자식2
부모(자식2) - 자식3 ...
최종 결과 값에 예외를 던지도록 해 보면 tail recursive인지 아닌지 알 수 있다.

2015년 2월 22일 일요일

20150223 Error updating database

### Error updating database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'param1' not found. Available parameters are [1, 0, param1, param2]
### The error may involve xxx.mybatis.ContentsMapper.insertContents-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO table(param1, param2) values(?,?)
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'param1' not found. Available parameters are [1, 0, param1, param2]

이런 에러가 나면
mybatis 설정 xml에서
1.namespace나 alias 등을 유심히 살펴볼것 ( 내가만든 DO랑 alias의 이름 매치 등)

2.interface를 이용하는 경우 @Param을 이용하자!T_T

20150223 mysql 과 어노테이션 에러 : Parameter index out of range (1 > number of parameters, which is 0)

mysql 과 mybatis 를 이용해 보려고 이런식의 어노테이션을 사용했는데
@Select("SELECT * FROM table WHERE id like '%#{id}%'")


 Parameter index out of range (1 > number of parameters, which is 0)
에러를 만났다.

즉, 1개 이상의 파라메터를 넣었는데 니가 쓴 어노테이션에는 파라메터가 필요 없다!
는 말인것 같았다..

슬슬 깊은 빡침이 몰려왔고,,,

이리저리 구글링한 결과 concat이라는 함수를 알게 되었다.
그래서 이렇게 어노테이션 sql문을 바꿧더니...
@Select("SELECT * FROM table WHERE id like CONCAT('%', #{id}, '%')")

잘 되는것 같다...ㅡ.,ㅡ? ㅎ ㅔ ㅎ ㅔ

2015년 2월 16일 월요일

20150217 업무?

그런거 없다..
여전히 똑가탕....

5개월째 노는 신입입니다..ㅠㅠ

블로그를 다른 템플릿으로 바꿔봤어요..
이젠 이렇게 해서 꾸준히 또 한번 걸어봐야... ㅎㅎ

꾸준히 와 적당히는 참 힘들어용!!

20150109 우연히 알게된 사실.

작년 잉여생활을 할 때
14.8.27.. 우연히 google(GDG seoul) 세미나를 참석했었다.
그때 node.js 를 사용하신 분이 발표를 하셨었는데
오늘 알고보니 outsider님이셨다.. ㅡ,.ㅡ;;
나야 뭐 학원 출신의 비전공자로서 14년 1월 처음 컴터를 접한 뉴비여서... ㅎㅎ

어쨋거나 신기해서 남겨본다.
이제 다음주나 다다음주 부터 나도 업무라는 것의 맛뵈기를 탐방할 수 있겠지?
ㅎ ㅔㅎ ㅔ

20141230 채팅 프로그램 분해 조립...

--20150422
https://github.com/freenice12/ChatRoomForJAVABeginner
--

이 글은 앞으로 수정이 계속 되면서 길어질 예정임.ㅠㅠ
한 번에 쓰기에는 의외로 크기가 큰 클래스 들이 있음...

어떤 요구사항으로 만들어진 후로그램인지 이전 글에 설명 해놨음.

-- v.01

서버의 메인 메소드가 있는 클래스로
필드는 서버소켓과 각 클라이언트를 담당해줄 소켓 그리고 채팅방들과 클라이언트들을 담당해줄 메니저 클래스가 있다.
일단 채팅방을 만들 때 십여개의 클래스로 채팅방이 완성 되었다는 신기하고,
혼자만 쓰는게 아니고 다른 사람과 사용해보고 싶고 설치형 파일로 만들어 보고 싶지만
일단은 시간 관계상 이클립스 틴구의 도움을 받아 local에서만 실행할 수 있도록 함.


import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;

// 로거로 상태를 체크
import org.apache.log4j.Logger;

public class ServerChat {
private ServerSocket serverSocket; // 서버용 소켓
private Socket clientSocket; // 클라이언트 담당 소켓
private ChatManager chatManager; // 채팅방, 클라이언트 담당 클래스


public ServerChat() {
chatManager = new ChatManager(); // 생성자에서 매니저 생성
}

public Socket getClientSocket() { // 클라이언트를 담당하는 스레드인 eachClientThread에서 사용할 게터
return clientSocket;
}

public ChatManager getChatManager() { // 클라이언트를 담당하는 스레드인 eachClientThread에서 사용할 게터
return chatManager;
}

private Logger logger = Logger.getLogger(this.getClass()); // Log4J 를 이용한 로깅

public static void main(String[] args) {
new ServerChat().serverRun();
}

private void serverRun() {
try {
serverSocket = new ServerSocket(5000);
logger.info("Server Running..."); // log4j 사용법은 매우 간단함
while (true) {
logger.info("Waiting for connection");
clientSocket = serverSocket.accept(); // 서버용 소켓이 클라이언트의 접속을 받음(블로킹)
logger.info("got a connection");
// 각 클라이언트별 스레드를 생성
// 차후에 위 블로킹과 클라이언트별 스레드생성을 하지 않고 nio를 이용한 채팅방으로 바꿀 고 싶음..ㅎㅎ
Thread eachClientThread = new Thread(new ClientController(this));
eachClientThread.start();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

}



}

20141211 Java 채팅 프로그램

--20150422
https://github.com/freenice12/ChatRoomForJAVABeginner
--

약 한 달간 작업했다.

아직도 리팩토링할 부분이 많지만 차차 리뷰해보도록 할 예정이다.

일단
... !! 특징 !!
을 쓰기전에 엄청나게 정교하게 설계를 하고 코드를 구현해야 리팩토링이 한결 쉬워진다는 것을 깨달았다.
클린 코드라는 책을 읽었는데, 30% 정도밖에 이해를 못했음에도 불구하고 많은 도움을 받았다.
1. byte Array 를 이용한 소켓 통신을 구현
  - 부가적으로 버퍼의 사용 이유와 byte array 를 이용해 저 수준의 통신을 구현할 수 있었음
  - 저 수준의 통신 구현 후에 Object...Stream을 통해서 Object를 주고 받는 통신을 구현
  - System.arraycopy 와 배열, String을 다루는 법을 많이 알게 되었음
  - 저 수준 통신 -> Object...Stream 으로 리팩토링 하면서 코드의 줄 수가 굉장히 줄어드는 마법을 경험
  - 일정부분 리팩토링 된 소스를 대체하는 과정은 생각보다 쉬웠고 위의 마법은 단지 30분 만에 일어났... ㄷㄷㄷ

  = 반면에 더 공부해야 할 부분은 java nio!

2. 프로토콜을 규정해 프로토콜로 통신을 했다고 생각함.(솔직히 이 부분은 아직도 가려움..ㅠㅠ)
  - Object...Stream을 사용하면서 프로토콜(?)을 읽고 해석하는 기능은 소멸됨ㅋ

3. Swing 을 이용한 GUI를 구현, 각종 기능들에 대해서 많이 찔끔 공부하였고,

4. 적어도 '내 생각'에는 "유니 캐스트, 멀티 캐스트, 브로드 캐스트"를 구현했다고 생각함
- 브로드 캐스트는 다른 개념이더구만요?!

5. 클래스 다이어그램을 작성했는데 이건 공부하면서 그린거라 잘 그린건지 모르겠음
  - 꽉찬 다이아, 텅빈 다이아, 상속, 구현 등 많은 것을 봤는데 용어가 기억 안나는 건 왜지?ㅠㅠ

등등 더 있겠지만,
이런 프로그램을 만들다 보니 욕심이 생겨서 기능도 추가하고, 곧 메신저도 만들어 보고싶고,
실행파일을 만들어서 서버를 설치해 실제로 돌아 가는지 시험해 보고 싶기도 하고,
누군가 쓸 수 있는 형태로 바꿔 설치해 주고 싶기도 하다.

어쨋든 일단 오늘은 폴더 2개의 압축 파일을 남겨본다.
주석은 없다. 쉽게 읽히도록 코드를 작성하려 노력했고 같은 느낌으로 리팩토링도 진행했다.
먼저 byte 어쩌고 하는 폴더가 프로토콜을 이용한 채팅 프로그램
object 어쩌고 하는 폴더가 프로토콜 날리고 오브젝트를 주고 받는 소스이다(간결).

라고 쓰고 게시물을 업데이트 했는데 파일을 추가할 수 없다.
차근차근 코드를 뜯고 씹으면서 게시물로 승화 시켜야겠다.



덧. 프로그램을 만들다가
ObjectInputStream과 ObjectOutputStream 을 사용할 때 황당? 한 블로킹이 됐다.
ObjectInputStream 을 먼저 사용하고
ObjectOutputStream 을 나중에 써주면 (서버와 클라이언트 모두 같은 순서)

서로 읽으려고 깝치면서 일종의 데드락? 이 걸리는 것 같았다.. 이런식으로 경험할 줄이야?
둘중의 하나를 ObjectOutputStream 이 먼저 오게 바꿔주면 해결이 된다.

그리고 그 이유는
http://ubuntuforums.org/showthread.php?t=1682680
여기서 찾았는데.

맞나 모르겄다~!
읽어보니 그런것 같기두?

20141123 목표?

일 시작한지 두 달이 되어간다.

그동안 공부만 했었는데, 내가 알고 있다고 생각한 것 중 제대로 알고 있는 것은 많지 않았다. 공부를 하면 할 수록 몰랐던 것은 더 많아지고 알아야 할 것은 더욱 많아졌다. 그리고 무언가 주제를 정하고 프로그램을 설계(혹은 코딩)하려고 하면, 내가 뭘 모르는지 모르는 상태가 되어 혼란 스럽다. 가끔은 사회 생활의 '접바둑'과 '다면기'에 짜증이 날 때도 있지만 그래도 묵묵히 걸어가고 있다. 

연애를 할 때는 모든 사랑노래가 내 이야기 같을 때가 있다. 지금의 나는 내 첫 인턴 시절을 떠올려 보면서 지금의 회사 생활을 곱씹어 보고 있다. 물론 감정에 차 있는 것 아니냐 할 수 있지만 절대 그렇지 않다고 확신한다. 왜냐면, 이미 인턴 시절에 겪었던 감정이니까.

무슨말을 하고 있는지도 모르겠다. 행복한 신혼생활에 어쩌면 즐거운 회사생활까지...
다 겪어가는...
최종 목표가 진짜 목표인지 모르겠지만, 그러기 위해서는 지금 기본기를 확실하게 닦아야 할 때인 것은 확실하다.

근데 그 목표가... 목표가... 사실 멀어지는 느낌은 왜 때문인지 모르겠다.
형! 우리 진짜 한 번 해봐요. 한 번 사는 세상인데!...ㅠㅠ

뭘 모르는지 모르기 때문에...
목표가 목표인지 모르기 때문에...

지금에 일단 충실하잡.

20141106 더블 링크드 리스트로 이진 검색 트리 구현

2014-11-10 리팩토링

이전에 망친거를 다시 복구함.

물론 고수의 눈에는 항상 망가져있음.

아...어렵다..

이런거 배우면서 대학생활 하신 분들은 정말 즐거웠을 듯?!
이라고 즐거운척 하면서 울어봅니다...

패키지는 빼고, 해보면 될껀데..

이제 스레드 돌려서 테스트 하는거 해봐야 하는데..
시작도 엄두가 안나는데
누가 힌트좀 줬으면 좋겠다...



package dataStructure3;

public class Node {
private Node parents;
private Integer data;
private Node leftChild;
private Node rightChild;

public Node() {
this.parents = null;
this.data = null;
this.leftChild = null;
this.rightChild = null;
}
public Node(Integer data) {
this();
this.data = data;
}
public Node getParents() {
return parents;
}
public void setParents(Node parents) {
this.parents = parents;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}

}
package dataStructure3;

public class DLLTree {
private Node root;

public DLLTree() {
this.root = null; 
}

public DLLTree(Node root) {
this();
this.root = root;
}

public Node getRoot() {
return root;
}

public void setRoot(Node root) {
this.root = root;
}
// 검색 - 데이터
public boolean searchData(int data){
return searchData(root, data);
}

private boolean searchData(Node node, int data) {
if(node == null){
return false;
}
if(data < node.getData()){
return searchData(node.getLeftChild(), data);
}
if(data > node.getData()){
return searchData(node.getRightChild(), data);
}
if(data == node.getData()){
return true;
}
return false;
}
// 삽입
public boolean insertData(int data){
if(searchData(data)){ // 같은 데이터는 삽입 불가
return false;
}
Node newNode = new Node(data);
return insertData(root, newNode, data);
}

private boolean insertData(Node node, Node newNode, int data) {
if(data < node.getData()){
if(node.getLeftChild() != null){
return insertData(node.getLeftChild(), newNode, data);
}else{
node.setLeftChild(newNode);
newNode.setParents(node);
return true;
}
}
if(data> node.getData()){
if(node.getRightChild() != null ){
return insertData(node.getRightChild(), newNode, data);
}else{
node.setRightChild(newNode);
newNode.setParents(node);
return true;
}
}
return false;
}
public boolean deleteData(int data){
if(data == root.getData()){
return false;
}
if(searchData(data)){
Node targetNode = searchNodeToDelete(data);
return deleteNode(targetNode);
}
return false;
}
// 검색 - 노드
private Node searchNodeToDelete(int data){
return searchNode(root, data);
}

private Node searchNode(Node node, int data) {
if(node == null){
return null;
}
if(data < node.getData()){
return searchNode(node.getLeftChild(), data);
}
if(data > node.getData()){
return searchNode(node.getRightChild(), data);
}
if(data == node.getData()){
return node;
}
return null;
}
private boolean deleteNode(Node node) {
// child = 0
if(node.getLeftChild() == null && node.getRightChild() == null){
if(node.getParents().getLeftChild() == node){
node.getParents().setLeftChild(null);
}else{
node.getParents().setRightChild(null);
}
node = null;
return true;
}
// child = 2
if(node.getLeftChild() != null && node.getRightChild() != null){
if(node.getParents().getLeftChild() == node){
node.getParents().setLeftChild(null);
}else{
node.getParents().setRightChild(null);
}
node.setParents(null);
insertData(root, node.getLeftChild(), node.getLeftChild().getData());
insertData(root, node.getRightChild(), node.getRightChild().getData());
return true;
}
// child = 1
if(node.getLeftChild() != null || node.getRightChild() != null){
if(node.getParents().getLeftChild() == node){
node.getParents().setLeftChild(null);
}else{
node.getParents().setRightChild(null);
}
if(node.getLeftChild() != null){
insertData(root, node.getLeftChild(), node.getLeftChild().getData());
}else{
insertData(root, node.getRightChild(), node.getRightChild().getData());
}
node = null;
return true;
}
return false;
}

}


public class DLLTree{
private Node root;

public DLLTree() {
this.root = null;
}

public DLLTree(Node root) {
this();
this.root = root;
}

public Node getRoot() {
return this.root;
}

public void setRoot(Node root) {
this.root = root;
}


// 검색 - 데이터
public boolean searchData(int data){
return searchData(this.root, data);
}

@SuppressWarnings("boxing")
private boolean searchData(Node node, int data) {
if(node == null){
return false;
}

if(data < node.getData()){
return searchData(node.getLeftChild(), data);
}
if(data > node.getData()){
return searchData(node.getRightChild(), data);
}
if(data == node.getData()){
return true;
}
return false;
}



// 삽입
@SuppressWarnings("boxing")
public boolean insertData(int data){
if(searchData(data)){ // 같은 데이터는 삽입 불가
return false;
}
Node newNode = new Node(data);
insertData(this.root, newNode, data);
return true;
}

@SuppressWarnings("boxing")
private void insertData(Node node, Node newNode, int data) {

if(data < node.getData()){
if(node.getLeftChild() != null){
insertData(node.getLeftChild(), newNode, data);
return ;
}
node.setLeftChild(newNode);
newNode.setParents(node);
return ;

}

if(node.getRightChild() != null ){
insertData(node.getRightChild(), newNode, data);
return ;
}
node.setRightChild(newNode);
newNode.setParents(node);
return ;


}

@SuppressWarnings("boxing")
public boolean deleteData(int data){
if(data == this.root.getData()){
System.out.println(data+" is rootData.");
return false;
}

if(searchData(data)){
Node targetNode = searchNodeToDelete(data);
return deleteNode(targetNode);
}
return false;
}

// 검색 - 노드
private Node searchNodeToDelete(int data){
return searchNode(this.root, data);
}

@SuppressWarnings("boxing")
private Node searchNode(Node node, int data) {
if(node == null){
return null;
}
if(data == node.getData()){
return node;
}

if(data < node.getData()){
return searchNode(node.getLeftChild(), data);
}
if(data > node.getData()){
return searchNode(node.getRightChild(), data);
}

return null;
}


@SuppressWarnings("boxing")
private boolean deleteNode(Node node) {
disconnectFromParentNode(node);
if(node.getLeftChild() != null){
insertData(this.root, node.getLeftChild(), node.getLeftChild().getData());
}
if(node.getRightChild() != null){
insertData(this.root, node.getRightChild(), node.getRightChild().getData());
}
deleteNodeself(node);
return true;
}

private static void disconnectFromParentNode(Node node){
if(node.getParents().getLeftChild() == node){
node.getParents().setLeftChild(null);
}else{
node.getParents().setRightChild(null);
}
node.setParents(null);
}

private static void deleteNodeself(Node node){
node.setParents(null);
node.setLeftChild(null);
node.setRightChild(null);
}
}


리펙토링.