The Best Productivity Tool for Taking Notes (in my humble opinion)

I want to start by saying that my thoughts here are as genuine as they come – I don’t run ads and I don’t have any affiliation to any of the product mentions in this post. I am simply someone who likes to try various productivity tools and have thus formed some opinions in that process.

Here is the ranked list of priorities that I considered when evaluating note-taking tools:

  1. Supports all of my devices (and syncs my notes between them)
    • For me – iOS, MacOS, Windows 10, Web
  2. Pricing
    • Call me cheap, but I really don’t want to pay a monthly subscription fee
  3. Good note searching functionality
  4. Rich text-editing experience
    • The most complex text formatting I need is to be able to write and format a blog post
  5. Good note organization functionality
  6. Dark mode
    • For taking notes at night, when the lights are off

Let’s cut straight to chase:

Evernote is the best note-taking tool for me.

Evernote met all of my requirements listed above. It may not be the best for all of the items listed above, but I feel it is by far the best tool that supports ALL devices (the main kicker is that their web app experience is excellent).

I have used Evernote for over 5 years now, both professionally (to keep important notes for my day-to-day work) and also for all of my personal projects and random thoughts. I use it whenever creative inspiration strikes me and I suddenly have a great (subjective) idea that I feel must be stored somewhere. I use it when I want to remember something for later, but know 100% that I will forget it in 5 minutes. I use it when learn something new that I will want to reference notes on later. Being able to search through my plethora of notes with ease quickly became a priority for me and Evernote has a very snappy search experience.

Evernote is also free, they do have an Evernote Premium subscription, but I have never personally needed any of the features that come with that subscription. For me, my use cases are pretty straightforward and simple text storage with some formatting is all I really need. I do feel some amount of guilt, since I have used their product for so many years but have yet to pay them a dime, but I suppose me writing this post makes us even (..right?). For their free product, they do have a slightly annoying device limit, however it sounds much worse than it is because I just use the web version for my laptops to get around the device limit.

Here is a link to Evernote: evernote.com

(No that’s not an affiliate link, I literally just typed their website url. But I do understand your skepticism – I, too, am jaded by all the almostbutnotquitefake “reviews” out there)

Some possible alternatives:

  • Microsoft OneNote
    • Similarly supports basically all devices, but I just really dislike the interface and the note organization structure
  • Apple Notes
    • Works great if you only use Apple devices
  • Bear
    • Has the best note-taking experience, but unfortunately only supports Apple devices
  • Notability
    • I use this purely for hand-written notes, which it does really well
    • Only Apple device support

There are probably others, but those are the only ones I’ve had the time to really try.

Designing and Implementing a Ranking Algorithm

I recently had the desire and need to create a ranking algorithm for a side project I was working on. I wanted to keep both the design and implementation fairly simple for my project, so I think this post will be great for people wanting to get their toes wet.

The ranking algorithm I ended up building is used for ranking user-created content – similar to the ranking of posts on sites like Reddit or Hacker News. So one might describe it as a ‘hotness ranking‘ opposed to a ‘relevancy ranking’ used in search engines.

My goal is to walk through the basics of designing a ranking algorithm and then sharing my experiences and findings from implementing my algorithm. My implementation was done for a web application using Node.js and MongoDB.

Designing the ranking algorithm

When starting to design my algorithm, I naturally wanted to understand how other sites’ ranking algorithms worked, fortunately I found a couple of blog posts that provided great introductions for ranking algorithms used by both Reddit and HackerNews. I would also recommend reading this blog post that describes the design process around Reddit’s ‘best’ comment ranking algorithm. Continue reading “Designing and Implementing a Ranking Algorithm”

Real-world programming interview question #1

As programmers, we like to solve problems. In school, we thoroughly enjoy working through solutions for our homework problems. When interviewing for a developer job, we have to solve some complex programming problems (on the spot). As software developers, we still work through complex problems, but suddenly our solutions have more weight because they are solving real business problems. I enjoy solving problems that come from real-world business context; I find that my motivation to solve these problems is greater. Today at work, I came across a problem and worked through a solution that reminded me of a challenging problem one might see at school or in an interview.

Here is the problem:

You are processing potentially thousands of units of inventory and you are writing code to take inventory data from a supplier and syncing it with a distributor. The inventory is comprised of rental properties which have restrictions on specific days that are ‘closed to arrival’ and days that are ‘closed to departure’. Unfortunately, the format that the supplier stores this information is very different from the format that the distributor’s API expects. It is your job to transform this data to be in the proper format for the distributor’s API to handle. Continue reading “Real-world programming interview question #1”

Node.js for side projects

There is one thing that unites people who work on software: we like to create things that work. Nothing is more satisfying than finishing a feature or project that simply does what it was intended to do. When it comes to my side projects, I love learning new frameworks, technologies, and languages. But in the end, the most rewarding and satisfying part is finishing the project and releasing something to the wild. Let’s be honest, if you work full-time and worry about things like exercising, chores, and possibly sleeping – then you understand me when I say it is not always easy finding time to complete a side project. We can help ourselves by planning ahead and perhaps utilizing some fancy project management tools. But what about our technology stack? If our end goal is to finish and release our project, then it makes sense to pick a technology stack that is well-suited for rapid development.

Node.js has become a popular server-side platform used to power the web servers for many modern web applications. When developing a Node.js application, you will be writing everything in Javascript and you will be able to run your applications on any type of server (Windows, Mac, or Linux). Node.js consists of a large pool of tightly-scoped modules and packages that you can utilize. What is great though is that you only use what you need, keeping your application as lightweight as possible. At the end of the day, side projects should still be enjoyable, and Node.js applications are fun to write. Continue reading “Node.js for side projects”