• Как повысить свои навыки в построении архитектуры сложных приложений?

    bingo347
    @bingo347
    Crazy on performance...
    Если по теории, то мне в свое время вот эта книга помогла:
    https://www.litres.ru/robert-s-martin/chistaya-arh...

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

    Через несколько месяцев прочел еще раз, анализируя все затупы, что записал за это время в блокнот. После прочтения начал потихоньку рефакторить в существующих проектах места, которые уж очень жить мешали.

    Еще через пол года прочел третий раз, опять же с оглядкой на личный опыт. И тут я кажется уже совсем въехал. По крайней мере многие проблемы с организацией взаимодействия между компонентами стали разрешаться. И вообще появилось достаточно четкое понимание, как структурировать приложение и где разбивать его на компоненты.
    Ну и после 3 прочтения еще помог момент: мне дали с нуля проектировать новое, достаточно крупное приложение на Rust. Притом заказчик кричал "микросервисы - это круто, хочу, хочу, хочу", а тимлид мне сказал "давай монолит, но так чтоб потом легко было распилить, а то все сроки про**ем". Вот тут прямо вообще понимание пришло. Ну и плюс в Rust архитектурные компоненты очень хорошо ложатся на отдельные крейты (это такая единица компиляции в Rust), а компилятор в принципе не дает делать циклические зависимости между крейтами.

    Ну и недавно решил освежить память и перечитать еще раз. И на этот раз уже были мысли вроде "так если делать по другому, потом проблемы вылезут тут и тут".
    Ответ написан
    1 комментарий
  • Почему async/await в Array.prototype.map работает как-то не предсказуемо(для меня)?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Такое ощущение будто в .map асинхронная функция не дожидается своих await, а сразу возвращает промис.

    Так точно. Функция, переданная в map, вызывается без всяких await'ов.

    Хотите массив со своими удвоенными значениями - используйте Promise.all:

    const arr = await Promise.all([1, 2, 3, 4, 5].map(async (value) => 2 * await asyncThing(value)));
    
    console.log(arr); // [2, 4, 6, 8, 10]
    Ответ написан
    1 комментарий
  • Как убрать отсуп у заголовка с большим размером шрифта в html с помощью CSS?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    у каждой буквы в любом шрифте есть расстояние по всем сторонам, чтобы даже при расположении вплотную - буквы не слипались. ну и это расстояние зависит от font-size. ну и в каждом шрифте оно будет разное.
    поэтому только подгонять самому и делать margin-left: -n px;, к примеру
    Ответ написан
    4 комментария
  • Делить ли React-компоненты на чистые и контейнерные?

    @SiSya
    Декораторы уже почти ушли с появлением хуков. Да и ререндела меньше.
    Да, код менее чистым выглядит, но это позволяет больше уделять композиции.
    Ответ написан
    Комментировать
  • Как удалить коммиты из ветки?

    jcmvbkbc
    @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    git reset --hard <id первого коммита>
    Ответ написан
    Комментировать
  • Как вырезать коммиты из одной ветки в другую?

    @sergeysmishin
    git checkout -b "branch-name" "commit-hash"

    branch-name - название ветки
    commit-hash - хеш-код коммита начиная с которого нужно сделать ветку. Все коммиты, которые были позже, не войдут в новую ветку.

    Пример:

    git checkout -b "new-branch" "ffe5069daa6d42e4f9e0efc28892e5401d42183f"
    Ответ написан
    3 комментария
  • Как создать событие в Google Calendar по ссылке?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    <a href="http://www.google.com/calendar/event?
    action=TEMPLATE
    &text=[event-title]
    &dates=[start-custom format='Ymd\\THi00\\Z']/[end-custom format='Ymd\\THi00\\Z']
    &details=[description]
    &location=[location]
    &trp=false
    &sprop=
    &sprop=name:"
    target="_blank" rel="nofollow">Add to my calendar</a>


    https://developers.google.com/google-apps/calendar...

    Так-же
    https://support.google.com/calendar/answer/41207?rd=1

    Последний пункт "Кнопки сохранения мероприятий на сайте"
    Ответ написан
    4 комментария
  • Prompt условие для пустого значения и для отмены?

    max_shane
    @max_shane
    Javascript / Node.js dev
    Если нужно, то могу порекомендовать начать изучать Javascript. С помощью него можно выполнить эту задачу.
    Что еще тут сказать то.
    Могу также порекомендовать сайт kwork.ru, там можно за дешево найти исполнителя заданий.
    Этот сайт не для того чтобы для вас выполняли задания, а для ответов на вопросы.
    Ответ написан
    8 комментариев
  • Как вы обновляете PWA на клиенте?

    @nvdfxx
    Senior Pomidor developer
    сервис воркер спрашивает у сервера - "Сервер, а мой кэш еще актуален?". А сервер ему отвечает: "нет, не актуален". И сервис воркер очищает кэш и загружает новую версию клиента с сервера
    Ответ написан
    Комментировать
  • Почему chrome не открывает ссылку кликнутую в сторонних приложениях в Ubuntu?

    @Lekarto
    В файле $HOME/.local/share/applications/google-chrome.desktop
    Найди: Exec=/opt/google/chrome/chrome
    И добавь в конце параметр %U
    Будет что-то типа: Exec=/opt/google/chrome/chrome %U
    Ответ написан
    1 комментарий
  • "localstorage" или cookie?

    Apathetic
    @Apathetic
    Frontend
    На самом деле всё просто. Куки - для сервера, локалсторадж - для клиента. Если информация, которую вы собираетесь хранить, нужна только на клиенте - нет никакого смысла в том, чтобы гонять куки туда-сюда при каждом запросе к серверу. Если какая-то информация нужна постоянно серверу - используйте куки.
    Кроме того, а куки 4кб выделяется, на localStorage - 5 мб.
    Подводных камней нет никаких, если нет необходимости поддерживать старые ие - используйте смело. caniuse.com/#search=localstorage

    Что касается отключения: пользователь может превентивно запретить использование localStorage. На практике с таким не сталкивался, думаю, что целенаправленно этим занимаются еще реже, чем отключением cookies.
    Ответ написан
    5 комментариев
  • "localstorage" или cookie?

    @triton
    К уже написанному выше дополню:

    Куку можно ставить на домен второго уровня и она будет доступна в поддоменах, а localStorage привязывается только к полному домену.

    Еще учтите, что в safari есть специальный режим при котором любая попытка записать что-либо в localStorage будет приводить к скриптовой ошибке. Этим режимом не часто но пользуются, так что лучше добавить обработку этой ошибки.

    А так, пользуйтесь тем, что лучше подходит.
    Ответ написан
    Комментировать
  • Формирование зарплаты у веб разработчиков?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Хороший вопрос!
    Я интересовался и получил ряд ответов от самих Заказчиков. Так, сказать, их мировозрение в этом плане.

    Со стороны Заказчиков:
    1. Раз ты работаешь на фрилансе - ты лох, потому, что не смог никуда устроиться.
    2. Если ты фрилансер - ты раб, который зарабатывает, чтобы не умереть с голоду. Поэтому, много тебе и платить не за чем.
    3. Нет гарантий для нас, что ты сделаешь всё на совесть. Мы не понимаем как сделать самим и, при этом, хотим хорошо сэкономить.
    4. (Про время) Мы оцениваем не сложность проекта и твоё умение и опыт, а время, которое никак не может быть дороже медианы фриланса по этому направлению.
    5. Нам нужно быстрее, т.к. это получается дешевле для нас, т.к. мы оцениваем время, а не сложность нашего проекта.
    6. Все фрилансеры низкоквалифицированные рабы.
    7. Каждый, кто мнит себя опытным и будет просить больше, будет сидеть без работы, т.к. высокая конкуренция и есть большой выбор исполнителей на рынке за копейки.
    8. Фриланс - это рабы IT сферы для нашего бизнеса.
    9. Мы всегда ищем тех, кого сможем обмануть в плане оплаты за работу и их почти 100%.
    10. Нам ничего не стоит сбросить сумму оплаты в любой момент сославшись на угрозу отрицательного отзыва.
    11. Мы не дорожим репутацией, в отличие от фрилансеров.
    12. Вы сами ничего не делаете: всё берёте с гитхаба уже готовое. За что вам платить?!

    (и ещё можно продолжать и продолжать...)

    И сразу возникает вопрос:
    Ждать ли роста дохода фрилансеров IT-сферы и когда?
    Ответ прост: когда все IT-шники поймут, что нужно ценить труд друг друга, что они не конкуренты друг другу, а единый целый "организм", который может сам за себя постоять и накормить вне зависимости от места работы и размера дохода.
    Итог: Не нужно работать и "ломать" глаза на тех, кто этого не понимает, а значит, и НЕ ЦЕНИТ!

    А пока разделяйте качество своих трудозатрат на "хлеб" и на "работу" и сразу озвучивайте 2 суммы заказчикам.
    Ответ написан
    10 комментариев
  • Как натянуть сайт на react на cms?

    @londhor
    Через API общаться с бекендом.
    Для этого можно найти headless CSM под react.

    CMS можешь найти здесь: https://headlesscms.org/
    Ответ написан
    Комментировать
  • Как натянуть сайт на react на cms?

    zettend
    @zettend
    Разрабатываю крутые сайты и сервисы
    У WordPress есть REST API.
    Так-же существует и фраемворк с готовым примером - Frontity.
    Ответ написан
    Комментировать
  • Удалил CSS а сайт работает как ни в чем не бывало, в чем причина?

    wapster92
    @wapster92 Куратор тега CSS
    В кэшировании браузером.
    Ответ написан
    Комментировать
  • Где в github посмотреть примеры проектов с Redux Toolkit?

    shurshur
    @shurshur
    В поиске github.com вводим "@reduxjs/toolkit" filename:package.json

    Идея позаимствована тут.
    Ответ написан
    Комментировать
  • Как воспроизвести функцию только один раз?

    hzzzzl
    @hzzzzl
    window.addEventListener('scroll', onScroll)
    
    function onScroll(e) {
      if (pageYOffset > 1000) {
        console.log('BOOOOOM')
        /*   do stuff   */
        window.removeEventListener('scroll', onScroll)
      }
    }
    Ответ написан
    3 комментария