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


  1. solved this, although quite poorly
  2. 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


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:

  1. Build/download python version where I can mess with the source code and don't mess my system
  2. Watch what asyncio does with this parameter and how it implements them
  3. 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


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:

  1. 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
  2. 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.
  3. I haven't done any technical reading. Although it's probably fine, I should just switch books and courses over the months
  4. 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