• Говорят в России недостаток IT специалистов составил 1 млн, так ли это?

    opium
    @opium
    Просто люблю качественно работать
    То есть ты терпишь три месяца с за 40, потом смело претендуешь на 100, Ам через два года уже 200, ну или сидишь терпишь десять лет официантом за 40к
    Ответ написан
    2 комментария
  • В чем ошибка моего кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самое время познакомиться с темной стороной программирования.
    Начинающие вайтишники искренне думают, что программист - это типа такой художник. Берет мольберт, поллитру, кисти и начинает ВАЯТЬ. Потом отходит на шаг, любуется делом рук своих, и снова. Ваять. А потом сразу заказчику, за большие деньги.

    Так вот, в реальности это всё не так.
    Большую часть времени программист не пишет код.
    А пытается разобраться, почему он не работает.

    Так что мы будем сейчас учиться это делать.
    Тем более, что это в принципе несложно.
    Главное не думать, что чем-то поможет сидеть и тупить в свой кодик. И приглашать других людей потупить в него тоже бессмысленно. Потому что причина может быть совсем не в нем. но даже если проблема и в коде, то искать её всё равно надо по-другому.
    В код не надо тупить. Его надо ЗАПУСКАТЬ.
    И выводить промежуточные результаты. Проверять его работу.
    Заранее выяснить, какие должны быть значения у переменных, и проверять их на каждом этапе.
    Где не совпадут - там и проблема.
    В идеале IDE сама покажет содержание всех переменных при трассировке, но если пишешь код в блокнотике, то даже тупо писать var_dump($bar1,$var2,$var3...); и смотреть что там лежит.
    Условия проверять еще проще, тупо echo 'зашли в условие if (!empty($user))';
    И если лежит не то, или эхо не выводится - вот тогда уже смотреть в код и думать, почему так получилось.

    В частности, при авторизации надо проверить две вещи:
    1. Находится ли юзер по логину
    2. если находится, то проверить корректность хэша. Для этого при регистрации надо вывести полученный через password_hash пароль и записать на бумажке
    потом запросить сохраненный из БД и сравнить

    Кроме того
    Разумеется, отладка невозможна без сообщений об ошибках.
    В половине случаев РНР человеческим голосом сообщает в чем проблема.
    Поэтому всегда, в любом окружении должно стоять error_reporting(E_ALL);
    плюс на домашнем компике полезно прописать ini_set('display_errors', 1); чтобы сразу видеть ошибки на экране.
    На боевом сервере разумеется поставить 0 вместо 1, и добавить ini_set('log_errors', 1);

    У меня только один вопрос.
    Какой смысл вообще делать парольную защиту, если любой придурок сможет спокойно авторизоваться через SQL инъекцию?
    Ответ написан
    9 комментариев
  • Получить содержимое страницы другого сайта на JS?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Нет никаких вариантов кроме как через бэкенд.
    CORS для того и создан, чтобы запретить такие запросы.
    Причина - представь миллиард веб-страниц, обращающихся через браузер к сайту.
    Это называется DDoS-атакой.
    Вот так вот.
    Ответ написан
    1 комментарий
  • Что такое литерал объекта?

    Seasle
    @Seasle Куратор тега JavaScript
    Это вот это.
    {} // литерал объекта
    [] // литерал массива
    '' // литерал строки
    "" // тоже литерал строки
    `` // ещё один литерал строки
    /./ // литерал регулярного выражения (конкретно для примера - любого символа)
    Ответ написан
    Комментировать
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    greenkey
    @greenkey
    программист
    Не стоит ругаться и обвинять друг друга в некомпетентности ;-) не знать чего-либо совершенно нормально, даже если ты лет двадцать без устали кодишь. Настоящего профессионала отличает не то, что он знает вообще все, а то, что он прекрасно осознает, что много чего не знает, и его это нисколько не смущает - мы учимся постоянно. Для меня, например, некоторые моменты связанные с closures оказались новыми, и я решил, что надо поглубже погрузиться в данный вопрос.
    А он не так прост, как может показаться на первый взгляд, и содержит в себе целый ряд нюансов, поэтому чрезвычайно важно 1) оперировать одинаково понимаемыми терминами, 2) пойти в документацию, а именно в ecmascript, и, как правильно заметил dollar , проверить, как это было реализовано уже в реальной реализации javascript, в движке, например V8.
    Вопрос, хоть и теоретический, но очень важный, потому что проливает свет на понимание работы современных языков "изнутри", что безусловно важно хорошему программисту.
    Предлагаю всем, кого вопрос также заинтересовал, немного погрузиться в теорию, для начала вот это:
    https://262.ecma-international.org/12.0/#sec-abstr...
    более развернуто в статье, хоть и старой, но принцип closure не поменялся
    dmitrysoshnikov.com/ecmascript/chapter-6-closures
    Оно же на русском:
    dmitrysoshnikov.com/ecmascript/ru-chapter-6-closures
    Ответ написан
    Комментировать
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    snaiper04ek
    @snaiper04ek
    Не стреляйте в эникея, он админит как умеет
    парень. Всё равно ты будешь использовать ту терминологию, которую используют на работе. Если там под замыканием подразумевается замыкание с инкапсуляцией, то после того как тебе сказали что "твой код - говно", было два варианта: 1)поговорить о терминах либо со ссылкой на официальную документацию, либо вместо с собеседником вывести определение исходя из смысла понятия, не прибегая к авторитетам вообще. 2) Сказать о том, что прочитал такое определение у %авторитет%, и сказать, что готов использовать то, которым пользуетесь вы на работе.

    По поводу выведения определения: есть смысл замыкания. Его нужно чётко озвучить согласиться с ним. Например, ты хочешь сказать, что смысл замыкания это ничто иное как "повесить ссылку на переменную с которой окончена работа до объявления функции, для сейва от мусорщика". Спросить - согласен ли с этим собеседник, или есть дополнения/возражения. Если согласен - значит "функция, являющаяся замыканием - любая функция, которая ссылается на переменную вне своего тела, в случае если переменную иначе удалил бы сборщик." Далее нужно договориться, что "иначе удалил бы" можно опускать как лишнюю сущность, которая усложняет определение такой функции, и упростить до - "функция, ссылающаяся на переменную вне своего тела."

    Есть второй вариант: собеседник тебе говорит: "Ахтунг! Замыкание используется не просто для того, чтобы спасти переменную от удаления! Это ещё и способ сокрытия данных: замыканием можно использовать локальную глобальную переменную, вместо того чтобы использовать просто глобальную переменную, или же городить отдельный класс."
    В этом случае всё твое определение идёт в пешее эротическое, и ты соглашаешься, что для этого придётся обернуть функцию в функцию, чтобы у тебя была функция с локальными переменными, которые будут глобальными для этой функции в функции.
    Ответ написан
    13 комментариев
  • Где смотреть лучшие практики по верстке элементов?

    @GreatRash
    Вообще такого ресурса нет, но есть несколько полезных ресурсов на которых стоит пастись постоянно. Это:

    css-live.ru - сделали два моих знакомых, люди очень увлечённые вёрсткой, там в основном переводы зарубежных статей (статьи подбираются вручную, только самое интересное), но есть и оригинальные статьи

    tympanus.net/codrops/category/blueprints - это сборник концептов, далеко не все решения кроссбраузерны, но зато там можно найти неисчерпаемый источник вдохновения не только верстальщикам, но и дизайнерам.

    alistapart.com - это наверное старейший ресурс в мире, посвящённый веб-технологиям, ведёт свою историю с 1997 года, из простой рассылки превратился в серьёзный журнал. Даже своя страничка на Википедии имеется.

    https://css-tricks.com/ - тоже ресурс, не нуждающийся в особом представлении, сборник туториалов, небольших статей, справочников, тематических блогов, сниппетов, в общем всего.
    Ответ написан
    Комментировать
  • Нужна помощь с методологией БЭМ. Не могу разобраться как правильно оформить футер. На скрине правильно?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    .footer
      .footer__columns
        .footer__column .footer-info
          .footer-info__logo .logo
          .footer-info__author
        .footer__column .footer-nav
          .footer-nav__heading
          .footer-nav__list
            .footer-nav__link
        .footer__column .footer-nav
          .footer-nav__heading
          .footer-nav__list
            .footer-nav__link
    Ответ написан
    Комментировать
  • Как убрать рамку (полосу) в phpstorm?

    DevMan
    @DevMan
    Settings -> Editor -> Appearance -> Show right margin
    или
    Settings -> Editor -> General -> Appearance -> Show right margin

    a проще в настройках вбить Show right margin в фильтр.
    Ответ написан
    2 комментария
  • Как определиться с зависимостями лендинга?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Смешались в кучу кони, люди, GSAP, React, Three.js... Стоит немного систематизировать инструменты хотя бы по задачам, которые они решают. Не привязываясь к конкретным фреймворкам из большой троицы, у нас есть несколько классов инструментов в теме креативных сайтов:

    • Про готовые CSS-анимации - animate.css, Wow.js, и.т.д. Там много динозавров из времен jQuery. Такие штуки часто бывают не в тему дизайна, но стоит посмотреть и забыть. Хотя для сайтов в духе дизайнерской дичи, вроде той, что успешно делают в студии Артемия Лебедева - может быть и ок.
    • Про интерполяцию всего и вся. Тут обычно выбирают между GSAP и Anime.js. Первый вариант - более замороченный, есть полезные плагины, второй - попроще, но тоже хорош, в некоторых кругах даже более популярен. Для совсем простых задач - можно свой инструмент написать.
    • Про скролл, в основном в контексте CSS-анимаций. Тут Locomotive Scroll рулит.
    • Про переходы между экранами. Грубо говоря прокаченный роутер. Самый популярный - Barba.js. Раньше еще был Highway.js, но в последне время что-то про него мало говорят.
    • Про экспорт готовых анимаций из софта для анимаций. Тут нужно отталкиваться от софта. Обычно вопрос возникает в контексте AE и простых мультиков - тут Lottie, говорят, неплох. Но нужно дизайнера заранее консультировать по теме, чтобы лишнего не намалевал.
    • Про визуализацию данных. Тут полезно знать про d3.js, в основном ради готовых примеров.
    • Про трехмерный WebGL, чтобы не писать все руками. Самый популярный вариант - Three.js, в основном за счет экосистемы и горы готовых решений, но есть и альтернативы на любой кус и цвет. Для 2D -эффектов вообще ничего не нужно в большинстве случаев.
    • Плюс не стоит забывать про всякие вспомогательные штуки вроде WebFontLoader, Hammer.js, LeaderLine, и.т.д. К анимациям они не относятся, но в работе могут быть полезны, чтобы не писать все самому.


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

    А вообще угадать весь стек на много проектов вперед с первого раза, не имея ни малейшего представления о том, что там будет нужно, а что нет, скорее всего все равно не получится, так что может быть стоит попробовать разное в разных проектах (тем более речь идет про некоммерческие проекты, можно себе позволить), и посмотреть на то, какие вообще варианты бывают в разных классах задач, и что они помогают делать, а что - нет.
    Ответ написан
    1 комментарий
  • В каких случаях использовать SPA с серверным рендерингом, а когда обычный сайт?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Мода есть, несомненно, но не только в ней дело!

    стоит вопрос делать его как SPA на Nuxt или как обычный сайт с перезагрузкой страниц


    Зависит от бекенда, если бекенд делает для вас api, тогда вам только SPA(не важно на чём), а если по старинке, значит по старинке, с перезагрузкой страниц. Тут как договоритесь.

    Плюсы подхода разделения бека и фронта аля SPA:
    1. Само по себе разделение ответственности. Фронт отвечает за отображение, бек за данные. В этом их суть

    2. Удобство работы. Вы работаете исключительной с той кодовой базой, которая вам понятна, приятна.

    3. Отдельные репозитории. Каждое окружение само решает, как им лучше вносить фичи, без оглядки на друг друга. Фронту не должно быть дела, до обновления фич и решения возможных конфликтов с бекендовым кодом. Вы работаете исключительно со своей кодовой базой

    4. Сами по себе преимущества spa. Обновление только нужных участков html, более быстрое решение рутинных задач, за счёт автоматизации многих процессов аля(vue cli, nuxt и т.п. - там всё уже из коробки собирается и настроено, только пиши код), разделение кода на чанки и т.п., думаю и так понятно

    5. Какая никакая, но архитектура приложения.
      Разворачивая проект через cli, вам уже даётся начальная структура папок, что уже говорит о том, что вам не нужно думать хотя бы об этом. Вы заранее знаете(если у вас есть опыт, если нету, ничто не поможет всё обговнять) что для решения тех или иных фич вам нужны те или те возможности фреймворка.
      Хоть реакт, хоть vue, уж тем более angular.



    Минусы подхода разделения бека и фронта аля SPA:
    1. Настройка всего деплоя приложения на сервере. Настроить gitlab.ci, настроить докер, настроить vps(если уже не готов), настройка nginx(не всегда, но бывает). Или вы думаете, за вас кто-то это будет делать? Бекенд себе всё настроит, а вы сами давайте. Вы же хотели разделение. Дай бог, что у вас в компании есть админ, который занимается подобными вопросами или же просто кореш, готовый вам помочь.


    2. SEO - большая проблема нашего времени. Если SEO, значит ssr, раз ssr, значит nuxt(ну или ручками настраивать, удачи). Тогда тут вступает в силу node.js. Его бы на сервере ещё запустить, на порту повесить и т.п. Просто SPA собрал и всё, а вот SEO, SEO накидывает на нас гемора и работы.


    3. Реализация "модулей" с 0, которые в старом подходе у бека уже можно скачать(из магазина готовых решений например, если это цмс, ну или готовые пакеты у фреймворков) и запустить(корзина товаров, фильтры, каталоги, сортировки и т.п. вещи). На фронте придётся всё делать заново, потому что готовых решений нет.

      Если взять какой нибудь вордпрес или битрикс, где уже имеется огромное кол-во готовых решений, которые подключил и они работают, минимально +- правя стили, то в spa подходе, дай бог что бы эти решения имели rest api для вашего чудо spa. А вы в свою очередь будете клипать вёрстку и логику с 0, мучаясь с кучей запросов, обновлением данных и т.п. вещами.

      А писать оформление заказа с выбором доставки, да и выбором адреса на карте, с последующим выбором кучи других моментов при оформлении заказа, это жесть. Но зато сами напишите, зато SPA, vue. А если ещё и авторизация какая-то будет, да и с заворотами или через какой-то внешний oauth сервер, так вообще красота)))


    4. Сложность понимания, на чьей стороне произошла ошибка. Фронт всегда будет выступать в первых рядах. Все камни полетят к вам. Не вывелось то-то, фронт иди сюда, не отправилась форма, фрооооонт, ауууууу!!!!!
      А как винить за это менеджеров? Они не должны сидеть кликая f12 и анализируя, где и какая ошибка получилась.
      Иногда бек виноват, иногда фронт.

      Да, можно подключить какой нибудь sentry. Но это, на мой взгляд, лишь доказывает, что с наш подход усложняет поддержку и разработку. Теперь у нас появился ещё 1 сайт, где мы смотрим логи фронта, что же у него случилося. У бека всё просто, зашёл на страницу, бац, ошибка sql на всю страницу, всё ясно становится)))

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


    5. Очень частая зависимость от данных бекенда. Изменилось 1 поле у бека, вам скорее всего нужно идти и править это. Добавилось новое поле, опять бежать и выводить 1 переменную. Мать твою, бек, сам не можешь что-ли переменную вывести??? Ах да, у нас же SPA.


    6. Прикрываясь удобством и модностью SPA можно такого говна наворотить. Сделать компонентики любой дурак сможет, а вот создать хаос из этих компонентов и не понимая, как более менее внятно решать проблему серьёзных задач и организации кодовой базы, это да. Не все осознают, на что подписываются. Иначе вы бы не задавали такие вопросы.

      В то время, когда бы за вас всё бекенд делал, потому как многое у него уже готово, а вы просто вёрстку ему отдали бы и всё. Ну подвёрстывали бы иногда, ну пару скриптиков добавляли.


    7. Ну и последнее, удорожание поддержки такого проекта. Т.к. вместо единой кодовой базы, теперь их 2. Внесение изменений требует большего кол-ва людей, нежели при обычном подходе. Бекендер и без фронта может написать jquery ajax запрос или вывести кнопку с модальным окном и формой, потому что очень часто тупо юзают бутстрап и собрать подобные блоки просто, или же просто вывести новое поле с текстом или ещё чем-либо.



    Я дал вам пищу для размышлений. Всё, что я написал имеет место быть. Задачи могут отличаться, проекты могут отличаться. Но суть моих слов от этого врятли поменяется. В большинстве случаев я за раздельный подход к написанию проектов.
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    @KOMMEHTATOP
    Для PHP тоже нужно дописать вручную. Актуальная информация на момент 31.11.2020г. И если честно то я считаю что для платного софта такие манипуляции хамство.
    5fc4c165de3fd560899137.png
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    miminari13
    @miminari13
    view - active editor - use soft wraps
    это для вебшторма, но думаю в phpstorm тоже самое
    Ответ написан
    3 комментария
  • Каковы бест практикс структуры каталогов и файлов программы в Windows?

    @Drno
    AppData - системная скрытая папка юзера. Используется прогами обычно только для темп файлов.
    ProgramFiles - обычная папка, созданная по умолчанию для установки программ.
    Темп файл лучше хранить в appdata - потом удалять.

    Остальное не подскажу, не разраб. Но мне как пользователю удобно когда файлы проги разбиты на подпапки. Типа - bin,music,data... а exe в корне
    Ответ написан
    Комментировать
  • Как убеждать клиентов оплачивать ТЗ (или оценку проекта) и нужно ли это делать?

    @d-stream
    Готовые решения - не подаю, но...
    Можно попробовать с чуть другого ракурса:
    обследование->ТЗ
    обследование - платно, но его стоимость возвращается по реализации
    (классика в разных ремонтах - "диагностика 500р, при ремонте у нас - бесплатно")
    заодно это возбудит в клиентах сенсоры "о, скидка")
    Ответ написан
    1 комментарий
  • Как убеждать клиентов оплачивать ТЗ (или оценку проекта) и нужно ли это делать?

    Jump
    @Jump
    Системный администратор со стажем.
    Требуете от клиента четкого описания задачи.
    Если задача простая - на основании описания набрасываете ТЗ, согласовываете с клиентом, и работаете.

    Если задача сложная и требуется детальный анализ и куча работ для написания ТЗ - сообщаете об этом клиенту.
    Просто говорите - что нужно четкое техническое задание, и либо клиент его сам сделает, либо вы сделаете за отдельную плату.
    Ответ написан
    Комментировать
  • Что эта запись в консоли значит?

    profesor08
    @profesor08 Куратор тега JavaScript
    Не надо паниковать. В JavaScript все объекты передаются по ссылкам со всеми вытекающими.
    Это значит, что после вывод в консоль значение массива изменилось. И когда ты разворачиваешь, чтоб посмотреть что внутри, ты видишь актуальные значения на момент раскрытия.

    Просто выполни код в консоли, и раскрой потом.
    const arr = [false, false, false];
    console.log(arr);
    arr[2] = "test";
    Ответ написан
    Комментировать
  • Что делать если заказчик затягивает оплату?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Нет денег - нет работы.
    Как происходит малейшая задержка, нужно сразу прекращать работу до полной выплаты.
    Ответ написан
    Комментировать
  • Что делать если заказчик затягивает оплату?

    HanaK
    @HanaK
    Просто и понятно о финансах и налогах
    Во-первых, у Вас есть письменно зафиксированные обязательства - Ваши и заказчика?
    В договоре?
    Если нет, то нужно зафиксировать - объем, сроки выполнения Ваших обязательств, сроки оплаты в разбивку по этапам. Очень четко. И удостоверить подписями, печатями. Желательно если подписывает кто-то по доверенности, получить и копию этой самой доверенности. Нотариальную.
    И никаких подписей-факсимиле! Гелиевой ручкой тоже не подписывать.
    Желательно, чтобы у Вас были подписанные клиентом документы по приемке отдельных объемов Вашей работы. Точнее это обязательно нужно - зафиксировать сам факт (или факты) выполнения Вами каждого задания.
    Иначе даже при наличии договора будет трудно доказать именно выполнение работы и ее приемку.
    Договор читайте внимательно, очень внимательно. На предмет подвоха и всяких подводных камней не в Вашу пользу.
    Во-вторых, Вам нужно четко для себя выстроить структуру задач.
    Как я поняла, у Вас есть выполненные мелкие задачи. Есть по ним документ о выполнении и приемке?
    Если нет - нужно оформлять. Тут Вы и увидите многое о заказчике.
    Далее, есть большая задача. Она разбита на этапы? Как будет происходить приемка и когда?
    Это тоже в условия договора. Так же как и условия по оплате.
    И третье - дописки. Это отдельные задачи, которые также должны быть зафикированы. Как дополнительные соглашения к основному договору.
    Это все минимальный фундамент для Вашей зашиты.
    Обычно, по практике суд встает на сторону работника.
    Но без всех описанных документов Вы предельно уязвимы для заказчика.
    А вот эти отговорки - когда-нибудь завтра... Очень настораживают.
    Ответ написан
    Комментировать