https://kotlinlang.org logo
Join SlackCommunities
Powered by
# 100daysofkotlin-2021
  • b

    Bryan L

    06/07/2021, 2:53 AM
    Day 69
    • Implement DataStore In Daily Doc • Completed Leetcode problem: Longest Consecutive Seq
    Self-Comment
    • Started implementing Preference DataStore instead of Proto
    Copy code
    RANT :)
    It's interesting to see all of the articles and comments of people suggesting to use DataStore over SharedPref, but no up-to-date examples or docs besides the android documentation.
    Also, all of the content I came across has extremely simplistic samples that don't differ in any ways from others while also suggesting to use a DI library(Hilt), but do not use it themselves., which does not benefit me
    I'm thinking that a big cause for being stumped is that my foundation is lacking. So incorporating new libraries that lack relevant samples becomes a huge obstacle as I don't have experience to come up with ways to solve the problem myself. Perhaps I should fall back on some of these newer libraries I'm trying to implement and utilize some of the others(e.g. Use SharedPreferences over DataStore). Most of the libraries might be better than the previous ones they are meant to replace, but with the lack of information on them, it turns out to be more difficult to learn and use. Hmm...
    ◦ Only tackled this for a about 4 solid hours today, but I'm close to implementing it. Will be getting my 2nd dose of the vaccine tomorrow, so as long as I feel well.. This should get done! ▪︎ Once it's complete, the biggest issue then is that it is not yet encrpyted. So I can work on that once everything else runs smooth. • Seems I'm having some issues with coroutines as I'm getting double snack bars to appear and some other strange behaviour. Not too concerned with this at the moment, but will need to get fixed • Also need to go back and clean up my code. I have some improper calls in UserDataRepository, UserViewModel, and my UI Screens • Decided to try a leetcode problem before bed. Had fun fiddling around with it & performed as expected. Since I haven't been practicing algorithms / kotlin outside of the Android code I write.. I didn't quite get the solution. Timed myself for 30 minutes, while I was close. I spent more time playing around with various keywords before looking up a solution. Was very similar to what I had written. Interesting to see the various solutions people came up with (I checked Java solutions as I didn't see any in Kotlin)
  • 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
  • j

    JungIn Choi

    06/10/2021, 1:40 PM
    Day71 & Day72
    • Check overall riding logic (in original app code) ◦ Flow after finish riding, sending various status, connect billing activity -> hmm very complicated. Maybe refactoring this part would be very uhh..exciting. Nice practice for clean code lol. • Finish force finish logic & layout ◦ Replaced location part with backend api ◦ Was quite hard to handle Rx. I was not used to this map & flatmap, so it did not work as expected. Afterall, I had to use flatmap instead of map.. Now I get the difference between them. • Re-QA for store sprint ◦ minor layout fixes. (are quite annoying😈 but it's important👼)
    Self-Comment
    • Had my first personal meeting with my supervisor. I already worked for almost two months..?It's very surprising. (4/15 ~...) Wow! ◦ I liked this personal meeting stuff. Well I don't filter my words, so I just told everything to my supervisor, and it was very comfortable. ◦ It's still unbelievable that I didn't know kotlin at all, three months before. I know that I lack many basics still, especially things related with Rx, but I don't want to be pessimistic. • I'll have to set up my short term goals soon within this month. It's nice timing to have a reflection, since 2021 is past halfway. ◦ Goals within three months ◦ Goals till end of this year ◦ Career goals - Should I continue my career in this company? I must analyze my personal priorities & goals, and then check if the company's goal and this position aligns well. I am very satisfied till now, but I know that viewing myself from a more objective perspective is also necessary
    Day73 & Day 74
    • Add amplitude for CS sprint, Finished Warning activity (Totally done my job for CS sprint • Bigquery & firebase instructions • Error issue handling - fixed login phone number issue - and it was applied rightaway to production app! My first prod-hotfix ◦ Fixed regex for phone number (Surprising that this kinda basic checking did not exist..haha) ◦ Add some logic for handling wrong numbers
    Self-Comment
    • Well I've done my job for CS sprint, and... CS sprint was held 🤯 ◦ Well, product team decided to hold this sprint for a while. And I believe in them. ◦ Since it is quite a busy & chaotic period for this personal mobility industry, this kind of turnover is not that surprising. We have many competitors, and thesedays is especially very critical because our company don't get affected by the new regulation - most of our competitors do.. 😈 yay i'm evil!
    🔥 1
  • 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
    👀 1
    android eyes 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/15/2021, 9:16 PM
    Day 77
    • Refactored for a timed hour • Begin working on saving / fetching notes from server & then caching to room database.
    Day 78
    • Refactored (will be more detailed starting tomorrow) • Continue implementing save / fetch notes in Daily Doc ◦ Added a new way to fetch note(s), however I ended up breaking how I access the current day's note. Working on fixing it.. •

    Using Jetpack libraries in Compose | Session▾

    Self-Comment
    • Been combining some days together as some of the days I am stuck on implementing a feature or fixing a bug so nothing noteworthy until I've accomplished implementing / fixing it. • An hour spending time looking to refactor moves by quick. I come across a few issues trying to refactor what I intend to, and this might be able to be fixed by planning it out first. Will try this on Day 79-80 to test. • Came across some issues with note caching. I'm sure I accidentally removed something(s) while implementing other features. Not sure where I messed it up. (This is where tests would be helpful 😆) ◦ Current Daily Note is not loading properly. It caches until the app is destroyed. Afterwards if I "edit" the current note, it creates a new note instead of replacing the current. • The YouTube video link offered a lot of clarity! I should have watched this a month ago. Will be helpful in my refactoring & potentially help fix the issue(s) I recently created in my code. • Originally, I thought it would be a good idea to implement various ways to implement features to practice with different methods. However, I've come to realize that when going back to old code it makes it more confusing as the project grows. Lesson partially learned 😉
    Goals Tomorrow
    Copy code
    (My code has been getting out of hand, the hour of refactoring isn't enough. Will focus on cleaning code up for at least day 79 & possibly 80 to make it easier to implement adding / fetching notes from server)
    
    Will work through cleaning up NoteViewModel , UserViewModel, NoteAddViewModel before moving to their respected screens & the NavGraph.
    • Focus on refactoring ◦ Single Source of Truth ▪︎ Managing State • State hosting - VM, Screens ▪︎ Lifecycle • Work with this along with State hoisting ▪︎ Navigation ◦
  • b

    Bryan L

    06/16/2021, 6:07 PM
    Day 79
    • Bug fixes ◦ issue (solved) - ✅ - Note not saving / caching ▪︎ Changed VM coroutine from ViewModelScope to GlobalScope. I changed the NoteAddViewModel from being created on startup to when navigating to NoteAddScreen. Problem here was the coroutine wasn't surviving long enough to complete in the VM lifecycle. ◦ issue (discovered) - Taking 10-15 seconds for new/updated note displays on listScreen & 15+ seconds for it to register the newly changed/added note when navigating to the add/edit notescreen. Discovered it's only an issue if the emulator has a connection & server is down. (if airplane mode is on or if emulator has connect + server is up... works fine) ◦ issue (discovered) - when creating a new note, if the note is not saved directly, it is not being cached. I had deleted some old caching method, just needs reimplementing ◦ issue (solved) - When logging out, instead of deleting the notes from cache, it flickers by deleting and re-inserting the notes. Perhaps I need to add a delay or check for credentials somewhere between deleting/reinserting while syncing... ▪︎ Added code below to UserScreen. Another issue with resetting authentication. Perhaps I should hoist an authentication state here to avoid missing these calls. 😅
    Copy code
    LaunchedEffect(username) {
            vm.authenticateApi(username ?: "", password ?: "")
            syncNotes()
        }
    ◦ issue (solved) - When registering, it does not refresh the syncNotes keeping the old notes (from previous bug) and not starting with an empty list. ▪︎ Added
    vm.authenticateApi(trimmedUsername, trimmedPassword)
    to the register button after a successfully registering the account. Had this on the login button, but since I'm navigating to the user screen on succesfully creating an account, I needed to authenticate the new user • Owner is now assigned to note on creation & is inserted/updated through server to MongoDb • Notes now sync upon login. (issue above)
  • b

    Bryan L

    06/17/2021, 1:34 AM
    Current Project. I haven't focused on the design at all as I'm not concerned about it when compared to the app functioning as a whole. I can clean it up when ready to do so. Just have some details laying out for testing purposes... Currently working on a bug to make sure to direct to current days note (currently creates a new even if a note exists for today). Few other major bugs that need to be fixed before I can proceed
  • b

    Bryan L

    06/17/2021, 2:28 AM
    Recording #11.mp4
    Recording #11.mp4
  • 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
    Copy code
    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

    06/20/2021, 2:45 AM
    Day 81
    • Worked on fixing login/load notes bug. Not resolved. • Continued to work on cleaning up code (moving code around anyways..) • Listened to podcast episode _Kotlin Coroutines_
    Self-Comment
    • Still having issues with correctly loading notes when logging out/in on occasion. I'm wondering if there is an issue fetching data & overlapping requests. Going to hold off on this and continue cleaning up and some other areas and work on other parts of the project. I'll be stuck on this for awhile if I keep this going. I'll learn more about it as I go. • Tomorrow will either be a pass or won't get as much work done. Father's Day!
  • b

    Bryan L

    06/21/2021, 5:14 PM
    Day 82
    • issue (solved) - 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 ◦ Moved authentication from LaunchedEffect (updated whenever username changed) directly to signout function. • Started UI cleanup ◦ Body is now viewed in Markdown text ◦ Drew out a few designs for detail screen • Created discussion branch with project goals.
    Self-Comment
    • Spent about an hour or so today and many hours over the past week trying to fix this issue. I had previously authenticated user during register/login process, but didn't clear it immediately on logout and let the refresh take care of it. This caused the overlap in data. I assumed I had already implemented this. Silly mistake I overlooked • Going with UI cleanup next now that I've implemented the login functionality & fixed the majority of the visible bugs ◦ After trying to come up with a good detail screen design, I decided to keep it simple and only show the Summary & body content for now. With the body being displayed in Markdown for an overall improvement. I'll remove the symbol bar that was causing some issues in the body textfield on the NoteAddScreen as well since I've implemented Markdown. • Holding off on adding functionality to add Users. I'm unsure on how long that will take as I want to make it presentable on my portfolio & UI design will have more of an effect than a "friends" feature.
  • j

    JungIn Choi

    06/28/2021, 2:46 PM
    Day77
    • Sprint jobs (Fixed handler issues) • Started android performance course(https://classroom.udacity.com/courses/ud825) ◦ Finished my role in current sprint at my company (which is related with fee-renewal) earlier than expected. So my supervisor let me and my coworker to stick to some task we want. So my coworker decided to look into ui testing, and I decided to look into app profiling & performance. ◦ Spent few hours of reading official document, but it felt quite pointless. I don’t want to know “everything about android prodiler”, but rather I want to look how someone “figured out a problem using android profiler - or any other tool - and solved the problem to boost up performance”. And I want to know “how to measure that ‘gain of performance’“. ◦ Reading official document felt quite broad, but there weren’t enough tutorials related with performance/profiling. Meanwhile I found out this udacity course, so I decided to skim through this course tomorrow and analyze possible tasks I can apply into our company’s app. Began this course and watched several videos, and it seems good to start with.
    Self-Comment
    • Kinda felt shamed of just doing my work, no extra studies, and thought that reporting my work-progress here was meaningless. Bit of slump cuz 1) this sprint at my company was not so tough, less workload / but 2) error-issue tracking was so tough. • I feel this slump is coming to the end. I just feel it. • Planning to start a side project - Simple chatting app. ◦ Need to specify more, but thinking of an online health trainer chatbot kinda thing ◦ Goal : practice simple backend + reactive programming ▪︎ I’ll go through basics of rx kotlin - since I don’t have such knowledge…. I was just copying map and flatmap, subscribe, add to disposable etc. just depending on my inference… ◦ First, find a simple tutorial I can follow, like clone coding ◦ Second, go through details.
    Goals Tomorrow
    • Less than halfway into that performance course & Analyze performance tasks into form I can report to my supervisor
  • j

    JungIn Choi

    07/03/2021, 3:24 PM
    Day78
    • Preparing for side project - realtime chatting app ◦ Checked several articles - was helpful (1) (2) ◦ Initialized repository for nodejs and android
    Self-Comment
    • Spent lots of time connecting to the socket…………I tried to connect localhost but forgot that ip address is different for pc and mobile device. • Somewhat productive weekend, in a long time.
    Goals Tomorrow
    • priority 1 - Check QuadTree algorithm for geoclustering • priority 2 - Side project documentation - Analyze my goals & app architecture
  • b

    Bryan L

    07/04/2021, 3:13 PM
    Day 83 - 90
    • Daily Doc / Ktor Server ◦ Merged DD /withRemoteDatabase branch into master. ◦ Improve UI Features ▪︎ Markdown library added to NoteDetailScreen ▪︎ Adjusted data shown in various screens(Detail & User screens) ◦ Spoke to Spikey Sanju, an Android Developer that specializes in UI/UX design to help improve the visuals of the app • Chat App / Ktor Server ◦ Created repo for both ◦ Researched ktor websockets & how to implement into Android • Created Instagram Profile UI from

    Tutorial▾

    • Completed websocket-chat-tutorial • Purchased raywenderlich subscription ◦ Started DS&A in Kotlin v2.0 (Intro) • Completed 4 algorithms on leetcode & watched a mock interview • Started Android Study-Guide using obsidian.md • Improved LinkedIn & Github portfolio
    Self-Comments
    • Hesitant about continuing the challenge, but I'll finish it up. While it's been over 8 days since I last reported, I'm only going to submit 8 days worth as I can't recall everything I have worked on. • Major areas I will be focusing on: ◦ Data Structures & Algorithms in Kotlin ▪︎ With the release of a new version of the book, I have been wanting to focus on improving my DS&A skills. This being in Kotlin makes for a perfect opportunity to improve ◦ Coroutines & Chat App ▪︎ The biggest goal here is to better understand Coroutines. I initially thought that Ktor would be perfect to use here, but after a few days of trying to find samples of chat apps built in Android utilizing Ktor & Websockets, I found that it's proved to be harder than expected to just get a basic back-end to display the expected data. ▪︎ If I haven't fixed this by Sunday, I'll use an existing back-end and front-end then break down the front-end as simple as possible before implementing my own functionality(coroutines!) ▪︎ I was really surprised on how little information there is when it comes to using Jetpack Compose with a realtime chatting app. 0 public repos on github and any examples I came across did not use Ktor nor Jetpack Compose(There was one sample, but it was much, much more complex than I am looking for). This actually makes me want to build it using these techs even more as I know it's possible from what I've seen on the docs. But there is no clear example using such features. • Best case I can think of is implement an XML version & work on implementing Compose features one at a time. This would also help me practice with converting an app from xml to Compose.. ◦ Material Design ▪︎ While speaking with Spikey, he mentioned a few things such as pre-built material themes, guidelines and other samples he owns. Will be speaking to him on roughly a weekly basis as he builds mock screens to improve the design of the app. This is not my main focus for the next month, however I would like to at least be able to comfortably take already-built designs and use them in my projects to get comfortable in basic designs • Holding off on improving Daily Doc functionality for now, but if I feel a sudden inspiration or get an "aha" moment on implementing "friends" functionality or easy "refactoring" opportunity, I'll commit to it. But will not be spending long hours struggling
    Goals Tomorrow
    • Continue Section I: Introduction to Data Structures & Algorithms • Work on functioning real-time chatting app: Client-side (basic version or using an existing OS repo)
  • b

    Bryan L

    07/04/2021, 8:46 PM
    Day 91
    • Continued DS&A in Kotlin ◦ Section I: Introduction to Data Structures & Algorithms ▪︎ Kotlin & Kotlin Standard Library • 1.1 Introduction to Kotlin • 1.2 The KSL ▪︎ Complexity • 2.1 Time complexity • 2.2 Other time complexities • 2.3 Comparing time complexity • 2.4 Space complexity • Chat App ◦ LoginScreen & ChatScreen created ◦ Firebase implemented ▪︎ FirebaseAuth for login ▪︎ Firestore for database
    Self-Comment
    • First section of the DS&A book complete! Will be slower progress after this as I haven't had to write code yet. First chapter was just a simple review and chapter 2 was a nice overview on scalability / Big O notation • Didn't intend to implement login features, however it seemed to make sense to add firebase auth for simple sign-in process since I'll be using Firestore anyways. ◦ I first spent some hours trying to implement the Firebase Realtime Database before giving up on that idea. There weren't any clear examples and my goal isn't to spend the month creating the first Open-Source Repo on github for it.. lol ◦ I think I may need to take a step back from Compose on this app. There aren't any clear implementations for chat apps built with the library & I lack experience to create it on my own in a short period of time. • I need to learn when to take a step back and review my problem instead of fight it and try different things constantly. I have a good feeling about tomorrow. 👀
    Goals Tomorrow
    • Start Section II: Elementary Data Structures (Complete at least one chapter) ◦ Chapter 3: Linked List ◦ Chapter 4: Stack Data Structures ◦ Chapter 5: Queues • Connect to a socket in chat app
  • b

    Bryan L

    07/05/2021, 10:45 PM
    Day 92
    • Continued DS&A in Kotlin ◦ Section II: Elementary Data Structures ▪︎ Linked List • 3.1 Node • 3.2 LinkedList • 3.3 Adding values to the list • 3.4 Removing values from the list • 3.5 Kotlin collection interfaces • 3.6 Becoming a Kotlin mutable collection • 3.7 Challenges • Worked on Chat App ◦ Update Ktor backend ◦ Work on implementing sockets
    Self-Comment
    • Linked Lists.. A lot covered here! I've never used linked lists before and really only had an idea of their use prior to this chapter. Tons of lessons breaking down and creating a Linked List class incorportating functions and extending it one at a time with Iterable, Collection, MutableIterable, MutableCollection. The challenges were interesting as well, one included using recursion, while I understand what recursive functions do, I have never actually practiced with them before. Definitely useful information. If the rest of the book is anything like this chapter, DS&A in Kotlin would be a great book for someone starting a Kotlin Challenge (or looking to improve fundamental knowledge on DS&As in general! Looking to continue pushing at least a chapter a day. (24 chapter book. 21 not including first two+conclusion chapters) • After spending about 2 hours on trying to implement Firestore, I decided to use the same library as JungIn did. Following simple-android-chatting-app-using-socket-io. Much easier to comprehend & implement!
    Goals Tomorrow
    • Continue Section II: Elementary Data Structures (Complete at least one chapter) ◦ Chapter 4: Stack Data Structures ◦ Chapter 5: Queues • Research common Material Design Patterns • Continue Chat App websockets
  • b

    Bryan L

    07/07/2021, 5:18 AM
    Day 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)
    j
    • 2
    • 2
  • b

    Bryan L

    07/08/2021, 4:19 PM
    Day 94
    • Continued DS&A in Kotlin ◦ Section II: Elementary Data Structures ▪︎ Queue Data Structures • Common operations • Example of queue • List-based implementation • Doubly linked list implementation • Call with Recruiter to discuss job searching • Research Ktor & websocket implementation inside of Android project
    Self-Comment
    • Chat App ◦ Tried various ways to connect to server. ws://localhost:8080/chat on https://www.websocket.org/echo.html connects fine. Just not on Android. ◦ Going to move away from using ktor and use Socket.IO in project. Spent too much time trying to implement without success. ◦ My main goal for this project is not using Ktor, but to create an app utilizing coroutines with a connection to a server. The libraries can change • DS&A book ◦ Had a tough time focusing on this as I was distracting trying to understand why my client(ChatApp) wasn't connecting to the server. Chapter is almost complete, will finish it up tomorrow
    Goals Tomorrow
    • Chat App ◦ use node.js for back-end server ◦ use socket.io as library to form the connection from front-end <-> back-end ◦ Speak to JungIn & review our Chat App project & plans until next meetup • Complete ch. 5 & 6 in DS&A • Meetup for REST Client is tomorrow night (about a 30 minute drive.. might attend)
  • b

    Bryan L

    07/09/2021, 4:28 AM
    Day 95
    • Chat App ◦ Implemented [socket.io](https://socket.io/) library in Android app ◦ Created node.js server using socket.io ◦ Meetup with JungIn & discuss our project(s) + what to work on until next meetup • DS&amp;A in Kotlin ◦ Finished up Section II (ch5) ◦ Started Section III. Trees ▪︎ Ch.6: Tree • RESTful APIs Meetup
    Self-Comment
    • I was not able to get Ktor to function and gave up trying to use it for backend & frontend. Migrated to node.js server and socket.io. Android app now connects :) • Looking forward to sharing our progress for next meetup. Especially now that the connection to server has been made, I can focus on the app itself. • Meetup went well! First time going out and networking with other SE. Felt great! Also picked up some new knowledge on REST. Most of it went over my head as nearly all(except Postman!) tools used were new to me. There is a git repo that has documentation on how to use the code presented. May look into it at a later date when I'm ready to go more in depth on the topic • Finished up most of Ch.6 Trees except for the challenges. I'm going to cover those in the morning.
    Goals Tomorrow
    • Continue Section III: Trees • Chat App ◦ Handle basic snackbar on connection to socket ◦ Get messages to emit to screen
  • b

    Bryan L

    07/09/2021, 11:28 PM
    Bonus: Chatting App connection established with chat list showing! :)
    Recording #16.mp4
  • b

    Bryan L

    07/10/2021, 3:21 AM
    Day 96
    • Chat App ◦ Created Room Database with simple queries(insert, get all, delete all) ◦ Use MVVM pattern for Local DB. DB - Repo - viewModel - Screen • DS&A ◦ Finished Chapter 6
    Self-Comment
    • Not much accomplished today. Spent more time than I planned for working on the Chat App. Such a great feeling seeing the connection run successfully and display messages! • Didn't start the course work until late in the evening. Ended up only finishing up chapter 6. Trees topic feels much more complicated to implement. Will look at the Binary Trees Chapter(ch.7) this weekend to see if I should pause and first cover this topic elsewhere. Will keep the course work for my first priority in the mornings(afternoons) before committing to projects. • Recruiter offers resume building assistance, but I'm going to focus on building one this weekend to send off to a few local companies and linkedin recruiters. Won't get too much coding in this weekend. Might use a pass
    Goals Tomorrow
    • Work on Resume • Start Ch.7 of DS&A?
  • i

    Ilmi Azhar Yuliardhi

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

    Bryan L

    07/14/2021, 8:35 PM
    Day 97 & 98
    • Updated READMEs for DailyDoc & ChatApp • Chat App ◦ Decided towards a type of Chat App ◦ Added UI & Bottom Navigation (simple screens) ◦ Retrofit & NewsApi implemented • DS&amp;A in Kotlin ◦ Chapter 7: Binary Trees ◦ Chapter 8: Binary Search Trees
    Self-Comment
    • I spent some time thinking about the direction I would like to take with the realtime chatting app. While I want to focus with implementing Coroutines, I want to improve with network calls & event handling. Having API calls through Retrofit on top of the Real-Time Chatting with socket.io, it felt like a good opportunity to explore and improve in both areas. ◦ I intend to create chatrooms on top of articles, however that will take some planning as having a chatroom for every article might be a hefty task! So for now I've implemented a bottom bar navigation that navigates to Breaking News, Chat Room, Profile, and Bookmarked articles. ◦ There's plethora of features I could implement to this project, but my goal on "simplicity" stands. Learn how to work with and handle asynchronous calls from various sources(network: NewsAPI/node.js, Database Caching: Room, and State changes for different screens). Will cut back or change implementation if it becomes too complex • DS&A Book is going alright. I've come across a couple bugs that set me back. Have had a difficult time focusing while learning the trees, I'm not sure if it's because of the complexity or how the book is written / examples are given?
    Goals Tomorrow
    • DS&A in Kotlin ◦ Ch.9 AVL Trees ◦ Ch.10 Tries (start) • Research material design for ChatApp
  • b

    Bryan L

    07/18/2021, 1:49 AM
    Day 99
    • DS&A in Kotlin ◦ Ch.9 AVL Trees • Overview of Heaps, BubbleSorts, MergeSorts, RadixSorts, HeapSorts, QuickSorts • Prep for interview questions and covered DS&A Tips • Completed Tech Interview(screening?) for Twitter Application.
    Self-Comment
    • Plenty of research this weekend and algorithm solving, not much time actually coding. Will commit day 100 to data structures in Kotlin. A nice send-off to this "100-day-challenge" that has taken much longer than 100 days to complete.
    Goal Tomorrow
    Continue Section III: • Tries • Binary Search • start The Heap Data Structure
    👀 1
    💪 2
  • b

    Bryan L

    07/19/2021, 1:56 AM
    K🎉
    Day 100
    🎉K • Went back and fixed the algorithm I submitted in my Coding Challenge to Twitter • DS&A in Kotlin ◦ Submitted feedback suggestion on Forums (to improve challenges) ◦ Ch.10 Tries ◦ Ch. 11 Binary Search ◦ Reviewed Ch.1-9 • Started Cracking the Coding Interview
    Self-Comment
    • Dreamt of the solution to the question in the Twitter Coding Challenge. Went back in my code to fix even though it was already submitted. Made for a great experience regardless! • Started Cracking the Coding Interview. Went through the first 4 chapters. So far it's been Interview Insight & less algorithm practice. Will be going over Behavior Questions & Big O next. Looking forward to a better understanding/review on this important concept! • DS&A in Kotlin. The book started off strong, but I'm realizing it's major flaw. There is no real algorithm practice provided or real insight of actual implementation of the data structures. The challenges are underwhelming and are code practice rather than applying the data structure to a problem. ◦ Submitted a post on the forums. Hopefully it is looked at. The book could be a staple & standard for Android Developers/anyone using Kotlin to learn DS&A if they improve this! ◦ I started Cracking the Coding Interview Challenge to supplement the DS&A in Kotlin and help cover questions for each Data Structure.
    Copy code
    Took 131 days to complete this 100 day challenge. Definitely slacked off the second half. It probably took about 80 days to complete the last 40!
    android dance
    Motivational Goals
    android dance Continue: • GitHub Projects: ◦ Daily Doc ◦ ChatApp ◦ Android Playground • Interview Prep + Apply ◦ DS&amp;A in Kotlin ◦ Cracking the Coding Interview ◦ Hackerrank / Leetcode • Attend Meetups & Events ◦ Local ◦ Remote After I start with a company: • Contribute to the Community ◦ Start a Tech Blog ◦ Contribute to open-source projects ◦ Network! ◦ Prepare for talks 🙂 • Projects ◦ Launch Daily Doc to Play Store ◦ Create desktop version of Daily Doc Milestones (current) • Submit my first article on my blog • Launch DailyDoc to Play Store • Perform first talk • Mentor • Become a GDE • Contribute and make some awesome stuff!
    🎉 5
    🎊 2
    ✅ 1
    🙌 1
  • j

    JungIn Choi

    07/20/2021, 12:44 PM
    Awesome. congrats in advance to our upcoming meetup (in few hours) blob sunglasses
  • v

    Venetia

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

    Ilmi Azhar Yuliardhi

    08/29/2021, 1:15 PM
    Yes
    also yes 1