Devik0213 / memo

메모
1 stars 0 forks source link

Droid Knights #1

Open Devik0213 opened 7 years ago

Devik0213 commented 7 years ago

![Uploading 스크린샷 2017-03-25 오전 10.15.35.png…]()

Rx & Kotlin

Rx : Observable 을 이용해, 단순한 I/O을 이용한, Functional Programming Kotlin : JVM 에서 돌릴수있는 프레임 워크

Kotlin

UI작업에 대한Kolin Extention 을 이용해 View를 쉽게 바인딩할수있게 해줌. RxBinding, subcribe(action)

Rx

Button.clicks()
.doOnNext( progress,show())}
.switchMap { api.getUsers() } 
.observeOn( MainTrhead())
.subscribe{ //Something to do ; }

state를 코드에 둘것이냐, 여러 인풋에대한 처리가 우선순위 처리가 결국 stream에서 받은 데이터에 대해서도, 어렵지않나요? 한화면에서 3가지 조건 http3가지, 액션 2가지라고한다면..간단히 생각하면 쉽겠찌만- 결국 상태를 체크하는 로직이 내부에 들어가게되지않는가. 이게 더 편한방식인지 궁금.

Devik0213 commented 7 years ago

질문1 여러 조건의 비동기 처리를 어떻게 할것인가.

cache : http://reactivex.io/documentation/operators/replay.html maze : https://github.com/importre/kotlin-maze

Devik0213 commented 7 years ago

Good practices

사용자 인터뷰를 어떻게하나??ㅋㅋ 변화에 잘 대응할 수 있는 코드는 무엇인가? 변화가있어도 코드 변화가 적어야한다.(주장)

클린 아키택쳐 https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

2017-03-25 11 16 21
  1. Independent of Frameworks.
  2. Testable.
  3. Independent of UI.
  4. Independent of Database.
  5. Independent of any external agency.

밑으로 갈수록 의존성이 낮은 코드가 된다.

https://github.com/android10/Android-CleanArchitecture 내용을 리뷰하고있음.

Devik0213 commented 7 years ago

BaseFragment 가 아니면 어캄? 의존성문제를 해결하지못하지않나. 프레젠테이션단이아니고, 로메인까지도 영향이있는게아니각... 그런 룰을 모든 플랫폼에서 어떻게 처리함?

Devik0213 commented 7 years ago

Firebase

Firebase DB

NoSQL key:value json형태라고 생각하면됨. 너무 간단해서.. table 이 간단해서, join 이나, multi condition 을 처리하는게 어렵다. 간단한 데이터는 넣어둘수이지만, 디비설계가 힘들다.

개인화된 서비스를 적용하는데는 의미가있을것같은데? 가령 내 개인 공간(최근읽은 글, 책..등) = 목적성이 정확한 테이블 사용자의 패턴을 모두 저장해서, event 로깅을 따로한다.

서비스를 적용해보니..

Cloud Function

Devik0213 commented 7 years ago

Firebase Remote config

  1. 운영이슈 > 실시간 적용 개발자를 통하지않고, 코드변경없이, 추가적으로 배포하지않고, 특정사용자만.. AB Test

App배포없이, 운영영역을 만들어서 실시간으로 바뀌는걸보여주자.

순서

  1. Firebase 설치
  2. 구글플레이 서비스 설치 체크 코드 필요.
    • 중국은 안되겠네..
  3. 리모트 컨피그 운영
    • 파라미터
    • 새로운 파라미터를 추가하고, 이값을 안드로이드에서 받아볼수있도록한다.
    • 어느타이밍??이라는게 어떤시점인거지??
    • FirebaseRemoteConfig 라는 singleTone 객체를 이용해, 초기화하고, fetch, aplly 한다.
    • 기본값(default)를 xml에 미리 지정해두어서 값을 가져다가 화면을 그려주면된다. ( Q : 운영상 이슈를 막기위한, a,b 테스트에 대한... default none 도 필요할것 같은데 이건 어떻게하시는지?? )
    • 해도그만 아니도 그만같은 none default ( Q 운영값 이력이나, xml 이동은 어떻게되는지??)
    • url, 여러 image url 을 사용하는경우. ( Q : 키 길이는 안되나? 시간설정은 되는지? )
    • 제한은 없지만, 있을것 같다. html보단 url을 넘기면될듯하고, 시간 설정불가, 이력관리 불가
    • 컨디션
    • 버전네임을 따른다.
    • 빌드구분 안됨. (내가 임의의 prefix key값을 지정해서 사용해야함)
    • 벨류 자체를, json 으로 내려보내서, 이값을 파싱해서 쓰도록하나? (json으로하나??)
Devik0213 commented 7 years ago

빠르고 지속적인 딜리버리

지속적인 통합, 전달, 디플로이 http://www.devops4all.com/2016/04/continuous-integration-continuous.html

Continuous Integration:(CI)

Jenkins 는..그래서;;;; 앱빌드때 문제가 많음, 빌드툴, 자바버전, 그래들버전. 이거 맞추기가 어렵다.

Fastlane

cicleCI

관련 글 : [커니] http://kunny.github.io/lecture/quality/2016/10/03/android_quality_part1_circleci/

  • ciclre.yml 을 통해서 서클CI의 값을 이용해 할 수 있다.
  • keysrote를 dropbox에 넣어두고, 다운로드 하는 스크립트를 만들어서 한다.

Bitrise

https://www.bitrise.io/ UI로 관리할만큼, 관리가 편함 워크플로우를 내 맘대로 설정할수 있고, 연동서비스도 편함 bitrise.xml 을 서비스에 놓아서한다. 특히 키스토어를 따로 저장하여 가능하다. (Secret Env 로 지정을 하여 정보보안도 신경씀)

arr관리, https://www.jfrog.com/ 같은걸 이용한다고함

Devik0213 commented 7 years ago

UI테스트

넓은 테스트 범위 적은 인력 빠른 테스트 클라우드로 테스트(다양한 실제기기)

UIAutomator

에스프레소라면, (화이트박스 테스트)코드를 알아야지 작동할수있다. UIAuto 는 (블랙박스 테스트) 를 이용해 사용자처럼 테스트하게된다.

API소개

dependencies {
  androidTestCompile 'com.android.support.test:runner:0.5'
  // Set this dependency to build and run UI Automator tests
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

안드로이드테스트에 넣어서 Instrument Test 이다.

UI요소 찾기

UiDevice#findObject[s] : 단일찾을꺼냐, 복수개 찾을꺼냐.

recyclerView같은경우 스크롤을 충분히 해주고나서 해야한다.

선택자 생성

새로만드는 기능이나, 기존의 앱들을 테스트 로직을 미리 몇개 만들어보면 좋겠다. 리스트의 선택은 어떻게하는가?

public class MainactivityTest extends BaseTest { 
  @Before
  @Overrie
  public void before() threos Exception { 
 session.setAccessToken(neill);
super.before();

@Test
public void testPressBack(){
mDevice.pressBack();
assertFlase(....);
}
}
}
 testSignUpAsAProButto(){

 findButton(R.string.signg)
.clickAndWait(Until.newWIndow(), 디폴트타입);
assertHas(button(R.string.start);
}

}
다음화면의 있을조건까지 테스트에 넣어야함.

UI동기화

Until.newWindow(), Until.scollFinished() 같은 비동기처리. 비동기 처리는 반드시 동기화를 해줘야함. searchCondition permission 설정을 통해서, 애니메이션을 꼭 꺼줘야한다. gradle설정을 통해서 퍼미션설정 넣어야한다.

클라우드 테스팅

AWS, ~~ Firebase, Xamarin ~~

AWS를 이용해, 할껀데, ./gredle assembleTest apk생성해서 올린다. Ui오토메이터 쓰지말자(1이니깐)

여러가지 설정을하고, 테스트 실행 테스트시간 설정

동영상, 스크린샷 버그 체크에 굉장히 편하다.

Devik0213 commented 7 years ago

Realm

빠른이유.. 무복제, Java hydrate 를 통해 데이터를 자바 오브젝트로 만드는 비용을 줄임.

반복적인 메모리작업을, Annotation Proccessing Tool 을 이용해 단순화해보자.

Devik0213 commented 7 years ago

애니메이션

https://medium.com/airbnb-engineering/introducing-lottie-4ff4a0afac0e#.azlvqx31s