Обновить
47
0.5
Степанченко Александр@kellas

Full stack web developer

Отправить сообщение

Где-то между наставником и отшельником потерялось 2 стадии алкоголизм и депрессия

Да действительно кажется не поняли друг друга.

Я советую только лишь избавиться в вашем коде от .forEach по коллбэкам и использовать нативный event emmiter, остальное(proxy/weakref) оставить как есть, а пример кода который я прислал - он вообще совсем другой и я хотел им показать только то как используется eventTarget

Принципиальное отличие в том, что когда ты используешь встроенный API событий (EventTarget, addEventListener, dispatchEvent, CustomEvent), ты работаешь через движок браузера, а не через JS-слой. Память под обработчики выделяется внутри C++ части движка, сборщик мусора освободит обработчик автоматически, если emitter или handler больше не достижимы из кода. Даже если ты не вызовешь removeEventListener, при уничтожении самого EventTarget вся его таблица слушателей уничтожается целиком. А это значит что никаких утечек при удалении стора/компонента.

Движки браузеров десятилетиями оптимизируют работу с событиями, там куча всего на самом деле, и основной поток не блокируют и меньше шансов на racecondition, я сам в деталях всё не знаю.

В целом этот тот же pub sub механизм, только реализованный нативно в браузере, зачем писать свою его реализацию не очень понятно , просто какой-то лишний код получается.

на уровне стора диспатчим

function createStore(initial = {}) {
  const state = structuredClone(initial);
  const emitter = new EventTarget();

  function set(partial) {
    Object.assign(state, partial);
    emitter.dispatchEvent(new CustomEvent('change', { detail: state }));
  }

  function subscribe(listener) {
    const handler = e => listener(e.detail);
    emitter.addEventListener('change', handler);
    listener(state); // вызвать сразу
    return () => emitter.removeEventListener('change', handler);
  }
  return { get: () => state, set, subscribe };
}

подписываемся на стор
subscribe возвращает функцию для отписки

Думаю лучше использовать Event чтобы не морочиться с хранением слушателей

откликнулся уже на 700+ вакансий (и это не шутка). Но дело в том, что на одну позицию приходится по 300–1000 откликов

Вы же не можете работать сразу в 700 компаниях верно, но тем не менее 700 откликов сгенерировали только вы один, 699 из которых "сгорят" как только вы найдете 1 работу, так что то что на какие-то вакансии по 1000 откликов ничего вообще не значит, потому что каждый из этой тысячи отправил отклик ещё на сотни других позиций, итого каков шанс что будет выбрана именно эта? это как в тиндере - иллюзия популярности и выбора )

Идея статьи отличная, а инструкция которая вроде как должна быть простой - усложнена.

Докер ставится одной командой - curl https://get.docker.com | sh

а в docker-compose.yml используем valian/docker-nginx-auto-ssl

services:
  nginx:
    image: valian/docker-nginx-auto-ssl
    environment:
      ALLOWED_DOMAINS: '*'
    volumes:
      - ./site:/var/www/default
      - ./.cache/nginx/ssl:/etc/resty-auto-ssl
      # - ./openresty.conf:/usr/local/openresty/nginx/conf/server-proxy.conf
    # network_mode: host
    ports:
      - 443:443
      - 80:80
    restart: always
    logging:
      driver: json-file
      options:
        max-file: '3'

и можно не думать про обновление сертификатов

Попробуйте calendar0bot в телеграм , сэкономите кучу времени на внесении событий

Попробуйте сделать свою приватную группу с топиками для всех заметок. Пригласите в неё так же резервный аккаунт, на случай блокировки/угона основного.

Делаете в ней топик "купить"

Каждое сообщение - отдельный товар

Двойной тап по сообщению чтобы поставить реакцию и отметить как выполненное / купленное

Вы как-то упустили момент что эти "волки" далее вполне успешно работают. Их не увольняют. И растут так же со временем.

Так что кажется проблемы то особо никакой и нет. Всего-то на собесах спрашивают больше чем реально нужно для выполнения должностных обязанностей или скорее что-то что с реальной работой вообще не связано )

Для ленивой инициализации лучше динамический импорт файла с компонентом использовать.

Астрология, нумерология, всевозможные техники с "гадальными" картами обкатанные столетиями устроены таким же образом. И тоже используются для оценки и выдачи ответов на вопросы клиента относительно его будущих дел и процент угадывания примерно такой же. Да это не точно, может произойти что угодно, значит ли это что мы должны совсем отказаться от использования эзотерики для предсказания будущего? - Да чёрт возьми значит! И от сторипоинтов с человекочасами тоже!

Понятие токсичности сейчас очень сильно размылось и используется вместо "не нравится"...

Если же в вашей команде есть токсичный человек по более старой интерпретации токсичности в коллективе, надо немедленно его увольнять и возможно ещё пару человек которых он сильно "заразил".

Токсичный человек может не ныть не ворчать не грубить и не проявлять пассивной агрессии, НО рушить мотивирующие команду смыслы, заменять их другой мотивацией, селить в головы коллег идей приводящие к паразитизму на работе, наплевательскому отношению к тому что делается, нарушению субординации. Вежливо и аргументировано он подорвет авторитет текущих лидеров. Он психологически "отправляет" сотрудника за сотрудником, те в свою очередь следующих, через время культура в команде сильно меняется , новые сотрудники уже понимают что "здесь так принято" и либо сразу уходят либо становятся частью этой "токсичной" культуры.

Это чаще всего человек с реально хорошими софт-скилами, и про таких людей не говорят "да он токсик", а скорее скажут "черт возьми а он прав!"

там обращение к document идет не в contructor класса, а начиная с connectedCallback - который вызовется только после загрузки dom

короче можно писать прям так

import './sub-component'

customElements.define('my-component', class extends HTMLElement { 
connectedCallback(){
  this.innerHTML = '<sub-component></sub-component>'
}
})


и не морочится с порядком их регистрации
весь index.js из статьи - просто лишний код

Есть еще один способ передавать данные в компонент - через его дочерние элементы
```<custom-select>
<option value="v1"> item 1</option>
...
</custom-select>```

В момент инициализации своего компонента - парсите вложенные в него теги. В принципе так что угодно в рамках разумного, хоть json можно передать в <code style="display:none">{ myjson: { a:1 }}</code> если ситуация позволяет.

А может объяснить в чем прикол экспортировать функцию customElements.define потом дожидаться domload и только потом регистрировать компоненты?
Почему бы не вызвать define прямо в файле с компонентом - типа если файл импортирован - то компонент нужен.
И для чего регистрировать компоненты после domload почему нельзя до ?
Кажется какие-то лишние телодвижения , которые и размер кода увеличивают и время инициализации без видимых преимуществ.

да сделали, со времен ie7 еще все это работает без js - https://habr.com/ru/articles/819465/

Возможно вопрос вам покажется странным, а вы пробовали вот это всё ему сказать? Вот прям так как есть, не прячась за деловыми формулировками.

Прям с таким я не сталкивался, но когда был тимлидом, был в команде один очень уж "хитрый" разработчик, плохого прям ничего не делал, кажется ему просто нравилось это чувство "какой он продуман" оценки задач в 2 раза увеличил, один день поовертаймил - оставшуюся неделю свободен ) ходит коллег отвлекает.

Так вот помогло просто неформально проговорить в слух то, что я наблюдаю, что именно он делает, без угроз увольнения, без предложения поменять задачи или должность, вообще без каких-либо предложений, просто обозначил что и я и другие видят и понимают что как и зачем он делает. Результат пришёл незамедлительно и сохранялся, ну точно ещё год пока я там работал.

Это игра по корпоративным правилам, для которой нужны минимум двое, держится на одних только недомолвках, стоит одному "выйти" , как другому ничего не остаётся как перестать играть.

Не раз убеждался что "правда" (описание наблюдаемой вами действительности) просто произнесенная в слух останавливает все интриги. Есть вероятность что после этого какой-то человек будет вынужден уйти потому что он там только для того чтобы "играть" и иначе ему невыгодно, а может это будете вы если всем остальным невыгодно что вы с ними не "играете". Но именно в примере как в статье, когда только один человек от скуки заигрался на работе - просто скажите ему об этом.

Хмм... Надеюсь мы перестанем пользоваться мессенджерами не из-за третьей мировой

Кузнецы в широком смысле как люди работающие с металлом остались и работают у этой самой печи ) Количество тех кто куёт по старинке сократилось за счёт естественной смертности и отсутствия новых кадров.
Так же рано или поздно все живущие ныне программисты умрут, а новых появится столько сколько нужно экономике возможно 0.
Я утверждаю что на наш "век"/ближайшие лет 40 работы программистам хватит, потому что хоть it развивается, общество так быстро перестраиваться все равно не успевает.

1
23 ...

Информация

В рейтинге
2 146-й
Откуда
Калининград (Кенигсберг), Калининградская обл., Россия
Дата рождения
Зарегистрирован
Активность