JungIn Choi
04/29/2021, 1:26 PMDay44
• 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 hmmBryan L
04/30/2021, 3:16 AMDay 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 implementationBryan L
04/30/2021, 5:57 PMDay 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 😊Bryan L
05/03/2021, 3:37 AMDay 49
• Started 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
• Possibly work on an algorithm? KJungIn Choi
05/03/2021, 5:08 AMDay46
• 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 demoJungIn Choi
05/03/2021, 1:17 PMDay47
• 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.Bryan L
05/03/2021, 5:27 PMDay 50
• Fixed several issues with Gradle (see thread)
• Started a Shopping List App that focuses on TDD
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 👀🎉Kandroid dance
Goals Tomorrow
• Continue Testing
• Possibly do this problem (random easy on Leetcode)Bryan L
05/05/2021, 8:05 PMDay 52
• Completed Part 11 of 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 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 WayJungIn Choi
05/08/2021, 9:09 AMDay51
• 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)Bryan L
05/10/2021, 4:33 PMDay 53
• Continue __ 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?Bryan L
05/12/2021, 12:00 AMDay 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 testingJungIn Choi
05/12/2021, 4:21 PMDay54
• 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 fragmentBryan L
05/13/2021, 2:59 PMDay 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 KtorJungIn Choi
05/13/2021, 4:35 PMDay55
• 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 attributesBryan L
05/16/2021, 4:42 PMJungIn Choi
05/23/2021, 4:46 PMDay61
• 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 dataBryan L
05/26/2021, 5:19 PMDay 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 projectJungIn Choi
06/01/2021, 12:42 PMDay66
• 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,,, haBryan L
06/04/2021, 2:54 PMDay 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 DataStoreBryan L
06/05/2021, 2:57 PMDay 68
• Read Medium article: Jetpack Proto DataStore with Kotlin generated classes for Proto schema
• 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.. 🤔JungIn Choi
06/05/2021, 3:10 PMDay69, 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 sprintJungIn Choi
06/05/2021, 3:48 PMBryan L
06/09/2021, 11:48 PMDay 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 deviceBryan L
06/10/2021, 6:02 PMDay 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 shareJungIn Choi
06/14/2021, 1:48 AMDay75 & 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..pleaseBryan L
06/14/2021, 2:39 AMDay 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 threadBryan L
06/17/2021, 2:50 PMDay 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. Bryan L
07/07/2021, 5:18 AMDay 93
• Continued DS&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)Ilmi Azhar Yuliardhi
07/14/2021, 4:31 PMVenetia
07/30/2021, 2:59 AM