• У кого из вас есть TDD или BDD в разработке, что конкретно вы делаете, когда, как к этому пришли?

    nonlux
    @nonlux
    Книгу не читал, по этому аналогий привести не смогу
    Пишу на php для веб c bdd

    1. Пишу bdd story.
    ( в моем случае это сценарии behat)
    Для меня bdd story это как функциональные и интеграционные тесты, в которых я проверяю работу всего моего продукта в целом.

    Тут вынес несколько правил для себя:
    1.1. Обязательно формулировать цель (название) сценария
    - Я вхожу в личный кабинет
    - Я создаю новую статью блога
    Это поможет отстраниться от лишнего и не превратить сценарий в кашу

    1.2. Писать на нативном языке без технических подробностей
    Я поначалу долго сопротивлялся писать, что либо кроме файлов трансляции на русском. Но потом вкурил фишку. По сути сценарии у меня превратились не просто в тесты, а мини todo list. Всегда четкий и понятный.
    А избегание технических подробностей помогает забыть о проектирование архитектуры системы на этапе написания сценария.
    И мне гораздо понятнее:
    - Я должен видеть "Отказано в доступе"
    чем
    - Статус код страницы должен быть 403

    1.3. Я(Исполнитель) сценария дурак )
    Сценарий не должен быть замудреным. От должен быть простой и не держать какие-либо данные "в голове".

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

    Я должен быть на странице "Новости"
    assert( $uri, '/news');

    Я вижу заголовок статьи "Эта прекрасная статья"
    assertTextInElement('#newsTitle", $title);

    - Если я имею на руках красный тест, то пришло время для кода..

    3. Написание практически всего кода предшествует у меня BDDSpec
    (в моем случае phpspec)

    И так, я получил ошибку от bahat. Я специально настроил утилиту так что бы она ругалась ошибками разрабатываемой системы.
    В итоге я получаю такую ошибку:
    - uri '/new' not exist

    Это для меня прямое указание к действию. т.е я должен создать новую страницу.
    В рамках моей системы уже существуют правила:
    - новая страница - это новое action у контролера.
    - action должен вернуть массив значений для шаблона
    Опираясь на это я создаю спецификацию для контроллера
    class ControllerSpec  {
      public function it_should_show_news ()
      {
        $this->newsAction()->shouldBeArray();
      }
    }


    И далее код, который пройдет этот тест:
    class Controller {
      public function newsAction() 
      {
         return [];
      }
    }


    4. После этого запустив phpspec я получил зеленый bddspec
    5. После этого cнова возвращаюсь к bddstory
    Получаю зеленый шаг
    6. Возвращаюсь на шаг 2.

    Так начинает расти система и обрастать новым протестированным функционалом.

    До bdd использовал tdd c PHPUnit и был очень доволен, пока не подсел на behat + phpspec
    Ответ написан
    6 комментариев
  • В Rails при добавлении записи created_at создает время не в текущем часовом поясе, как решить?

    @modernstyle
    Code GOD
    Идем в config/environments/development.rb

    Ставим config.time_zone = "Moscow"
    Ответ написан
    Комментировать
  • Проблема с rspec. Что делать?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Учиться программированию через тестирование, не зная программирования - верный путь насобирать шишек и получить самое неприятное впечатление от изучаемой технологии. Рекомендую отказаться пока от тестирования и научиться основам без него. Рановато.
    Ответ написан
    Комментировать
  • Не помешает ли мне изучение PHP потом перейти на RoR?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Отчасти поможет: что-то вы уже будете знать и уметь, а опыт лишним не бывает (практически никогда).

    Отчасти помешает: вы будете смотреть на какие-то общепринятые для Ruby/Rails соглашения и недоумевать: "Что за бред? А запилю-ка я лучше по-своему, как в старом-добром пхп делал". И вот это тот случай, когда опыт как раз бывает лишним. Хотя это не обязательно будет именно так, но вероятность есть.
    Ответ написан
    Комментировать
  • Где брать не сложные веб проекты?

    opium
    @opium
    Просто люблю качественно работать
    У друзей все хотят сайт
    Ответ написан
    Комментировать
  • Почему не все серверы пишутся на Node js?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Принципиальных качественных преимуществ у node.js перед остальными языками нет, как впрочем и недостатков. Просто yet another язык со своими особенностями. Соответственно если в вопросе заменить node.js на php/ruby/python итд - ничего не изменится.
    Вопрос по сути абстрактный "почему все не перешли на язык %%%%%"

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

    UPD
    hbrmdc
    У NodeJS есть уникальные и очень весомые преимущества, которых нет ни у одного другого языка. Например то, что это JS, и, следовательно, нет необходимости разучивать лишние языки - можно весь webapp писать на js.
    Личные предпочтения обоснованные привычками - это не имеющий значения аргумент в данном вопросе.

    1) Есть отличия, да. Только не те о которых Вы пишите. То что это "JS" вообще ни на что не влияет.
    JS хорошо знают фронтендщики - а кто пустит фронтэндщика к внутренней архитектуре? Там подход совершенно другой нужен, другие навыки, другое понимание как это все работает. Просто пересадить человека с фронта на бек - нельзя.

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

    2) Личные предпочтения обоснованные привычками это основной аргумент.
    Я вот умею в php, умею в ноду, умею в еще десяток умных слов.
    Мне нужна новая команда на новый проект.
    Я открываю hh и что я вижу: node.js 279 резюме из которых половина фронтэндщики.
    PHP - 9613 резюме. Даже если 90% разработчиков PHP на hh - уроды которых к коду нельзя подпускать на пушечный выстрел - останется все равно в 3 раза больше чем есть node.js.
    Собственно на этом выбор и закончен.

    На малопопулярных языках пишут в случаях:
    a) это мелкий сервис с неявными перспективами который можно переписать за неделю
    б) это проект "для души" разработчика.

    Получается замкнутый круг на самом деле.
    Менеджер смотрит резюме, резюме на node.js нет =>
    Менеджер не начнет проект на node.js =>
    Не возникнет вакансия на node.js =>
    Разработчик анализируя вакансии не увидит вакансий на node.js =>
    Разработчик будет учить что то другое =>
    Менеджер смотрит резюме, резюме на node.js нет...

    Переломить ситуацию могут только очень крупные игроки обладающие возможностями формирования рынка (например Apple и Swift), и то не со 100% гарантией (samsung&c и Tizen)
    Ответ написан
    13 комментариев
  • Почему не все серверы пишутся на Node js?

    mannaro
    @mannaro
    Умею профессионально гуглить
    Есть Ассемблер.
    Но если он есть, на нем все возможно, и в добавок он соображает быстрее того же C++, то почему еще существуют другие решения в мире софтовой разработки?

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

    @caution
    попробуйте разобраться с turbolinks
    Ответ написан
    Комментировать
  • Защита от DDOS атак в golang?

    @FireGM
    При помощи правильно настроенного nginx'а.
    Ответ написан
    9 комментариев
  • Организация связей ActiveRecord?

    @thepry
    Ruby on rails, 1С разработчик
    has_many :liked_posts, through: :likes, class_name: 'Post'
    Ответ написан
    Комментировать
  • Rails обновление нескольких записей в одном запросе?

    Если есть возможность, используй условное обновление записей одним запросом:
    user.posts.where(visited: false).update_all(visited: true)
    ActiveRecord update_all

    Если нет такой возможности и записи нужно обработать поочерёдно каждую, то используй Active Record Transactions
    Ответ написан
    Комментировать
  • Какую структуру выбрать для своей CMS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    И вот задумался - какую структуру для неё выбрать?


    дерево
    Ответ написан
  • Как ускорить рендеринг вложенных полей simple_fields_for?

    @sunnmas Автор вопроса
    Ruby
    В общем я нашел решение!! Оно было на гитхабе в разделе bug reports репозитория simple_form.
    What is the expected slowdown of using SimpleForm?
    Там мистер nashby в марте этого года написал примерно следующее:
    SimpleForm spends a lot of time for trying to translate hints and placeholders for inputs

    Соответственно подставив везде placeholder: false, hint: false где только можно. Получил ускорение с 6 секунд до 780ms.
    Имейте ввиду у себя в приложениях ;)
    Ответ написан
    2 комментария
  • Хочется хорошо и качественно разрабатывать, но как?

    tigroid3
    @tigroid3
    PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT
    Сам столкнулся с такой проблемой, пол года сидел дома изучал PHP, JS, учился верстать, но когда почти остановился в продвижении, то стал искать работу (почти пол года искал) и параллельно продолжал учиться, вот сейчас работаю помощником программиста. Теперь понимаю, чему я обучился тут за 2 месяца, никогда бы не научился сидя дома. Так что ищи работу, даже если первое время на общественных началах. Удачи)
    Ответ написан
    2 комментария
  • Почему пропадают email attachments?

    Если я правильно понимаю, косяк в кривом составлении multipart. У вас в письме значится только один
    Content-Type: multipart/alternative;
    Что нам говорит о том, что все вариации частей являются альтернативами (т.е. заменами) друг к другу. А это явно не то, что вы хотели. В письме у вас должна быть конструкция типа:

    Content-Type: multipart/mixed (смешанное содержание)
    • Content-Type: multipart/alternative (тут мы располагаем текстовую и html част письма, как замену друг-другу)
      • Content-Type: text/html
      • Content-Type: text/plain

    • Content-Type: image/jpeg
    • Content-Type: application/octet-stream
    Ответ написан
    1 комментарий
  • Какие основные задачи у Front-End разработчика на фрилансе?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Отвечать на тупые вопросы на тостере.
    Ответ написан
    Комментировать
  • Gem для метрики посещаемости ruby on rails?

    premas
    @premas
    Full-stack web-developer
    Нормального гема нет. Если делать это записями в базе, то будет тормозить. Я бы делал это на Redis.
    Ставим Redis, подключаем гемы.

    gem 'redis'
    gem 'redis-rails'


    Делаем себе config/initializers/redis.rb. Пишем там:
    $redisTrackUsers = Redis.new(:host => "127.0.0.1", :port => "6379", :driver => :hiredis, :db => 1)

    Потом в application_controller.rb пишем:
    before_action :tracking_users
    def tracking_users
      $redisTrackUsers.set(request.remote_ip, true, ex: 24*60*60) // через день поле уничтожится
    end


    юзеры заходившие за последние 24 часа:
    $redisTrackUsers.keys

    Ну а потом по whenever, например, можно скидывать в базу.

    Чем яндекс-метрика не устраивает?
    Ответ написан
    6 комментариев
  • Python/Django-кидди, SQL-мартышка, Web-негр — что перспективнее (Ага, «Pre-Junior»)?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Если у вас нету реального опыта над "боевыми" сайтами и подобными вещами, то одназначно 1 вариант. Можно сколько угодно читать книжки и заниматься самообразованием, но без старта в офисе под присмотром более опытных коллег, результаты будут плачевными скорее всего. Это просто аксиома, надо поработать вначале 4-12 месяцев в офисе, пиля живые сайты/проекты и впитывая знания от "старших", а дальше будет намного проще.
    2 вариант подходит только если вас действительно к этому тянет.
    3 вариант звучит крайне сомнительно, ибо опыта для полноценного фриланса у вас по сути дела нет. С проектом то вы может и справитесь, но что вы будете делать после его окончания? Этот же заказчик вряд ли завалит вас новой работой, а скиллами для эффективного фриланса за 1 проект вы точно не обзаведетесь. Есть риск после этого погрязнуть в болоте под названием "русские фриланс биржи", где вы с большой вероятностью будете биться на смерть со школьниками за самые примитивные и убогие задачи, типа "сверстайте 10 страниц и натяните их на вордпресс за 5к рублей".
    Вначале надо выбирать такую работу, где собственно будет много этой самой работы и развития (не без помощи более опытных коллег). А после получения стартового буста сориентироваться будет намного проще.
    Ах да, если вы действительно хотите работать 5-7 лет в Краснодаре, то это эээ... весьма мрачное виденье своего будущего. Через 1.5-3+ года (зависит от области) можно будет без проблем начинать думать о фрилансе в валюте (при учете интенсивного развития).
    Ответ написан
    4 комментария
  • Python/Django-кидди, SQL-мартышка, Web-негр — что перспективнее (Ага, «Pre-Junior»)?

    @thepry
    Ruby on rails, 1С разработчик
    Советую python/django - приятный язык, хороший фреймворк. Трактор, опять же, можно завести. :-)
    Ответ написан
    2 комментария