• Что такое фикстуры и миграции?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фикстуры - это по сути тестовые данные. Они нужны для unit-тестирования. Это могут быть как данные в базе, так и обычные файлы (обычно 2 варианта, до и после обработки так скажем). Каждый раз когда запускаются тесты, эти данные используются для установления начального состояния системы, что бы тесты всегда выполнялись предсказуемо.

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

    Миграции - механизм организации версионности структуры проекта. Вы можете написать миграцию для изменения местоположения статики (картинки, поменять ссылки в базе и т.д.), или же у вас добавляется новая таблица/поле. Обычно дополняется обратной миграцией, которая восстанавливает исходную структуру. Обязательно для работы в команде или при частом изменении организации данных в проекте, вообще я бы посоветовал использовать их всегда.
    Ответ написан
    Комментировать
  • В чем проблема? ошибка gulp?

    @Sashjkeee Автор вопроса
    f-e
    Проблема в плагине rigger
    Ответ написан
    2 комментария
  • Какие языки подходят для написания приложений под Android?

    gadfi
    @gadfi
    https://gamega.org
    Ruby пророчили стать убийцей Java, нодой заколачивали гвозди в гроб php .... доля java на рынке только растет, php тоже жив живехонек )
    нужно писать под android ─берите java, новый язык вы освоите на нужном уровне быстрее чем баги фреймворков, а учитывая большее комьюнити и подавно, не стоит заниматься ерундой ─ тот язык люблю, этот не люблю, есть инструменты которые подходят для решения задачи, есть которые не подходят а остальное лирика
    хочется сахара в java, добавьте kotlin
    Ответ написан
    3 комментария
  • Регулярные выражения. С чего начать изучение?

    Android97
    @Android97
    Бэкенд и немного фронтенд разработчик
    regexp.png

    Начни с ними работать и все. Все знания и навыки придут в практике.
    Ответ написан
    Комментировать
  • Java и удаленная работа (фуллтайм) - порог вхождения?

    Kaigorodov
    @Kaigorodov
    Инженер, математик, мечтатель
    Очень хороший вопрос.
    Мой опыт: java -- это в основном enterprize. Поэтому фриланса на нём меньше, часто сидят в офисе.
    Выбор попытать делать удалённо долгосрочно большие проекты на java -- это очень правильно. Я сейчас на такой работе, это кайф. Скорее всего лучше web-проект, а не swing.

    Что надо знать: java core, collections, threads, servlets.
    А вот spring, jsp -- они не на всех проектах и мне лично не очень нравятся. А технологии которые мне не нравятся со временем умирают )))

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

    Я вообще не знал java, взял задание, мне скопировали на диск jdk, javadocs. И сделал за 3 дня. Это первая работа.
    Даже если задание затянешь, всё равно доделай. Это уже можно показывать его другим. Также это база, которую можешь улучшать. Если ещё чего интересно, стучись в личку.
    Ответ написан
    3 комментария
  • CPython. Есть ли утечки памяти в самом языке?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    никто не даст вам 100% гарантии что вы не встретите утечек памяти в Python (ровно так же как я могу сказать что встречал утечки памяти в Php только пару раз за все время, ито изза кривых экстеншенов, которые увы в то время были необходимы), хотя согласен что в плане экстеншенов шансы встретить оные чуть ниже, если мы о популярных экстеншенах говорим. Тикеты в багтрекере/письма с баг репортами по поводу утечек памяти а так же вопросы как дебажить оные появляются постоянно.
    Ответ написан
    3 комментария
  • CPython. Есть ли утечки памяти в самом языке?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Сам язык, интерпретатор, вроде бы не замечен в текучести. То, чем пользуюсь, twisted + cyclone, плюс еще десяток пакетов, тоже не текут. Все работает 24х7, меня устраивает.
    Ответ написан
    1 комментарий
  • Как задать условие в mysql запросе?

    jakulov
    @jakulov
    Может что-то такое подойдет
    select t.*, if(l.light_name is not null, l.light_name, h.hard_name) as type_name from `table` t 
    left outer join light l on l.light_id = t.c_id
    left outer join hard h on h.hard_id = t.c_id
    where
    if(t.type = 1, l.light_id = t.c_id, l.light_id < 0)
    or
    if(t.type = 2, h.hard_id = t.c_id, h.hard_id < 0)
    Ответ написан
    2 комментария
  • Как правильно организовать структуру хранения файлов и картинок на фтп сайта?

    Rpsl
    @Rpsl
    Кратко о себе
    md5 от файла и размазываем по директориям.

    /images/news/a/s/d/f/asdf....jpg

    Превьюшки вообще не хранить, а делать их на лету через nginx и класть в его кэш. В крайнем случае хранить в папке рядом с оригиналом - удалять будет проще.
    Ответ написан
    1 комментарий
  • Что означает приставка -dev в номере версии composer пакета?

    @nuclear
    dev-* означает ветку. dev-master — master, dev-bugfix — ветку bugfix.
    2.3 скорее всего означает тег в git'e или просто alias какой-то ветки.

    Источник
    Ответ написан
    Комментировать
  • Что изучать веб-программисту самоучке, кроме самого языка?

    knekrasov
    @knekrasov
    Мне кажется, веб-программист в первую очередь должен быть программистом. Потому рекомендую Алгоритмы и структуры данных Н. Вирта (это азбука и второй курс, но весьма полезная).

    Обязательно рассмотрите древовидные структуры и алгоритмы на графах. Когда был школьником, мне взорвала мозг (в хорошем смысле) книга Кубенского.

    Почитайте (погуглите) про генетические алгоритмы.

    Еще есть классная книга по анализу программистских задач (и нетривиальных решениях) — Жемчужины программирования Дж. Бентли

    Ну и в остальном — начните с того, что вы знаете о своем языке (инструменте, библиотеке, фреймворке и т.п.). Вы пользуетесь ассоциативными массивами? А знаете, как они устроены? Как происходит доступ по ключу? Насколько трудоемкая это задача?

    Пользуетесь TreeMap? В javadoc к нему упоминается красно-черные деревья. А что это?
    Как выполняется программа на моем языке? Мне нужно встроить в свое приложение язык отчетов, похожий на SQL, как мне это сделать?

    Если вы в состоянии внятно рассказать об устройстве и принципах своего инструмента, можете предсказать поведение, оценить сложность того или иного подхода — значит, вы уже не самоучка.
    Ответ написан
    Комментировать
  • Не запускается скрипт при запуске Linux Ubuntu?

    @smartlight
    Зачем городить rc.local?
    Ведь есть update-rc.d <script_name> defaults — скрипт копируете в /etc/init.d/
    Ответ написан
    Комментировать
  • Sleep(delay) в javascript?

    SpeCT
    @SpeCT
    Не слушайте никого и делайте так, как считаете нужным. Про синхронный XHR тут уже упомянули, так что ниже код, что вы просили:

    function sleep(ms) {
    ms += new Date().getTime();
    while (new Date() < ms){}
    } 
    
    Ответ написан
    2 комментария
  • Расскажите про лучшие практики построения простых веб приложений на PHP+JS+jQuery?

    @egorinsk
    AJAX-приложения делаются не так и давно, потому найти собранные воедино best practices не так-то просто. Многие наработки просто не выложены в паблик, а используются разработчиками для каких-то своих проектов. Потому надо проявить старание и разобраться самому.

    Сначала посмотрите на то, что делают другие. Но здесь важно не брать плохие примеры (например, монстров типа Zend Framework и ExtJS. jQueryUI, кстати тоже уродливая вещь — вы его исходники смотрели?) Посмотрите, как написан клайентсайд у вконтакта. Посмотрите у фейсбука (хотя там код пожат, но разобраться можно). Посмотрите библиотеку Zforms. Посмотрите Google Closure Library (у Гугла есть чему поучиться, особенно в плане организации кода, посмотрите обязательно).

    Вообще, смотреть чужой код полезно. он не всегда хорошо написан, но даже в этом случае — это повод для размышлений на тему «а как правильно?».

    Теперь о теории. При построении более-менее сложных AJAX-приложений приходится решать примерно те же проблемы, что и на серверной части, а именно:

    — разделение кода на слабосвязанные компоненты (чтобы, меняя один из них, не ломать все остальное). Сюда входит как организация 3-звенной архитектуры (например, MVC), так и разбиение на модули, динамическая подгрузка модулей (посмотрите yepnope.js и сделайте то же, но проще). Выбор средства взаимодействия модулей — Dependency Injection или система событий (паттерн Observer). Мне больше нравится Observer.

    — организация хранилища данных — нужен какой-то модуль для получения данных с сервера с кешированием, проверкой актуальности, возможно с блокировками и нотификацией об изменениях. Посмотрите, например, как ведет себя Гугл Докс если открыть в 2 окнах 1 документ и править его. Нужна серверная половинка для приема/валидации/выдачи данных.

    — организация View: это решение вопроса о выборе шаблонов (jQuery Templates для начинающего — вполне пойдут), создание системы виджетов (чтобы например можно было вставить виджет графика в виджет формы и все работало) — я не знаю, правда, ни одной нормальной библиотеки виджетов, пишите сами.

    — роутер и контроллер — ну это элементарно пишется без всяких библиотек. Не знаете, как — посмотрите, как сделано у вконтакта.

    — повторное использование кода — копипаст недопустим.

    Также, есть проблемы специфичные именно для клиентсайда:

    — необходимость уменьшения числа запросов (неправильно: грузим диалог, обнаруживаем, что ему нужны CSS и JS файлы и грузим их) — лучше это делать одним запросом. То же про запросы к хранилищу: выбирайте все одним запросом. Несколько AJAX-запросов — это треш и ужас, особенно при пинге 100-200 мс.

    — необходимость минимизации объема и скорости работы JS-кода. Ради нее надо отказываться от тяжелых/перегруженных библиотек типа ExtJS, kendo и jQueryUI.

    — склеивание/сжатие JS файлов — элементарщина, можно склеивать хоть bash-скриптами (или make), плюс можно применить тулзы типа Google Closure Compiler. Разберитесь, как они работают.

    — необходимость создания адаптивной верстки — для этого есть библиотеки типа Modernizr, но по моему, это перегруженный монстр. Мне, например, хватает простого инлайн-скрипта, включаемого сразу после body, который ставит классы with/without-js, with-css3, with-ie, в итоге пользователи современных браузеров экономят трафик и видят rounded corners и CSS gradients, а пользователи ИЕ скачивают их в виде картинок.

    А, вот скрипт, если кому интересно: paste2.org/p/1947136

    — необходимость поддержки навигации средствами браузера — посмотрите библиотеку history.js (хотя имхо, ее тоже стоило бы урезать раза в 2-3, там много лишнего).

    Ну и для закрепления знаний нужна естественно практика.

    Напишите

    1) свой грид (грид — это в данном случае виджет, который отображает в виде таблицы какие-то данные), с сортировкой, фильтром и постраничным просмотром. Все должно работать через AJAX (а если яваскрипт отключен, то классическим методом). Если таблица помещается на экран без постраничной навигации, сортировки и фильтрация должны выполняться 100% на клиенте. Добавьте кеширование (при открытии уже закешированных данных они отображаются из кеша и посылается запрос на проверку их актуальности).

    2) Сделайте форму редактирования/добавления данных в этот грид с валидацией.

    3) А теперь сделайте так, чтобы он работал при пропадающем интернете (то есть, вы добавляете какие-то данные, они сохраняются, выживают при закрытии браузера и отправляются, когда соединение восстанавливается)

    4) если не испытываете отрицательных эмоций по отношению к вконтакту — решите эту задачу: vk.com/page-1_42054413. Она хорошо подходит для отработки навыков разработки AJAX-приложений.

    Что касается PHP, в AJAX-приложении он просто служит бекендом и умным хранилищем данных, не более. Слепите простейший ORM, его вполне хватит.

    P.S. И никогда не повтоярйте ошибок, которые делают косолапые разработчики Хабра. Размер textarea для комментариев должен вмещать минимум 20-25 строк.
    Ответ написан
    1 комментарий
  • Как стать программистом?

    deactivatedtheelephant
    @deactivatedtheelephant
    Что бы стать программистом, вас должен покусать другой программист %)
    Ответ написан
    Комментировать
  • Что должен знать настоящий программист?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Настоящий программист должен знать достаточно, чтобы пройти собеседование ;) Шучу, конечно. С такого вопроса начинаются священные войны. «Что должен знать программист?» Да ещё и настоящий?



    Предлагаю зайти с другой стороны — а чего не должен знать настоящий программист? Эйншейн играл на скрипке (хотя я и не слышал) и хоть это и не относилось к физике, но и не помешало ему стать известным. Думаю, что ответ на вопрос надо искать не в перечислении знаний, относящихся к программированию. Так сказать ответ на вопрос лежит не здесь и не сейчас. В любой работе важно терпение и труд. И не только в профильной области. Готовься к тому, что надо будет работать по 12-14-16 часов в сутки возможно и не один год. Почти на износ, пока «догонишь» острие прогресса и поймёшь смысл поговорки «нужно очень быстро бежать, чтобы оставаться на месте, но чтобы двигаться вперёд надо бежать ещё быстрее». Пройдёт некоторое время и ответ на этот вопрос тебе не понадобиться, т.к. настоящие программисты, а точнее профессионалы, уже ответили себе на этот вопрос ;) Удачи.
    Ответ написан
    Комментировать