# Topic Ideas
**Note:**
See http://keep.google.com for more topic ideas on **Curiosity** & **Blog** notes.
See http://getpocket.com/ for bookmarks on certain topics.
## Aerospace Engineering
### Terminology
- OBC - on board computers
- C&DH - Command and Data Handling
- Subsystem - [this image](http://i.imgur.com/eMJM9AG.jpg) for tl;dr
- Telemetry - process of collecting data and transmitting it to a device
### Links
- Command & Data Handling - http://www.lr.tudelft.nl/en/organisation/departments/space-engineering/space-systems-engineering/expertise-areas/spacecraft-engineering/subsystem-design/c-and-dh/ (protip: navigate through the website for more information of what aerospace engineering is all about)
- C&DH Subsystem schema - http://ususat.usu.edu/cdh.html
- Open source mission control framework - https://github.com/nasa/openmct
- NASA open source software - https://software.nasa.gov/
- USM Aerospace Engineering guides - http://library.eng.usm.my/englib/downloadform/subject_guides/subject_guides_aerospace.pdf
- Streamlined flight software design - http://flightsoftware.jhuapl.edu/files/2010/FSW10_Stolper.pdf
- MRO Command & Data-handling Systems - https://mars.nasa.gov/MRO/mission/spacecraft/parts/command/
- C&DH Flight Software test framework: A Radiation Belt Storm Probes practice - http://ieeexplore.ieee.org/document/6496830/citations?tabFilter=papers
- SPACE HAUC Subsystems - https://www.uml.edu/Research/LoCSST/Research/spacehauc/subsystems.aspx
- SPACE HAUC source code - https://github.com/SpaceHAUC-Command-and-Data-Handling
### Books
- The Standard Handbook For Aeronautical And Astronautical Engineers
### News and resources
- Spaceflight101 - http://spaceflight101.com
## Cryptocurrency
### Blockchain
- Minimum Viable Blockchain - https://artsec.hackpad.com/Blockchains-and-Bitcoins-mR2wlQ4KbVQ
- Make your own cryptocurrency - https://www.youtube.com/watch?v=86jqAfySi64
- Create new altcoin - https://bitcointalk.org/index.php?topic=225690.0
- Blockchain in SQLite - https://github.com/ivoras/daisy
- Bitcoin resources - http://lopp.net/bitcoin.html
- Naivecoin: a tutorial for building a cryptocurrency
About - https://lhartikk.github.io/
### Trading/Economics
- Interpreting order books - https://tradeblock.com/blog/bitcoin-trading-interpreting-order-books/
- Market taker/maker - https://www.itbit.com/fees-maker-taker-model
## Electronics
- A curated list of awesome Internet of Things projects and resources - https://github.com/webofthings/awesome-iot
## Data structures and algorithms
- https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- http://codingsec.net/2016/03/7-algorithms-data-structures-every-programmer
- https://techiedelight.quora.com/500-Data-structures-and-algorithms-interview-questions-and-their-solutions?share=1
## TDD in Android
- https://codelabs.developers.google.com/codelabs/android-testing/index.html
- http://mayojava.github.io/android/android-ui-instrumentation-test-with-espresso/
- https://realm.io/news/ellen-shapiro-android-testing/
- https://medium.com/mobility/how-to-do-tdd-in-android-90f013d91d7f#.k52b4kvcb
- http://trickyandroid.com/android-test-tricks-sharing-code-between-unit-ui-tests/
- https://medium.com/android-testing-daily/writing-your-first-test-57ce98dc22c6#.5ntu91iop
- [What makes android apps testable](http://www.philosophicalhacker.com/post/what-makes-android-apps-testable/)
- https://github.com/Karumi/KataScreenshotAndroid
- [Testing Sqlite on Android](https://medium.com/@MAFI8919/testing-sqlite-on-android-bfa0733e11e7#.upv8807o9)
- [SnackBuilder lib with Test Suite](https://github.com/andrewlord1990/SnackbarBuilder/tree/master/snackbarbuilder/src/main/java/com/github/andrewlord1990/snackbarbuilder)
- Structuring Android app for testability - http://blog.marcinbudny.com/2015/04/structuring-android-app-for-testability.html
- Continuous integration with android - https://medium.com/appaloosa-store-engineering/continuous-integration-with-android-14047096f3de#.47tdh580c
- TDD your UI layer - http://www.donnfelker.com/tdd-your-ui-layer/
- Mocking HTTP responses using Retrofit 2 - https://riggaroo.co.za/retrofit-2-mocking-http-responses/
- TDD mindset story - http://panavtec.me/approaching-tdd-outside-android
- Android Testing Guide - https://github.com/ravidsrk/android-testing-guide
- Why Android Testing is so Hard: Historical Edition - https://www.philosophicalhacker.com/2015/04/17/why-android-unit-testing-is-so-hard-pt-1/
- Story code - https://publicobject.com/2017/02/06/story-code
- Building Android with BitBucket Pipelines- https://medium.com/@_tiwiz/building-android-with-bitbucket-pipelines-83cd62dbde33#.gebakdkn0
- Android Travis CI config - https://github.com/niqdev/dagger-realm-test/blob/master/.travis.yml
- Testing MVP using Espresso and Mockito - https://josiassena.com/testing-mvp-using-espresso-and-mockito/
## Generic android boilerplate codes (Issue [#7](https://github.com/aimanbaharum/random-wiki/issues/7))
_**TODO:** Drafts are using AndroidAnnotations library. Change it all back to native. Or at least, ButterKnife_
### recyclerview ✔✔
- ~~click listener, data update, swipe refresh, empty view etc)~~
- ~~horizontal, vertical, staggeredgrid~~
- ~~snaplayout~~ (https://github.com/rubensousa/RecyclerViewSnap/)
### ~~coordinatorlayout with basic custom child behavior~~ ✔✔
### fragment adding in activity
- ~~fragmentmanager add/replace framelayout id~~
- ~~using baseactivity~~
- ~~using newinstance (passing data)~~
- handling backstacks
- adding child fragment
### viewpager ✔✔
- ~~fragment with tabs~~
- ~~basic (pageradapter)~~
- basic (fragmentstatepageradapter)
### ~~preferencefragment/activity~~ ✔✔
### ~~passing intents (generic, eventbus, parcelable, serializable)~~ 👌
### ~~threading, asynctask, delay (simple show/hide animation)~~ ✔✔
- http://stackoverflow.com/questions/3264383/difference-between-service-async-task-thread
- http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
- http://stackoverflow.com/questions/13954611/android-when-should-i-use-a-handler-and-when-should-i-use-a-thread
- http://stackoverflow.com/questions/9671546/asynctask-android-example
### ~~Passing data through app~~ ✔✔
### basic custom view (onDraw, removing, behavior)
### ~~fab button (behavior)~~ **X**
### ~~enum~~ **X**
### lifecycle (activity, fragment, adapter, androidannotations)
### persisting data (sharedpreference, savedinstancestate, db)
- https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en
### custom camera layout (camera2 api)
- https://github.com/googlesamples/android-Camera2Basic
- https://github.com/aimanbaharum/custom-camera-layout
### ~~runtime permission~~ 👌
### ~~optimizing bitmaps (when decodeFile)~~ ✔✔
### observing data changes (contentobserver, asyntaskloader, service, localbroadcastmanager)
- https://www.websmithing.com/2011/02/01/how-to-update-the-ui-in-an-android-activity-using-data-from-a-background-service/
- http://code.tutsplus.com/tutorials/android-from-scratch-understanding-android-broadcasts--cms-27026
- http://stackoverflow.com/questions/14695537/android-update-activity-ui-from-service
### app deep linking
### notifications
- display notification
### push notification using FCM
### job schedulers
- Demo code http://pastebin.com/bytVqz87
- https://catinean.com/2014/10/19/smart-background-tasks-with-jobscheduler/
### adding menu item into fragment/activity
### prettify gradle.build
- https://github.com/bluelinelabs/Conductor/blob/develop/dependencies.gradle
- http://gmariotti.blogspot.com/2015/07/how-to-centralize-support-libraries.html
### Android common utils
- https://github.com/Blankj/AndroidUtilCode
- ~~Logging utility~~ 👌
### DiffUtils
- Using DiffUtil in Android RecyclerView - https://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00#.wxoffctpj
- DiffUtil is a must - https://medium.com/@nullthemall/diffutil-is-a-must-797502bc1149#.fzzzae5pa
### General knowledge for the curious
- How they build Android without Fragment/Activity - https://realm.io/news/sf-fabien-davos-modern-android-ditching-activities-fragments/
- Learn to context - https://possiblemobile.com/2013/06/context/
### Annotation over enums
- Java Enum and Android IntDef/StringDef annotation - https://noobcoderblog.wordpress.com/2015/04/12/java-enum-and-android-intdefstringdef-annotation/
**Legend:**
✔: Draft finished
✔✔: Converted to native/ButterKnife
✔✔✔: Ready to be published
👌 : published
**X**: Nope
## Vector drawables
- http://blog.sqisland.com/2014/10/first-look-at-animated-vector-drawable.html
- http://blog.nkdroidsolutions.com/android-vector-drawable-example-using-appcompat-v23-2/
- http://code.tutsplus.com/articles/using-androids-vectordrawable-class--cms-23948
- Drawing and animating on a canvas - http://www.alvinashcraft.com/2012/06/18/making-animations-over-the-canvas-excerpt-from-60-android-hacks/
- https://blog.stylingandroid.com/animatedvectordrawable-bundles/
## Architecture
### MVP
- http://engineering.remind.com/android-code-that-scales/
- http://antonioleiva.com/mvp-android/
- https://medium.com/@czyrux/presenter-surviving-orientation-changes-with-loaders-6da6d86ffbbf#.z6xozfyte
- http://code.tutsplus.com/tutorials/how-to-adopt-model-view-presenter-on-android--cms-26206
- http://www.tinmegali.com/en/model-view-presenter-android-part-1/
- https://www.youtube.com/watch?v=Asc4hU1iSTU
- https://www.novoda.com/blog/better-class-naming/
- http://www.singhajit.com/mvp-in-android/
- http://stackoverflow.com/questions/30704349/how-to-apply-mvp-pattern-to-android-project
- Retrofit + RxJava: https://kmangutov.wordpress.com/2015/03/28/android-mvp-consuming-restful-apis/
- http://hannesdorfmann.com/mosby/mvp/
- https://upday.github.io/blog/model-view-presenter/
- MVP/TDD - http://manabreak.eu/android/2016/10/26/mvp-tdd.html
- MVP without Dagger/RxJava - https://android.jlelse.eu/avenging-android-mvp-23461aebe9b5#.qf5t6bzdj
- https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21#.48o68njtj
- Refactoring an Android App - #1 - Intro to the MVP pattern - https://www.youtube.com/watch?v=ZWYOy8E4jWo
- Structuring project example - https://github.com/futurice/freesound-android/tree/master/app/src/main/java/com/futurice/freesound
- Another MVP project - https://github.com/athkalia/Just-Another-Android-App
- Essential guide for designing your android app architecture mvp part 1 - https://blog.mindorks.com/essential-guide-for-designing-your-android-app-architecture-mvp-part-1-74efaf1cda40#.w5ly19ato ([source code](https://github.com/MindorksOpenSource/android-mvp-architecture))
- MVP and RxJava - https://lorentzos.com/mvp-and-rxjava-9dfcbe79bf77#.dx17wrltc
- Handling api calls using retrofit 2 and rxjava - https://medium.com/3xplore/handling-api-calls-using-retrofit-2-and-rxjava-2-1871c891b6ae
- MVP vs MVVM - https://antonioleiva.com/mvvm-vs-mvp/
### MVVM
- twitter api to search tweets (MVVM, Rxjava 2, Retrofit 2, Databinding) - https://github.com/r7v/Tweetz/
### MVI
- MVI on Android - https://medium.com/@fnberta/mvi-on-android-20677f80df55
## Dependency Containers
### Dagger
- Dagger 2 + Retrofit + OkHttp + Gson - https://adityaladwa.wordpress.com/2016/05/09/dagger-2-with-retrofit-and-okhttp-and-gson/
- Dagger 2 + Realm test - https://github.com/niqdev/dagger-realm-test
- Dagger 2 + MVP - https://adityaladwa.wordpress.com/2016/05/11/dagger-2-and-mvp-architecture/
## Design pattern
- https://github.com/dbacinski/Design-Patterns-In-Kotlin/
- Repository pattern - https://adityaladwa.wordpress.com/2016/10/25/offline-first-reactive-android-apps-repository-pattern-mvp-dagger-2-rxjava-contentprovider/
- Common design pattern on Android - https://www.raywenderlich.com/109843/common-design-patterns-for-android
- MVC, MVP, MVVM Design Patterns with Godfrey Nolan - https://www.youtube.com/watch?v=JV63czrUpbI&feature=share
- Design patterns for human - https://github.com/kamranahmedse/design-patterns-for-humans
- Offline support - https://medium.com/@yonatanvlevin/offline-support-try-again-later-no-more-afc33eba79dc#.vlmdsz3ne
- Syncing changes in Trello app - http://tech.trello.com/syncing-changes/
- Building a sync adapter and using it on Android - http://josiassena.com/building-a-sync-adapter-and-using-it-on-android
- Repository pattern, generally - https://medium.com/@krzychukosobudzki/repository-design-pattern-bc490b256006#.b8uer86v2
- Anti-If: The missing patterns - https://code.joejag.com/2016/anti-if-the-missing-patterns.html
## Reactive Programming Android
- RxJava + MVVM - https://www.youtube.com/watch?v=h25FDyGTLso
- RxAndroid tutorial - https://www.raywenderlich.com/141980/rxandroid-tutorial
- Reactive Apps with MVI - http://hannesdorfmann.com/android/mosby3-mvi-1
- RxJava example - https://github.com/politrons/reactive
- Essenstial RxJava Guide for Android dev - http://blog.jimbaca.com/essential-rxjava-guide-for-android-developers/
## Functional programming
- Functional programming for android developers (part 2) - https://medium.freecodecamp.com/functional-programming-for-android-developers-part-2-5c0834669d1a#.ldji44tas
## Android Data Binding library
- http://www.androidauthority.com/data-binding-in-android-709747/
## Realm
- https://dzone.com/articles/realm-practical-use-in-android (+ best practice on design pattern)
- Realm example with MVP pattern and clean architecture for Android - https://github.com/asanchezyu/RealmExample
- Realm safe/deep integration - https://medium.com/@Viraj.Tank/realm-integration-in-android-best-practices-449919d25f2f#.8segcttyg
- Realm in general - https://android.jlelse.eu/realm-its-all-about-the-choices-we-make-7c2fe380ecd8#.cm2sitlpy
- Example of Realm with MVP and Dagger - https://www.thedroidsonroids.com/blog/android/example-realm-mvp-dagger/
- RealmDb : Clean architecture in Android - http://stackoverflow.com/questions/37085259/realmdb-clean-architecture-in-android
## Android guidelines
- https://github.com/ribot/android-guidelines
- https://github.com/ribot/android-boilerplate
- Applying Clean Architecture on Android - http://five.agency/android-architecture-part-4-applying-clean-architecture-on-android-hands-on/
## Offline-first apps
- [Android Data Sync](http://www.dmytrodanylyk.com/android-data-sync-part-1/)
- [Offline App Architecture](https://medium.com/@arunsasidharan/so-you-want-to-develop-for-the-next-billion-9eb072c26bc8#.klpm0joym)
- [Using Couchbase](https://medium.com/@vlado.atanasov/very-cool-article-4ee8b43f184)
- [Using Firebase](https://firebase.google.com/docs/database/android/offline-capabilities)
## Kotlin
- Kotling lang - https://antonioleiva.com/variables-kotlin/
- Living Android without Kotlin - https://hackernoon.com/living-android-without-kotlin-db7391a2b170#.hx713yiy6
- Kotlin For Android: An Introduction - https://www.raywenderlich.com/132381/kotlin-for-android-an-introduction
## Open source Android resources
- [Kickstarter](https://github.com/kickstarter/android-oss)
- [DuckDuckGo](https://github.com/duckduckgo/android)
- [Forecastie](https://github.com/martykan/forecastie)
- [This repo](https://github.com/pcqpcq/open-source-android-apps/)
- [Public APIs](https://github.com/abhishekbanthia/Public-APIs)
- [twitter-birdhouse](https://github.com/juliabrezmen/twitter-birdhouse/) - Data sync implementation
- [Workcation app](https://www.thedroidsonroids.com/blog/android/workcation-app-part-1-fragments-custom-transition/) (Map based app)
- [MVP Sample](https://github.com/nglauber/mvp-sample) - MVP (Model View Presenter) pattern using Kotlin, RXJava, Retrofit, Dagger and DataBinding
- [Dagger2 MVP](https://github.com/erikcaffrey/Kata-Dagger2-MarioKart) - MVP pattern with Dagger2 and RxJava/Android
- https://medium.com/@dmytrodanylyk/google-io-2017-useful-android-links-e756077f8895 - Google IO 2017 Useful Android links
- [Cewlrency](https://paramsen.github.io/cewlrency-ux-overhaul/) - Currency converter app with RxJava
## Android Things
- Writing your first Android Things - https://www.novoda.com/blog/writing-your-first-android-things-driver-p1
## Android Animation
- How to animate on Android - https://proandroiddev.com/how-to-animate-on-android-f8d227135613
## Android Tutorials
- Implement a login screen - https://medium.com/@vpaliy/do-you-dare-me-to-implement-this-login-screen-bf29b72d9e39
## Webdev
### Ionic 2
- Adding pages and navigation - http://blog.ionic.io/10-minutes-with-ionic-2-adding-pages-and-navigation/
---
Aiman Baharum (2016-2017)