Задать вопрос
  • Почему не работает редирект с WWW?

    так у вас и не редиректа с https://www.example.com
    Добавьте в server с редиректом опции для доступа по https.
    И можите сразу сменить return 301 $scheme://example.ru$request_uri; на return 301 https://example.ru$request_uri;
    Ответ написан
    1 комментарий
  • Как увеличить скорость разработки и внимательность?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Скорость работы штука мутная и неоднозначная. Давно установлено как факт, что мозг может одновременно хранить в сознании 7+-2 объекта, т.е. от 5 до 9, в зависимости от кучи факторов. Все что свыше того, нужно как-то хитро организовать, иначе получится каша. Да и продуктивно напрягать мозг больше 4-5 часов в сутки в совокупности могут только продвинутые джедаи...

    Любая работа любого программиста начинается с построения модели приложения/модуля, над которым предстоит поработать. В этом процессе немаловажным звеном является моделирование потоков входящих и исходящих данных.

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

    В процессе простраивания архитектуры заодно всплывают все сопутствующие технологии, и возможно неоднократное пересматривание как модели так и архитектуры, т.к. это вещи взаимосвязанные.

    Когда модель и архитектура более-менее устаканились, можно начинать что-то планировать по части реализации, обычно начинают с фундамента.

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

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

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

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

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

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

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

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

    Четвертая рекомендация - постоянно прокачивать скиллы, много читать доки, вникать, задавать много вопросов и искать на них ответы, и пробовать все на практике. Критерий истины - практика.

    То, что джун не шибко быстр - это нормально, до 70% времени джун должен штудировать доки, из оставшихся 30%, до 95% времени - это дебаггинг. :) Так-что на реальный дев остается не так много времени, 0.3*0.05...

    Понятно, что в идеале джун должен этим заниматься не только в рабочее, но и в свое свободное время. Когда я вгрызался в основы, я мог маньячить по 12-16 часов в сутки, без праздников, выходных и каникул. Благо обстоятельства позволяли...

    И, главное, терпение+усидчивость. Путь это нелегкий, не простой, учиться придется постоянно, и постоянно будут критиковать, что мог бы поточнее, побыстрее, побольше и подешевле.... :)
    Ответ написан
    Комментировать
  • Как отловить неопределенную переменную?

    nelolka
    @nelolka
    if (!isset($foo)) throw new Exception('foo is undefined on line '.__LINE__);
    else echo $foo;
    Ответ написан
    1 комментарий
  • Как обезопасить загрузку изображений на сайт?

    Vamp
    @Vamp
    Суть уязвимости в том, что в метаданные картинки вставляется произвольный php код. Далее, используя уязвимости сайта, злоумышленник заставляет сервер исполнить эту картинку как php скрипт.

    Чтобы избавиться от внедрённых таким образом шеллов, применяют ресайз, в ходе которого все метаданные теряются. Дополнительным бонусом идёт проверка валидности - imagecreatefromstring() и прочие аналогичные функции вернут ошибку, если пользователь залил битый/неподдерживаемый формат или вообще не картинку.

    В принципе - это годный способ, если вам не нужен оригинал загруженного изображения. Используйте его без опасений.

    Если оригинал всё же нужен, то следует удалить метаданные во время загрузки. Здесь уже будет посложнее, так как у каждого формата свои особенности в этом плане. Например, у jpeg это секции COM и APP1 (EXIF). У png - tEXt, iTXt и zTXt. У других форматов ещё какие-то свои особенности. То есть нужно разбираться в форматах изображений и использовать библиотеки, позволяющие работать с форматом на таком низком уровне. Причём надо удалять все метаданные, не относящиеся непосредственно к изображению, так как php код могут засунуть и в нестандартный чанк - браузер его проигнорирует и покажет картинку корректно, но php код там всё-таки присутствовать будет.

    Можно ещё попробовать сделать поиск подстроки <? в сыром контенте файла. Если подстрока найдена, то, возможно, там есть какой-то php код. Способ так себе и не рекомендуется к применению - будет много ложноположительных срабатываний.

    И ещё никогда не сохраняйте изображение в файловой системе под тем именем, с которым пользователь его загрузил. Генерируйте свои имена файлам. Если пользовательское имя файла нужно - сохраните его отдельно в базе.
    Ответ написан
    Комментировать
  • Какую вы используете структуру для хранения изображений?

    trevoga_su
    @trevoga_su
    но я собираюсь хранить не только оригинал, а ещё 200, 400 px width
    cloudinary.com

    мало опыта, только придумал вот такое, а именно по дате например /p/2016/12/03/23/45/12/имя.jpg
    не надо изобретать велосипед
    md5 от имени файла + соль какая-нибудь
    получаем что то типа 2cb126f9bd4e36cc8818183c785879d7.jpeg
    далее пишем скрипт который создает нужное кол-во уровней:

    /i/150x100/2/c/b/2cb126f9bd4e36cc8818183c785879d7.jpeg

    На, вот моя приблуда для генерации

    $directory_generator = new Krugozor_Utility_Upload_DirectoryGenerator(/* имя загруженного файла */);
    
    // создали директорию в THUMBNAIL_150x100...
    $directory = $directory_generator->create(DOCUMENTROOT_PATH . Krugozor_Registry::getInstance()->UPLOAD['THUMBNAIL_150x100']);
    
    // отресайзили...
    $creator = Krugozor_Thumbnail_Factory::create(
    	DOCUMENTROOT_PATH . Krugozor_Registry::getInstance()->UPLOAD['THUMBNAIL_ORIGINAL'] . $upload->getFileNameWithExtension(), 
    	$directory . $upload->getFileNameWithoutExtension()
    );
    $creator->setResizedWidth(150);
    $creator->setResizedHeight(100);
    $creator->resizeFixed();
    
    // http-путь до картинки
    $this->getView()->path_to_image = $directory_generator->getHttpPath() . $creator->getFileNameWithExt();
    Ответ написан
  • Как правильно инициализировать и вести GIT репозиторий?

    lunaticman
    @lunaticman
    Дерзкий айтишник
    Вы помоему не очень понимаете как гит работает.

    Вы так шустро branch'и и tag'и с друг другом перемешали. Хотя связи между ними почти никакой. Обычная практика поддерживать несколько branch со стабильными версиями:

    1_1_stable
    1_1_development
    1_2_stable
    1_2_developement

    # инициализация пустого репозитория
    git init
    # создание бранча 1_1_stable и заливка файлов в бранч
    git checkout -b 1_1_stable
    <добавляем файлы>
    git commit -m "message here"
    git push

    # создание бранча 1_2_stable и заливка файлов
    git checkout master #на всякие случай лучше начинать с главного бранча
    git checkout -b 1_2_stable
    <добавляем файлы>
    git commit -m "message here"
    git push

    если вы хотите сделать devel бранч, то идете сначала в стабильный:
    git checkout 1_1_stable
    git checkout -b 1_1_devel

    и работаете с ним и мерджите потом в стабильный (когда готовы)

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

    @itvsem
    Кто владеет информацией, тот владеет миром
    Выяснилось, что есть две загвоздки: скорость работы и внимательность.

    Не думаю, что медленно печатаешь и за окном птиц считаешь).

    Я не разработчик, у меня пара вопросов:
    - каким был результат разговора?
    - выдвинули какие-то условия на новый месяц ?

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

    Совет не от программиста:
    1. Постараться смотреть на задачи более глобально: а что будет если я тут изменю, на что повлияет, где задействовано еще?; а почему мы используем в разработке эти инструменты?; а почему они лучше?; а какие есть альтернативы?; а как оцениваются твои задачи и почему так?
    2. Возможно, если еще не брался, стоит пофрилансить немного в свободное время. Беря сначала знакомые и понятные задачи, чтобы набить руку, потом что-то новое и интересное.
    Ответ написан
    6 комментариев
  • Как правильно инициализировать и вести GIT репозиторий?

    @pitrpg
    Вот могу посоветовать хороший ресурс который поможет вам разобраться с GIT
    ссылка
    Ответ написан
    Комментировать
  • Какой менеджер паролей выбрать?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    KeePass + KeeFox (для Firefox)
    Работаю с этим тандемом уже несколько лет. У них довольно гибкие возможности.
    Ответ написан
    7 комментариев
  • Существует ли такой тип запросов к БД?

    Ermako
    @Ermako
    Data Scientist
    Ответ написан
    Комментировать
  • Зачем и где именно писать @Override?

    EugeneP2
    @EugeneP2
    Java Dev
    Это аннотация пишется над методами, которые переопределяются из супер класса.

    Это что-то вроде страховки, гарантирующая что 100% переопределен метод.

    class A {
    public void superMethod() {}
    }
    
    class B extends A {
    @Override
    public void superMethod() {}
    }


    Компилятор, когда встретит данную аннотацию, проверит, чтоб сигнатуры методов в супер классе и в под классе совпадали, т.е. вы переопределили метод, и в полиморфизме будит вызываться переопределенный метод.

    Если вдруг вы ошиблись в сигнатуре метода (например пропустили букву в название), то компилятор выдаст ошибку
    Ответ написан
    2 комментария
  • Зачем и где именно писать @Override?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Писать перед теми методами, которые переопределяете. Этим вы сигналите компилятору, что хотите не определить новый метод, а именно переопределить. Компилятор будет проверять наличие помеченных методов в базовом классе и выдавать ошибку, если их нет.
    Ответ написан
    Комментировать
  • Как осуществить эффект рассыпания изображения?

    @GreatRash
    Ответ написан
    Комментировать
  • Как вы считаете, можно ли такое портфолио опубликовывать в профиле на upwork?

    ThePyzhov
    @ThePyzhov
    iOS Ninja
    А ведь все началось с ошибки в слове портфолио...
    d7ec61eae7eb4309a22ffcbe3c4cdb26.png
    Ответ написан
    Комментировать
  • Как вы считаете, можно ли такое портфолио опубликовывать в профиле на upwork?

    crawlander
    @crawlander
    Исправь Потрфолио на Портфолио. Даже если заказчики не знают русского языка, это залёт.
    0b05dc7fa0f44d4ca05bc51df973dbb6.png
    Ответ написан
    1 комментарий
  • Чем оправдано использование QueryBuilder и ActiveRecord в одном проекте?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    AR как правило использует свой QueryBuilder.
    И в сумме называется это ORM
    А так же QueryBuilder можно вызывать "напрямую" т.к. он публичный.

    Так что это не взаимозаменяемые вещи вообще.
    Другой вопрос если используется две разные не связанные библиотеки, это уже что-то страшное. Я такого не встречал.
    Ну и что-то подсказывает что так делать не надо.
    Ответ написан
    1 комментарий
  • Чем рисовать счетчики на PHP?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    А какой пакет нужен?
    Сделать бланк, а цифры стандартными функциями засунуть.

    Несколько строк кода в сумме.
    Ответ написан
    3 комментария
  • Проблемы с Роскомнадзором, нужен IT-юрист?

    botaniQQQ
    @botaniQQQ
    Q
    Да "во славу Дарвина", кто просит пользоваться их хостингом?

    Переезжаете на хостинг в Голлиндию/Германию (ищите тут vds.menu), ставите DNS от CloudFlare и не обращаете внимания на РКН.
    Ответ написан
    1 комментарий