개발 일지
-
사부작사부작 앱 아이디어 꺼내자카테고리 없음 2019. 8. 12. 23:34
이번주 주말에는 '라이트노벨 신간 목록' 앱의 서버를 이전했습니다. 무료로 썼던 구글 클라우드의 체험기간이 끝났는데 구글 클라우드의 가격이 상당히 쎄서, 다른 좀더 싼 서버로 이전했어요. https://play.google.com/store/apps/details?id=com.sesang06.lightnovellist 이전에 배포한 '텍스트 리더'와 비교하면 제가 현재 배포한 앱은 두 개입니다. https://apps.apple.com/kr/app/%ED%85%8D%EC%8A%A4%ED%8A%B8-%EB%A6%AC%EB%8D%94/id1437719953 두 앱 모두 별다른 기술력을 요구하지 않는 앱들이었고, 제 필요에 의해 만들어진 종류였습니다. 따라서 즐겁게 바짝 만들 수 있었습니다. 현재 두 앱의 누..
-
RxSwift - Scan 연산자를 이용하여 무한 스크롤링을 구현하자iOS/mvvm + RxSwift 스터디 2019. 8. 6. 01:56
RxSwift Scan을 이용하여 무한 스크롤링을 함수형답게 구현하기. Scan은 전의 옵저블을 옵저빙하여 새로운 값을 방출하는 옵저버입니다. http://reactivex.io/documentation/operators/scan.html 무한 스크롤링에서는 두 옵저버가 필요합니다. 한 옵저버는 최초 로드 액션입니다. 이 옵저버는 피드를 여러 개 가져오는 액션입니다. 만약 전에 있던 피드가 있는데 로드 옵션이 또 불린다면, 이 옵저버는 전의 피드 값을 덮어씌웁니다. let loadObservable: Observable = PublishSubject().asObserver() 다른 한 옵저버는 추가 로드 옵션입니다. 이 옵저버는 기존에 있던 값에서 피드를 추가적으로 덧붙입니다. let loadMoreOb..
-
Let us: GO! 2019 Summer 방문 보고서카테고리 없음 2019. 8. 4. 14:05
금지된 공간 신비의 세계 let us: Go!, 가본 자가 알려주는 그곳의 진실 2019년 8월 3일은 정말 더웠습니다. 폭염 경보가 내려진 날씨였습니다. 렛어스고 행사장은 홍대입구에 있었습니다. 9호선 급행을 타고 왔지만, 당산에서 환승할 때 온몸이 녹아내리는 느낌이었습니다. 화마와 싸워서 어렵게 간 렛어스고 세미나는 유익했습니다. [리빙 포인트] Let us: GO! 세미나는 Go 언어에 대해서 다루지 않는다. 포켓몬고도 하지 않는다. 아이폰 점유율이 최근에서야 높아지기도 했고, 개발하려면 맥 장비가 필요한 진입장벽 때문인지 몰라도, iOS 앱 개발자는 주니어, 시니어 모두 다른 개발자 직군에 비해 상대적으로 적다고 느끼고 있습니다. 그런 이유인지 몰라도, iOS 세미나는 안드로이드 세미나에 비해 그..
-
정보처리 산업기능요원을 생각한다면 반드시 숙지해야 할 사항들iOS 2019. 8. 2. 02:07
현재 저는 산업기능요원으로 복무하고 있습니다. 대학생 휴학 신분이고, 3급 현역입니다. 편입하고 복무하면서 나름의 우여곡절이 있어서, 공유하면 좋겠다 싶어서 산업기능요원에 대한 여러가지 팁을 작성했습니다. https://github.com/sesang06/awesome-alternative-military-service sesang06/awesome-alternative-military-service 정보처리 산업기능요원을 위한 쓸만한 정보들. Contribute to sesang06/awesome-alternative-military-service development by creating an account on GitHub. github.com 깃허브에 올려 두었는데, 생각나는게 있으면 계속 추가로..
-
'라이트노벨 신간 목록' 개인정보취급방침카테고리 없음 2019. 6. 24. 22:13
Privacy Policy Sesang Cho built the 라이트노벨 신간 목록 app as a Free app. This SERVICE is provided by Sesang Cho at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of information ..
-
엘라스틱 서치 적용기카테고리 없음 2019. 6. 10. 01:43
요즘 뚝딱뚝딱 만들고 있는 개인 앱에 검색 기능이 들어갑니다. 개인앱이 서비스하는 내역은 굉장히 프라이빗해서 설명하기는 조금 그렇지만, 5000개 정도 되는 서적 정보에서 제목, 설명, 작가, 출판사 등을 검색하는 기능이 필수적이었습니다. 클라이언트에 주로 경험이 있는 저로서는 서버 개발에 많이 능숙하지 않았고, 일단 mysql의 %like% 쿼리를 이용해 검색을 구현하려고 했습니다. mysql 의 %like%가 인덱싱이 안 된다는 것을 차치하더라도, 한글을 검색하는 데 굉장히 부적절했습니다. 임시로 사용할 정로도 잘 안 되었습니다. 이것저것 찾아본 결과, match 키워드로 검색하는 방법도 mysql 에서 있다는 점을 알았습니다. 하지만 match 키워드는 풀텍스트 기반이었으므로, 적용하려면 텍스트 스..
-
Okhttp 라이브러리 최소 지원 API 21로 변경카테고리 없음 2019. 6. 7. 14:08
Okhttp 라이브러리 최소 지원 API 21로 변경 https://github.com/square/okhttp/issues/5162 retrofit과 같이 쓰는 OkHttp 라이브러리의 최소 지원 API 레벨이 21, Java 8로 변경되었습니다. 변경된 버전은 3.13대 (2월 5일) 릴리즈 버전입니다. 최신 버전을 깔아본 결과 21 이상에서는 정상 동작하지만, 그 이하 버전에서는 앱에서 retrofit 을 실행하면 비정상 종료가 되는 현상을 확인했습니다. retrofit 을 기계적으로 최신 버전으로 업데이트해 배포할 경우, 19, 20 버전 기기에서 앱이 죽는 현상이 발생할 수 있습니다. The OkHttp 3.12.x branch supports Android 2.3+ (API level 9+) ..
-
RxJava 예제 코드안드로이드 2019. 6. 3. 13:56
class UserRepository(val userApi: UserApi) { var cachedUsers = emptyList() fun getUsers(): Observable { if (cachedUsers.isEmpty()) { //Returning users from API return userApi.getUsers() .doOnNext { cachedUsers = it } } else { //Returning cached users first, and then API users return Observable.just(cachedUsers) .mergeWith(userApi.getUsers()) .doOnNext { cachedUsers = it } } } }