Ron0Studios's blog

By Ron0Studios, history, 21 month(s) ago, In English

Hello everyone!

I think I've been long due to make an update on my last post on Obsidian. I can say that so far, things have gone very well, and I would like to preface by saying that I had to take a break from CP for around 6-8 months due to a very intensive set of exams I had to prepare for.

In any case, here are the things that I've learnt using Obsidian after a 3 or so months more of CP!

What I've been doing

For the last 3 months, I focused on preparing for the IOI and getting better at problem solving in general. For this reason, I held off learning tonnes of new data structures all at once (You'll see some evidence of this in the graph). My main priorities was getting good at hard implementation problems, something that is common in the BIO. I also focused on getting used to identifying different programming paradigms, so practicing ad hoc, Greedy and dynamic programming was something I also took seriously.

Here is the graph as of now for reference:

It's definitely grown a lot since my last post, and managing clarity for certain parts has also grown more difficult.

explaining the graph

There are a few bits and pieces I will have to explain before I can continue to show the problems I encountered when working with bigger graphs. You will have noticed a few more colors a lack of labeling on the nodes compared to my last post. The latter is because the graph has gotten too big to show labels! The extra colors has been a substitute for that in a sense, since it represents different tags and attributes to the problem. Here is some rough sketching to describe the "domains" of the graph:

Often, things that I like to avoid doing is having large groups of nodes all attached to the same thing, such as what you see in the greedy domain. Managing an obsidian graph, funnily enough, is like trimming hedges! Sometimes quality is better than quantity, and writing good nodes with plenty of relevant backlinks can really make your graphs shine.

Red colored nodes are unfinished, meaning they either don't have a good enough amount of content written about them to be considered useful. A good example of this is the singular node connecting the range query domains to the graph domain, a note on segment trees, which is something I looked up on out of interest but found a bit too complicated at the time.

Problems encountered with bigger graphs

Here are the main problems you'll find as your "notespace" increases.

  • You'll end up having to look through and manage a lot more notes to keep your backlinks working.
  • You'll, at some point, have to add more plugins to keep the app flexible, which can (over time) slow down the program, at least for my 5 year old laptop lol.
  • Writing backlinks and extra notes can sometimes be a chore, especially when you're having to do it for many problems a day.

Benefits of using obsidian

One amazing benefit I've found with Obsidian, and notetaking in general, is how well it helps to consolidate information. Usually writing things down means you spend more time on the problem, which definitely can help you remember the problem in the long term. Also, I've found reading explanations of Algorithms done by myself is a good exercise! Not only does it help you improve your ability to explain and write, but it also drastically improves understanding and retention!

Throughout the last 3 months I have been able to find relationships between problems that I would not have been able to find had it not been for Obsidian's remarkable tools. As an example, I had just finished working on a tricky implementation problem the other day, and after finishing the problem I noticed (using Obsidian's local graph view), that there was actually a very similar problem like the one I had just done, from over 2 months earlier. It was phrased completely differently than the current problem, but had the same underlying technique.

And it was not just one problem, but several! All the green nodes below are problems related to the one I had just done.

Plugins, tools and techniques to manage problems

tips:

Here are some tips when making notes that I've found useful when learning from others:

  • Try to make a note for every problem you find difficult. If ever you spend a long time on a problem, have to read its editorial or even just find it insightful, always try to write about it! It's will be very useful down the road!
  • Read through your notes every once in a while. Perhaps every fortnight, try and zip through all the notes you've made and see if you've forgotten about any of them. This is something I did after my half-year break from CP, and it helped get back to speed with the knowledge-side of algorithms (not necessarily speed though!)
  • The graph is your home! After all, it's Obsidian's no. 1 feature! Use it when you want to find hidden links between sets of knowledge, or to better group together different aspects of your notes.
  • The graph is not an art piece! Please don't start sacrificing the flexibility of the graph for the sake of it looking nice.
  • Try customizing some shortcuts! A good one to start with is a shortcut for the command palette and another one for Obsidian's quick switcher.

Techniques:

Here are some neat techniques

Dough stretching:

I've seen this one somewhere on reddit before, but I cannot find the link unfortunately. If someone knows about it, please let me know!. Anyways, this is a fun way to see close links between a certain node without having to make tags for anything. All you have to do is take the node you want to compare and stretch it as far as you can. As the graph relaxes itself, you should find that certain groups of nodes will have clustered together, indicating patterns! Here's a result of dough-stretching on my note on graphs

Graph parameters:

Here are a good set of graph parameters for seeing relationships. I always like to bring up the "link force" as high as possible and adjust all the other forces as necessary. This is because the link force, as far as I am aware, operates based on the number and "closeness" of nodes linking to any other node, meaning that closely related nodes will group together far more.

To show what I mean, here is a graph without any link force

It's just a circle! Now here's the same graph with link force dialed all the way up

Here are the settings I used

Plugins:

Here are my main plugins (in no particular order)

  • Advanced tables: helps a lot when representing hash maps.
  • Better footnote: super useful for making more elusive notes that don't need to take up space.
  • Custom Attachment location: extremely useful for making my folders less untidy
  • Checklist: good for checking which problems I still need to do
  • Templater: VERY useful when making notes, especially for every new problem I do.

Conclusion

Have I enjoyed Obsidian so far? Definitely! Should you use Obsidian? At the end of the day, that decision is up to you, but I can say confidently that it is an overall better method of going about CP practice than without. I hope you enjoyed this, admittedly rambly, journey of Obsidian with me and I will make sure to give one more update in the future! Thank you!

Full text and comments »

  • Vote: I like it
  • +93
  • Vote: I do not like it

By Ron0Studios, history, 3 years ago, In English

Hello everyone!


Alright, so I've been using obsidian to document my competitive programming journey for around 2 months and wanted to share the insights and techniques that I have acquired from some trial and error. To summarize, I believe that using obsidian can be very useful for long term memory of difficult questions or algorithmic techniques. Another disclaimer I would like to point out is that (as you may be able to tell :D) I am not a very experienced competitive programmer, and the idea of algorithms and data-structures is very new to me, so for many this may seem quite naive, but perhaps I can speak for a few newer programmers on this site! :)

What is Obsidian?


Well, Obsidian is a note taking software available on all platforms, recently on android as well! It allows for the effective zettelkasten note taking method, alongside a very modular note-taking workflow, vim support and thousands of plugins to choose from. A highlight of Obsidian for many is probably it's graph view, which helps organize your notes, and find links between your different notes (which we will discuss on in depth later).

The image above is an extreme case of graph usage with Obsidian, and more like an eye-candy visualization of what you could do with a large amount of notes. In typical day to day usage, Obsidian graphs are much more useful in the local view, or when changing the force parameters, which we will also discuss later.

Setting up


In terms of setting up the Obsidian vault, the only plugins I would recommend is the Admonition plugin and perhaps Juggl, if you want to dive head-first into graph customization. If you like vim, then you will be glad to hear that Obsidian has its own built in vim extension! If you go to the community plugins section, you can also find a .vimrc customization plugin which can be very useful.

A typical folder structure that I like to go (as of now) with is just a folder for any new algorithms/data-structures I learn, basically any competitive programming technique I stumble across, and another folder for some past problems I found difficult or interesting, especially those that used an algorithm I haven't used before or have recently learnt.

 Here's an image of what the file structure could look like. Ignore the "Excalidraw" folder,its for drawing pictures in obsidian!

Writing notes


Note writing, quite obviously, should be the most important part of taking notes with Obsidian. What I have done, so far, is document any new algorithms I learn and write an obsidian note about it. I try to make as many links as possible that are relevant, and create the file if it doesn't exist. You can add a tag to the file, e.g. #tofinish, to remind yourself to create a write-up of that note in the future.

Alongside this, I can also recommend using the mermaid.js plugin to create your own diagram visualizations, and to create footnotes, since they make your notes more presentable and less cluttered. Crediting resources is also extremely useful when looking back on notes. For example, I like to link back a youtube video in my notes that helped me understand a certain algorithm, so that I can relearn it when the time comes.

Graph view


Lastly, I wanted to spend some time on discussing the graph view, because I see that many people tend to use it for the wrong reasons. Like the graph image from earlier, having such a tremendously massive graph make your ideas seem cluttered and hard to navigate. Here are a few tips on using the graph plugin:

Firstly, once your notes begin to take shape, try and use the local graph view! You can do this by clicking the 3 dots on the top right of a note and selecting "Open local graph", although I heavily recommend that you create a shortcut for it! This is very useful for finding direct links between your notes, and seeing how far away ideas are connected. Try changing the depth setting of your local graph, and you'll see what I mean!

 Here you can see the local graph view for a note about "heaps" in action. Unlike the global graph view, this view has a much more contrasting node size (I mean look at the size of them!), which can help better your understanding of how things link together. This view has a depth filter of 3.


I would also highly recommend using the "group" feature to color code your nodes, it is extremely helpful and can shine light on the types of things your nodes are related to. You can use tags to color code, words in sentences or file names or even the directory of the note!

On top of the color coding, mess around with the forces menu as well! It may seem a bit pointless but I can assure you that the forces can help find new perspectives in relating your notes. For example, crank up the "Link force" option and you will find that your graph will find itself in clusters of its own, helping you see which 'cluster' your notes are part of and find your own little surprises! :D

Here is my current graph as it stands. Certainly not as impressive as other graphs, but you can see the color coding and the clustering effect from changing the link force! It really puts things into its own dimension!


That's it for this post, I might create a new one in the foreseeable future when I actually know what I'm doing XD. If you have any questions please leave them in the comments below, thanks!

Full text and comments »

  • Vote: I like it
  • +57
  • Vote: I do not like it

By Ron0Studios, history, 3 years ago, In English

Hello everyone!

I've recently watched the black box method that galen_colin published on Youtube, some time ago, and was considering a polished way of getting some form of longer term memory for many harder algorithms and data structure implementations that may be needed n future contests, or implementations of common algorithmic problems (e.g coin change) so that it can be easier to quickly recognise problems when you first see them. I'm currently doing Mandarin Chinese for my GCSE (school exams that you do at 15-16), and have been using Anki to get some kind of long term memorisation of vocabulary.

I've done this for 3 months, and it has worked spectacularly, and am wondering if it is a good idea to try find some system of practising CP using Anki? What are your thoughts on this?

I might try and write an article on how you can set up anki for competitive programming, if it actually helps gain some experience.

Thank you!

Full text and comments »

  • Vote: I like it
  • +20
  • Vote: I do not like it