Задать вопрос
  • Как вырезать кусочек волны (маски) на изображении в Фотошопе?

    Nekto_Habr
    @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Узнать длинну волны (замерить от середины пика до середины впадины), вырезать кусок волны равный этой длинне, фон - прозрачный.

    Вопрос настолько элементарный, что не очень понятно, что именно непонятно)
    Ответ написан
    Комментировать
  • Как защитить изображения от PrintScreen?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    Всё содержимое страницы априори доступно пользователю. Кому нужно, вытащат из кода.
    Защита от PrintScreen - турникет в поле, причём не просто не выполняющий свою функцию, но ещё и постоянно бьющий по бубенцам его поставившего.
    Ответ написан
    3 комментария
  • Лучший ресурс/книга/видеоуроки для изучения AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Дополню ответ bromzh

    лучший способ изучения


    Ограничивать себя и практиковаться.

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

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

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

    Так же "Никогда не использовать ng-controller", или "Делать все на stateless компонентах" и все такое.

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

    Я так же собрал парочку толковых ссылок которые могут быть полезны новичку. Там так же пример ооочень простого приложения с тестами.

    Так же рекомендую сразу же изучить хотя бы основные плюшки ES6 с babel и использовать их. Таким образом можно сильно упростить структуру приложения.

    А ну и да, ТЕСТЫ! Пробуйте писать приложения используя TDD, это очень полезно для новичков и так же действует как ограничение. Типа "если неудобно писать тесты - подумай как сделать так что бы было удобно писать тесты изменяя тестируемый код". Ну и все такое. У TDD есть свои правила вроде "не меняйте тесты и код одновременно" и т.д.

    Новички должны быть в ежевых рукавицах.
    Ответ написан
    Комментировать
  • Что лучше использовать ID или class?

    paulradzkov
    @paulradzkov
    Дизайнер, верстальщик, начальник отдела UI
    Недавно отвечал в соседней теме. Скопировал сюда.

    1. Айдишник можно использовать на странице один раз. Два и более раза — это уже не валидно. Поэтому, если понадобится переделать сайт по схеме «три колонки → блок от края до края → снова три колонки» на одной странице, этот кусок кода придется полностью переписывать.

    2. На один элемент можно повесить только один айдишник, а классов на один элемент можно повесить много. Получается, если вешать стили на id, мы лишаемся гибкости.

    3. У айдишников слишком высокий вес селектора. Если вам понадобится контекстно перестилить что-то внутри колонки, то вероятнее всего вы впишите в селектор айдишник и потом, чтобы обнулить овверрайд или сделать новый, вам придется использовать этот же айдишник (или поставить другой). Классами перебить селектор с айдишником не получится — не хватит веса. Айдишник будет множиться в css-ке и реффакторить становится всё сложнее.

    Поэтому выводы: 1) никогда не вешать на айдишники стили; 2) если нет выбора, писать селектор так: div[id="left"] {...} — этот селектор медленнее, чем селектор по классу, но и вес у него на равне с классом. Т.е. это меньшее зло, чем айдишник в стилях.
    Ответ написан
    2 комментария
  • Что все-таки должен уметь делать frond-end-разработчик?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все то что запускается в браузере - ваша зона ответственности. Ajax (ajax это просто возможность делать http запросы из js), все эти фреймворки и библиотеки, все все все. От бэкэнда вас целиком и полностью отделяет весьма жирная сетевая прослойка. Причем эту прослойку вы так же должны знать как слой интеграции между фронтэндом и бэкэндом (на поверхносном уровне хотя бы).

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

    Если фронтэнд - это отдельное приложение, то и знать вы должны все что нужно для его построения. Это и архитектурные штуки (MVC/MVA/MVVM/MVP/Flux/паттерны всякие/функциональное программирование) и тесты писать уметь должны и т.д. Все как у бэкэндщиков по объемам знаний. Просто у бэкэндщиков геморой обычно в конкурентных запросах, локах, базах данных и другими веселыми штуками. а у фронтэндщиков - зоопарк браузеров, различия в окружениях и т.д.

    nodejs - это уже опционально. В любом случае если вы хорошо знаете JS то посмотреть как там чего в API ноды проблемы не составит (например что бы быстренько поднять expressjs сервачек для разработки с мидлвэрами, часто нужно для всяких webpack-ов и browsersync). Ну и опять же билд стэк у фронтэндщиков в принципе весь на ноде написан. Но это не бэкэнд.
    Ответ написан
    4 комментария
  • Как продолжить обучение js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    функциональное программирование (рано или поздно всеравно придется разбираться, нынче все популярные фреймворки к этому идут). больше практики. Практика должна вызывать вопросы, на которые вы будете искать ответы. Ну и так далее, бесконечный цикл обучения, эксперементов и тд.
    Ответ написан
    2 комментария
  • Что быстрее 10 запросов к файлам или 10 к базе?

    27cm
    @27cm
    TODO: Написать статус
    Что быстрее: спросить на тостере или проверить самому?
    Ответ написан
    1 комментарий
  • Почему числа в JS такие странные?

    AntiStream
    @AntiStream
    Потоковый программист
    Это информатику надо учить, чтобы понять. Числа с запятой хранится в типах данных в 32 и 64 бита (float и double), и у этих типов данные есть соответственно 2^32 и 2^64 возможных состояний. В целых числах у каждого значения есть чёткое состояние. В плавающих числах эти состояния те же самые, что и в целых, но просто они как бы растянуты по алгебраическому представлению, из-за чего и страдает точность. Для примера, если в консоли сделать 1e128+1, то получите всё тоже 1e128 потому, как нету в типе данных такого состояния, которое могло хотя бы округлённо представлять 1e128+1. Даже более того -- если сделать 1e128+1e111, то этого тоже будет не достаточно для изменения состояния 1e128, но при уже 1e128+1e112 получится изменённое состояние : 1.0000000000000003e+128 Компьютер считает не арифметическими числами, а матричными состояниями битов информации.
    Ответ написан
    1 комментарий
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

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

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Для чего учить язык javascript (кроме интерактива на сайтах)?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Javascript довольно сложный язык... Много нюансов, и неожиданностей в сравнении с C/C++.

    Нет.
    Ответ написан
    3 комментария
  • Что значит node.js разработчик?

    @teslor
    Node.js это не веб-сервер и не CMS, это просто среда исполнения JavaScript, где можно сделать что угодно (в т.ч. написать свой веб-сервер, фреймворк и т.д.). Чтобы называться разработчиком Node.js нужно разбираться в тонкостях асинхронного JS, знать большую часть встроенных функций Node.js, уметь работать с основными модулями и создавать свои.
    В контексте фронтенд-разработки обычно хотят лишь, чтобы человек умел его установить и настроить сборщик. Это не разработчик Node.js.
    Ответ написан
    1 комментарий
  • Диплом как отсрочка от армии и ....?

    @mamkaololosha
    Диплом нужен только для получения виза в посольстве. Всё остальное лично будешь доказывать с глазу на глаз или по скайпу.
    Ответ написан
    3 комментария
  • Переустановился windows сам, без моего ведома, что делать?

    RusTech
    @RusTech
    Могло встать крупное обновление для win10, после него система как после реинсталла
    Ответ написан
    Комментировать
  • Верстать без фреймвороков это значит быть не професионалом?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Быть профессионалом - значит знать и правильно применять необходимые инструменты для наиболее эффективного решения задачи. А также НЕ применять, если в этом нет необходимости.
    Ответ написан
    4 комментария
  • Как менять класс по клику вне блока?

    @dmitryKovalskiy
    программист средней руки
    При клике на элемент нужно повесить обработчик клика на document. Внутри него проверить $(e.target).closest('#селектор элемента').length == 0, где е - входной параметр обработчика(фактически проверяете элемент по которому кликнули). Если проверка прошла - значит вы кликнули мимо элемента. Соответственно делаем нужные вам действия и отвязываем событие от document.
    UPD: truemisha.ru/blog/jquery/klik-vne-elementa.html Держите пример кода.
    Ответ написан
    Комментировать
  • Как избавиться от бота, который постоянно регистрируется?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    > поставил Капчу от гугла,
    Либо капчу включили неправильно (ну или вообще не включили, а просто на страницу её нарисовали), либо это живой человек.
    Ответ написан
    1 комментарий
  • Особенный перенос текста CSS. Как сделать?

    @GreatRash
    Хм... но ведь у вас в примере на первой строке два слова!?
    Ответ написан
    1 комментарий
  • Как разбить массив на многомерный массив с подмассивами заданного размера?

    Или так

    function spl(arr, size) {
      var result = [];
      var len = arr.length;
      for (var i=0; i<len; i+=size) {
         result.push(arr.slice(i,i+size));
      }
    	return result;
    }
    Ответ написан
    2 комментария