https://kotlinlang.org logo
Docs
Join the conversationJoin Slack
Channels
100daysofcode
100daysofkotlin
100daysofkotlin-2021
advent-of-code
aem
ai
alexa
algeria
algolialibraries
amsterdam
android
android-architecture
android-databinding
android-studio
androidgithubprojects
androidthings
androidx
androidx-xprocessing
anime
anko
announcements
apollo-kotlin
appintro
arabic
argentina
arkenv
arksemdevteam
armenia
arrow
arrow-contributors
arrow-meta
ass
atlanta
atm17
atrium
austin
australia
austria
awesome-kotlin
ballast
bangladesh
barcelona
bayarea
bazel
beepiz-libraries
belgium
berlin
big-data
books
boston
brazil
brikk
budapest
build
build-tools
bulgaria
bydgoszcz
cambodia
canada
carrat
carrat-dev
carrat-feed
chicago
chile
china
chucker
cincinnati-user-group
cli
clikt
cloudfoundry
cn
cobalt
code-coverage
codeforces
codemash-precompiler
codereview
codingame
codingconventions
coimbatore
collaborations
colombia
colorado
communities
competitive-programming
competitivecoding
compiler
compose
compose-android
compose-desktop
compose-hiring
compose-ios
compose-mp
compose-ui-showcase
compose-wear
compose-web
connect-audit-events
corda
cork
coroutines
couchbase
coursera
croatia
cryptography
cscenter-course-2016
cucumber-bdd
cyprus
czech
dagger
data2viz
databinding
datascience
dckotlin
debugging
decompose
decouple
denmark
deprecated
detekt
detekt-hint
dev-core
dfw
docs-revamped
dokka
domain-driven-design
doodle
dsl
dublin
dutch
eap
eclipse
ecuador
edinburgh
education
effective-kotlin
effectivekotlin
emacs
embedded-kotlin
estatik
event21-community-content
events
exposed
failgood
fb-internal-demo
feed
firebase
flow
fluid-libraries
forkhandles
forum
fosdem
fp-in-kotlin
framework-elide
freenode
french
fritz2
fuchsia
functional
funktionale
gamedev
ge-kotlin
general-advice
georgia
geospatial
german-lang
getting-started
github-workflows-kt
glance
godot-kotlin
google-io
gradle
graphic
graphkool
graphql
graphql-kotlin
graviton-browser
greece
grpc
gsoc
gui
hackathons
hacktoberfest
hamburg
hamkrest
helios
helsinki
hexagon
hibernate
hikari-cp
hire-me
hiring
hongkong
hoplite
http4k
hungary
hyderabad
image-processing
india
indonesia
inkremental
intellij
intellij-plugins
intellij-tricks
internships
introduce-yourself
io
ios
iran
israel
istanbulcoders
italian
jackson-kotlin
jadx
japanese
jasync-sql
java-to-kotlin-refactoring
javadevelopers
javafx
javalin
javascript
jdbi
jhipster-kotlin
jobsworldwide
jpa
jshdq
juul-libraries
jvm-ir-backend-feedback
jxadapter
k2-early-adopters
kaal
kafka
kakao
kalasim
kapt
karachi
karg
karlsruhe
kash_shell
kaskade
kbuild
kdbc
kgen-doc-tools
kgraphql
kinta
klaxon
klock
kloudformation
kmdc
kmm-español
kmongo
knbt
knote
koalaql
koans
kobalt
kobweb
kodein
kodex
kohesive
koin
koin-dev
komapper
kondor-json
kong
kontent
kontributors
korau
korean
korge
korim
korio
korlibs
korte
kotest
kotest-contributors
kotless
kotlick
kotlin-asia
kotlin-beam
kotlin-by-example
kotlin-csv
kotlin-data-storage
kotlin-foundation
kotlin-fuel
kotlin-in-action
kotlin-inject
kotlin-latam
kotlin-logging
kotlin-multiplatform-contest
kotlin-mumbai
kotlin-native
kotlin-pakistan
kotlin-plugin
kotlin-pune
kotlin-roadmap
kotlin-samples
kotlin-sap
kotlin-serbia
kotlin-spark
kotlin-szeged
kotlin-website
kotlinacademy
kotlinbot
kotlinconf
kotlindl
kotlinforbeginners
kotlingforbeginners
kotlinlondon
kotlinmad
kotlinprogrammers
kotlinsu
kotlintest
kotlintest-devs
kotlintlv
kotlinultimatechallenge
kotlinx-datetime
kotlinx-files
kotlinx-html
kotrix
kotson
kovenant
kprompt
kraph
krawler
kroto-plus
ksp
ktcc
ktfmt
ktlint
ktor
ktp
kubed
kug-leads
kug-torino
kvision
kweb
lambdaworld_cadiz
lanark
language-evolution
language-proposals
latvia
leakcanary
leedskotlinusergroup
lets-have-fun
libgdx
libkgd
library-development
linkeddata
lithuania
london
losangeles
lottie
love
lychee
macedonia
machinelearningbawas
madrid
malaysia
mathematics
meetkotlin
memes
meta
metro-detroit
mexico
miami
micronaut
minnesota
minutest
mirror
mockk
moko
moldova
monsterpuzzle
montreal
moonbean
morocco
motionlayout
mpapt
mu
multiplatform
mumbai
munich
mvikotlin
mvrx
myndocs-oauth2-server
naming
navigation-architecture-component
nepal
new-mexico
new-zealand
newname
nigeria
nodejs
norway
npm-publish
nyc
oceania
ohio-kotlin-users
oldenburg
oolong
opensource
orbit-mvi
osgi
otpisani
package-search
pakistan
panamá
pattern-matching
pbandk
pdx
peru
philippines
phoenix
pinoy
pocketgitclient
polish
popkorn
portugal
practical-functional-programming
proguard
prozis-android-backup
pyhsikal
python
python-contributors
quasar
random
re
react
reaktive
realm
realworldkotlin
reductor
reduks
redux
redux-kotlin
refactoring-to-kotlin
reflect
refreshversions
reports
result
rethink
revolver
rhein-main
rocksdb
romania
room
rpi-pico
rsocket
russian
russian_feed
russian-kotlinasfirst
rx
rxjava
san-diego
science
scotland
scrcast
scrimage
script
scripting
seattle
serialization
server
sg-user-group
singapore
skia-wasm-interop-temp
skrape-it
slovak
snake
sofl-user-group
southafrica
spacemacs
spain
spanish
speaking
spek
spin
splitties
spotify-mobius
spring
spring-security
squarelibraries
stackoverflow
stacks
stayhungrystayfoolish
stdlib
stlouis
strife-discord-lib
strikt
students
stuttgart
sudan
swagger-gradle-codegen
swarm
sweden
swing
swiss-user-group
switzerland
talking-kotlin
tallinn
tampa
teamcity
tegal
tempe
tensorflow
terminal
test
testing
testtestest
texas
tgbotapi
thailand
tornadofx
touchlab-tools
training
tricity-kotlin-user-group
trójmiasto
truth
tunisia
turkey
turkiye
twitter-feed
uae
udacityindia
uk
ukrainian
uniflow
unkonf
uruguay
utah
uuid
vancouver
vankotlin
vertx
videos
vienna
vietnam
vim
vkug
vuejs
web-mpp
webassembly
webrtc
wimix_sentry
wwdc
zircon
Powered by Linen
100daysofkotlin-2021
  • j

    JungIn Choi

    04/29/2021, 1:26 PM
    Day44
    • Worked on demo app using map API & company API ◦ Displaying bike marker ▪︎ Resolved the confusing points in current app logic. Did work after adding deletion method. ◦ Displaying bottom sheet diaglog (on marker click) ▪︎ Used BottomSheetDialogFragment ▪︎ Using this fragment itself was not that difficult. I didn’t care xml layout design much, so I just made some grey dialog with white letter. ▪︎ However, I had to attach click listener to the marker, and I was creating the marker objects inside ViewModel. So, I had to create fragment from view model, which is weird as it sounds. • At first, I declared context .. … … .. inside the view model. (something like context = application.getApplicationContext(). But since this app was huge, there were some type casting problem with multi-dex thing. I mentioned this issue earlier, and it somehow worked that time, but this time.. I didn’t want to do such thing. • So I asked my supervisor for advice. Company used some context utility with koin..? dependency injection etc., but that seemed to be tail wagging the dog. So, supervisor’s advise was to use Rx! Inside the Viewmodel, just create a Subject, and pass some “flag” to it, and from the Fragment, subscribe that subject, and show dialog under certain condition. It was so nice and intuitive. ▪︎ Now I’m getting used to data binding - it was actually nothing difficult. Just adding <layout> <data> blah blah and I can access xml components and viewmodel methods easily from the fragment. (Of course there was a stupid moment. I wondered why my data binding was not working, but I just made a dumb mistake, I didn’t return binding.root … …..) ▪︎ Had disgusting issues with json, gson. Problem is, I didn’t know how to debug this. Supervisor’s tip was to add
    doOnError {it.printStackTrace()}
    , (I used to print logs by Log.d, e which didn’t show many information) So I was able to track, I put some name wrongly.
    Self-Comment
    • It’s quite frustrating, but worth it. • I occasionally feel some anxiety, “Am I too slow..? Am I under qualified..? What if other people think that I’m under qualified ..? Maybe other people might ask why that android intern is still doing on-boarding jobs, instead of working on actual tasks which are piled up. ” etc. Well, I really hope to catch up faster and be put into actual tasks, help my supervisor, but I know that I need more time. But this onboarding job is not that far from actual task, quite close, since I have to read current application codes to do my onboarding tasks. • There are several things left. Biggest thing is BLE. Other things left are service and layout. I hope I can finish onboarding next week, which means total three weeks of onboarding.
    Goals-Tomorrow
    • Implement authentication flow • Read BLE posts and check to-dos related to BLE, RxBluetoothKit etc.
    Input box for weekend and etc.
    • [context] [app components] [kotlin scope functions]  • should know the fundamentals related with context, to avoid memory leakage. • I’m just using let{}?:run{} as practice, but I should know the exact operation of those scope functions. • should know how to use profiling utilities, too. • Socket programming hmm
    🔥 1
    b
    • 2
    • 2
  • b

    Bryan L

    04/30/2021, 3:16 AM
    I'm not sure if a pass should qualify here, but it's been two days with little progress due to technical issues that I've been working to resolve. So only counting 1 day..
    Day 46
    •
    Self-Comment
    • Lots of technical issues the past two days. This is by far one of my weakest points even though I've been around technology for so many years. While I didn't save the error, I was having issues attempting to run basic tests due to my sha-1 release? I realized my current build-variant is "release" and not "debug". Not sure if this is the issue, but tried going through a few articles and haven't been able to fix the issue. This was mostly done yesterday day, so can't recall specifics. I attempted to use both release and debug build variants to run tests, but couldn't get neither to work. I probably spent a good 4-5 hours on this without fixing it. • Moved on to changing how I store a note's created date, but was having a few issues implementing it. While I think I've fixed it so I can store the current date as a long and format as a String when I want to use(instead of saving as String), I had an update for the Android Emulator. • Spent a good part of the day today trying to fix it. I can no longer use Android Emulator, it terminates immediately after I try to open it. At one point I even had issues finding adb on my physical device. Attempted to uninstall the virtual device, invalidate cache/restart, clean/build project, rollback to previous version, uninstall Android Studio, download a previous version of Android studio even. But I'm still having issues. The only thing that I can think of is to try reinstalling the Android SDK. Troubleshooting technical issues is exhausting. • Positive Note: Podcast episode released! I've been refusing to listen to it since I felt I could have performed much better. Hopefully someone finds it entertaining/useful. 😄
    Goals Tomorrow
    • Go for a long walk in the morning • Attempt to fix my Emulator issues by 1pm, otherwise ignore it and rely on physical device until I decide to tackle it again. • Attempt to fix my testing issue (I'd like to focus on this before continuing my project so I can start implementing tests as I introduce new features and refactor existing code) • IF fixed or decide to hold off on testing, I'll continue working with fixing how I store Date in Room Database before continuing User Data implementation
    💪 1
    j
    • 2
    • 4
  • b

    Bryan L

    04/30/2021, 5:57 PM
    editing
    Day 47
    • Fixed both Emulator issues • Fixed Testing Issue
    Self-Comment
    • Ha! Conquered them both. It may have taken me all day(on top of the last couple of days.. lol), but at least it's done and I can go back to being productive. The problems and fixes are posted in the thread. I actually enjoyed writing my daily report this way, it helped document progress and kept me consistent throughout the day as I've been getting distracted more and more lately. Might try this again. • Hopefully I won't come across too many issues going forward, but I'm excited to enter the world of testing for a bit. It feels completely different than what I've been doing and I believe it will help me understand some of the other issues I've come across more in depth. I'm not sure where I'll begin my tests(probably keep up with database tests, I suppose I'll go to github and start viewing sample tests from others). I will have to learn how small I should go to write tests. Will take some time to learn this. I wonder if I should learn in another sample app from scratch before going back to implement in Daily Doc? Since there is so much going on. Hmm.. 🤔🤷‍♂️
    Goals Tomorrow
    • Continue Testing venture 😊
    • 1
    • 8
  • b

    Bryan L

    05/03/2021, 3:37 AM
    Day 49
    • Started

    Testing on Android▾

    YouTube course by Phillip Lackner • Completed first 3 Parts of course
    Self-Comment
    • Beach was great! Beautiful weather, Parakeets in the trees, massive Pelicans landing next to me in the water, a dolphin was hanging out with everyone as well. Made for a nice beach day, may try to start going once every week or two.. 👀🏖️ • I've come across Phillip's Jetpack Compose tutorials recently and found the ones I watched useful. I was looking for a course to practice various tests focusing on Android if possible. I stumbled upon Phillip's Testing on Android course and so far it's going well! Sunburnt so my energy is a bit drained, but stuck through the first three parts of his course where he explains reasons for testing, writing good tests, and also went over tests with practices. He gave "homework" for part 3 which I almost completed but forgot a couple use cases and he intentionally made an error in the code which I did not catch. I hope he continues the course this way as it's nice to stimulate my brain with some "problem solving" again. I'm excited! :android-dance: • Creating a new project to practice and implement tests was definitely a smart decision. I was overwhelmed trying to learn with an existing project due to not really knowing where to start. Returning back to the basics with writing test cases for one / two functions at a time is refreshing and makes it easier to focus on the specifics. • Extra thought: I started thinking again today about my Kotlin skills. While I'm improving in Android, I feel like I'm not actually using a lot of Kotlin as I came across an article today that was talking about an algorithm and realized I would not of been able to solve it without playing around with different operations in the Kotlin Standard Library. I may begin practicing algorithms. Set a goal of one or two a week at minimum. 🤔🤷‍♂️
    Goals Tomorrow
    • Continue

    Testing on Android▾

    • Possibly work on an algorithm? :kotlin-intensifies:
    • 1
    • 1
  • j

    JungIn Choi

    05/03/2021, 5:08 AM
    Day46
    • Add authentication on demo ◦ Worked on saving token using okhttp3 Interceptor, SharedPreference ▪︎ Interceptor (1) (2) • BLE readings (1) (2) (3)
    Self-Comment
    • Emm.. I pushed a working demo with authentication, but I actually did not thoroughly read about inteceptor and shared preference. (To be honest, I feel BLE as more fearful and important task, so I didnt want to spend much time on authentication.. But I know that user authentication problem is tricky and I should look through that thoroughly one day. • Used few hours to get used to BLE terminologies and concepts. I’ll have to spend few hours tomorrow too.
    Goals-Tomorrow
    • ble lock demo
    🔥 1
    b
    • 2
    • 2
  • j

    JungIn Choi

    05/03/2021, 1:17 PM
    Day47
    • Reading time - RxAndroidBLE • Coding time - Lock (Sammi lock) controlling app demo
    BLEManager.kt
    - create rxble client , device discovery using scan filter with key
    Self-Comment
    • First challengd - location permission thing. ◦ I definitely added the location permission in manifest, but it just didn’t work . Some error about location permission was being printed on logs. I just had to copy the location permission requesting method from Map demo app, and called that from onCreate, and it worked. • Second challengd - was with Rx….. and I just had to follow the company code snippet to fix my wrong code. ◦ I posted both working & not working code on this thread. And.. I’ll have to figure why not-working-code did not work. • Ugh…….I did not 100% understand the operation related with BLE. I’ll have to check the flow more thoroughly tomorrow. • Third challengd - is something with toast. As in the video I posted on this thread’s comment, I made the button text change, according to the Behavior Subject’s value. However I just can’t pop up the toast..? Hmmm
    Goals-Tomorrow
    • review controller flow - analyze it in notion. • resolve issues with toast • move on to Lock(PlusLock) controlling app demo.
    • 1
    • 2
  • b

    Bryan L

    05/03/2021, 5:27 PM
    editing
    Day 50
    • Fixed several issues with Gradle (see thread) • Started a Shopping List App that focuses on TDD

    (same course)▾

    Self-Comment
    • The gradle issues are becoming easier to fix thanks to them following the same pattern. Although I've yet to experience this many issues until I started to dive into Testing. I wonder if it's because I'm using AS Arctic Fox Canary 15 instead of an AS stable version. I was having similar issues when I attempted AS 4.2... • Half way to the 100 day mark! I'm going to have to pick up the pace after the last 10 days of progress 👀🎉:kotlin-intensifies::android-dance:
    Goals Tomorrow
    • Continue Testing • Possibly do this problem (random easy on Leetcode)
    ✅ 2
    j
    • 2
    • 4
  • b

    Bryan L

    05/05/2021, 8:05 PM
    editing
    Day 52
    • Completed Part 11 of

    Testing on Android▾

    course
    Self-Comment
    • Issues for the day: ◦ Issue with Kotlin IntRanges, fixed by upgrading from 1.4.31 to 1.4.32 (Approx. 1 hour to fix) • Focus: ◦ Trying new way to document daily summary. With an early edit post to leave copies of my issues & how I solved them. Along with any screenshots / info I find useful to keep a record of. ▪︎ Hope you (yes you), don't mind all the commentary passed just Kotlin challenge!.. I say this even though I've been doing it for 52 posts now. heh ◦ Covered Testing with ViewModels, Dagger-Hilt, and Fragments. I had a pretty solid understanding with ViewModels & Hilt Testing, but I haven't been using Fragments in my project(s) since I am using Compose with 0 Fragments.. ▪︎ I don't think this part of testing will stick like the other two, although I'm pushing through it regardless for exposure. ◦ Started Part 12 to test Navigation with Mockito and Espresso. Had some early issues with handling Navigation as he isn't covering building the layout for it. But I managed to get through the first few minutes. ▪︎ Excited to cover a Mockito and Espresso. I hear MockK, Mockito, and Espresso often when testing comes up. I believe Espresso is used for Android UI tests, but that's all I know of it. As for mocking libraries, I know their used for mocking.. but do they mock logic tests or UI tests? Will find out tomorrow! • Thoughts: ◦ Seems I've been more productive in the mornings than evening lately. I'm not sure when this started as it's always been the opposite. 😅 ◦ Not sure where to store the read list below, but it's in some of my goals to go through. I may make it as part of my morning read. ◦ Did not do the leetcode problem again, I don't think I've got the motivation for it until I finish up some testing practice. ◦ Thinking of finding a discord group or reaching out on Reddit for a small programming group. I'm not familiar with them, but since coming back to the States and moving to a new area.. All I've done is study, and I don't know anyone with similar interests. Could be good to get some motivation that way. 🤔 Just a summed up thought on this vast topic ◦ My daily log is always centered more on thoughts vs accomplishments. Should I change this and move my thoughts to thread in post?
    Goals Tomorrow
    • Complete

    Testing on Android▾

    course (Part 12-16) • Read List: ◦ Start or bookmark Medium book? : Programming DSLs in Kotlin ▪︎ Part of: Directory of Pragmatic Programmer Books on Medium ◦ Read Medium Article: Unit Testing with Kotlin Coroutines: The Android Way
    ✅ 1
    • 1
    • 4
  • j

    JungIn Choi

    05/08/2021, 9:09 AM
    (draft)
    Day51
    • Read articles related to layout inspector ◦ android official document Debug Your layout with Layout Inspector and Layout Validation ◦ android official medium Layout Inspector ◦ Lesson today - let’s update things on time ^^,, • Getting grasp of current sprint (Adding a third party payment, Overall update related to store&promotion section)
    • 1
    • 4
  • b

    Bryan L

    05/10/2021, 4:33 PM
    Took an extended break for a few reasons. Did a couple of small readings in between, but nothing to note. A long break considering the 100 day challenge, but went ahead with it anyways
    Day 53
    • Continue _

    Testing on Android▾

    _ course -- Completed ✅ ◦ Testing Navigation with Mockito & Espresso Part 13 ◦ Test Image Picking Part 14 ◦ Test Addition of Shopping Items Part 15 ◦ Test Swipe to Delete Functionality Part 16 (Last Part)
    Self-Comment
    • Testing on Android ◦ Parts 13-14 are difficult to understand. Since I haven't been using the current UI Toolkit, when trying to test Fragments, XML, RecyclerView/Adapters (to name a few).. Most of it goes over my head. Since doing the early codelabs, I haven't been using these tools. After the course I will have to learn to use Android Tests with composables (Jetpack Compose). ◦ I think the issues of learning testing when I keep coming across conflicts between current UI Toolkit and Compose is a big reason my progress has suffered in May. I'll have to either find Compose Test samples /course or hold off and only implement Unit Testing. Otherwise I'll be spending a large amount of time trying to "reinvent the wheel" instead of covering material that has more information and that I still need to cover. ◦ Towards the end of the course it felt like he was just saying what he was doing as he copied code from another screen instead of explaining the process. The first half made the whole course worth watching, but since I'm not using tools in the second half of the course, I can only recommend the full course to those that are familiar with & focusing on using the current UI Toolkit. • Daily Doc ◦ Haven't checked Daily Doc in about a week. It went from 3 to 17 stars since then. I'd of imagined it would have gained popularity earlier! ◦ (I am excited at the thought anyways) to update it again to include some tests.. ◦ I'm still unsure how complex I should make this before committing to another project. Suggestions?
    • 1
    • 3
  • b

    Bryan L

    05/12/2021, 12:00 AM
    Day 54
    • Implement Tests in Daily Doc ◦ Dao tests implemented ◦ FakeRepository implemented
    Self-Comment
    • Tests integrated in Daily Doc Project ◦ Started to implement tests, although I have not worked on edge cases and mostly optimistic cases • Refactor Daily Doc thoughts ◦ Most projects with tests use sealed classes with Success/Errors. I may go write some tests and refactor code to implement this for better testing. I'm not yet comfortable enough to write tests first and then refactor as I'm still unsure on if I wrote the test case correctly. With it being an existing project I still believe it makes this more difficult than easier due to potentially having to refactor more than just a single file. I suppose that's were SoC comes in. 😉
    Self-Comment
    • Continue testing
    • 1
    • 1
  • j

    JungIn Choi

    05/12/2021, 4:21 PM
    Day54
    • Implement layout for MyPassFragment ◦ no_pass_view, mypass_view - layout jobs for custom view ◦ pass_detail_activity - layout jobs & connect from mypass_view to this activity ◦ customizing navigation menu ▪︎ shows user status (using / not using) by using action layout ▪︎ according to the user status, clicking the menu item should lead to different fragment
    Self-Comment
    • Yesterday’s layout labor was quite useful. Thanks to my yesterday, I was able to do much easier today, • Of course, things are still not easy to me. I’ll have to continue practicing • I didn’t spend extra time for my self-study recently. This store sprint job is quite demanding, so I come from work at late afternoon, and just lie down. I’ll have to control my pace, review my routines and plan work-life-study balance, probably at this weekend.
    Goals Tomorrow
    • coupon bottom sheet, purchase page button, purchase complete activity • fix logic that connects from view to main activity (finish..?) check supervisor’s comment • check setWebview logic, hide scroll bar on store fragment
    🔥 1
    b
    • 2
    • 3
  • b

    Bryan L

    05/13/2021, 2:59 PM
    Day 56
    • Continued Ktor Course ◦ Ktor Server section ✅ ▪︎ MongoDb created, user collection added, can add new users / check or existing ▪︎ Note collection added, can create / update / delete notes along with assign multiple users to a note
    Self-Comment
    • Ktor Course ◦ A great introduction to Server-side. I'm looking forward to implementing this into Daily Doc after I finish the course. Completed The Ktor part of the course and a lot of information, but was nicely executed. ◦ The next section covers creating the actual Note App that will utilize the Ktor Server. After it's built, the course goes back and covers encryption with Ktor
    • 1
    • 1
  • j

    JungIn Choi

    05/13/2021, 4:35 PM
    Day55
    • Fix logic routing to main activity ◦ Before, what I did was to start main activity again by calling startActivity(Intent ~~) ◦ However, since there were many background logics (Fetching from server etc.) running on main activity, this was an overhead. ◦ Since our main activity is always on the bottom, calling activity.finish() from the other activity was a better option. (was my supervisor’s feedback) • Product Detail activity, Purchase Activity, buttons & routings • Checked api document, related to current sprint. It’s still on progress, backend ppl are working on it. So I wasn’t able to replace the text attributes to viewmodel binded ones, but I just spent some time to get grasp of next week’s job.
    Goals Tomorrow
    • Add payment bottom sheet on purchase button click. ◦ Layout job + Logic handling both should be done. ◦ User’s payment information and coupon information should be shown inside the bottom sheet. Check the current mvvm structure related with WalletActivity part (WIP of my supervisor) • Set basic structures related to mvvm ◦ StoreFragment - figure how that webview callback thing should work.. I got the abstract understanding but should look more into the code. (find the similar part using this webview clicking logic or google) ▪︎ ElecleAPI.kt - getProduct / StoreFragment - (image click handler) / PassDetailActivity - (showing pass detail image webview) ◦ MyPassFragment ▪︎ ElecleAPI.kt - me/purchase ? me/product ? whatever.. ▪︎ PurchasedProduct, PurchasedProductUsageHistory - both as data class ▪︎ Add methods inside storeviewmodel (or maybe separate..?) and check places to replace the text attributes
    🔥 1
    • 1
    • 1
  • b

    Bryan L

    05/16/2021, 4:42 PM
    Forgot my laptop when traveling out of town for the weekend so I havent been able to work on the course. Will continue it tomorrow morning. Looking forward to making some progress!
    j
    • 2
    • 2
  • j

    JungIn Choi

    05/23/2021, 4:46 PM
    Day61
    • Googling for recyclerview issue ◦ Designer required recyclerview inside a scrollable view. So at first, my supervisor gave an advice to use recyclerview inside nested scrollview ◦ At very first stage of implementation, I built the entire layout with fixed recyclerview on the bottom. It then worked, but as I removed the fixed size constraint, recyclerview pagination was not working well. ◦ I was quite stressed with this problem. As I printed the api logs, every page was being loaded, and views were not being recycled. ◦ Reason was that nested scrollview renders all its child at first time of its creation. ◦ This is a serious problem, since this fragment I’m now working on will be routed often. If every pass history, not even being displayed on the screen, become loaded, it is very inefficient in terms of both memory usage and backend api loads. ◦ As I figured out this issue, I googled it and found some short comments that reported this same issue. (But they didn’t post any other solution..) ◦ So I guess I have to put the upper view as .. header of recyclerview. Must be some disgusting job tomorrow. ◦ Hmm. And I’ll have to google for some better solution too. Maybe I could just put everything inside the recyclerview and manipulate its coordinate..?
    Self-Comment
    • I’m actually spending most of the time (except working time) these days, to found rent & mortage …………………… Seoul is a fantastic place to live, if you’re rich. Ha ha, sad that I’m not. • Ideal plan to found rent by June, move in, and get my focus back to android studies. I know that I did not simply quit that graduate school just to spend weekends finding rents.
    Goald Tomorrow
    • Resolve that recyclerview issue • Finish refunding logic • Minor layout fixes (customize shadows) • Check for payment logic • Prepare for QA, practice replacing mock response data
    🔥 1
    b
    • 2
    • 2
  • b

    Bryan L

    05/26/2021, 5:19 PM
    Day 61
    • Finished Powerful Kotlin Rest APIs with Ktor ◦ Covered Security section ▪︎ Securely Saving Passwords ▪︎ Encrypting HTTP Traffic • Generated own signed certificate (trusted for self, untrusted for others) ◦ Covered Deployment ▪︎ Deployed Ktor Server to a Remote Server instead of just a local port (Watched the video, but did not follow along since I am not renting a server) • Started server-side project for Daily Doc -> ktor-daily-doc ◦ Ktor Server created ◦ MongoDB created
    Self-Comment
    • Been awhile since I've had to deal with Hashcodes! Kotlin data classes are a blessing. lol.. It's exciting to see progress on topics I've been meaning to cover for quite awhile. Security has been a big obstacle of mine that caused me to slow down/stop. I wasn't sure how to go about it so I spent a long time working with Firebase Auth that utilized Google Accounts & not actually entering passwords for this reason. I can now put that worry behind. ➕ • Since this app only used REST API without the website part & not meant for other users, the course covers generating my own certificate. Otherwise find a company to sign the certificate (explained in course, will go back and review this after implementing prior course material in DD. When everything is setup in the project I'll decide which type of certificate to get) ◦ Course demonstrates how to trust all certificates. Not meant for production apps as you want to find a certificate authority to sign your certificate normally, but I'm glad he covered it! Helped understand more in depth on how certificates work (somewhat 😆_)_ • Deployment section covered, but only watched (vaguely) and did not write code here. Wanted to see how it was deployed to a server even though I'm not currently renting a server to deploy to. ◦ Holding off on renting a server. I will go back and cover this last section when I reach this part of the course when adding it to DD. Not sure how long it will take to implement, so holding off on wasting $$ on renting the server when I won't have anything else to use it for besides this small deployment section of the course. Once I've got DD up and running I'll be more than happy to do so! • Course completed! Last sections after deployment show how to use Ktor to build websites & Version Updates. • Jetpack Compose released two new Codelabs since Google IO. ◦ Jetpack Compose Navigation ▪︎ This would have saved me quite some time while learning navigation. I'm excited to cover it dive into new navigation concepts & compare what I have vs what they teach! Will be covering this after server implementation ◦ Testing in Jetpack Compose ◦ Covered some testing already, but haven't touched testing in Compose. So this is great news. I won't be covering this yet until after I implement the course material into DD. Then will follow through with it to add testing to the project
    • 1
    • 1
  • j

    JungIn Choi

    06/01/2021, 12:42 PM
    Day66
    • add valid_purchase_slug, update related parts ◦ had to version up room db .. hoo.. • amplitude jobs (+ found some mistakes in legacy code)
    Day67
    • ipm - new sprint! customer service renewal • layout for csactivity bottom part (handle conditional branching with regard to riding status) • inquiry activity - basic tab layout job, implement basic layout for new inquiry activity
    Self-Comment
    • Hooooo finally made (provisional) contract for rent. Glad that I can get back my weekends or after-work time. Last month, I was so buried into seeking rent, studying basic laws and systems related to housing ...... Hoping to move in soon within month, and now I can spend my weekends having my own time, studying and coding again. • Store sprint finished ! Lucky that my first sprint was quite a heavy one.
    Goals Tomorrow
    • finish layout jobs for inquiry activity, finish up new inquiry fragment, my inquiry fragment ◦ My inquiry fragment - recyclerview again,,, ha
    b
    • 2
    • 1
  • b

    Bryan L

    06/04/2021, 2:54 PM
    Day 67
    • Listened to Jetpack Compose Compilation by Android Developers Backstage podcast on Spotify • Implement basic login / register in Compose ◦ Screens & Navigation implemented ◦ App now connects to network to register / login user • Worked on implementing DataStore
    Self-Comment
    • Basic Login / Register page set up with a few simple animations added ◦ Navigate LoginScreen <-> RegisterScreen ◦ Password visiblity option, Button is only enabled no field is empty & passwords match(register screen) ◦ password/confirmed password change to green when both match & are not empty. Confirmed password is red when focused and does not match password ◦ I could dive much further into prettying this up, but functioning features take priority • Had some trouble connecting to server through Daily Doc. After some trial & error and hours later, it turned out I had the wrong BASE_URL saved (https not http) as I haven't added the security/keystore yet. • DataStore is sure giving me a tough time! I'm still having trouble comprehending how it's used. Shared Preferences seemed much easier.. I'm definitely missing the connection, once I figure it out I'll be set(hopefully tomorrow). After some hours researching and failing to implement, I decided to sleep on it and continue implementing tomorrow.
    Goals Tomorrow
    • Continue working on Daily Doc ◦ Finish implementing DataStore
    • 1
    • 2
  • b

    Bryan L

    06/05/2021, 2:57 PM
    (draft)
    Day 68
    • Read Medium article: Jetpack Proto DataStore with Kotlin generated classes for Proto schema • Implement DataStore In Daily Doc ◦ (was not able to succesfully implement. Tried using Proto, but switched to Preferences at the end of the night. It's coming along, but not finished)
    Self-Comment
    • I swapped from trying to use DataStore Preferences to DataStore Proto (type safe version) ◦ After some trial and error struggling with implementing a secured version of datastore it finally works without errors. Took some time to figure out how to implement the proto class (message UserData) into various files. ◦ ...Spent the day trying to implement DataStore Proto, but could not get it to actually work. I will try to swap to DataStore Preferences, but I may just use SharedPref. SharedPreferences is a heck of a lot easier to use compared to trying to implement Datastore! Perhaps my biggest issue here is that there just isn't any up to date examples for what I'm looking for, and I'm too unfamiliar with Datastore/caching to figure it out myself.. 🤔
    • 1
    • 1
  • j

    JungIn Choi

    06/05/2021, 3:10 PM
    Day69, Day70
    • ForceFinish activity layout job done (With some issues left) • Discussion with this layout - with design team and web front engineer • Force Finish logic - have to check whether device location is within 300m radius of our return area, including buffer area. ◦ Disgusting RX jobs.. Got stuck and my supervisor helped quite a lot. (Actually he got stuck too) (He told me that he'll push a working vesion that night but he didn't haha)
    Self-Comment
    • Actually discussion with regard to ForceFinish layout became larger and longer than I intended. (Actually our frontend engineer loves discussion..) I didn't intend to have some "who will do this dirty layout job, mobile or web?" fight. My original intention was to say "Let's use html editor that frontend engineer developed" and put that into webview. That layout would be much cleaner in html format, I just have to put that on top. Miscommunication lead to waste of time,, • Hmm it was quite frustrating, but it was necessary. The problematic layout had many textviews, and it closely fits into the screen. (In some phone it fits in a screen but in other phones, it don't. So, it must be better to put as scrollview, but since it closely fits into the screen, putting inside scrollview was not pretty as expected. What a disgusting issue.. But I had some basic question - is this agree button really necessary? I mean, push button or marketing button requires some api shooting and is related to some user attribute. But in this layout, it was totally unnecessary. SO, conclusion of this dirty discussion was to get rid of that button... haha..... • Remote workday is really, really, good. I am much productive when I work home lol.
    Goals Tomorrow
    • Hmm I want to check that force finish logic but it must be an excuse to ask my supervisor to push commit at sunday right.. I'll just follow my memories and try to finish that logic from scratch, or just wait till monday. • I'm still not very used to Rx, I'll have to check actual working code snippets using "flatmap" and "map" • Goal is to finish focefinish logic at monday, and handle QA feedbacks for store sprint
    b
    • 2
    • 2
  • j

    JungIn Choi

    06/05/2021, 3:48 PM
    Sorry that I'm losing my early stage pace recently! I totally spent last month's weekend seeking for rents haha. Afraid that I'll have to spend my concentration to housing stuffs(Moving, getting my deposit back etc.) for couple weeks more. Well, I do my work and write codes related to work, but I know that my original resolution was more than this. What about having short retrospection meeting after finishing this 100day challenge thing? Maybe in google meet, or just in chat if u feel unfamiliar. Maybe we could wrap up this phase and start new phase of android study with renewed-resolutions.
    :android-wave: 2
    b
    • 2
    • 2
  • b

    Bryan L

    06/09/2021, 11:48 PM
    Day 70, 71, 72
    • Implement DataStore in Daily Doc/withRemoteDatabase branch ✅ • Work on fixing schema for room database for physical device
    Self-Comment
    • Held off on daily updates as I've been focused on getting DataStore to work. Decided not to give up on it, although with the amount of time I took, I probably should have used SharedPref as an alternative. ◦ What a great feeling to have it finally implemented! I need to clean up the extra code now that it's complete (not encrypted yet) ◦ Went back and forth between trying to use Preferences DataStore & Proto DataStore. The main difference between the two is that Preferences isn't Type-Safe while Proto is (uses Protocol Buffers) ◦ I ended up moving my enum class to save in datastore instead of in the navigation file. I believe this stemmed more from the info being drawn from in DrawerState which had to have some extra calls as the state kept getting destroyed / overwritten ◦ Took about a week longer than I anticipated to implement, but it's been a learning experience nonetheless 😆 ◦ Some screenshots of spaghetti code before cleanup in thread. Had to come up with a lot of it myself as the examples I came across were hardly relevant to what I was implementing • Cleaned up some code and decided to test the app on my physical device. Cleared cache/data, however there was an issue with the schema since the database changed (id from long to string, date from string to long). Not sure why it's occuring even after clearing all data from device. Attempting to implement automigration, although I don't believe this will solve the problem. Emulator ran fine, just issues with physical device
    🔥 1
    • 1
    • 3
  • b

    Bryan L

    06/10/2021, 6:02 PM
    Day 73
    • Continued improving Login features in Daily Doc/withRemoteDatabase ◦ Circular Progress bar added ◦ Snackbar bug fixed ▪︎ coroutineScope moved inside of
    when
    block ▪︎ coroutine now only runs once and does not chain from multiple clicks causing a delay. Fixed by cancelling & launching anew ◦ Worked on login bug • Listened to podcast episode: Datastories by Android Developers Backstage
    Self-Comment
    • Today has been a bug fixing day, tomorrow will be as well. ◦ There seems to be an issue with the result being saved and not refreshed after the initial logout. Attempted to fix, but it could be a coroutine issue or how DataStore is being built. ▪︎ snackbar reads the login result correctly (incorrect credentials), but it still navigates to loginscreen with the incorrect credentials. (repeated in thread) ◦ Once I get the login bug fixed, I will clean up my code. • Added a simple circular progress bar to indicate loading, I still have the loadingScreen setup.. However, I may remove this screen all together as it's unnecessary (I'll just call the UserData Datastore onCreate) then call either LaunchedEffect or DisposableEffect to check authentication that will revert back to the LoginScreen or the UserScreen. ◦ After reading the docs on DisposableEffect/LaunchedEffect I've gained a better understanding of how it works. Looking forward to applying it tomorrow! • Podcast episode was enlightening. Has given me incentive to separate current DataStore into two DataStores. Although, it was mentioned that how I save my UiDrawerState might be better saved elsewhere such as Room. (ignoring this for now) 🤔
    Goals Tomorrow
    • Separate UserData and UiDrawerState into separate DataStores ◦ Call & Authorize UserData if logged in within Activity's onCreate() • Apply DisposableEffect (if doesn't work, apply LaunchedEffect) • Remove LoadingScreen • If Bug is fixed, record demo of login to share
    :android-eyes: 1
    👀 1
    • 1
    • 2
  • j

    JungIn Choi

    06/14/2021, 1:48 AM
    (DRAFT)
    Day75 & Day76
    • Fixed issue with returning logic (minor..) ◦ When our bike is in “pause” status (locked, but not returned - user can park the bike, lock and do their business, and then re-ride), user could return it. When our bike is moving, user cannot return it. However, when the bike is in “pause” status but if user shakes the handle, though it is “moving”, user could return it. -> But the return button was disabled due to some bug. ◦ Was not an easy issue to me, since I had to check every logic related to this return button, which involves various states. ◦ It was eventually due to branching order -> Branch related to that part was not being entered, since it was caught in earlier branch which did not consider this situation • Store QA - Fixed shadows ◦ Used to control shadows only with elevation. ◦ However since elevation is based on z index, shadow became "dark & soft" or "light & sharp". Our designer required somewhere between, "light & soft". haha.. So I searched, and figured out that we can control the light making the shadow. Key light, ambient light, its color and opacity. • Reported some issues to product team ◦ Explained the "location-not-detected-ui-issue" to product team, asked them to fix some stuffs ◦ Notice banner issue.. hmm
    Self-Comment
    • WAAA moving done! Well bit left, since I have to clean this mess, order furniture etc. But now I have a fancy new desk yay! • I need my bed..please
    🎉 1
    🔥 1
    b
    • 2
    • 2
  • b

    Bryan L

    06/14/2021, 2:39 AM
    (draft)
    Day 74 & 75 & 76
    • Fixed Login bug ◦ Reset registerStatus & loginStatus after execution (this wasn't changing back to the default immediately & was storing/using the previous result if the user logs out after a successful login/register and logs back in with any credentials) • Discovered a way to view Android Documentation on my Kindle. ◦ Optimized well once I'm on the specific Doc & in Article Mode. Otherwise It overlaps with the navigation tab on the left side and is near impossible to use in navigation mode. But can take advantage of this pool-side. PDFs on the kindle for Android Docs are "ok"... •
    Self-Comment
    • Successfully fixed the login/register bug! I had tried a few different scenarios I thought may have fixed it, however I took a step back on Day 74 and tackled the bug for a few hours on Day 75 to no avail. I'm pretty sure I solved in in my sleep in my sleep going into Day 76. It's not optimized yet, but it works nonetheless 😆👍 • Decided against all of my "Goals Tomorrow" besides fixing the bug. I did play around with these, but ended up just reverting the code. Reasons below: ◦ DisposableEffect, not sure it would fit in my scenario compared to LaunchedEffect / SideEffect. I could replace my "subscribeToObservers" function and put the code in one of these, but will deal with it if I decide it's important enough or there are performance issues. ◦ Regarding the loading screen, I have left it there to determine and navigate to specified screens in the event there is an issue with transitioning to a screen. It will default to the loading screen instead. I ran across an issue with finding a blank screen with no way to navigate out when I attempted to removed it. ◦ The UiDrawerState is directly effected by the user being logged in & the data held is relatively small. Unless there is a performance issue, I will leave it the same as to separate I would still be calling both whenever I needed to change one. Just separately instead of together (a lot more code involved for similar/same result) • I had to go back and see what I planned next. Been working on implementing datastore & login for some time 🤷‍♂️ ◦ Refactoring ▪︎ Clean up all of the spaghetti code I've created over the past 1-2 weeks. Including unused code & adjusting some functions. Thinking about setting aside time per day to dedicate to refactoring to avoid being stuck on it while continuously cleaning it up ◦ assigning users to notes ▪︎ (Fetch from server with Retrofit and cache in Room) ◦ Encrypting login information ▪︎ (Important, but I'm only using test accounts and email addresses aren't being used & running through localhost. So not concerned about this yet ▪︎ Google-Sign-In method is still disabled for now. When I encrypt current data I'll enable it or remove it. Decision for a later time. • Lot's of comments compared to completed tasks, but I've got a direction for the week • I may have found another project. Initially planned on a Pomodoro Timer app, but this one would be for company I used to work for in NZ. It's currently just talk, but could lead to actual work. Some more details in thread
    • 1
    • 1
  • b

    Bryan L

    06/17/2021, 2:50 PM
    (draft)
    Day 80
    • Bug Fixes ◦ issue (solved) - When logging in, the current note was not being cached correctly. ▪︎ Added a LaunchedEffect here so whenever the user data changes, the current note also updates
    val username by userVm.currentUsername.observeAsState()    
        LaunchedEffect(username) {
            vm.checkForCurrentNote()
        }
    ◦ issue (discovered) - App crashes when moving to the background (only when a user is logged in) ◦ issue (?) - If logged into another account immediately after signing out of previous, it will load 0-all notes from previous account. Coroutine issue here. See thread for fix Difficult to pinpoint, and wasn't able to replicate it after applying fix in thread • Added Progress Bar to NoteListScreen to show while note list is loading
    ✅ 1
    • 1
    • 2
  • b

    Bryan L

    07/07/2021, 5:18 AM
    Day 93
    • Continued DS&amp;A in Kotlin ◦ Section II: Elementary Data Structures ▪︎ Stack Data Structures • Stack operations • Implementation • push and pop operations • Looked through material.io features • Daily Doc fixes ◦ fixed notelist not loading ◦ fixed profile icon bugs in userscreen ◦ implemented extended-icons, corrected visiblity icons
    Self-Comment
    • Completed Ch.4 Stack Data Structures ◦ Much shorter chapter, but informative! I'm learning quite a bit on basic DS. Somewhat embarrassing that I've never understood either LinkedLists or Stacks very much if at all. Glad I'm covering them now!! ◦ Challenges could be formatted better, but they're great! Could use more than 2 in a chapter • Research Material Design ◦ Researching MDC is definitely making designing my project(s) feel less daunting already. There is tons of samples/examples on components along with theory to cover. ◦ As I was researching, I kept getting motivation to improve DailyDoc. ▪︎ Fixed DailyDoc list bug - turned out I had changed a @GET request for user notes ▪︎ Changed UserScreen to fix profile DropDownMenu. ▪︎ Installed dependency for material-extended-icons ◦ Meeting postponed with Spikey Sanju until this weekend as he had a meeting. Sent him a list of md formats for DailyDoc. • Chat App ◦ Did NOT implement working connection between app & server ▪︎ Server works with [ws://localhost:8080/chat] , not sure why app isn't attempting a connection ▪︎ I believe Ktor would still be a great fit if I can get a connection. Would also help towards KMP/KMM (I think..?) ▪︎ Would be helpful to avoid using additional libraries that are not maintained frequently to do so.
    Goals Tomorrow
    • Speak to Recruiter • Complete Ch.5 Queues • Connect server to app (if I don't get ktor running, will clone a node.js server & use Socket.IO)
    j
    • 2
    • 2
  • i

    Ilmi Azhar Yuliardhi

    07/14/2021, 4:31 PM
    👋 I’m here! What’d I miss?
    🙌 1
    b
    • 2
    • 1
  • v

    Venetia

    07/30/2021, 2:59 AM
    Hi All! Is there a git repo to look at to get started?
    b
    • 2
    • 2
Powered by Linen
Title
v

Venetia

07/30/2021, 2:59 AM
Hi All! Is there a git repo to look at to get started?
b

Bryan L

08/05/2021, 3:26 PM
Hi Venetia! No repo, but you can scroll to the top of this channel for some guidelines. This challenge isn't too strict, but it's definitely worth sticking to!
v

Venetia

08/08/2021, 11:21 AM
Ok thanks!
View count: 84