이번 글도 주제랑 내용이 산으로 갈 생각이다. 목적은 역시나 그냥 경험과 생각 전달이다.

20070914_S3-1.pdf
0.22MB

 

마케팅의 중요성을 말하기 위해 위의 제목을 붙였고, 서울대를 목표로 꿈꾸는 꿈나무들에게는 미안한 자료일 수도 있지만, 또 알아둬서 나쁠 건 없다는 것이다. 정확한 제목은 서울대와 관련된 기업에 지원해서 면접에 떨어진 후기 정도가 되겠다.

 

우선, 서울대랑 관련된 기업이라는 것만 말하고 싶다. 보통 기업 정보는 온라인에 적고 그러면 안되거든요. 그래서 생략된 부분이 많은데 필요한 분에게 원하는 정보는 있을 것이라 생각된다. 현실 모르는 분께는 통찰력을 그리고 구체적 액수나 면접 질문을 적는다.

 

내가 제시한 연봉은 1억 2천이었다. 그리고 면접관들의 의견 충돌로 발표 날짜보다 더 오래 걸려서 불합격 발표가 났다.

 

그 중 면접에서 당락을 갈랐던 질문은 그것이었다. 학창시절 수상 경력은 없냐는. 뭐, 당연히 면접관은 IT 분야 관심있는 서울대 출신의 면접관이었으리라 생각된다. 물론, 나보다 나이가 어렸다. 면접 때 나이는 말할 수 없지만, 내가 있던 시절에는 학교가 아직 IT를 못 받아들여서 잘하는 사람들은 학교를 가지 않았다. 지금은 교육 커리큘럼이 충분히 학교로 스며 들었고, 예전 문화를 이용해서 별로 좋지 않은 학교 간 것은 무슨 스티브잡스에 비유하는 사람도 보이긴 한다. 더 재미있는 것은 멘사 퀴즈 공부만 열심히 해서 마치 머리가 엄청나게 좋은데 좋지 않은 학교를 간 것으로 포장하기도 한다.

 

내 입장에서 스티브 잡스에게는 좋은 학교 좋지 않은 학교가 없었다. 잡스는 논리적으로 사고하는 사람이었고, 또 현실을 정확히 알았고 미쳤기 때문에 우리 세상을 바꾸었다. 잡스를 싫어하는 사람도(나 포함) 잡스를 무시할 수 없다.

 

학교를 가는데는 여러 이유가 있을 수 있다. 재방문하여 내가 궁금한 사람들에게 차차 밝히겠지만 꼭 공부만이 학교를 가고 안가고의 문제가 아니다. 우리 어머니 세대는 학교를 힘들게 가서 나왔는데 학교가 없어진 경우도 있고, 교육부에서 증명을 할 수 없는 경우도 있었다. 

 

직장인 문화도 한국에 들어온지 100년도 안되었다. 회사에서 눈치보고 정치하고 살아가는 방법에 대해 정의하고 '미생'보면서 원래 그런게 회사 생활이구나 하는 것들... 사실 모두 거짓인 것이다. 회사 생활을 팩트로 말하면 그냥 다 노예고, 좋게 말하면 같은 이상을 추구하는 사람들의 집합이다. 그러나 맑은 샘물은 하나의 쓰레기에 의해서 전체가 구정물이 되어 버린다. 사내에서 스스로 굽신거리며 정치하는 사람들이 그렇다. 그래서 맑게 유지 하는 조직은 사람을 안 뽑으면 안 뽑았지 함부로 뽑으려 하지 않는다.

 

자, 다시 면접으로 넘어 가서. 나 역시 삼성전자나 ETRI에서 면접관 신분으로 참여해서 면접을 보기도 했지만 막판에 저런 질문을 하지는 않았던 것 같다. 그리고 내가 경력에 적지 않은게 있는데 나도 자료를 찾아봐도... 국내에는 없다.

일본 사이트 에서 자료를 찾을 수 있는데 이 글 처음에 있는 pdf 파일이고 출처는 다음과 같다.

 

http://www.ossforum.jp/jossfiles/6thNEAForum/20070914_S3-1.pdf

그 당시 따로 VIP 테이블이라고 해서 VIP테이블에 앉아 각 국의 장관들과 사진을 찍었던 기억이 난다. 그리고 3개 국어로 실시간 통역을 해 주는 단상위에 올라서 자신있게 발표하던 모습이 기억난다.

 

반짝이던 크리스털 트로피는 알콜 중독자셨던 어머니와 싸우던 도중 어머니께 따로 만들어 드린 크리스탈 트로피와 함께 이런게 무슨 소용이냐며 하고 모두 부셔버렸고, 그 당시 생긴 상처가 아직 손목에 선명하게 남아 있다.

 

그 당시 119를 불렀을 때 병원과 계약된 엠뷸런스가 왔는데(이것도 비리의 단면으로 오래 전에 여러 뉴스에서 다뤘었다) 본인이 그랬냐며 따지길래 그냥 내리겠다고 내렸고, 그 당시 사귀던 분이 의사셨고, 그 분 소개로 모 병원 병원장이 직접 손목을 꿰매서 다행히 팔 하나를 못 쓰는 불상사는 없었다.

 

아마 학창시절 수상한 것 중 대회가 2개가 있는데 그 중 하나인 저 대회를 말했으면 면접 때 면접관들끼리 논란이 있지는 않았을 것 같다. 하지만 나는 그 당시 어머니가 더 중요했고, 수상 사진이나 싸이월드 사진도 다쳐서 꿰맨 사진 올린 것 등 그 당시 화가 나서 모두 지웠다. 후회하지는 않는다. 그것을 보고 또 지운 것도 아는 2 선배님이 계신데 같이 밥 먹으면 기본 15만원 나온다. 그 만큼 고급진 음식을 사 주시고. 내가 계산하려고 하면 ... (오버 좀 하면, 사실 죽음이다...)

그냥 후배가 귀여운 것이다. 앞 뒤 안보고, 인간적인 고민을 하는.

 

나는 내가 인정받고 싶은 사람이 어머니셨고, 나중에는 선배님들인데. 지금은 내가 원하는 사람들에게 인정 받았다는 피드백을 다양하게 받기에 인정 받았다고 생각한다.

 

내가 지난 10년 간 학생들을 가르칠 때 항상 덧붙이는 말은...

면접장 가면 떨릴 것이다. 그런데 너희들은 너희 아버지, 어머니의 자식인데 부모님 앞에서 떨어본 적 있나? 혹시 면접장에 있는 그 면접관들보다 부모님이 못하다고 생각한다면 똑같이 떨면 된다.

는 가르침이다.

 

나는 이런 생각에 단 한 번도 면접장에서 떨어본 적은 없는 것 같다. 물론, 떨린다. 하지만 표면적으로는 안 그렇게 하려고 행동하게 된다. 그리고 사실 어머니야 내가 세상 최고라고 생각하는데... (말줄임) 떨 이유가 있는 경우도 있다는 말을 하고 싶다.

 

 

뭐, 암튼 결론은 떨어졌다.

 

뭐 떨어지던 말던 내가 지난 10년 간 일을 쉰 적은 없다. 일을 쉰다고 해도 월급은 나왔다. 따로주는 월급이랑 고용보험도 같이 타기도 하고. 뭐, 그렇게 세상과 딜하며 살았다. 그렇게 번 돈은 다 한국 경제를 돌리기 위해 쓰고, 기부도 했다.

 

스스로가 떳떳하지 못하면 말짱 도루묵이고,

인정 받고 싶은 사람에게 인정 받지 못하면 스트레스를 받는다.

 

강석진 교수 때문이기도 하고 내 주변 이상한 서울대 출신과 또 매우 뛰어난 서울대 출신 때문에

케바케

사바사

지. 특정 이름이 뭔가를 대표하지는 않는다. 

 

그래서 타격은 전혀 없다.

 

여기서 큰 반전은

 

거기 되어도 사실, 강의 계획 때문에 갈 수 없었다.

 

아마 나중에라도 이 글 본 헤드헌터께는 정말 죄송하기도 한데... 취업 연계 과정을 하다보면 아이들과 친해지기 위해 스파이짓도 필요하다.

 

마지막으로 하고 싶은 말은.

 

그냥 내 실력이 부족해서 서울대 이름에 걸맞지 않는다. 는 것이 결론다. ~인 것 같다가 아닌.

뭐, 그러기나 말기나. 아마 다음 편은 회사 팀장님께 회사 나간다고 했다가 다시 번복했었던 이야기 일 듯.

어... 이건 진짜다. 나 스스로가 오글거리기도 하고.

 

그래도... 자기 포장이나 마케팅 잘하는 것이 필요한 것이 팩트고 현실이다. 좀 더 포장을 잘할 껄 하는 생각도 들었다. 합격하고 안 가야 멋있는건데 말이다.

- NSAttributedString.Key.underlineStyle : []] 

+ NSAttributedString.Key.underlineStyle : 0]

 

로 해결.

 

아래는 로그

 

"[tendency period tab is clicked.]"

"Period bar has been refreshed"

🍭pwd_getStatePeriod()

TendencyPeriodBar refresh()

jhPanel draw()

drawPanel()

ctime in jhType3graphPanel<T> =  Optional(2019-04-08 01:25:44 +0000)

jhPanel draw()

drawPanel()

ctime in jhType2graphPanel<T> =  Optional(2019-04-08 01:25:44 +0000)

jhPanel draw()

drawPanel()

ctime in jhType4graphPanel<T> =  Optional(2019-04-08 01:25:44 +0000)

2019-04-08 10:25:44.930816+0900 Bridge2[21969:1272559] -[Swift.__EmptyArrayStorage intValue]: unrecognized selector sent to instance 0x1c1cab360

2019-04-08 10:25:44.932463+0900 Bridge2[21969:1272559] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift.__EmptyArrayStorage intValue]: unrecognized selector sent to instance 0x1c1cab360'

*** First throw call stack:

(0x18817c518 0x1873579f8 0x188099278 0x188181d60 0x1881839fc 0x1927d600c 0x192763b6c 0x1b4aee160 0x1b4aeca5c 0x102b315a8 0x102b316b8 0x1b4b7b4e4 0x18c609d94 0x18c4ee974 0x18c6108a0 0x18c609658 0x18c572160 0x18c5a0108 0x1b46ed710 0x1b47d61f4 0x1b47cf11c 0x18810e2bc 0x18810e23c 0x18810db24 0x188108a60 0x188108354 0x18a30879c 0x1b46f3b68 0x102bc69b4 0x187bce8e0)

libc++abi.dylib: terminating with uncaught exception of type NSException

 

 

 

'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

두 번째 글  (0) 2021.01.24
네 번 째 정의구현. 시초는 바로 이 글  (0) 2021.01.24
:-1: Segmentation fault: 11  (0) 2019.04.03
딥러닝 환경 구축 중  (0) 2019.02.07
StackView bug  (0) 2019.02.06

Command CompileSwift failed with a nonzero exit code


업그레이드 한 것이 실수 였다.




Segmentation fault: 1 1

Command CompileSwift failed with a nonzero exit code



 1. pod deintegrated 설치 실행 이후 pod 다시 설치 -> 안됨

  1. ulimit -u 수정이 안되는 확인, /etc/security/limits.conf 수정


* soft nofile 65535

* hard nofile 65535


sudo launchctl limit maxfiles 1024 1024


개뿔 reboot 해야 한다.


https://docs.riak.com/riak/kv/2.2.3/using/performance/open-files-limit/


https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c



안된다.


https://bugs.swift.org/browse/SR-10182 를 보니 아이폰과 엑스코드를 업그레이드 한 것이 재앙이었다.


뜨아아아아

'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

네 번 째 정의구현. 시초는 바로 이 글  (0) 2021.01.24
swift 4.0 -> 4.2 가며 만난 에러님.  (0) 2019.04.08
딥러닝 환경 구축 중  (0) 2019.02.07
StackView bug  (0) 2019.02.06
gitlab clone error  (0) 2019.02.05



031 205 0546



정신 차려보니... 다 먹었네

입에 아직 볼프강의 여운이 남아서...
고기 품질은 좀 그랬지만

뷔페에서는 아주 훌륭하다고 할 수 있겠다.

조만간 엑셀로 정리해야 할 듯





최근 최애 상점

'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

망포동 맛있는 곱창 배달  (0) 2019.03.31
애슐리 이벤트 스테이크  (0) 2019.03.22
산본 공영 주차장 찾는 법(사람 기준)  (0) 2019.03.08
미금역 갓파스시  (0) 2019.02.11
안시성 후기  (0) 2019.02.06



여기를 찾으삼

'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

애슐리 이벤트 스테이크  (0) 2019.03.22
인어교주해적단  (0) 2019.03.20
미금역 갓파스시  (0) 2019.02.11
안시성 후기  (0) 2019.02.06
장인어른과 한잔!  (0) 2019.02.03

제자와 둘이 만남




늦게 온다고 해서 혼자 ㅊㅁㅊㅁ

이 후



마지막 사시미 반 이상 남음

워낙 보고 싶었던 친구라 좀 무리하게 주문했나봄 ㅠ

이 후 길건너 대각선 할리스 커피 감.... 인테리어만 추천

생각보다 저렴


'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

인어교주해적단  (0) 2019.03.20
산본 공영 주차장 찾는 법(사람 기준)  (0) 2019.03.08
안시성 후기  (0) 2019.02.06
장인어른과 한잔!  (0) 2019.02.03
홍석햄과 모임 정리  (0) 2019.02.02

you can set the PYTHON env variable.


npm config set python c:\python36_64


set PYTHON=c:\python


set PATH=%PATH%;%PYTHON%



그러나... 다른 npm 애들을 installation 하는데 -f를 쓸 일이 많아졌고,


뭔가 점점 꼬여갔다.


일전에 구글 딥러닝 example 따라 해 볼 때도 안되서 결국 우분투 환경으로


했었는데...


이번에도 마음 편하게 우분투에서 하자고 마음 먹었다.


terminator install.

ssh key copy & modification config

apt-get install git

apt-get install nodejs

nodejs-legacy

vim

./webstorm.sh

git clone git@github.com:googleapis/nodejs-vision.git


Refusing to install @google-cloud/vision as a dependency of itself

-> vision API는 -f 로 설치


   27  # Create an environment variable for the correct distribution

   28  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

   29  # Add the Cloud SDK distribution URI as a package source

   30  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

   31  # Import the Google Cloud Platform public key

   32  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

   33  # Update the package list and install the Cloud SDK

   34  sudo apt-get update && sudo apt-get install google-cloud-sdk

   35  sudo apt-get update && sudo apt-get install google-cloud-sdk -y

   36  sudo apt-get update && sudo apt-get install google-cloud-sdk -y --allow-unauthenticated



gcloud auth application-default login


Error: `gyp` failed with exit code: 1


을 거쳐... 이미지 분석기까지는 돌려봄.



'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

swift 4.0 -> 4.2 가며 만난 에러님.  (0) 2019.04.08
:-1: Segmentation fault: 11  (0) 2019.04.03
StackView bug  (0) 2019.02.06
gitlab clone error  (0) 2019.02.05
리팩토링 중 만난 몇 가지 상황  (0) 2019.02.04

    lazy var hStackView : UIStackView = {

        let ret = UIStackView()

        ret.axis = .horizontal

        ret.distribution = .equalSpacing

        ret.alignment = .center

        ret.spacing = 1

        return ret

}()

 TroubleShooting

스택뷰 버그 때문에 검색 하셨을 것 같다.

스크롤뷰 안에 스크롤뷰를 넣었을 때는 dummy UIView()를 생성하여 해당 뷰에 붙인 뒤 스크롤 뷰에 넣으니 버그가 나오지 않았다.

사용자 제스쳐(핀치 줌 인/아웃, 스크롤 등) 에 문제가 있어서 취한 조치였다.

스택뷰 아에 스택뷰를 넣고 또 그 안에 스택뷰를 넣은 후 그 안에서 아무리 그림을 그리더라도 UIView에 그리고 붙이면 아무런 문제가 나오지 않을거라 생각했다.


스택 뷰 안에 스택 뷰는 문제가 된다.

그래프가 같이 들어가는 경우 문제가 되더라. 화면에 나오지 않았다. add arrage는 안나오고 addsubview 는 잘 나오는 현상...

관련해서 인터넷 서핑도 많이 해봤지만 우선, 코드로만 여러번 중첩해서 쓰는 경우는 많지 않아서 아직은 안 쓰는게 낫다고 생각했다.


잘 되는 곳에서는 쓰고 아닌 곳에서는 안쓴다.


대안은?

빌더 패턴으로 UIView를 생성할 때 해당 view 내에서 y값만 증가시켜서 패널을 붙이는 빌더 패턴을 만들면 된다.


코드는?

   func createPanels(s : jhScene, withHeightRatios: ratioNtype...) {

        

        var panel : jhPanel<jhScene>? = nil

        var y : CGFloat = 0.0

        var vHeight : CGFloat = 0.0

        

        "".pwd(self)

        

        for rnt in withHeightRatios {


      if(GS.s.logLevel.contains(.graphPanel)) { print("createPanels(withHeightRatios: CGFloat...)", rnt)}

            

            assert(!(rnt.ratio < 0.1 || rnt.ratio > 10.0), "heightRation Range is 0.1~10.0")

            

            vHeight = rnt.ratio * 0.1 * self.jhSceneFrameHeight

            panel = jhGraphBuilder<jhScene>()

                .type(rnt.type)

                .frame(0, y, jhSceneFrameWidth*4, vHeight)

                .scene(self)

                .build()

            y += vHeight

뭐 이런 식.  그래프 빌더가 호출 될 때마다 height 값을 증가시켜서 스택뷰처럼 보이게 만든다. height가 20 이고 이전 y 값이 0이었다면 그 다음 CGRect의 y값은 20, 또 붙이면 40... 이런 식.



 

jh = junho



'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

:-1: Segmentation fault: 11  (0) 2019.04.03
딥러닝 환경 구축 중  (0) 2019.02.07
gitlab clone error  (0) 2019.02.05
리팩토링 중 만난 몇 가지 상황  (0) 2019.02.04
정부 기관 웹 페이지 에러  (0) 2019.01.29

 만나고 먹고 보고 

조인성

카리스마 없음, 잘 생김. 그러나 안시성주로 딱 맞는 인물. 카리스마는 이 영화 이후로 많이 생길듯.

카스스마 없이 모두가 리더로 받드는 이유를 이 영화에서 찾아야 함.


류오성

카리스마 작렬. 너무 카리스마 있다. 특히, 그 카리스마가 눈빛이 흔들릴 때가 있는데 그 부분이 이 영화의 정수.

그런 카리스마 있는 장수의 명을 어기는 발암캐의 성장 과정을 잘 보아야 함.


박성웅

짱개라 싫음. 미안, 지금의 중국인 말하는 것은 아님. 싫은 만큼 연기를 잘하는 것이겠지만 그래도 싫음. 


설현과 그 연인, 그리고 설현

뻔한 선택, 뻔한 전개인데 한국어로 말하는 우리 영화라 그런지 더 현실적.

눈물주의.


멋진 배우들

우리나라 역사물 인 것을 감안해서 출연했는지, 연기력 출중한 배우가 많이 있다. 성동일과 어머니편 조심하삼.

편집

편지으로 해야 하나 영상 편집으로 해야 하나 영화 관련해서 잘 모름. 지인 중에 관계자가 있지만 안 물어보고 싶고, 귀찮으나 안시성 때문에 조금은 알아 보고 싶은 마음이 듦.

크게 나무랄 것 없음 CG, 장면 전환, 300과 비슷한 연출... 우리 기술이 이정도?!


바라는 점

안시성 후속작이 나오던 관련 영화 관계자 분들이 다른 영화를 만들 던 투자가 잘 되었으면 한다. 

 



 




'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

산본 공영 주차장 찾는 법(사람 기준)  (0) 2019.03.08
미금역 갓파스시  (0) 2019.02.11
장인어른과 한잔!  (0) 2019.02.03
홍석햄과 모임 정리  (0) 2019.02.02
홍석이 햄 만남  (0) 2019.02.01

TroubleShooting 

ERROR MSG.

packet_write_wait: Connection to 35.231.145.151 port 22: Broken pipe

fatal: The remote end hung up unexpectedly

fatal: early EOF

fatal: index-pack failed


sshd_config

ClientAliveInterval 60

ClientAliveCountMax 5

not working properly

sudo launchctl stop com.openssh.sshd

sudo launchctl start com.openssh.sshd


ssh timeout 시간만 늘였다

60 * 5 seconds = 5 min


인터넷 속도 좋을 때는 그냥 잘됨

잘 되는데 갑자기 안되는 경우 인터넷이 느려져서...

 



 

99.99%


1. var let으로 바꾸지 말자. 처음부터 let으로 하려고 노력하고 안되면 var는 var 그대로...


Cannot pass immutable value as inout argument: 'ret' is a 'let' constant


var가 리팩토링 중 immutable 해져서 let으로 바꾸었는데 &로 주소 넘기기는 안되나 보다. 굳이 바꾸지 않더라도 copy로 넘기고 싶진 않은데, 따져보면 상수로 저장된게 카피 될리가 없지.


Use of extraneous '&'


같은 류. 구조를 수정해서 var를 let으로 바꾸었다고 좋아했는데... 걍 바꾸지 말자.


2. void pointer는 언제나 만능이었다. JAVA 에서는 Object와 interface,  swift에서는 protocol 뿐. 상위 객체 포인터 믿지마. 안돼.


Cannot convert value of type 'jhSceneTimeLine' to expected argument type 'inout jhScene'


jhSceneTimeLine 이 jhSscene를 상속받았는데도 불구하고 상위 포인터로 하위 object를 받을 수 없었다.


자바에서는 다형성이 잘 지켜져 때문에 뭣하면 최상위 Object로 넘기고(void 포인터) 캐스팅해서 쓰면 되었는데...


swift에서 그 정도의 파격은 허용되지 않았다.  그래서 상위 protocol을 선언하고 모두 상속받게 하여 상위


포인터(인스턴스 변수)를 프로토콜로 하면 모두 통용된다.


SWIFT 나름의 개념이 있지만 포인터로 이해하면 리팩토링시 이해 안되는 부분은 없다.


3. 너무 복잡한 일반화는 독... 걍 클래스 다이어그램을 처음부터 잘 그려야 함.


Cannot assign value of type 'T' to type 'T'


일반화 하면서 만나는 에러, <T>를 상속받는 녀석은 꼭 <T>를 명시하고 builder pattern 적용할 때도 명시해야 한다. 에러라도 나오면 다행인데 builder pattern에 적용했을 때 <T>를 안 적어주고 생성했는데 잘 되더라. 결국 논리 오류로 나오고 찾기 빡쌨음 ㅠ. 4.2 버전인데 5가면 요런 에러 필터링 기능이 더 좋아지겠지.


4. 프로퍼티는 처음부터 누가 가질지 잘 설계하자. protected 없다. 빈자리 크다.


Cannot override with a stored property 'mPanels


새로운 구현인데 원래 구현이 아까워 제네릭화 하다가 프로퍼티 오버라이딩 중 생긴 오류.


같은 이름을 쓰려면 접근 제한자(privagte)을 통하는 방법외엔 없다.


Method does not override any method from its superclass


Value of type 'jhType1graphLayer' has no member 'superScene'

Use of unresolved identifier 'panelID'


접근 제한자 때문에 여러 상황이 생긴다.


protected가 없으니 JAVA처럼 생각해서 설계하거나, 리팩토링 하는 것은 그만둬야 겠다.


객체지향이 들어갔으니 객체 단위로 생각해야 하는데, 모듈 단위는 사실상 폴더 단위라... ㅡㅡ;


하긴 fileprivate은 또 파일 단위인데 프로그래밍 하다보면 한 파일에 하나의 class를 넣는게 맞다는


생각이 참 많이 든다. 이런게 잘 안되니 extension 남발하게 된다. extension이나 데코레이션 패턴은


사실상 작은 단위의 설계가 되지 않는다. 작은 프로젝트는 코딩하면서 설계도 자동으로 되는데 말이다.


5. 제네릭 리팩토링이 자바에 비해 너무 힘들었다. 배 GoF다.


Cannot specialize non-generic type 'jhBarGraph'

프로퍼티나 function이 비슷한 모양(접근 제한자, 인자, 인자에 들어가는 데이터 타입 등등)

이면 편한데 아닌 경우 빡쌨다.


건네 줄 옵션이 많은 애들은 일반화 하면서 


타입 뿐 아니라 파라미터까지 달라져야 한다면 빌더 패턴이 답이다.


func build() -> jhPanel<T> {


switch mGtype {


case .LINE:


return jhLineGraph<jhScene>(frame: CGRect(x: x, y: y, width: width, height: height))


case .BAR:


return jhBarGraph<jhScene>(frame: CGRect(x: x, y: y, width: width, height: height))


case .TYPE1:


return jhType1graphPanel<jhSceneTimeLine>(frame: CGRect(x: x, y: y, width: width, height: height), scene: superScene)


case .TYPE4:


return jhType4graph<jhSceneTimeLine>(frame: CGRect(x: x, y: y, width: width, height: height))


}


안드로이드 스튜디오도 참 많이 좋아졌지만, 이클립스에 있던 리팩토링 기능만 해도 지금의  swift보다는 더 강력했다. 제네릭으로 어느 정도 꼬이니 이제 cmd+shift+O 도 찾고자 하는 클래스를 잘 못 찾고 헤매는 경우가 많더라.



스위프트 4.0 -> 4.2 짜증

'NSAttributedStringKey' has been renamed to 'NSAttributedString.Key'


6. lvalue 옵셔널 모든 에러 안 잡더라 대입 잘된다. 조심하자.


 옵셔널은 사실상 null check 에 편한 문법과 설계상 고려하라고 만든 문법이다. 그러나 특정 상황에서는 무조건 null이 안되는 경우가 있기 때문에 옵셔널을 전달받은 어떤 객체가 꼭 옵셔널일 필요는 없다. 그래서 !가 있는데 !는 사실 안쓰는게 맞거든... ! 쓸바엔 Assert가 맞지.



이렇게 예민한 이유는 컴파일/런타임 에러 없는 논리 오류 하나 찾기가 참 어려웠는데, ...


답은 Optional? 에 대입해서였다. 옵셔널이 윗단에서 주구창장 내려온 경우 대입할 때 ?를 붙여서


대입해 버렸는데, 참... 대입 잘되더라.


이런 오류 날 것 같지?


Initializer for conditional binding must have Optional type, not '[CGFloat]'


안나는 경우도 있었다. 정리하면서 했던게 아니고 논리 오류 찾는데 힘들었기에 원칙으로 남겨둔다. 엘벨류 조심하자.


아니면, 한번 옵셔널은 계속해서 옵셔널로 하는게 좋겠다. 상위단에서 있을 수도 없을 수도 있는게 하위단으로 내려간다면 하위단에는 무조건 있는 것으로 바꿔야 하는 경우가 있었다. 널체크 하고 넘기는데 사실, 그게 그 객체를 구성하는 프로퍼티중에 핵심적인 것은 아니어서 있으나 마나한... 


반대의 경우도 있었다. 옵셔널이 아니었는데 상속 구조상 어느 객체에는 있고 어느 객체에는 없는

프로러티가 되어 버린 경우, 두 가지 클래스에 먹히는 제네릭 클레스를 만든 경우... 해당 프로퍼티는

옵셔널이 되어야만 했다.


최대한 이런 경우를 없애야 하는데 개념상 그렇게 구현을 해야 하고...


그렇게 꼬이다 보면 결국 디자인 패턴을 쓰게 된다. 오늘 파일을 나눈 방식을 정리하면,


Separation

- flag

    - flag + if, switch 원초적이나 시온이다.

    - C에서는 #define 이 짱이지. #ifdef, #ifndef

- file

    - separated file + call(자바 때부터 뭐... startActivity using intent, function call, pushViewController...) 콜만 잘되서 연결되면 오케이 였다. 리눅스에서도 그랬잖아. 시스템 콜 잘 부르면 되고... 커널 API만 잘 쓰면 되고.

    - separated file + builder pattern - passing self again and again(늘 고맙지)

    - separated file + proxy pattern(related with memory managements) - can't using directly 객체 단위 캡슐화닷!

    - separated file + adapter pattern - overriding, generic, converting ... whatever use current class or method 고치기 힘들어서 걍 중간 다리 만들었다.

    - separated file + decorator pattern - also passing object via parameter(서브 클래싱 대신 기능 확장용... 익스텐션이 낫다.)

    - separated file + bridge pattern - also passing object via parameter(구현부에서 추상층을 분리 ㅡㅡ; 제네릭화 ... 개고생 어댑터가 낫다.)


이정도 인데 사실 structural 패턴을 쓰다보면 파라미터에 함수 포인터를 넣어서 자기 객체를 계속해서 넘겨 주느냐 안 넘겨 주느냐가 핵심이다. 안 넘겨 주면 중간에 다리 역할을 할 친구를 찾는거고.


결국 소스를 가장 적게 수정하는 것은 싱글톤을 넣는게 최고.


객체 단위니 싱글톤이고 그 개념은 결국 플래그고... 플래그는 결국 세마포어고...


믓튼 


풀 때는 guard로만 풀자고 다짐해 본다.


몇몇 메모리 오류가 났는데,


Kernel Alloc Once 8K 2


MALLOC 293.3M 126


MALLOC guard page 176K 39


MALLOC_LARGE (reserved) 516K 2 reserved VM address space (unallocated)


swift 역시 메모리 관리 한다고 욕본다.


추상화 개념은 추상화 그대로 이해하고 싶은데, ... 결국 메모리 중심으로 생각하는게 정답이라는 생각.


var
 str = "A String"

withUnsafePointer(to: &str) {

    print(" str value \(str) has address: \($0)")

}



메모리 안에서 우린 평안할 지어다.


쓰다보니 뇌 컨디션이 좀 돌아온다.




발렌타인 30년산과 로얄 살루트 21 년산 모두 5년 정도 숙성 시킨 것 같다.

로얄 살루트는 코르크도 이상없고 맛이 깊어 졌지만 발렌타인은 30년산 특유의 벌꿀 블랜딩이 다 날아가고 양도 손가락 2마디 정도 줄었으며, 21년산 + 알콜 더 탄 것 같은 맛이 났다.

개인적으로 조니워커 블루와 스카치 블루 시리즈를 좋아하는데 발렌타인은 30년산만 좋아했다. 벌꿀 블랜딩 때문에... 이번에 숙성하면서 해당 브랜드에 대해 신뢰도가 많이 떨어졌다.

그러나 벌꿀 블랜딩은 너무 맛있어서 아마 숙성 안하고 바로 먹거나 할 것 같다(5병을 사다보니 숙성하게 된 것)


소주나 양주나 막걸리나 다 같지만

나에게는 양주가 조금 맞긴 하다.

'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

미금역 갓파스시  (0) 2019.02.11
안시성 후기  (0) 2019.02.06
홍석햄과 모임 정리  (0) 2019.02.02
홍석이 햄 만남  (0) 2019.02.01
잘나가는 BJ가 생각해 보아야 할 꺼리를 제공하는 글  (0) 2019.01.27

어제 포스팅한 참치집 새로 생겨서 아직 카카오 네비에 안 뜬다. 기흥 육지로간참치


그리고 아래 맥주집에는 망고랑 동그란 튀김이 너무 맛있었다.


그리고 경기도에서 카카오 대리보다 더 큰 업체 전번

카카오 대리 쿠폰 받아서 쓰려다가 술이 취하니 전번이 더 쉽더라는...




이 형은 좋은게 만나면 술 값 나지 말란 말부터 한드​

http://www.minwon.go.kr/TouchEn/nxKey/module/TouchEn_nxKey_Installer.pkg?ver=1.0.0.47






"요청 페이지 오류"

요청하신 페이지가 잘못되었으니 아래를 확인하신 후 다시 접속하여 주시기 바랍니다.

1. 정부민원포털 : http://www.minwon.go.kr

2. 민원처리운영창구 : https://my.g4c.go.kr

감사합니다.



해결 : http://faq.touchen.co.kr/nxKey/



PS C:\Users\joe\AppData\Local\Android\Sdk\tools\bin> ./sdkmanager.bat --licenses


Accept? (y/N): y
y
y
y
y
y

All SDK package licenses accepted






and...


No cached version of com.android.tools.build


Uncheck "Offline work" in Android Studio 

File->Settings->Gradle->Global Gradle Settings

https://cafe.naver.com/getoutonmywayyoutube


이 글은 아프리카 BJ, 유투버 철구, 보겸 및 기타 방송에 댓글로 달려고 만드는 글이다. 철구 방송은 딱히 거론할 가치가 없기에 보겸 방송만 이야기 한다.

아프리카는 접근성이 좋지 않아(들어가본지 오래되서) 구글 유투브 댓글에만 복/붙 하려고 생각 중이다.

그러면 궁금한 사람 1%가 타고 넘어 올 것이고, 타고 온 사람은 구글의 애드센스 광고를 보게 될 것이다.

구글 애드센스의 자동 AI 광고가 얼마나 많은 클릭을 유도하는지 나도 알아 볼 수 있으니 좋다. 새로운 사용자 "획득" 부분도

해당 방법을 썼을 때 어떨지도 좀 봐야 하고. 내 생각에는 구글 광고를 클릭하고 구매력이 있을 만큼 경제력이 있는 독자는 없을거라 생각하지만

지금 광고 법칙은 단순 클릭만 해도 우선, 돈을 벌 수 있는 구조이기 때문에 광고주들은 돈을 쓰게 되어 있다.


우선, 내 블로그에 이런 글을 쓰는 이유는

보겸 TV 구독을 해지하면서 짭쪼쿠가 되었는데 그 동안 보겸TV를 많이 보다보니 구독 해지를 해도 계속해서 추천을 하기에 보게 되었다.

보겸 TV가 딱히 재미있어서 본 것은 아니다. 나이를 먹으니 그런 컨텐츠가 사실 별 재미가 없다. 그리고 보겸 방송 자체가 게임을 하는 학생이나 직장이 초년생을

주 타겟으로 하고 있기 때문이다. 또 한 지금은  내가 대단하다고 생각하는 것은 시청자와 공감대를 형성하는 기획을 하는 것과 방송에 지루할 틈이 없고, 

물 흐르듯이 편집된 방송을 어떻게 만드는지 나도 배우고자 보게 된다. 7년 전부터 조금씩 방송을 했었지만 생업이 바쁘고 생업만큼 돈을 벌기가 힘들다는 판단에 그만두었으나,

항상 배우는 자세로 있긴하다. 다른 BJ를 보면 가벼움이 느껴지는데 보겸 방송을 보면 자신이 하는 일을 매우 진지하게 생각하는 것이 가벼운 컨셉으로 하는 방송에서도 느껴진다.


보겸 TV는 이런 것들이 장점이다. 보겸이 결혼을 하고 애기를 낳고 나면 채널 성격이 변하겠지만 급성장 할 수 있도록 확실한 타게팅을 했고 그렇게 성장한 것을

바탕으로 채널의 변화를 꾀하고 있다. 보겸 이전에 내가 본 가장 멋진 출구 전략을 세운 것은 캐리였다. 방송하더니 지상파(Ground wave) 방송도 섭렵하고 캐리 상품 출시 및 어린이 카페까지 만들었다. 캐리 카페도 자주 갔는데 다른 곳에는 없는 컨텐츠가 너무 좋았다.(아이들끼리 족욕하면서 와인잔(포도주)을 짠~ 할 수 있는 등...)


보겸도 출구 전략을 세워야 할 때다. 보겸의 장점은 우리나라 구독자로만 300만을 채운다는 것이다. 단점으로 보면, 이것은 문화와 언어가 다른 외국으로 뻗어나가기에는

어려운 부분이 있다. 그러나 장점으로 보면, 확실히 국내 사용자만 대상으로 하기 때문에 해외 진출에 관심없는 국내 광고 업자들에게는 매우 매력적이다.

채널을 보는 사람 중에는 몇몇 부자가 있긴 하지만 대부분 경제력이 없는 사람이 대부분이다. 그러나 시간이 지나면 그 학생들이 경제권을 가지게 된다.

의사나 판사 검사나 전문직 비율이 자체가 낮기 때문에 고수익을 얻을 수 있는 비율은 작지만 청담언니 치유처럼 대리 만족을 주거나 싸고 좋은 물품을 홍보하는 것으로

먹고 사는데는 전혀 지장이 없는 미디어 회사로 거듭날 수도 있다는 생각이다.


급성장 할 때는 자신을 돌아볼 기회도 없이 성장한다. I believe I can fly 로 유명한 알켈리 라는 가수가 있다. 친구가 중학생 때부터 좋아했었기에 나도 그 영향을 받았는데, 최근 소아 성애자로 이름을 더럽히고 다수의 소아 성애 녹화 영상이 공개되고 그 안에 애 얼굴에 오줌을 싸는 부분도 있었다. 보겸 TV를 아무 생각없이 새벽에 보다보니 다른 아프리카 TV 탐방을 가면서 오줌을 보내 달라는 것을 편집없이 그냥 내보냈던데. 모두 알켈리와 같이 그럴 힘이 없어서 지금 숙이고 있는 것이지 힘을 가지면 바뀔 사람들이라는 인식이 팍 들었다. 이완용 같은 위치에 올라가면 나라를 파는 계약서에 싸인을 할 것 같은 느낌이 들었다.


이미 하나를 하다 다른 것을 했을 때 시청자가 떠나는 것을 경험해 본 보겸이라면 영국남자 같은 채널 변화는 힘들다는 것을 알 것이다. 그래서 지금 확실한 타겟층을 대상으로 하거나 어그로를 끌면서 구독자를 올리고 나중에 내실을 다지고자 생각할 수도 있을 것이다. 


세상은 빨리 변한다. 이런 글과 아이디어를 제공하는 것은 나 자신의 공부와 다소의 이익도 있겠으나, 강성태, 말이야TV는 유투브를 보며 내 아이에게 끼친 영향보다 캐리, 허팝, 보겸이 아이에게 주는 영향이 큰데 재미만을 따지면 안된다. 우리나라에게 마약과 매춘, 도박으로 판치는 세상을 만들면 되지 굳이 법으로 제정해서 그것을 막는 것이 이유가 있는 것이다. 구글은 그런 부분에 큰 개입이 없는 회사로 유명하다. 각 나라의 정치적 신념이나 갈등의 이유보다 개개인의 자유를 존중하고 많은 사람들이 유입될 수 있도록 하는데 초점을 맞춘다.


기술자로서 말하는데 구글이 글자에만 욕하는 것을 금지하고 음성으로 욕하는 것은 안 막아서 온갖 방송에서 욕이 난무하는 이유는 블리자드가 그렇게 하는 것과 별반 다르지 않다. 키보드로 욕하면 안되고 음성으로 욕하는 것은 필터링이 어려워 놔두는 것도 마찬가지 이유다. SK 누구나 헤이 카카오를 사보면 안다. 음성 인식 어려운 기술이다. 그래서 수많은 사용자를 대상으로 잘못된 것을 필터링 하는 기술을 일일이 적용할 수가 없다. 방송하는 사람도 이정도 해도 되나? 어라 해도 되네? 에이 그래도 좀 아닌 것 같아. 라는 식의 생각으로 어떤 동영상은 고상하게 제작하기도 한다. 그리고 힘이 없다.


http://news.chosun.com/site/data/html_dir/2017/07/16/2017071600505.html


2년 전 기사임에도 불구하고 아직도 인터넷 방송에는 욕이 난무한다.


만약, 보겸, 철구 등 욕하는 방송을 싫어하는 사람 모임을 결성하면 어떨까? 그것을 네이버에 결성하고 국회에 건의하는 것을 네이버가 담당해서 하면 어떨까? 그것을 제재하지 않는 구글을 국내에서 아예 사업을 못하도록 정지를 몇번 먹이고 결국 퇴출하게 되면 어떨까?


네이버의 매출이 급상승할 것으로 보인다.


그냥 아이디어고 생각이다. 구글 욕하면 안된다. 나도 빌어붙어 먹고 살아야 하니까.


'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

홍석햄과 모임 정리  (0) 2019.02.02
홍석이 햄 만남  (0) 2019.02.01
강남 이자카야 나무 가격대  (0) 2019.01.22
애들 놀러옴, 어른들 끼리 뭉침  (0) 2019.01.20
헬륨 풍선 후기  (0) 2019.01.19

일본으로 수출하는 세슘 측정기가 있는 사진이 있다.


난 라돈 뿐 아니라 세슘에도 관심이 많았다. 식약처가 방사능 측정하기 전부터니까 아마 그 때 꾸준히 업데이트를 했으면, 애드센스 수익도 꽤


되었을거라 생각하지만 본업인 개발 자체가 돈을 워낙 많이 벌고 있었기에 전혀 관심이 없었다.


우선, 이번에 구입한 라돈 측정기 관련 썰을 풀겠다.


이 포스팅은 그 동안 이 카테고리 글을 주의 깊게 읽은 분을 위해 부연 설명 하지 않겠다.


11번가의 라돈 측정기 판매 업자는 판품 문의에 대해 대응을 하지 않고 있다.


short term 값은 쓰레기라고 표현할 수 있을 정도로 일주일 측정 뒤 long term 값과 천지 차이의 값이다.


1일만에 측정? 그것 때문에 이불 만드는 업체 대표랑 싸우게 되었는데, 그 업체도 이 제품을 구매했다.


신기한 것은 문제 없으면 연락을 준다고 했는데 따로 연락이 없으니 재구매 할 필요는 못 느끼겠고,


개인적으로 라돈 이불은 맞다고 결론을 내려도 될 것 같다. 행여나 다시 연락이 온다면 포스팅을 한번 더 하려고 한다.


즉, 결론만 말하면.


1. 라돈 이불 업체 대표도 깨림직한 듯.

2. 라돈 측정기도 딱히 품질에 대한 자신감은 없는 듯.


내가 날린 시간(싸움의 시간은 난 재미있으나 사실, 스트레스풀 한 것으로 비교해서 5시간 이상, 강의 단가 기준 400만원 손해)

그리고 내가 날린 비용(이불은 반품했으니, 17만원)을 이 글을 보는 독자는 안 겪었으면 해서 남겨둔다.


라돈 측정기는 다른 것을 사고,

이불은 검사 결과 이딴거 믿지 마삼. 어차피 라돈 측정 안하니.


정말 문재인이나 뉴스타파 빼고는 믿을게 하나도 없다.


'진행 프로젝트 > [진행] 설문조사 서비스' 카테고리의 다른 글

010 5117 4569  (0) 2019.03.20
010 8467 5938  (0) 2019.03.20
클렙튼 라돈 측정기 사용자 리뷰  (1) 2019.01.20
벨라 이불 대표와 통화  (1) 2019.01.15
벨라 이불 라돈 수치 정상  (3) 2019.01.13





0. 시작



최근 안드로이드와 iOS 파트를 후임들에게 물려주고 있다. 안드로이드 플랫폼 자체가 패턴 덩어리. 그리고 많은 디자인 패턴이 적용된 어플을 주고 있다. 당최 인터넷 찾아봐도 패턴을 잘 모르겠다는 후임들을 위해 세미나를 하고 있는데 작은 몇 마디 만으로도 Creational Pattern을 이해하는 것을 보고 실무 프로그래밍 중급편에 실릴 내용으로 세미나를 하여 여기도 적어 본다. 우선 "썰"이라 붙인 이유는 자세한 설명은 인터넷에 많으니 그들의 연결 개념을 전체적으로 말해두려고 한다. 열심히 공부하다 보면 이 글의 말로 Creational 패턴을 모두 연결할 수 있을 것이다.





1. 패턴 공부는 시작은 자바로



우선, 패턴은 자바 기준으로 공부하는 게 맞다. JAVA와 C#은 실무 프로그래밍을 한 입장 + 문법 관점에서 완전히 동일한 언어로 봐도 된다. C++도 마찬가지겠지만 그렇게 보면 안 되겠다. class 가 메소드(펑션, 함수)를 포함한다는 것을 빼면 struct랑 완전히 동일 개념이지만 다르다고 생각해야 하듯이 C++은 다른 언어로 봐야 한다. 물론, 공부할 때 생각만 다르다고 하는 것이지. C/C++, JAVA, C#, SWIFT에 적용되는 패턴은 완전히 동일하다. C/C++ 만 한 친구들에게 자바를 이해시키고 예제 코드를 짜게 하는데 딱 하루 걸렸다. 그다음 날은 전혀 스트레스 없이 완전하게 자바 코드를 짜고 자바 기반의 안드로이드 프로그램을 수정하기 시작했다. 그러나 자바 기준으로 이야기를 하는 것에 대해서는 이해를 하기 바란다.





2. 패턴을 만든 이유



진심은 이 글 제일 마지막에 적었다. 그러나 표면적 이론을 따지자면, 생성 패턴은 코드수를 줄이기 위해 만들었다. 코드수를 줄이는 방법은 재사용성을 높이는 것이고, 재 사용성을 높이려면 작은 조각으로 나누되 설계를 잘해서 만들어야 한다. 코드수가 많아지더라도 요구사항에 대해 더욱 유연하게 대응해서 개발 시작부터 Acceptance Test를 할 기간을 더 줄일 수 있다면, 그것은 패턴이 잘 적용된 것이다. 패턴 공부는 따로 안 해도 된다. 안드로이드 프로그래밍을 하면 된다. 거기 모든 패턴이 녹아 있다. 그래서 안드로이드 프로그래밍 한 달만 하고 이 글을 보면 바로 모든 게 이해될 것이다.





3. 한방에 설명



자바에서 메모리에 뭔가를 생성시키는 것은 딱 3가지밖에 없다. new, static, primitive type. 그러나 기본 자료형은 빼야 한다.(너무 당연한 것이고 기본자료형으로만 통신하는 프로토콜을 만들 때(안드로이드의 AIDL 같은)만 필요해서 빼는 것이다) 결국 2가지인데, Creational Pattern은 애들은 어떻게 쓰느냐에 따라 다른 것이다.



결국 static와 new를 어떻게 쓸 것이냐.







지워졌었던 내 글을 봤다면 다형성은 void 포인터로 for문을 돌리기 위해 만든 개념이고 캡슐화는 개발자를 믿지 못하기 때문에 만든 개념이라고 이해했을 것이다.





싱글톤 패턴은



생성자를 캡슐화하고 하나만 생성되게 하는 것이다. private으로 생성만 만들면 결국 캡슐화를 통해 매소드를 통해서 전달할 수밖에 없는데 하나만 전달하게 하면 싱글톤 패턴이 되는 것이다.







public static synchronized GlobalSetting getInstance() {



if (mInstance == null) {



synchronized (java.lang.Object.class) {



if (mInstance == null)



mInstance = new GlobalSetting();



}



}



return mInstance;



}







이런 녀석은 예제의 이름처럼 세팅값을 저장하고 여러 클래스에서 불러 쓸 때 매우 유용한다.





팩토리 매소드도 비슷한 녀석이다.







public FactoryMethodModel() {



ARM samsung = makeInstance();



ARM nvidia = makeInstance();



ARM qualcomm = makeInstance();







직접 NEW를 하지 않는 점에서.



다른 클래스에서 생성해서 리턴해 주도록 만들면 된다.







class SAMSUNGEngineer extends FactoryMethodModel {



@Override



protected ARM makeInstance() {



return new ARM("samsungARM");



}



}







문제는 왜 이렇게 만들까?



final List<ARM> armlist = new ArrayList<>();



리스트를 만들 수 있기 때문이다.



armlist.add(samsung);



이렇게 추가하기 위해서다.







자바의 abstract는 interface와 똑같은 녀석인데 멤버 자료형을 가질 수 있다는 점에서 차이가 있다. 자바 용어로 말하면, 멤버 변수인데 별로 마음에 안 든다. 여하튼, 그것을 이용한다.







얘는 어디에 쓸까? 안드로이드의 BR 서비스랑 비슷한 것을 만든다고 하자. 그럼 앱 규격을 내려주고 하위에서 구현해서 위로 올려주고 나는 목록만 가지고 있으면 알림이 왔을 때 리스트에 대고 for를 돌리면 그게 BroadCast 가 된다. 해당 앱.수행할 메소드() 를 적어주면 메시지 구조나 이벤트 드리븐 기능을 구현할 수 있다.





템플릿 메소드는



사실상 팩토리 매소드와 같다. new 를 하는 주체가 연결 클래스에 있으니 말이다. 템플릿은 interface를 하나 더 두어서 연결 클레스가 구현해야할 메소드의 명세를 명시화 한다는 개념이 추가 되어 사실상 더 큰 개념이다. 인터넷에 이론가들은 절대 동의하지 않는 것 같지만 뭔 프로그램을 만들었는지 알게 뭐람. 컴파일러 만들 때도 실무 경험 없는 이론가들이 만드는 개념은 무쓸.





빌더 패턴은



new 할 때 멤버변수를 미리 세팅하고자 하기 위해 만들었다. 그냥 생성자를 오버로딩 해서 쓰는게 LOC(Line Of Code)가 더 줄지 않느냐고 묻는다면 어느 정도 수준에서는 빌더 패턴이 더 낫다고 말하고 싶다. 그게 어느 수준이냐?



Chip c = Builder.setBrand("SAMSUNG").setPrice("개비쌈").build();



로 나갈 때 setPrice가 int면 모르겠는데 저렇게 String을 적는다면 setPirce만 오버로딩 하면 되는데 생성자의 경우 경우의 수가 더 많아진다.



그럼 저렇게 . 찍는 것은 어떻게 구현하냐?



this.brand = brand;



return this;



return 을 클래스 자체로 리턴하면 계속 . 을 찍을 수 있다. 이론 관점이 아니 코드 관점에서 먼저 보면 참 쉽다.





Strategy 패턴은



인터페이스를 나누는 기술이다.



라는 것만 알고 인터넷 서핑 공부법(실무프로그래밍 참고)으로 공부하면 된다.





Prototype 패턴은



interface, Abtract, class를 얼마나 예쁘게 만드는지에 대한 연구이다. 사실 팩토리 메소드 패턴인데 객체 생성 이름은 clone()으로 한 것 뿐. clone() 안에 super.clone() 이 있던 말던 최종 clone에는 static 혹은 new가 들어갈 수밖에 없다.







이 모든 패턴을 조합해서 만든 Creational 패턴이 바로





Abstract Factory Pattern이다.



Factory Method처럼 바로 하위에서 바로 객체를 생성해서 리턴해 주는 게 아니라 우선 Factory를 받아오고 해당 Factory를 이용해서 new(creation)를 한다. 이렇게 설계하는 과정 자체에 protytype과 stategy 패턴이 들어가고 팩토리에서 실제 객체를 생성하는 패턴은 Factory Method다. 해당 팩토리가 부르는 클래스 안에는 세팅 다 해서 자기 객체 리턴하는 하는데, 생성자가 복잡해진다 싶으면 빌더 패턴으로 구현하는 것이 편하다.





내가 패턴을 공부하게 되었던 것도 학창 시절 교수님께서 구입해 주셨던 GoF Design Pattern 때문인데. 사실 코드로 보다 보니 거기 써져있던 패턴 맵이 그 책의 정수라는 것을 알게 되었다.







권장하는 것은 아니지만 워낙 유명한 책은 인터넷에 항상 PDF로 있으니



gof design pattern filetype:pdf



으로 잘 찾으시고 책이 좋으면 꼭 원서를 구입하시기 바란다.





4. 결론



creational pattern 은 new를 어디서 할지 정하는 패턴.



즉,



new pattern 으로 불러야 한다. 너무 싼티나면







memory allocation pattern.





스타트업 이야기



혹은,



I can't trust you pattern. 사실 패턴이란 것은 협업 시 다른 사람에게 인터페이스, Abstract, Protocol, Specification Documents(스펙) 던져주고 전체 그림을 못 보게 만들려는 수작이다. 전체 소스는 주되 쉽게 접근할 핵심은 말 안하다는(언젠가는 분석된다면 시간이 필요하지) 나 혼자 성공하려면 넌 좀 모르게 할 필요가 있을 때 쓰니까 그런 정치에 맞서 사용자가 원하는 프로그램을 만들고 싶을 때, 패턴을 잘 배워두자.

'진행 프로젝트' 카테고리의 다른 글

refactoring.guru  (2) 2019.01.06

 I am working to build a 3D programming using the swift programming language. OpenGL, DirectX, Metal and whatever I want to study 3D stuff will be here. My goal is that I am going to make all of 3D stuff by swift programming language later on. Why Swift? We thought that C/C++ is the best tool playing memory and every CPU functions. The reason why I choose is that Modern language is not just a programming language.


It's the way to think.


'진행 프로젝트 > [진행] 개발 팁 &amp;amp;amp;quot;줘볼까?&amp;amp;amp;quot;' 카테고리의 다른 글

drawrect  (0) 2020.11.25
date  (0) 2020.11.25
drawText  (0) 2020.11.24
포로그래메트리  (0) 2020.10.04
three.js를 사용하여 웹에 3D 얼굴 띄우기  (2) 2019.01.08



아이들이 많이 모였을 때는 피자가 좋은 것 같다.

어른들이 많이 모였을 때는 회+소주가 좋은 것 같다.

git log 로 commit 을 확인한다.

최근 2개만 diff 포함 볼 때는

git log -p -2 로 보고 화면 이동은 vim 과 같이 ^f, ^b 포 페이지 이동, ^e, ^y 로 한줄 씩 이동해서 본다.


git log 로 commit 번호를 확인 후에는


헤드만 이동

git reset --soft [commit#]


스태이지에 올려진 파일도 이동(index 이동)

git reset --mixed HEAD~


현재 작업 디렉토리 파일도 이동

git reset --hard HEAD~


[commit#] 을 HEAD~ 로 바꾸면 현재 head 

보통 git reset --hard HEAD~ 를 많이 쓴다.


깃에서 헤드가 마스터보다 앞서 있을 때 헤드로 싱크하기


git branch -f master HEAD

git checkout master


왠만하면 브랜치는 master에서만 하지 말고 develop에서 하고 주기적으로 master로 머지하자. 주기적 머징이 없다면, 헤드를 잘못 이동시켜 깃이 꼬일 수 있다.

결국, 디벨롭 따서 거기서만 개발하는 것은 차라리 master에서만 개발하는 것보다 더 못함.


git remote add original/develop git@github.com:hajunho/xxxx.git

'진행 프로젝트 > [진행] My tools.' 카테고리의 다른 글

정부 기관 웹 페이지 에러  (0) 2019.01.29
You have not accepted the license agreements of the following SDK components  (0) 2019.01.28
snapkit 에러  (0) 2019.01.18
kakao T crash  (2) 2019.01.18
ibk onebank crash  (0) 2019.01.18

우선, 결론만 알고 싶으신 독자를 위해 라돈 측정기에 올려둔 [판매자에게 질문] 과 [제품리뷰]를 올린다.

그리고 지극히 개인적인 내용이니 구입할 때 참고만 했으면 한다. 그리고 그 개인을 과대 광고를 성폭행범 만큼 싫어하는 사람임을 밝힌다.


이 제품 때문에 반품한 물건에 몇 개인데, 1시간 만에 측정 가능하다고 해놓고 설명서 보니 2시간. 그리고 반품 한 이불 업체에 라돈 때문에 대표랑 싸우고 있는데 그 업체에서 같은 제품 구매하니 업체에는 일주일 측정해야 제대로 된거라고 말했다면서요? 지금 장난합니까? 일주일 측정치가 정확하다는 것은 설명서에 나와서 알겠는데 그게 2000 넘게 나오다가 나중에는 확 떨어지는 거면 무슨 광고는 이따위로 하는거죠? 환불 방법 가르쳐 주세요.


나는 여기서 구매를 했다.

http://www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=2162952797&xfrom=&xzone=


온 갖 사탕발림이 있는데. 화면을 캡쳐해서 올려둔다.


라돈도 이동이 가능한 것인가? 매트리스에 라돈 수치가 100을 넘지도 않았는데 라돈이 문제라고 생각한 이불을 반품하고 측정했을데 2000이 넘어갔다.


내가 1000넘으면 아... 라돈도 이동이 되는구나 하겠는데. 2000 넘으니까 이젠 모르겠다. 숏텀과 롱텀이 설명서대로 뭘 뜻하는지 모르겠다. 대학 나오고 명문 대학원 두군데 전액 장합금으로 합격했으나 못갔고, 서울 연고대생 및 대학원생 가르치는 나도 이해를 못하겠는데 내가 정말 ㅂㅅ 일까?


일단, 환불 시도를 해 보려고 한다. 어쩌면 여기가 정말 희대의 사기꾼 기업이 아닐까하는 생각도 든다. 한시간 안에 뭘 측정한다는 거지? 이젠 측정하는 제품마다 warning 이 맥스를 찍는데,...


안방 벨라 이불 측정 : 1300 이상 warning 단계 거의 맥스(사진 공개 했음)

안방 벨라 이불 세탁 후 측정 : 마찬가지

따쑤미 텐트 와서 측정 ; 1400 이상 

이상해서 그냥 안방 대기에 놔두고 이틀간 측정  40 이하

따수미 텐트 교환 신청하고 안방 메트리트 측정(이전에 30 이하 나왔던 제품) -> 2300 이상


내가 라돈에 대한 지식이 모자란 것은 알겠는데, 다른 소비자를 위해 한마디 하면, 광고랑은 다른 제품인 것 같다. 

ㄱ ㅆ 거지 같은 제품이라고 하고 싶지만 블로그이기 때문에 그렇게 쓰진 않겠다.


클렙튼 라돈 측정기 반품 이후에 벨라 이불 재 주문 해야 겠다. 반품이나 제대로 될런지 모르겠다.








잘 띄웠다. 바닥에 까는건 에어 콤프레샤를 이용했다. 에어 컴프레서 가 좀 더 맞는 느낌이지만 샤 로 검색해야 하고, 저걸로 충분했다. 바퀴가 없어서 좋았다. 헬륨은 혼자 넣어도 되는데 컴프레샤는 무조건 2인 1조로 해야 한다. 공기압이 채워지기전에 계속 불어야 하기 때문.


바닥에 까는 것만으로는 약하다.

그리고 띄운다고 좋은게 아니라 끈을 달아야 한다는 것도 알았다.


그리고 풍선은 대체적으로 여자가 남자보다 잘 묶는다.


'진행 프로젝트 > [진행] Useful Logs' 카테고리의 다른 글

강남 이자카야 나무 가격대  (0) 2019.01.22
애들 놀러옴, 어른들 끼리 뭉침  (0) 2019.01.20
인스타 정리 중 6  (0) 2019.01.19
인스타 정리 중 5  (0) 2019.01.19
인스타 정리중 4  (0) 2019.01.19

+ Recent posts