BLOG main image
LEEEJONG (165)
IT (53)
주관적평가 (31)
창작공간 (80)
109,971 Visitors up to today!
Today 5 hit, Yesterday 57 hit
daisy rss
tistory 티스토리 가입하기!
'2017/09'에 해당되는 글 9건
2017.09.24 16:11

Bless 앱 만들때 사** 형이 ui작업하며 cocoapods를 사용하는것을  봤지만 크게 신경쓰지 않았다.


alamofire라는 플러그인을 사용하는데 cocoapods라는 플러그인 관리 매니저?? 라는게 있구나 하는 정도로 이해하고 넘어갔다.




프론트를 본격적으로 하려고 보니 디자이너와의 협업에 대해 생각하게 되었고


전에 공부했던 


Faceboo keyframes -> https://github.com/facebookincubator/Keyframes

Airbnb Lottie -> https://github.com/airbnb/lottie-ios#introduction


에 관심이 생겼다


근데 키프레임스보다 로티가 좀더 널리 활용되는것으로 보여 좀 공부하려고 찾아보니


이역시 cocoapods로 패키지가 관리되고 있는것으로 파악됐다.


따라서 코코팟즈 사용법을 먼저 정리하고 넘어간다.


https://www.raywenderlich.com/156971/cocoapods-tutorial-swift-getting-started

코코팟즈 사용법은 위 페이지를 보면 상세히 알 수 있다.

나는 다만 한국어로 편하게 요약을 할 뿐이디.



맥 sierra 기준으로 터미널을 열어

> sudo gem install cocoapods 


-> 여기서 gem은 RubyGems is a sophisticated package manager for Ruby.  This is a

루비잼이라는건데 루비로 만든 패키지 매니저 라고 한다.


여튼 install cocoapods를 한 뒤에

    pod setup --verbose
    

팟 셋업을 해주면된다고 한다.


sudo가 필요한건 install cocoapods 할때 뿐인것으로 보인다.



어떤 xcode플러그인이 필요한 경우 cocoapods 셋업을 해주는데 이때 podfile이라는게 사용된다.



Xcode를 종료하고

해당 프로젝트 폴더에 들어가서


pod init을 해주면 podfile이 생성되고

생성된 podfile을 통해 패키지가 관리된다.


필요한 패키지가 있는경우

    pod 'Alamofire', '4.4.0'
    

위와같은 명령어로 dependency를 추가한다.

이건 의존성만 추가되는 명령어 이며

업데이트나 최초 설치할땐

pod isntall / pod update를 추가로 실행해줘야 해당 패키지를 받아서 프로젝트에 넣어주게 된다.



추가된 패키지는

import Alamofire


이런식으로 사용하면 된다.

fileprivate func loadFlavors() {

  // 1
  Alamofire.request(
    "https://www.raywenderlich.com/downloads/Flavors.plist",
    method: .get,
    encoding: PropertyListEncoding(format: .xml, options: 0)).responsePropertyList {
      [weak self] response in

      // 2
      guard let strongSelf = self else { return }

      // 3
      guard response.result.isSuccess,
        let dictionaryArray = response.result.value as? [[String: String]] else {
          return
      }

      // 4
      strongSelf.flavors = strongSelf.flavorFactory.flavors(from: dictionaryArray)

      // 5
      strongSelf.collectionView.reloadData()
      strongSelf.selectFirstFlavor()
  }
}

위와같은 방식으로 사용된다고 한다.



기본개념은 이렇다고 한다.


이제 lottie를 추가하고 사용해보도록 하자.



Name
Password
Homepage
Secret
2017.09.18 13:24

기억나는대로 적어본다.


슈베르트 미완성교향곡

베토벤 3번

베토벤 6번

베토벤 5번

드보르작 8번

차이코프스키 5번

말러 1번

세헤라자데

브람스 3번

라흐마니노프 2번

시벨리우스 2번



적고보니 몇 안되네..

Name
Password
Homepage
Secret
2017.09.12 16:13



아.. 사이다


사실 지금까지 내가 많이 쫄았던 영역중 하나가 바로 이부분이다.


psd든 뭐든 가져오면 보고 대충 이쁘게 따라서 만드는건 하겠는데

이걸 디자이너가 의도한대로 똑같이 만들어줘야되잖아.



근데 영 그 계산법을 모르겠는거지 게다가 난 자르는법도 잘 모르니까 디자인 나오는거에 대한 부담감이 있었다.


자르는법에 대해서는 전에 옆에 선임님과 책임님이 알려주셔서 많이 정복했고 지난주금욜부터 오늘까지 레이아웃 잡아보면서 배운것들을 정리해본다.


일단 안드로이드는 DP개념을 알고와야된다.


나는 xxhdpi 기준으로 앱을 만들거다


그럼 포토샵에서 px을 구한다음에


> http://limepen.com/6


여기 들어가서 px to dp를 맞춰주면 된다.


일반적으로 px에다가 나누기 3을 하면 보통 dp가 나오는거 같다.




아이폰의 경우에는 내가 개발중인 앱은 아이폰5 기준으로 제작된다.


따라서 아이폰5의 화면비율인 320 x 568 을 맞춰줘야하는데

내가 받은 psd파일은 캔버스 크기가 1080 * 1920 이다.


따라서 그 비율에 맞춰서 사이즈를 계산하면 된다


비례식은 알아서 생각하고


320 / 1080 을 하면 대충 0.29 정도 나온다


따라서 111px인 경우에는 111*0.29 하면 32.19 정도 나오는데 32정도 넣으면 얼추 맞는것 같다.



여튼 이렇게 진행하면 된다


캬 사이다.



글씨부분이 잘 이해가안되서 여쭤보니


똑같이 변환율에 맞추면 된다고 하시네


일단 그렇게 인지하고 넘어가도록 하자




Name
Password
Homepage
Secret
2017.09.11 11:15

아는사람은 다 알테지만


호른을 정리했다


브람스3번을 연주하고 

현자타임이 찾아와 베토벤 9번 그뒤에 연주 다 안했다




그리고 집에서 혼자 연습이나 하며 어떻게하면 좋을지 고민했다.



이건 베9 오디션 연습할때.? 아닌가 찍었던 영상들인데 그냥 이러고 집에서 놀았다.

마침 살고있는 오피스텔이 방음이 잘되서 맘편하게 연습하곤 했다.




이쯤에 악기를 가르쳐주시던 선생님과 싸부님이 악기를 관두셨다.

16년 초였나


그때부터 좀 갈길이 막막했다.


어디 물어볼곳도 없고, 새로 선생님을 모시는것도 좀 내키지 않고, 해서 교착상태에 빠진채로 한동안 지냈다.



회사를 옮기고 이사를 준비하며 내가 준비한것들을 하나하나 정리하려고 보니 인라인스케이트랑 호른이 제일 애물단지였다.

그래서 악기를 팔려고 내놨다.




중고나라에 올려뒀는데 일주일쯤 지나서 지방에 한 호른선생님이 연락이왔다.

차근차근 얘기해보니 길*쌤과도 아는사이 같았다.


그분께 콘 8d를 넘겨드렸고 이렇게 내 혼 체험은 마무리됐다.


기념품으로 7호 마우스피스는 보관중이고 앞으로도 갖고 있을테지만 앞으로.. 혼 불일이 있을지는 모르겠다.


시원섭섭한 기분으로 지내던중 17년 9월 간만에 바욜린 연주를 했고 호른 연주하려는 마음은 얼추 정리된것같아 블로그에 레슨일지 정리글을 적어둔다.


안녕 혼 :)


'창작공간 > Horn_레슨일지' 카테고리의 다른 글

호른 정리.  (0) 2017.09.11
레슨일지 13 14 15  (1) 2015.05.27
레슨일지 12  (3) 2015.04.30
레슨일지 11  (0) 2015.04.28
레슨일지 10  (0) 2015.04.16
레슨일지 8, 9  (0) 2015.04.07
Name
Password
Homepage
Secret
2017.09.10 16:39

현재 

> https://www.slideshare.net/healess/python-tensorflow-ai-chatbot


위 강의를 보고 있다.

강의내용 중 초반에 Char-CNN을 사용하는데 이유로 다른 알고리즘보다 압도적인 성능을 갖고있다고 한다.


뭐 그렇다 치자


그 다음슬라이드에 Seq-2-Seq 를 소개하면서 RNN을 소개한다.

음.. 근데 여길 보니까 자연어 처리할때 많이 보였던 Encoder-Decoder모델이 보인다.


그래서 이걸 좀 파봐야겠다.


굳이 파볼 필요 없이 그저 소개정도에 그쳤으니 나도 여기서 마무리하도록 한다.


LSTM 뭐 어쩌구 저쩌구 여러 알고리즘이 있는데

각 알고리즘을 알고써야 각 인자를 적당한 걸 넣을 수 있기때문에 학습한다 정도로 이해하는게 좋을 것 같다.


결국 따져보니 이 게시글엔 내용이 없네

Name
Password
Homepage
Secret
2017.09.10 15:35



세미나에서 여러 팀이 발표할때 발표의 구조는 대략 비슷했다.


1. Motivation

- 나는 이걸 평소에 하고있었는데 이게 궁금해졌다.

2. Model

- 이를 모델링하기 위해 나는 RNN을 썼다 or DNN? CNN을 썼다.

3. 학습 Struggling 

- 이를 학습을 1주일시키고 했던 결과는 이렇고 그래서 모델을 바꿨다.. 혹은 학습을 더 시켰더니 이렇게 변했다.

4. 결과

- Heres our masterpiece...

- Please visit our git page.



보통 이런 구조로 얘기가 흘러간다.


그런데 여기서 확 짜증이 나는 포인트는 

2. 모델링 부터다.


우선 내가 RNN, CNN, DNN이게 뭔지 몰랐다.


대부분 발표팀이 RNN을 썼던건 기억나는데 그게 나오고나서 바로 모델을 짠 수학공식이 나온다.


여기서부터 멘붕이 왔기때문에 이부분부터 정복해 나가기로 한다.



우선 CNN RNN DNN은 Wikipedia 문서 중 Deeplearning 파트에서 찾을 수 있다.


일단 출발자체가 DL까지 진출했다는건 알 수 있다.

이제 각각이 무엇인지 학습해본다.


우선 뒤에 붙는 NN은 Neural Network라는뜻이다.

신 경 망


ANN이 단어의 출발이다 Artificial Neural Network ANN

DNN은 Deep Neural Network DNN



일단 인공신경망부터 정복하고 간다.


인공신경망(人工神經網, 영어: artificial neural network, ANN)은 기계학습과 인지과학에서 생물학의 신경망(동물의 중추신경계중 특히 )에서 영감을 얻은 통계학적 학습 알고리즘이다. 인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킨다. 좁은 의미에서는 오차역전파법을 이용한 다층 퍼셉트론을 가리키는 경우도 있지만, 이것은 잘못된 용법으로, 인공신경망은 이에 국한되지 않는다.


뇌를 따라한 인간이 만든 "통계학적 학습 알고리즘"

인간은 뉴런이 학습을 통해 시냅스의 결합 세기를 변화시켜 문제 해결 능력을 갖게 된다.

이걸... 따라해서 입력과 출력 사이에 여러 개의 인공 막? layer?를 만들어두고 like 시넵스  (인공뉴런) 이 결합 세기를 갖고있고 이를 통해 문제 해결 능력을 갖게 되는걸 ANN이라고 부른다.



올ㅋ


혼란이온다

이걸 읽고 딥러닝으로돌아왔는데

DNN은 ANN에서 입력과 출력 사이에 여러 개의 Hidden Layer로 이뤄진 ANN이라고 한다.


ANN을 다시 이해해야겠다.


 인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킨다.


핵심은 이렇다. 시냅스 즉 인공뉴런들의 조합으로 만들어진 신경망 조직을 ANN이라고 부르고 DNN은 입력과 출력 사이에 Hidden Layer를 사용한 방식을 얘기하는거 같다.


그니까 여러 Layer 혹은 시냅스 혹은 인공뉴런들이 Connection을 갖고있고 그걸통해 문제를 해결하면 ANN인거다.


자 그럼이제 CNN


Convolutional Neural Network

합성곱???



티스토리 딥빡... 사진도 못올리게해 사진업로더를 왜 플래시로만드냐 ㅡㅡ...


여튼 Convolutional은 소용돌이치는 나선의.. 이런뜻이다.


CNN은 다계층 Perceptrons의 한 종류이다.

대박 이제 가닥이 나온다.



각 노드의 가중치를 곱하든 더하든 어떻게 해서 맞으면 1 틀리면 -1을 리턴하는 인공신경망 이름이 퍼셉트론이다.

CNN은 그 중 하나인데

CNN은 하나 또는 여러개의 합성곱 계층과 그 위에 올려진 일반적인 인공 신경망 계층들로 이루어져 있으며, 가중치와 통합 계층(pooling layer)들을 추가로 활용한다. 이러한 구조 덕분에 CNN은 2차원 구조의 입력 데이터를 충분히 활용할 수 있다. 다른 딥 러닝 구조들과 비교해서, CNN은 영상, 음성 분야 모두에서 좋은 성능을 보여준다. 


CNN은 하나또는 여러개의 합성곱 layer가 있고 최소한의 전처리를 하도록 설계되어 있다고 한다.

자세한 내용은 관심이 없고 얘들은 2D형태의 데이터 처리에 효과적이며 쉽게 훈련되고 적은 수의 매개변수를 사용한다고 한다.


뭐 그렇다고 하는군.. 괜찮은 ANN인가봐


자 그럼이제 다음 RNN

Recurrent neural network

순환 신경망

이놈의 특징은 아래와 같다고 한다

순환 신경망은 앞먹임 신경망과 달리, 임의의 입력을 처리하기 위해 신경망 내부의 메모리를 활용할 수 있다. 이러한 특성에 의해 순환 신경망은 필기체 인식(Handwriting recognition)과 같은 분야에 활용되고 있고, 높은 인식률을 나타낸다


그니까... 재귀함수처럼 얘는 인풋이 아웃풋으로 갈때 그냥 쭉쭉 가고 끝나는게아니라

지네들이 계산을 할때도 내부에있는 뉴런을 사용할 수 있다는 점이 특징인거 같다.

이야 이제 좀 인공신경망 인공지능 같아지네


좀더읽어보자.

순환 신경망을 구성할 수 있는 구조에는 여러가지 방식이 사용되고 있다. 완전 순환망(Fully Recurrent Network), Hopfield Network, Elman Network, Echo state network(ESN), Long short term memory network(LSTM), Bi-directional RNN, Continuous-time RNN(CTRNN), Hierarchical RNN, Second Order RNN 등이 대표적인 예이다. 순환 신경망을 훈련(Training)시키기 위해 대표적으로 경사 하강법, Hessian Free Optimization, Global Optimization Methods 방식이 쓰이고 있다. 하지만 순환 신경망은 많은 수의 뉴런 유닛이나 많은 수의 입력 유닛이 있는 경우에 훈련이 쉽지 않은 스케일링 이슈를 가지고있다.



여러 종류가 있다는거같고 훈련이 쉽지않은 이슈가 있는데 이걸 응용한 ESN, CTRNN, HRNN SORNN, 등등 재귀호출을 하는 신경망 모델이 이 분야에 많은것으로 보인다.


이 뒤에 제한 볼츠만 머신 (RBM), 심층 신뢰 신경망 (DBN), 심층 Q 네트워크  등이 있는데

난 이정도만 알고있으면 될거같다.



RNN CNN 얘기는 여기서 마무리하고 다음 학습을 이어가도록 한다.

Name
Password
Homepage
Secret
2017.09.09 00:42


1. Android animation

코드로 애니메이션을 만드는법


내가지금 쓸거는 TrnaslateAnimation인데 간단하게 new TrnaslateAnimation(0,0,0,100) 이런식으로 만들어서

setDuration 으로 동작시간 정하고

setFilterAfter? 이거로 동작후에거기 멈추라고 하면 된다.


근데 내가 만들 애니메이션은 복합 동작이다

먼저 아래로 움직이고 그 후 우측으로 움직인다.


그러려면 TranslateAnimation이 두번들ㅇㅓ가야되는데 그러려면


AnimationSet 이란 객체를 만들고 거기다 때려박으면 된다.


여기 내가쓴 예제를 올린다


_tvTarget = (TextView)findViewById(R.id.tv_target);


AnimationSet animSet = new AnimationSet(true);

TranslateAnimation downAnim = new TranslateAnimation(0,0,0,200);
downAnim.setStartOffset(1000);
downAnim.setDuration(2000);
TranslateAnimation rightAnim = new TranslateAnimation(0,200,0,0);
rightAnim.setStartOffset(3000);
rightAnim.setDuration(2000);

animSet.addAnimation(downAnim);
animSet.addAnimation(rightAnim);
animSet.setFillAfter(true);

_tvTarget.startAnimation(animSet);



올ㅋ 복사했더니 css까지 같이복사되네 신기방기


여튼 이런식으로 하면 된다.


2. 아이폰 레이아웃잡기


그 간단하게뷰 만들고 붙이는건 이래하면 된다


let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))

        

        textView.text = “hihi”

        textView.center = self.view.center

        textView.textAlignment = NSTextAlignment.justified

        textView.textColor = UIColor.blue

        textView.backgroundColor = UIColor.lightGray

        

        self.view.addSubview(textView)



근데 이렇게작업하면 하루죙일걸릴거같아서

UI를 그리는 xib파일을 만들고 그걸 가져다 붙이는걸 찾았다

let myView2 = UINib(nibName: "myView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView


        

        self.view.addSubview(myView2)


xib이쁘게만들고 이렇게 subview 붙이면 이렇게 예쁘게 된다.


근데 생각해보니 이걸 가져온걸.. outlet을 만들어줘야되는데 이건 어떻게하지??

일단 몇개 읽어보니 fileOwner를 꼭 설정해주라고 하고


수동으로 하면 되는거같다.


근데 이건 해봐야겠다.


이상 오늘정리끝

Name
Password
Homepage
Secret
2017.09.05 18:00


Objective C 코드를 보다보니 말도안되는 Syntax가 많이 보인다.


그중 제일 이해안되는 [] 대괄호에 대해 고수분들께 문의했고

오늘 배운것을 정리해본다.


일단 예제소스를 써보자

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(23,28,258,20) ];



이게 문제의 출발이다

이 말도안되는 소스는 대체 무엇인가

일단 여기서 왼쪽절은 titleLabel이라는 UILabel 포인터 변수를 선언한거다. 여기까지는 소양



우측 UILabel alloc 은 내가 알고있는 객체지향 개념으로는 new라고 보면 된다고 하셨다.

메모리를 할당해야 그 포인터 주소가 나오니까 그걸 alloc (메모리할당) 한거다.


그럼 그렇게 나온 놈한테 initWithFrame을 한거로 봐야한다.


나눠보면

UILabel *titleLabel = [UILabel alloc];

[titleLabel initWithFrame:CGRectMake(23,28,258,20)];


이렇게 나뉘어진다.


그래 위에문장은 그렇다고 치자 뭐 완벽하게 이해되는건 아니지만


그럼 아래문장에 대괄호는 왜친건데?


라고 질문이 출발하니


그에대한 답은 '메시지'의 개념을 이해해야 한다고 하셨다. 그리고 [] 대괄호로 묶는건 인자? 라고 봐야된다고도 하셨다.


titleLabel이라는 놈한테 initWithFrame[] 을 한거다

내가 아는 문법으로 바꾸면

titleLabel.initWithFrame()


이렇게 바꿀수 있다는거다.


CGRectMake()를 해서 나온 사각형을 initWithFrame에 보내고 그걸 할당한 UILabel 포인터변수에 넣은거다.


음.. 정리를 해도 말로 표현이 잘 안되는데 이 그지같은 형태의 근원은


우리가 갖고있는 일반적인 개념으로는 각 객체의 함수를 실행시킨다. 라는 생각을 갖고있는데


C에서는 우린 그 일을 수행할 놈한테 메시지를 보내고, 그 처리는 그쪽에서 알아서 하게 한다... 메시지를 보낸다는 부분이 포인트다.


이게 큰 차이점이라고 한다.


자 결론

[] 대괄호는 파라미터를 보내는거 정도로 기억해라 like ()




그럼 적용을해보자


[self addSubView:mMyVariable];


이놈을 해석하면

self.addSubView(mMyVariable); 


이렇게 되는거다




번외편


- (id)initWithFrame:(CGRect)frame withInfo:(Weather *)info

{

//BlahBlah

return self

}



뭐 이런 함수


젤 위에보면 -가 붙는데

-는 보통 함수같은데 쓰고 가끔보이는 +는 static 함수 같은데 쓰인다고 한다.

대충 난 -만 쓰면 될거같다.


(id)를 리턴하는 initWithFrame함수인데 인자로 CGRect타입의 frame과 withInfo라는이름의 Weather 포인터 info를 받는다.


뭐 이정도로 봐야될거같다.


[]를 할때 변수가 하나만있으면 땡땡이: 콜론 을 생략하는 이상한 요상한 법칙이 있다고 한다.


일단 오늘은 여기까지 정리하고 넘어간다.

Name
Password
Homepage
Secret
2017.09.05 14:02


몇 해 전 iOS앱개발을 시작하면서부터 궁금했던 NSString/ NSLog / NS블라블라 의 정체를 우연히 

Objective C 입문서에서 발견해서 그 내용을 옮겨본다.


이전에 이야기했듯이 오브젝티브씨는 아주 약간 특별한 양념을 친 C와 같기 때문에 원한다면 NSLog대신 printf를 그냥 쓸 수도 있다. 그러나 시간과 날짜가 함께 출력되는 기능이나 새 라인 문자를 자동으로 넣어주는 등 부가적인 기능이 있으니 NSLog를 사용하기를 추천합니다.


NSLOG라는 함수 이름이 좀 낯설게 느껴질 수 있다. 함수 이름의 NS는 무슨 의미일까? 읽더보면 코코아의 모든 함수 상수 타입 이름에  NS가 앞에 붙는 것을 볼 수 있다. 이 접두사는 함수가 다른 툴킷에서 온 것이 아니라 코코아에서 왔다는 것을 알려준다.


이런 접두사는 같은식별자가 두 개의 다른 대상에 쓰일 때 결과적으로 큰 문제가 되는 이름 충돌 (name collisions) 사태를 막는데 도움이 된다. 만일 코코아가 Log()라는 이름의 함수를 가지고 있다면 이를 잘 알지 못하는 프로그래머가 어딘가에서 만든 Log라는 함수와 이름이 충돌할 수 있다. Log함수를 가지고 있는 프로그램이 코코아를 포함하면 XCode는 L:og가 여러번 정의되었다고 투덜댈 것이고 에러가 나타난다.


이제 접두사를 사용하는 것이 왜 좋은지 알게 되었다. 그런데 이번에는 다른 의문이 생길 것이다. 예를 들어, 왜 cocoa를 접두사로 쓰지 않고 NS를 사용했을까?  NS접두사는  이 툴킷이 NextSTEP이라고 불리며 NeXT Software의 제품이었던 때로 거슬러 올라간다. NextSTEP을 위해 이미 작성된 코드와으이 호환을 유지하기 위해 애플은 NS 접두사를 계속 쓰고 있다.

중략


그래서 우리는 여기서 개발할때 접두사로 NS를 써서는 안된다.


출처: 오브젝티브 C 아이폰과 맥 OSX 개발을 위한 / 마크 달림플, 스콧 내스터 지음 / 이종웅, 박세현 옮김 / apress, bj퍼블릭 23페이지


자 요약들어간다.


NS는 NextSTEP 회사이름이고, 걍 스트링 인티저 로그 뭐시기 등등에 NEXTSTEP에서 뭐 추가해서 만든 NS블라블라 클래스가 있고 거기에 추가 기능들이 들어있으니 우리는 그걸 사용한다.

뭐 이런느낌으로 받아들여야 겠다.


걍 내가 인지하는 int string 등은 C의 함수형이라고 이해하고 넘어가야겠다.


이걸읽는 Swift개발자님들 짜증나시죠

그냥 String 을 쓸때 NSStirng으로 치환해서 사용해야한다.. 정도로 외워두고 갑시다.


정리끗

Name
Password
Homepage
Secret
prev"" #1 next

티스토리 툴바