Coder Social home page Coder Social logo

jungilhan / awesome-blogs-android Goto Github PK

View Code? Open in Web Editor NEW
135.0 13.0 32.0 6.73 MB

어썸블로그 ・ 개발 블로그 모음 ・ 개발 잡덕들을 위한 본격 고퀄리티 개발 블로그 큐레이션 서비스 🕵️‍♀️

Java 89.50% CSS 3.66% JavaScript 5.30% HTML 1.55%
android awesome-list rxjava realm retrofit2 coordinator

awesome-blogs-android's Introduction

어썸블로그

개발 잡덕들을 위한 본격 고퀄리티 개발 블로그 큐레이션 서비스

Screenshot

대한민국의 어썸한 개발자, 기술 회사, IT 업계의 블로그 글들을 마크다운 형식으로 좀 더 편하게 읽어볼 수 있는 블로그 큐레이션 서비스입니다. 현재 제공하고 있는 어썸블로그의 전체 목록은 이곳에서 확인할 수 있습니다. 목록은 지속적으로 업데이트 할 예정이므로 항목은 추가되거나 삭제될 수 있습니다. (이 프로젝트는 우준혁님이 만드신 awesome-devblog에 영감을 받고 초기 데이터를 참고하여 시작했습니다.)

빌드

안드로이드 스튜디오의 Build Variants 설정에서 app 모듈을 productionDebug 또는 stagingDebug로 설정한 후 빌드할 수 있습니다.

풀 리퀘스트

풀 리퀘스트 시, 코드 스타일이 맞지 않아서 코드가 변경되는 부분을 피하려면 Preferences > Code Style > Java에서 다음 부분을 수정하세요. 좀 더 간편한 방법은 루트 디렉토리에 있는 code-style.xml을 임포트 하는 것입니다.

  • Continuation Indent - 4
  • Field Annontations - Do not wrap

서버

어썸블로그 안드로이드 앱은 아래의 서버 코드에 의해 동작하고 있습니다. 서버 코드가 궁금하신 분은 아래 링크를 방문해주세요.

구글 플레이 스토어

구글 플레이 스토어에서 어썸블로그 마켓 버전을 다운로드 받을 수 있습니다.

업데이트 내역

v1.11 버그 수정 🔧 2018-05-14

  • 새로운 피드를 받지 못하는 현상 수정
  • 상세화면에서 하단 여백 생기는 현상 수정

v1.10 따뜻한 연말연시 ♨️️ 2017-12-26

  • 검색, 즐겨찾기, 최근 읽은 목록에 대한 앱 바로가기 기능 추가 (>= api 25)
  • 여러개의 새소식 알림이 쌓이지 않도록 수정

v1.9 곱창이 땡겨 🌀 2017-08-30

  • 개발과 관련없는 글 필터링 처리
  • 좌상단 카테고리명 클릭 시 첫 페이지로 이동할 수 있도록

v1.8 8.15 🇰🇷 2017-08-15

  • 개발팀 후원하기 기능 추가
  • 로컬 피드 만료 시간 5분에서 30분으로 조정

v1.7 짜장면 먹고 싶은 날 🤤 2017-08-05

  • 새 소식 알림 무음으로 표시하도록 처리
  • 안드로이드 4.2에서 검색 화면 진입 시 비정상 종료되는 버그 수정

v1.6 참 잘했어요 🤞2017-06-03

  • 제목, URL, 작성자 이름으로 검색하기 기능 추가
  • 즐겨찾기 기능 추가
  • 그 외 소소한 개선 및 버그 수정

v1.5 봄은 언제나 두근두근 🌱 2017-04-09

  • 새소식 알림을 무음으로 받거나 비활성화 시킬 수 있는 설정 추가
  • '최근 읽은 글' 기능 추가
  • '블로거의 다른 글'이 5개 이상일 때는 '더보기' 버튼이 보이도록 디자인 개선
  • 그 외 버그 수정

v1.4 왜 벌써 월요일인건죠? 😭 2017-03-27

  • 상세화면 하단에 블로거의 다른글, 이전/다음글 섹션 추가로 탐색을 좀 더 편하게!
  • Chrome Custom Tabs를 사용해 외부 브라우저 실행에 대한 사용성 개선
  • 브라우저 실행 시, 해당 웹 사이트에서 어썸블로그를 확인할 수 있는 Referrer 추가
  • 젤리빈에서 네트워크가 비활성화 되어 있을 경우, 앱 종료 현상 수정

v1.3 여친 맥북으로 눈칫밥 개발 중 🤓 2017-03-24

  • 저녁 새소식 알림 기능 추가
  • 메인 화면 스크롤이 매끄럽지 않은 현상 수정
  • 인스톨 레퍼러 기능 추가
  • 인기글 분석을 위한 API 추가
  • 앱 최초 설치 시, 새소식 알람 즉시 등록되지 않는 버그 수정

v1.2 주스 쏟은 내 맥북 😇 2017-03-18

  • 새로운 블로그 글을 모아서 하루 한번 알림 기능 추가 (코드리뷰 @soulkeykim)
  • 새로운 서클 타입 레이아웃 추가
  • 백그라운드 피드 요청 시각화
  • 서버에 새롭게 추가된 블로그 글은 업데이트 시간과 상관없이 정렬되도록 처리 (@probepark)
  • 본문이 긴 블로그 글 진입 시 TransactionTooLargeException 현상 수정
  • Circle CI 연동 (@probepark)
  • 디버그 드로어 추가

v1.1 개발의 완성은 얼굴 👱 2017-02-25

  • 스와이프 새로고침 추가 (@BenjaminKim)
  • 서버 API 요청 좀 더 고급지게 처리 (@ZeroBrain, @probepark)
  • 새로운 피드가 생성 됐을 때, 앱 내 알림 기능 추가
  • 상세 뷰 하단 '페이지 이동하기' 버튼으로 블로그 이동을 좀 더 쉽게 (@KimKyung-man, @BenjaminKim)
  • 'ㅎ' 폰트가 제대로 그려지지 않는 버그 수정 (@soulkeykim, @ZeroBrain)
  • 상세 뷰에서 링크 클릭 시 어쩌다 죽는 버그 수정 (@BenjaminKim)
  • 풀 리퀘스트와 버그 제보해 주신 @ZeroBrain, @probepark, @soulkeykim, @BenjaminKim, @KimKyung-man 감사합니다. 👏

v1.0 시작이 반이라 카더라 🤗 2017-02-21

  • 어쩌다 만든 어썸블로그 마켓 배포 (@BenjaminKim)

awesome-blogs-android's People

Contributors

benjaminkim avatar jungilhan avatar seongugjung avatar soulkeykim avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

awesome-blogs-android's Issues

Code 질문

    @Override
    public Observable<Feed> getFeed(@NonNull final String category) {
        return localSource.getFeed(category)
            .flatMap(new Func1<Feed, Observable<Feed>>() {
                @Override
                public Observable<Feed> call(@Nullable Feed feed) {
                    return feed != null ? Observable.just(feed)
                        .doOnTerminate(new Action0() {
                            @Override
                            public void call() {
                                remoteSource.getFeed(category)
                                    .onErrorResumeNext(Observable.<Feed>empty())
                                    .subscribe();
                            }
                        }) : remoteSource.getFeed(category);
                }
            });
    }

여기서 의도하는게 local 에 있으면 로컬 먼저
로컬에 없으면 remote 로 가져 올려는 건가요?
doOnTerminate 안에 있는게 어떤걸 하는건지 정확히 모르겠어요~

항상 remote 에 질의하는거라면 local expire 타임을 정하고

Observable.concat 을 쓰는게 어떠까요?

Entry에 created_at 추가하기

  1. 로컬 데이터베이스에 Entry가 Insert되는 시점의(created_at) 시간 정보가 필요, 이 필드는 업데이트 되지 않도록
  2. 서버에서 내려주는 updated_at은 블로그 글 작성자가 미래 시간으로 설정 할 수 있는 문제가 있음
  3. 현재 글 정렬 순서는 서버가 내려주는 순서(updated_at 기준)로 보여주고 있지만 created_at 기준으로 재정렬 할 필요가 있음 (현재는 2번 항목에 의해 항상 앞쪽에 노출될 가능성이 존재)

[Crashlytics #3] SummaryView, 본문 내 링크가 상대경로 일 때 실행할 수 있는 액티비티를 찾지 못하는 버그

Fatal Exception: android.content.ActivityNotFoundException
Activity found to handle Intent { act=android.intent.action.VIEW dat=/2017/02/15/using-shs-as-webfonts.html } 
Raw Text android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1878) 
android.app.Activity.startActivity (Activity.java:4535) 
org.petabytes.awesomeblogs.summary.SummaryCoordinator.lambda$onMoreClick$5 (SourceFile:93) 
org.petabytes.awesomeblogs.summary.SummaryCoordinator$$Lambda$6.onClick (Unknown Source) 
android.view.View.performClick (View.java:5702) 
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

특정 글을 불러올떄 내용이 짤리는 현상

앱을 사용할 때
네이버 포스팅이 제대로 보이지 않는 버그가 있습니다. (ex 티몬)

제 기기에서만 발생하는 문젠가 싶기도하구요 -_-
제 기기는 KT 갤럭시 S5 광대역 LTE 입니다.

빌드하고 실행하면 앱 죽음.

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: org.petabytes.awesomeblogs.debug, PID: 3262
                  java.lang.IllegalArgumentException: Unknown pattern character 'X'
                      at java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323)
                      at java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312)
                      at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:365)
                      at org.petabytes.awesomeblogs.feeds.EntryGradientCoordinator.attach(EntryGradientCoordinator.java:49)
                      at com.squareup.coordinators.Binding.onViewAttachedToWindow(Binding.java:38)
                      at com.squareup.coordinators.Coordinators.bind(Coordinators.java:43)
                      at org.petabytes.awesomeblogs.feeds.FeedsCoordinator$1.create(FeedsCoordinator.java:72)
                      at org.petabytes.awesomeblogs.feeds.FeedsCoordinator$1.create(FeedsCoordinator.java:66)
                      at org.petabytes.coordinator.PagerAdapter.instantiateItem(PagerAdapter.java:27)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.addNewItem(VerticalViewPager.java:729)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.populate(VerticalViewPager.java:879)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.populate(VerticalViewPager.java:811)
                      at fr.castorflex.android.verticalviewpager.VerticalViewPager.onMeasure(VerticalViewPager.java:1334)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                      at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                      at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
                      at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                      at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
                      at android.view.View.measure(View.java:18788)
                      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
                      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                      at android.view.Choreographer.doFrame(Choreographer.java:606)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                      at java.lang.reflect.Method.invoke(Native Method)
                  	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteI
I/Process: Sending signal. PID: 3262 SIG: 9
Application terminated.

시간 정보 나타낼 때 단수 복수 표기

별 이슈는 아니지만 1 days ago, 1 hours ago 라고 복수형으로 쓰이는데 단수형 처리까지되면 깔끔할 듯 합니다. (시간이 눈에 크게 보이다보니 자주보여서 제보 ^^)

Api module retrolambda 적용

api 쪽에만 retrolambda 가 없는거 같아요

buildscript 는 공통으로 사용하면 좋을거 같은데 어떤가요?

백그라운드 피드 요청 시각화하기

  • 포켓 앱처럼 콜드 스타트 시 혹은 카테고리 선택 시(로컬 Entry가 만료돼 됐을 떄) 클라이언트 데이터를 우선 보여주되, 백그라운드로 요청되는 상태를 프로그레스바 형태로 시각화하기
  • Swipe Refresh의 로딩 UI도 같은 형태로 수정 필요

CI 연동

  • 테스트 깨짐 방지
  • 테스트 코드 커버리지 확인

[Crashlytics #7] TransactionTooLargeException

Summary로 전달되는 Html 문자열 크기가 Intent로 넘기기에 큰 경우가 있는 것으로 확인

Caused by android.os.TransactionTooLargeException
android.os.BinderProxy.transactNative (Binder.java)
android.app.Activity.startActivity (Activity.java:4230)
org.petabytes.awesomeblogs.feeds.EntryDiagonalCoordinator.onBottomContainerClick (SourceFile:63)
org.petabytes.awesomeblogs.feeds.EntryDiagonalCoordinator$$ViewBinder$2.doClick (SourceFile:39)
butterknife.internal.DebouncingOnClickListener.onClick (SourceFile:22)
android.view.View.performClick (View.java:5207)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:628)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.