April Progress
Day 1
OSS: Investigate the issue on aiohttp here, suggest a solution, if everyone is okay with that, could provide a PR
Blog: Finish the "Habits I want to develop as a Software Engineer" article
Leetcode:
- solved this, although quite poorly
- solved this very naively, will return to it tomorrow. But this is a medium problem, so I'm really happy I was able to solve at least in a naive way!
Book/Coursera: Watched 2 videos in Data Structure course
Rust: used Diesel to create migration for database
5AM: DONE
Day 2
OSS: Created a PR for issue mentioned yesterday link
Blog: Finish article about rss
Leetcode: Tried to find a better solution for this, but failed. I'll come back when I'll learn a bit more about Heap.
Coursera: Solved one task out of three, watched video
Day 3
OSS: Reproduces issue or found a separate issue. Not sure so far. Added comment to the issue, waiting on someone help, because after digging for a while I couldn't understand what's wrong
Blog: wrote a small article "Create artificial challenges"
Leetcode: I've almost solved K-closes medium problem that I was working on for a few days now. There is a bug somewhere in my code, but I already implemented a Heap with a sift_up and sift_down methods, so I'm making a progress there, but I should find a bug.
Day 4
OSS: looked at this issue https://github.com/aio-libs/aiohttp/issues/5501 Was able to reproduce it. started to digging around the code. Found a small error inside mpv docs
Blog: added an entry to rss article about proxying youtube
Leetcode: solved 2 easy problems and one medium. Although medium problem was rather easy,
Day 5
OSS: 1 line of small fix for docs in MPV. Actually, I got humbled here. Docs were fine, it just seems that I don't know my shell that good. Zsh is not a POSIX complaint by default and that's why the example that I've seen in the docs didn't work for me. Should have done more research and finally learn the tools that I'm using.
Blog: 64 words on having a choice isn't always a good thing blog post and this entry
Leetcode: solved medium problem with binary dfs tree https://leetcode.com/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree
Day 6
OSS: Continue to look at this issue https://github.com/aio-libs/aiohttp/issues/5501 but it's harder than I thought. Can't find the place where everything goes wrong. I'll do my best to help reproduce the bug and write a small comment on the issue. Maybe someone will point me out in the right direction for this bug.
Blog: just write this entry, should be still enough to cover my mini habit
Coursera: I'm not writing it here everyday, because if I just watched the video it's not something to really write about it, although I probably should. But today I solved fairly hard problem for the assignment. The task was to simulate a program that processing a list of jobs in parallel using Heap. So yeah, spent on it quite some time, was trying to do it yesterday and the day before that, but only today was able to actually finish it. Feel really proud of myself.
Leetcode: did some easy problems and one medium, but it was definitely on the easier side.
Rust: I always forgot to write here about rust, but it's going pretty good with my blog that I'm writing in Rocket. I think it would be nice to release it either on day 7 or 8
Day 7
OSS: no new issues for aiohttp, no new comments on previously replied issues and PRs. Watched a few older issues, looked into airoedis and FastAPI issues. FastAPI seems very lively, but it mostly just questions.
Blog: continue to write "Sometimes having a choice is not a good thing". It's probably should be small blog posts. There is no need to make it big. I already said what I wanted and although I could probably make a better point, writing just more about it looks artificial. And I hate it when I see that small good idea taken to the 400-page book, so the same principle applies.
Leetcode: one easy problem and one medium (as usually this kind of medium that is more on the easy side, but still)
Rust: I am making some good progress there, I think the first version is going to be up tomorrow. So far the most confusing thing for me in rust is importing. A lot of libraries have examples of import with "*" which I seriously hate.
Day 8
OSS: looked into this. This looks way more complicated that I think I am going to be able to do, but it's also interesting, so I've spent quite some time reading the asyncio docs, python source code and uvloop source code. Who knows, maybe I will be able to make it in the end. What I'll need to do to go further on that:
- Build/download python version where I can mess with the source code and don't mess my system
- Watch what asyncio does with this parameter and how it implements them
- Try to backport the same thing to uvloop.
Blog: Just this entry good enough for today.
Leetcode: Solved one medium problem, but this time for real. I didn't use a built-in heap in python but created it myself. Implemented a few methods like sift_up and sift_down and used them to solve the problem. If I have used a built-in heap, probably would take me like 15 minutes and 6 lines of code, but I've spent much more than that.
Coursera: finished the third week of data structure course, solved the disjoint set problem.
Day 9
OSS: just read through the issues on uvloop and aiohttp
Blog: write a new idea for blog and this entry
Leetcode: solve 1 easy problem
Coursera: watched 2 lectures
Rust: site is finally live!
Day 10
Today I got up at 4:30. Just didn't want to sleep anymore. And it's Saturday by the way. Today is going to be a good day.
OSS; I've spent quite some time trying to understand the uvloop create_connection
code. Since I'm not really familiar with socket/network programming it's not very easy for me. Another thing is that it's in cython and you have to compile it to see the result of your change in code. I've read through RFC, a Wikipedia page, and asyncio implementation on happy wheels. This is interesting. I also asked if somebody can help me to get things right on the original issue. So far from the code standpoint, I haven't made significant progress, but at least I learned the basics of the algorithm and now have an understanding of how it should work.
Blog: updated artificial challenges article.
Leetcode: Solved 1 easy, attempted 1 medium and 1 easy
Coursera: watched lecture about hash maps
Day 11
OSS: commented on the issue, that asked some question
Leetcode: solved 3 easy questions, looked over a few medium one.
Blog: this entry, also, small fixes on a Fighting bad habits article
Coursera: Watched lecture
Rust: pick up a book for the next reading.
Day 12
OSS: reviewed aiohttp issues, looked at the python bug tracker. I think, eventually I want to try and contribute to python itself, but that's probably a long way, so we will see. For now, I should sometimes look over a bug tracker to see what kind of issues are solved there, read a few PRs, that people submit, and understand better source code. Maybe reading this article is a good way to start. I actually started to wonder if I should also learn a bit of C. I think The C Programming Language book isn't really long and a very good introduction to C. Considering I want to contribute to python and learn rust for system programming reading this book might be a good decision.
Leetcode: solved one medium problem
Coursera: watched a lecture.
Blog: this entry
Rust: tried to implement rss for the blog.
Day 13
OSS; Subscribed to python bug tracker mailing list, reviewed a few issues in aiohttp and pull request in uvloop. When I say reviewed I don't mean writing comments and suggesting changes, just looked over.
Leetcode: solved 3 easy problems
Coursera: solved 2 problems, watched 1 lecture.
Blog: this entry
Day 14
OSS; Reviewed my previous PRs, watched over some PRs in the python source code. I think I have to really develop some knowledge about the python source code. Found a few nice places to start here and here as mentioned before. I think I'll start tomorrow with this.
Leetcode: solved 1 easy and 1 medium problems
Coursera: watched a few lectures.
Blog: this entry and about incoming three day fasting.
Day 15
OSS: as usual looked over open issues, my open PRs. Also wrote to the one person asking for a mentorship in Open Source. I think that would be great to have someone supporting you along the way. Started to reading Cpython internals article.
Leetcode: 1 easy and 1 medium problems
Coursera: watched a few lectures
Blog: this entry and fasting entry
Day 16
OSS: Got the response from the mentor. I think we are making some progress, I've signed up for being a triager at aiohttp. Also, one of my PRs was reviewed with good comments. Made me think about how small consideration about my change I took when I've created it. I should do better research next time. So now I have to check how similar problems are handled in other libraries and check the standards.
Leetcode: solved 2 easy problems.
Coursera: watched a few lectures
Blog: this entry and fasting update
Day 17
OSS: researched RFC and MDN docs for redirects with POST data. Wrote a summary of my research to the PR discussion on github
Leetcode: 1 easy problem
Coursera: started to solving the pattern matching problem.
Blog: this and fasting entry
Day 18
OSS: researched how other library handles 307, 308, 301 redirects. That took quite some time. I summarized the results in PR. With that info it should be enough to proceed with the PR
Leetcode: 1 easy problem
Coursera: watched a lecture
Blog: finished my fasting entry and added this entry
Day 19
OSS: wrote a tests cases that has incorrect behavior on master branch. Researched and summarized how the browsers works with different redirects.
Leetcode: 1 easy problem and almost solved a medium problem (some test cases failing, but I'm close)
Blog: this entry and updated the fighting bad internet habits with rss
Coursera: Worked on a pattern matching problem.
Day 20
OSS: Confirmed that my submitted bug to httpx is fixed in master, write a new suggestion on my PR
Leetcode: 2 easy problems
Blog: thin entry
Coursera: Worked on a pattern matching problem. Seems, like I'm stuck there for quite some time. I really don't get this Rabin Karp algorithm.
Day 21
OSS: moved my issue to more relevant repo, viewed some of the other issues in the aiohttp
Leetcode: 1 easy problem solved and 1 attempted
Coursera: finally was able to do a pattern matching problem.
Blog: this entry
Day 22
OSS: reviewed issues in aiohttp
Coursera: attempted one problem and watched a few lectures
Leetcode: 1 easy problem and attempted 1 medium
Blog: this entry
Day 23
OSS: reviewed the issues on some of the aio-libs projects
Coursera: solved 1 problem and watched a few lectures
Leetcode: solved one medium problem. Really proud of myself, that was kinda hard!
Blog: this
Day 24
OSS: Continued reading realpython article about the python source code, commented on one pr in aiohttp
Coursera: Finished "Data Structures" course! Yay! Kinda, I still have some other exercises that I left for future, but basic program is done, now I have to do the all exercises.
Leetcode: I stuck on 1 problem. It's kinda simple, in terms that I know what algorithm should be applied and I was able to implement it, but I do have some problems with edge cases.
Blog: this entry. Today I will also upload some of the articles that I've written so far.
Day 25
OSS: Reading about cpython source code.
Coursera: tried to solve the problems that I skipped while I was finishing the course. I think I'm stuck for a while with a splay trees, but I want to finish this course with 100% completion
Leetcode: Solved 2 easy problems and still couldn't manage this in order tree traversal problem.
Blog: this entry
Day 26
OSS: added a few test cases to my PR (so far they all fails, because no functionality is implemented). This tests intend to show how I wish things were, to see if other people would agree on that
Coursera: so my debt here is from the first week I didn't do 1 out 5 tasks, From week 4 I did only 3 out 6 and for week 5 I did 3 out of 5. I came back to the first week and tried to solve on problem, that I left. No luck so far
Leetcode: solved 1 easy problem and attempted to solve one medium.
Blog this entry and start to write "Food that I'm allowed to eat"
Day 27
OSS: Looked over some PRs and commented on uvloop issue asking if the maintainers would be interested to accept PR if I provide one
Coursera: Watched lectures about a Splay tree
Leetcode: Finally was able to solve the medium problem for K-closes members with heap. Found a small bug in my previous solution
Blog: this entry and new idea! I will try to implement all of the data structures from scratch that I've learned in the course and will write an article on each.
Day 28
OSS: looked through FastAPI issues
Coursera: continue my struggle with splay trees
Leetcode: solved 1 easy and 1 medium problem
Blog: this entry
Day 29
OSS: continue to read through cpython internals article.
Coursera: Splay trees are really struggle.
Leetcode: Solved 1 easy and 1 medium problem
Blog: this entry
Day 30
Last day or just the day before tomorrow?
OSS: checked one issue, that were complaining about the tests in async_lru, seems like everything works. Replied there
Coursera: Max sliding window. Almost solved. My algorithm works in general, but sometimes really slow, so I should change it a little bit
Leetcode: Finally solved in order search tree. This is an easy problem, but was a very tricky for me! And also solved one other easy problem
Blog: this entry with the summary of the month
Summary
Overall that was a great month and it was much easier than I would expect it to be.
There were days when I was kinda making minimal to just check the habit tracker. And that's fine too, the whole idea was to never skip a day. And I'm glad that I didn't.
Still, this is not an ideal routine and I figured out, that building something ideal is probably impossible but
What are my concerns:
- Writing a blog every day is not something that I want to do. I think I should write it once or twice a week, but dedicate more time to it. Writing my progress do seems valuable, tho
- Generally, I think, that some activities should take more than or close to 1 hour period. That's the time needed for deep concentration. Leetcode and Coursera definitely belong in these activities.
- I haven't done any technical reading. Although it's probably fine, I should just switch books and courses over the months
- I want to have some quantitative goals. I'm not sure if that's a good idea, as that creates more burden and you can't do stuff just to check the tracker, which could be dangerous, but I think some sprints of hard work with quantitative goals could be implemented.
Overall I was able to:
- Solve around 50 problems on leetcode (10 medium)
- Finish Data Structure course on coursera
- Wrote my own site in rust (the one you are reading this in)
- Posted 3 articles and created 3 drafts.
- Wake up at 5 AM everyday
- Started 1 discussion, created 3 issues and 3 PRs, replied to some (hard to find with github)
- Joined the aio-libs org on github