• Как заинтересовать человека(студента) в IT?

    edli007
    @edli007
    full stack, team lead
    Сам не захочет, не начнет. Программирование это ад для обычного человека.
    Ответ написан
    Комментировать
  • Как заинтересовать человека(студента) в IT?

    sim3x
    @sim3x
    Не надо нам тут лишних людей
    Ответ написан
    Комментировать
  • Как выбирать направление архитектуры ООП приложения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    и как отдельный класс-синглтон


    Зачем? Зачем сингелтон? Ответте на вопрос когда это нужно?

    Есть ли практики, которым следует придерживаться, чтобы сделать правильную и простую архитектуру?


    - Разделение ответственности - важный принцип инженерного дела в принципе.
    - Принципы SOLID - хорошо дают понять как работать с зависимостями и делать декомпозицию системы. Сильно пересекается с инкапсуляцией, полиморфизмом и разделением ответственности.
    - Паттерны GRASP - эдакая смесь принципов и паттернов, описывают нюансы цикла жизни объектов и их взаимодействия друг с другом.
    - Закон Деметры - про инкапсуляцию.
    - CQRS - подход по разделению операций записи и операций чтения. Естественно подход такой не работает если вам надо реализовать атомарную запись и чтение, но это минимальный набор задач.
    - Рефакторинг. Он нужен всегда. Его нужно делать по чуть-чуть когда видно что "уже мешает" или "можно было сделать лучше". Ну то есть это не переписывание всего и вся большими кусками, а маленькие изменения которые с течением времени эволюционно меняют архитектуру проекта. Возможно только если код покрыт тестами, это отдельная жирная тема.

    Не нужно знать "архитектуры", они являются лишь результатом соблюдение принципов. И уж тем более "паттерны" это лишь элементы архитектуры. Не нужно на них зацикливаться, это лишь словарь.

    https://en.wikipedia.org/wiki/Category:Programming...
    Ответ написан
    2 комментария
  • Как правильно создать структуру приложения на ReactJS + Laravel 5.3?

    На бэкенде: делаете rest-api с помощью Laravel.
    На фронтенде: берете реакт + редакс и разрабатываете приложение, которое будет общаться бэком через АПИ.
    Ответ написан
    Комментировать
  • Картинка из картинок.Как сделать??

    @Mercury13
    Программист на «си с крестами» и не только
    Простейший вариант…
    1. Для каждой малой картинки выбрать «средний» цвет.
    2. Уменьшить исходное изображение до M×N px, и в каждый пиксель вместо сплошного цвета подставить ту картинку, которая больше всего подходит по цвету.

    Алгоритм можно совершенствовать — например, подставлять одну из 10 наиболее подходящих, а если в радиусе, скажем, 30 единиц есть куда больше 10 картинок — брать их все. А можно ещё использовать метод коррекции ошибок Флойда-Стейнберга (наиболее удачный метод при переводе картинок в N цветов)
    Ответ написан
    3 комментария
  • Почему не работает код (С++)?

    @vilgeforce
    Раздолбай и программист
    if(x%4) continue; Что по вашему делает? И, в частности, чему будет равно 5%4?
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    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
    Ответ написан
    56 комментариев
  • С чего начать изучение Linux?

    OnYourLips
    @OnYourLips
    Нормальный способ один: создать рабочее окружение, в котором сможете комфортно работать с ликуксом.

    Вам поможет: ваше нормальное рабочее окружение. Это значит, что винда, к которой вы привыкли, должна быть активка, а линукс должен быть в виртуалке.

    Вам помешает: "десктопный" (обратите внимание на кавычки) линукс, в котором вы столкнетесь с проблемами, решение укоторых отнимет много времени, но не даст опыта (совместимость с железом, настройка GUI и т.д.). Поэтому ставьте сразу нормальный надежный дистрибутив без GUI (ubuntu, debian, centos), а GUI и красноглазые дистрибутивы (arch, gentoo и т.д.) оставьте любителям нетрадиционного извращенного секса.

    Я хочу, чтобы вы пришли к выводу: поставить и настроить якобы десктопный линукс может любой дурак, но пользы это не принесет. А вот разобраться в ОС (как устроена, как доработать, как написать свое ПО) и использовать ее в работе - очень полезный навык.
    Ответ написан
    1 комментарий
  • Маленькая реализация ActiveRecord php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    рекомендую перед изучением паттернов:

    1) почитать хотя бы документацию по php что бы ознакомиться с его возможностями
    2) почитать хотя бы мельком про SOLID и GRASP
    3) и вот теперь изучать паттерны.

    php.net/manual/en/language.oop5.magic.php
    Ответ написан
    Комментировать
  • Можно ли так так поправить php скрипт для скачивания файла?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    1) Хотелось бы получать имя и тип файла с помощью функции basename после чего проверять существует ли файл и если существует то пропускать его.
    И если basename не возвращает имя то использовать его id как имя файла
    Можно.

    2) Сделать ограничено количество потоков если возможно
    Можно.

    3) Пауза, а то с большим количеством файлов, PHP просто останавливается из-за недостатка времени на выполнение, приходится править php.ini, но хотелось бы это исправить на уровне самого скрипта
    Можно.

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

    hbuser
    @hbuser
    Мои пять копеек. Laravel - молодой фреймворк, но современный и очень хорошо проработан. Поддерживает много разных современных плюшек изначально, из коробки (например, PSR-4, composer, как основное средство установки расширений и пр.), на которые некоторые фреймворки, которые существуют больше, чем Laravel только перебрались. Отличается тем, что в нем очень многое достаточно человекопонятно и логично. Создан быть простым. Многое может. Создано много расширений для него (по сути, это любое расширение, которое можно установить с помощью composer, а это 77 тыс. штук расширений, адаптированное для Laravel, что тоже не сложно, но можно и без этого. Не будет сильно удобно, но жить можно.), а если чего-то нет, то packagist предложит все, что душе угодно и установить это дело 2-х минут. Около него очень быстро продолжает расти сообщество единомышленников. Очень много информации по нему на stackoverflow и вообще в интернете. Есть IRC-чаты, в которых много понимающих людей и можно получить помощь в любое время дня и ночи. Есть ребята, которые посвящают себя урокам по нему и делают это очень качественно. Возьмем того же Jeffrey Way. Красавец в плане подачи информации и произношение отличное, американское, не британское. Слушать одно удовольствие. На западе про него знают и разработчики востребованы, у нас его знают плохо. Только относительно продвинутые и открытые новому разработчики. Я настоятельно рекомендую этот фреймворк. Он прост - раз. Он научит работе с различными современными сопутствующими технологиями. Например, из коробки доступен box для vagrant. А это уже немного другой уровень в сравнении с WAMP на Windows.
    Сейчас на базе Laravel уже и микрофреймворк доступен.
    Кстати, в IRC можно задать вопрос и самому автору.
    Еще момент. Автор не городил своих велосипедов. Это качественный продукт. Многое хорошо работающее и хорошо себя зарекомендовавшее там из Symphony, очень многое. Своеобразная квинтэссенция существующих наработок, технологий + свои наработки и своя логичная интерпретация работы с фреймворком.
    Ответ написан
    2 комментария
  • Какие современные веб-технологии нужно знать middle разработчику?

    OnYourLips
    @OnYourLips
    Стараюсь постепенно вникать и в дальнейшем хочется изучить другие популярные фреймворки: yii, zend, symfony и т.д.. (хотя кажется понимание фреймворков это уровень джуниора ?)
    Да, знание фреймворков - уровень джуниора. Но мидл должен их знать на очень хорошем уровне. Знать не только, как работает фреймворк, но и как он устроен изнутри. Пулл-реквесты уже писали?

    Но я так понимаю одними фреймворками мидлу не обойтись, и уверенно нужно владеть такими технологиями как: git, composer (на данный момент я по примерам скачал фреймворк, проще говоря даже композером пользоваться не могу) и т.д.. Поэтому хотел бы узнать, какие современные веб-технологии должен знать мидл веб разработчик ?
    Если вы только начали работать с composer, то до middle вам еще минимум пару лет.
    Ответ написан
    4 комментария
  • Какие современные веб-технологии нужно знать middle разработчику?

    miraage
    @miraage
    Старый прогер
    Ну-с, как минимум, Вы должны, как рыба в воде, понимать и применять то, что описано на этом сайте.

    www.phptherightway.com
    Ответ написан
    Комментировать
  • Насколько полезно то, чему учат в ВУЗах?

    @JohnJon
    Скажите, что будет шагом эволюции после "мегатрупраграмист на Wordpress"?


    ba8a8b6c58c042df81876fa17da6df53.jpg
    Ответ написан
    3 комментария
  • Насколько полезно то, чему учат в ВУЗах?

    В Российских вузах не учат программировать. В лучшем случае учат некоторым подходам к оформлению/документации кода, если повезет - раскажут про несколько паттернов проектирования. Но в ВУЗе учат "учиться" - самостоятельно находить и усваивать новую информацию. Этот навык из приобретенных в вузе я считаю самым полезным.
    Блоксхемы/UML используются для иллюстрации архитектуры различных частей приложения - карты классов, связей таблиц в DB, для хоть сколько-то больших проектов ( >10 человек в штате) это очень удобный инструмент.
    Ещё был вопрос про тервер: во время учебы в универе большая часть моей группы не особо интересовалась этим предметом. В том числе и два моих хороших друга. А через пару лет эти же два друга начали делать свой проект и хотели посчтитать что-то, где этот тервер нужен был (что-то типа оптимального размера пакета для торрент-трекера), и им пришлось прибегнуть к моей помощи. Вообще тервер и матстат встречается в самых неожиданных местах, иногда очень внезапно. Ну и не стоит забывать, что самое популярное слово за последние пару лет - это Big Data (а стать специалистом в этой области не имея хорошей базы по терверу и матстату будет сложно).
    Конечно, обучение в ВУЗе совершенно не обязательно, можно и самому выучить всё, что угодно. Другое дело, что после обучения в ВУЗе учиться самому намного проще.
    Ответ написан
    2 комментария
  • Какие книги почитать для быстрого перехода с PHP на C# (срок 3-5 дней - это ~50 стр. + практика)?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Просто забейте на все эти олимпиады. Вам они не дадут ничего.
    Ответ написан
    8 комментариев
  • Как правильно натягивать LP на WP?

    sakrab
    @sakrab
    Не будь побежден злом, но побеждай зло добром...
    Свечи, шампанское, цветы.......

    извиняюсь. не смог удержатся...
    Ответ написан
    Комментировать