Задать вопрос
  • Много ли ребят из Индии, Китая, Пакистана стали писать код лучше?

    alexclear
    @alexclear
    A cat
    > В связи с этим, мне кажется, что профессия веб разработчика становиться через чур высококонкуретной, я бы даже сказал профессия веб разработчика дискредетирует себя (недавно зашёл на сайт в какой-то канадский колледж, посмотреть сколько стоит обучиться на веб разработчика

    Попробуйте устроиться веб-разработчиком даже не в Facebook, а, например, в Yandex или Badoo.
    По результатам попытки мы можем обсудить вопрос уменьшения престижа профессии и увеличения конкуренции. :)
    Далеко не весь спектр задач, решаемых инженерами-разработчиками (в том числе, и на PHP), представлен на биржах фриланса.
    Ответ написан
    1 комментарий
  • Как правильней сделать быстрое выкатывание в продакшн?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    конфликты мерджей очень сильно тормозят

    1) Дробите задачи, делайте ветки короткоживущими
    2) Хорошая идея делать ребейз принятых веток
    3) Попробуйте адаптировать под себя git-flow, как альтернатива хорошо себя показывает feature-toggles вместо feature-branches

    Да и бд экспорт/импорт постоянно приходится делать.

    1) Миграции
    2) Старайтесь делать миграции так, что бы они не ломали предыдущие релизы. Ну мол если вам надо добавить колонку, хорошей мыслью будет в первом релизе сделать ее nullable что бы старая версия приложения еще могла работать с новой версией базы, и потом уже следующим релизом добивать этот кусок. Основная идея - желательно что бы две последние версии приложеньки могли работать с последней версией базы данных. Если у вас база нормализована нормально, то проблем с этим быть не должно.

    Если второй пункт соблюдается то вакатка новых релизов будет происходить по такому алгоритму:

    - выкатывается новый билд приложеньки в отдельную директорию (можно автоматизировать, организовать ротацию билдов и т.д.)
    - накатываем миграции на базу, в этом случае у нас старая версия приложения будет работать с уже новой структурой базы
    - переключаем webroot на новую версию. В случае с контейнерами (docker) тушим старый контейнер
    - если что-то идет не так, мы можем быстро поменять симлинк обратно и запустить откат миграции

    При таком сценарии даунтайм будет минимальным.

    вопрос с выкатыванием новых релизов

    Вот вам варианты в порядке сложности и мощности (от простого к сложному).
    - capistrano/capifony
    - ansible/puppet/chief/etc
    - docker + docker-machines + docker-compose

    Ну и да, тесты тесты тесты. Все самое критичное должно быть покрыто хотя бы интеграционными/функциональными тестами. В идеале же вся бизнес логика должна быть покрыта быстрыми юнит тестами и UI/инфраструктура функциональными (читать про пирамиду тестирования).
    Ответ написан
    5 комментариев
  • Как правильно отдавать проект (верстку) заказчику?

    sim3x
    @sim3x
    README.md файл с описанием проекта, особенностями и мануалом как его собрать
    git репозиторий
    +gitignore
    gulp/grunt/make/bash скрипт для сборки и минификации
    изображения по согласованию с заказчиком:
    - оптимизирутся на месте
    - оптимизирутся только для продакшена

    + humans.txt

    Передается все вместе в готовом виде в зип архиве (если заказчик продвинутый - tar.gz)
    Ответ написан
    Комментировать
  • Онлайн нетворкинг: как правильно заводить знакомства?

    atetc
    @atetc
    Админ Android dev-s чата: https://goo.gl/8JKF1f
    Комментировать
  • Пример тз на разработку Android приложения?

    @peacemakerv
    Разработка под Android
    Мне нравятся иерархические списки, которые всегда можно дополнить\расширить, и наоборот.

    1. Диалог процесса работы с зимней рыболовной снастью
    1.1. Только ландшафтная ориентация, работа с Android v.3 и новее, на экранах минимум от 480 x 800 пикселей
    1.2. Разрешение всей сцены рыбалки в лунке 1280x720 пикселей
    1.3. 2D-плоская сцена зимней рыболовной удочки, с кивком, хлыстиком и катушкой.
    1.4. Прототип 3D-сцены:
    1.4.1. Цвета оформления выбирать как на картинке 3D-прототипа
    1.4.2. Фон – всегда белый
    1.4.3. Ручка всегда статичная
    1.4.4. Катушка – анимация в 3 кадра, вращение в одну сторону (пусть по часовой стрелке)
    1.4.5. Хлыстик – анимация в 16 кадров, от горизонтального положения до согнутого вниз под 90 градусов (кончик вертикально вниз):
    1.4.5.1. При всех вариантах\кадрах согнутого вниз хлыстика – кивок на его конце направлен вертикально вниз (за его кончик вниз тянет леска).
    1.4.6. Кивок (сигнализатор поклевки)
    1.4.6.1. 3 варианта длины:
    1.4.6.1.1. средний, как на фото
    1.4.6.1.2. короткий, если потянуть вправо за желтый правый конец

    Пример файла в PDF: rghost.ru/6hjVrlhBx

    Можно попробовать вот такой сервис по составлению техзаданий: https://androrder.xyz/h4w/
    Ответ написан
    Комментировать
  • Можно ли требовать такую зарплату с таким портфолио?

    CrewCut
    @CrewCut
    Коплю силы на переезд в тропики
    Побуду диванным критиком, что-ли.

    1. Обратите внимание на шрифты - они у Вас на сайте ужасны. Если с фронт-эндом работаете, то это важно.
    2. Верно выше подметили, что не надо указывать навыки в процентах. Что это вообще должно значить? Лучше обычным перечнем, примерами - что могу, что не могу. А так - вроде красиво, но толку ноль.
    3. В опыте работы долго не мог понять что за бредовое слово "Констракшин". Думал-думал что за скилл такой, оказалось это часть названия конторы. Может, логичнее было бы всё название в скобки засунуть и сделать ссылкой на их сайт?
    4. Личные навыки: Целеустремлённость, быстро-обучаемость, ответственность, усидчивость." - люблю такое, вроде молодец, а вроде все такие. Если позиционируете себя как новичка в фронт-энде - пишите об этом, типа "За полгода перешел на 100% валидный бутстрап-хтмл5-ксс3 код с говно-табличной верстки на коленке". Это более важный факт, чем усидчивость - она в туалете хороша, а верстальщику важнее работу свою любить и стандарты уважать.
    5. Портфолио, конечно, смех да и только. 3 готовых чужих темы и сайт кремлевского дворца, который выглядит как поделка с урока информатики в школе. Это всё, серьезно? 30.000 рублей с таким портфолио предложит только совершено конченный руководитель.

    Повышайте скилл, работайте на фрилансе. Любите, прежде всего, своё дело, а не деньги. Тогда, может, и получится найти хорошую работу. Сейчас - нет.
    Ответ написан
    1 комментарий
  • В какой последовательности пишете JavaScript код?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Правильные вопросы задаёте...

    Во-первых: Последовательность в Java Script не важна, но нужно понимать ход выполнения. Например:
    function Mun(a){ return a };
      ( function(a){ console.log(a+' пошел'); } )( Mun('Первый') )
      /* Результат сразу же - Первый пошел */
      /* Мы создали функцию и выполнили её */
    
      function MunGo(a){ console.log(a+' ушел'); };
      function Mun(a){ return 'Не '+a };
      MunGo(Mun('Первый'));
      /* Выдаст - Не Первый ушел. */


    Во-вторых: Понимайте контекст описаной функции, и не вызывайте её из друго контекста.
    ... /* продолжая верхний пример*/ 
        (  function(a) {
              var Mun = function(a){ return a+' и третий'};
              MunGo ( Mun(a) );      /* Выдаст - Второй и третий ушел */
         }
       ) ( 'Второй');
      MunGo( Mun ('Второй') );    /* Выдаст - Не Второй ушел */


    В-третьих:
    Цикл должен быть максимально простым. Вынесите из него все возможное и не возможное. Это его сильно ускорит. Не только объявления но даже вызовы функций, создание нод, даже обращение к полям объектов старайтесь сделать вне цикла. Внутри цикла опперируйте только переменными локального контекста.

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

    laska
    @laska
    PHP/JS разработчик
    Никогда, ну то есть совсем никогда не используйте придуманные вами методы шифрования.

    Любой человек, который разбирается в шифровании лучше вас (поверьте, это скорее всего вообще любой человек который попытается расшифровать ваш код) расшифрует его очень быстро. Минуты или часы - это будет зависеть от того, что он получит. Если он получит строку просто HGZPLCE_VTJ, без всякого контекста, то вам беспокоится не надо. В противном случае надо.

    В любом случае, вы изобрели плохенькую симметричную криптосистему, В пхп есть встроенная и хорошая: mcrypt, используйте ее.
    Ответ написан
    3 комментария
  • Git. Один проект на двоих?

    @Arik
    1. Один создает, за ним и все права
    2. Закачивает все свои файлы
    3. Другие разработчики скачивают все файлы
    4. Правят/добавляют что им надо.
    5. Перед тем как закачать изменения, проверяют кто-нибудь закачал что, если да то скачивают и проверяют нет ли конфликтов или не ломает чего их код
    6. Если все хорошо то проталкивают свои изменения

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

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Параллельные потоки загрузки и обработки данных
    2. Управление уровнем ошибок для продолжения или прерывания обработки ресурса.
    3. Обработка и сегментация данных из ошибочных и неверных структурированных данных (например, HTML/XML).
    4. "Решето" (правила) для предотвращения дальнейшей обработки ресурса на основе уже полученных данных (условия алгоритма прописываются в конфиге).
    Например, контент размером более 5 кб со словом "toster" или url содержит "toster.ru" - пропустить и перейти к обработке следующего.
    Ответ написан
    Комментировать
  • Книги vs оф. документация vs статьи vs видеокурсы: как лучше всего изучать новую технологию, или фрейворк?

    abs0lut
    @abs0lut
    Мне кажется или Вы позиционируете эти способы получения информации, как взаимоисключающие?
    Мой совет таков:
    • для первого знакомства - пару видеоуроков;
    • для основы, фундамента знаний - документация;
    • для изучения нестандартных решений, актуализации информации, best practice - чтение блогов/статей/тематических сайтов.
    Ответ написан
    2 комментария
  • Где можно найти Laravel 1?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Зачем вам подобная мертвячина?))
    Ответ написан
    2 комментария
  • Стоит ли использовать ооп?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Русский язык сначала освойте. PHP вам рановато.
    Ответ написан
    3 комментария
  • Как использовать токены для аутентификации в API?

    bigton
    @bigton
    Web-программист
    Как сделал я.

    От классических сессий при работе через API отказался.

    1. Для авторизации пользователь вводит логинпароль, устройство отправляет их по https на account/auth
    2. account/auth выдает token (token_id:token_val) и secret
    3. все дальнейшие запросы устройство отправляет по http указывая token и подписывая запросы с помощью secret

    Как работает.

    Сервер получает запрос, видит что пришел token, разбивает его через двоеточие на input_id и input_val. Выбирает из базы токен с пришедшим input_id, получает из базы значение token_val и secret. Сравнивает input_val и token_val. Если в базе нашелся токен с нужным id и значения val равны, пришло время проверить достоверность запроса.

    Клиент помимо токена передал sign (подпись), которую сформировал так (например) secret+api_path+query_param. На стороне сервера вам известно api_path и api_param, а secret выбрали из базы. Хешировать подпись принято через hmac().

    Помимо токена и подписи можно передавать time и так же класть его в sign, и на стороне сервера отсекать запросы запросы которым больше 60 сек.

    Таким образом.

    Если кто то слушает ваш канал, он не сможет подделывать запросы (а значит компроментировать), и из-за проверки времени жизни запроса не сможет вечно получать данные по однажды перехваченного запроса.

    А в базе токены можете хранить пока клиент сам не запросит их уничтожения и сохранить время последного обращения через токен, и удалять токены которые не использовались более 60 дн.
    Ответ написан
    9 комментариев
  • Насколько это эффективно?

    miraage
    @miraage
    Старый прогер
    bcrypt в помощь.

    // EDIT

    Крайне неэффективно.

    // EDIT2

    Генерация случайной строки (вместо вашей функции salt, длину отрегулируйте):

    bin2hex(openssl_random_pseudo_bytes(21));
    Ответ написан
    1 комментарий
  • Тестирование фасада View Laravel 5.1?

    Denormalization
    @Denormalization
    Тестировал на L5 такой код:
    <?php
    
    use Illuminate\Foundation\Testing\WithoutMiddleware;
    use Illuminate\Foundation\Testing\DatabaseMigrations;
    use Illuminate\Foundation\Testing\DatabaseTransactions;
    
    class HomeControllerTest extends TestCase
    {
        public function testIndexPage()
        {
          \View::shouldReceive('make')->with('home')->andReturn('test');
          View::shouldReceive('share');
    
          $response = $this->action('GET', 'HomeController@getIndex');
    
          $this->assertResponseOk();
          $this->assertEquals('test', $response->getContent());
        }
    }


    Ошибки которые были:
    - Нужно мокать еще метод share, он там где-то вызывается.

    Вообще я не вижу смысла тестировать View фасад - там нечего тестировать.
    Ответ написан
    9 комментариев
  • Cтоит ли переходить на Laravel 5?

    Denormalization
    @Denormalization
    Стоит. Однозначно.
    В L5 множество различных плюшек (один улучшенный DI чего стоит).
    Так же L5.1 объявлен как LTS, что очень хорошо для больших проектов.

    >К примеру, насколько он быстрее/медленнее, чем 4.2?
    Нельзя сказать однозначно. Зависит от используемых пакетов. Но в L5 улучшенно кеширование + добавили кеширование роутов, что значительно его ускоряет.
    Ответ написан
    1 комментарий
  • Best practices при написании приложений на Laravel?

    Denormalization
    @Denormalization
    В основно Сергей Протько всё правильно ответил, дополню несколько пунктов:

    5) Валидацию нужно делать в контроллере на уровне FormRequest. Метод register в модели не нужен. Можно сделать сервис UserRegistration, или использовать команды (раздел Jobs).

    6) Отправку Email не нужно тестировать. Максимум что можно сделать, это замокать фасад или интерфейс Mailer и проверить что он вызывается.
    Ответ написан
  • Best practices при написании приложений на Laravel?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для начала перестаньте мыслить папками и начните мыслить пространствами имен

    1) где хотите. Простой вариант - в неймспейсе Repository. В целом почитайте про шаблон репозиторий
    2) А какой в этом смысл? Есть смысл делить по поддерживаемым хранилищам (Database, InMemory, etc), только так у нас могут быть две реализации UserRepository
    3) в сервис провайдере логичнее.
    4) Там и храните, еще можно переименовать в ServiceProvider
    5) Обычно регистрация юзера это new User, или в случае Laravel - статическая фабрика... или сервис. Вообще валидация тоже должна происходить на уровне контроллера, но тут уж как выходит.
    6) без различных катчеров - у swift mailer есть spool, но как по мне это не столь удобно.
    Ответ написан
    3 комментария