Skip to content

Instantly share code, notes, and snippets.

View iamakulov's full-sized avatar

Ivan Akulov iamakulov

View GitHub Profile
// A copy-pasteable useWhyDidYouUpdate hook, adopted from the old & good usehooks.com (http://web.archive.org/web/20230203011511/https://usehooks.com/useWhyDidYouUpdate/).
//
// This hook will log whenever a component rerenders – and will print the props (or any other values
// you passed into it) that have changed between the rerenders.
//
// Usage:
//
// function MyComponent(props) {
// useWhyDidYouUpdate('MyComponent', props)
//

deepCompare performs a deep comparison of two objects. It automatically unwraps JS Maps, Sets, and ImmutableJS objects.

Example

deepCompare(left, right)

// Will output:
// {
// isEqual: false,
@iamakulov
iamakulov / index.md
Created July 21, 2022 17:03
Proxying api.my-app.com under my-app.com/api, using CloudFront or Cloudflare

Here’s how to make api.my-app.com available under my-app.com/api, using CloudFront or Cloudflare.

CloudFront

If both my-app.com and api.my-app.com are hosted in AWS, you can route requests to these instances using the CloudFront CDN.

Here’s what you’ll need to do:

  1. Create a CloudFront distribution
@iamakulov
iamakulov / index.md
Last active February 17, 2024 03:32
What you should (and shouldn’t) enable in Cloudflare for web performance

What you should (and shouldn’t) enable in Cloudflare for web performance

Cloudflare is a web-performance-and-security-as-a-service company.

To configure your web app to run faster, you need to:

  • sign up for Cloudflare
  • connect it to your site (by moving DNS records and setting up proxying)
  • enable a few toggles in the settings.

Keybase proof

I hereby claim:

  • I am iamakulov on github.
  • I am iamakulov (https://keybase.io/iamakulov) on keybase.
  • I have a public key ASB2dHz9Wm6YtJySDOi9D6Ir6PGiWzLdvreB2cru45lWJQo

To claim this, I am signing this object:

@iamakulov
iamakulov / index.md
Last active July 13, 2018 19:29
Куда инвестировать валюту в Беларуси

(Для канала про бизнес: @iamakulov_learning_biz)

1. Депозиты

Депозиты. Доходность на февраль 2018 года — 1...2% годовых. Это примерно равно или ниже инфляции доллара. Вклады чаще неотзывные (то есть забрать просто так не получится). На короткие вклады процент меньше, плюс нужно платить подоходный налог (если вклад до двух лет).

2. Облигации Беларуси в иностранной валюте

На примере выпуска №244:

@iamakulov
iamakulov / passive-true-analysis.md
Last active March 3, 2022 23:27
Analysis of passive: true

Analysis of passive: true

In 2017, Chrome, Firefox and Safari added support for passive event listeners. They help to make scrolling work smoother and are enabled by passing {passive: true} into addEventListener().

The explainer mentions that passive: true works for wheel and touch events. I practically analyzed when passive: true actually helps:

Event Works better with passive: true Is passive by default
wheel¹ Yes (Chrome), No (Firefox) No (Chrome), No (Firefox)
touchstart Yes (Chrome), ?² (Firefox) Yes (Chrome), ?² (Firefox)
@iamakulov
iamakulov / test.js
Last active June 23, 2017 17:13 — forked from tricoder42/bundle.js
Removing development files from bundle (using NormalModuleReplacementPlugin)
// This import should be dropped in production,
// because it's very large and contains development data
// (like locales for all languages).
import load from './very.large'
export const main = () => {
let data = {}
if (process.env.NODE_ENV !== 'development') {
data = load()
@iamakulov
iamakulov / index.md
Last active September 3, 2020 04:31
Webpack’s ContextReplacementPlugin examples
@iamakulov
iamakulov / index.md
Last active October 8, 2023 20:15
Imports and webpack contexts