• Первый рабочий день программист. С чего начать?

    maaGames
    @maaGames
    Погроммирую программы
    Беги оттуда, пока не поздно!

    Госкорпорация, отсутствие опыта самостоятельных разработок, древнее недокументированное зло... Жесть!
    Ответ написан
    7 комментариев
  • Зачем нужны таск менеджеры GULP и GRUNT?

    Мне кажется тут не хватает образного примера:

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

    Вот и сказочке конец, а кто слушал, тот и gulp.

    Простите - пятница.
    Ответ написан
    Комментировать
  • Как в yii2 restful в ответе сервера выбрать сразу все значения без пагинации?

    @iplus
    Можно задать размер страницы:
    /games?per-page=1000

    При запросе /games выполняется yii\rest\IndexAction, который возвращает ActiveDataProvider(['query' => $modelClass::find(),]). Т.е. объект Pagination там дефолтный ($pageParam = 'page', $pageSizeParam = 'per-page', $pageSizeLimit = [1, 50]). А дефолтный yii\data\Pagination пытается забрать параметры из $request->getQueryParams().
    Ответ написан
    Комментировать
  • Что представляет собой тестирование ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вообще вики можно для начала, а потом уже углубляться в литературу. Вот вам кратенькое описание, цель которого больше предоставить ключевые слова для поиска.

    Модульные, они же юнит тесты, предназначены для тестирования отдельных модулей/классов. Суть их в том, что мы тестируем поведение только одного класса за раз. Если класс ссылается на инстансы других классов - мы их мокаем. То есть подсовываем им фэйковый класс, который имеет тот же интерфейс, но внутри не реализациа методов, а проверка, вызывали ли метод, с каким аргументами, сколько раз вызывали и т.д. Так же методы мока могут возвращать стабы (заглушки), какие-то захардкоженные под какой-то кейс данные. То есть если мы пишем класс по работе с базой данных, сокет-сервер и т.д., нам стоит соединение с базой, сокеты и т.д. оборачивать в классы, что бы можно было потом подменить на моки это добро. Если у вас в юнит тестах идет реальная работа с файловой системой или что-либо в этом духе, то это уже попахивает интеграционными тестами. Подробнее можно почитать в документации к phpunit. Так же есть такая методология разработки как TDD, советую почитать "Экстримальное программирование" Кента Бэка в этом ключе.

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

    Интеграционное тестирование - тестирование нескольких модулей в связке. То есть мы тестируем наш компонент или его самодостаточный кусок в реальных условиях. Если этот компонент для работы с файлами - разрешаем ему доступ к файлам. Если база данных - то даем реальное соединение с базой. А можем что-то и замокать. Это как говорится, зависит от задачи. Скажем обращение к сторонним апишкам стоит мокать и стабить. Главная цель этих тестов, удостовериться что модули вместе работают хорошо. Особенно важно это когда модули пишут разные люди.

    Функциональное тестирование - это тестирования всего приложения в сборе. Если это REST API, то у нас через curl дергаются реальные методы, отправляются более менее реальные запросы и валидируются ответы. Если web-страничка, то это UI тесты с силениумом/phantom.js/zombi.js или, если нам не нужно еще и js тестить, просто curl + какой виртуальный браузер на том же php. Вообще по хорошему функциональные тесты не допускают никаких моков и т.д. но опять же если очень хочется то можно (опять же обращение к сторонним сервисам, контроля за которыми у нас нету).

    Но реалии таковы, что UI тестами покрывать проект не слишком удобно. Вопервых UI может меняться, а поддерживать их так же нужно. Во вторых это скучно. В третьих тесты могут просто падать... вот взяли и упали. И потом начинается, так, тесты опять упали... что там упало? А, не страшно, можно релизить. Так же на больших проектах UI тесты отрабатывают долго, очень долго, некоторых их просто ночью гоняют. Толку от тестов при таком подходе не слишком много, ибо разработчику стоит знать о том что что-то сломалось как можно быстрее. А так он приходит, видит что тесты опять красные, чинит эти красные тесты, и запускает... ждет... проходит пол часа к примеру, и где-то в другом месте отвалилось... Короче сами понимаете.

    Приемочное тестирование - по сути те же функциональные тесты, но подаются в контексте фича-спеков. Если вы работали когда-нибудь с QA отделом, то возможно слышали про такие штуки как acceptance criteria. То есть это тот чек лист, который должен проверить тестировщик что бы удостовериться что все хорошо. На основе этого чек листа можно написать функциональные тесты. Так же есть инструменты вроде Cucumber/Behat, которые позволяют писать спецификации в виде стэпов. В этом случае спецификации для этих инструментов могут писать QA а вы просто имплементите для них степы. То есть уменьшается прослойка между "acceptance criteria" и готовыми к выполнению тестов. Более того, стэпы можно реюзать, комбинировать, масса стэпов есть готовых, вам же необходимо только предоставить стэпы подготвалливающие систему (загрузка/генерация фикстур и т.д.). Короче лепота и удобно. Но медленнее интеграционных, зато не такие жесткие как функциональные, за счет этого их проще поддерживать. QA пишут спеку, реализуем тесты под эту спеку, пишем код под тесты, тесты зеленые - функционал готов.

    Ну и есть еще всякие термины типа пирамида тестов и т.д. Мол лучше много юнит тестов, чуть поменьше интеграционных и мало функциональных. Тогда тесты выполняются быстрее, а покрывать все и вся функциональными тестами обычно перебор.

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

    Короче почитайте про TDD и ATDD (можно и BDD затронуть, но тут не только от программиста зависит, менеджеры, заказчик или продукт-оунер тоже должны быть вовлечены, по сути этот подход хорошо работает в рамках продукта какого-то, на фрилансе и в аутсорсе редко можно встретить) , Continious Integration и Continious Delivery.
    Ответ написан
    Комментировать
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    @0xC0CAC01A
    Сначала слушайте BBC, а как чуть улучшите уровень, переходите на английский аналог Эха Москвы - lbc.co.uk - click 'Listen live'. Сможете понимать все акценты, а не толко диктора на BBC.
    Ответ написан
    Комментировать
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

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

    @JackBauer
    Куча советов но все слабоэффективны.
    Просмотр фильмов это хорошо, но там язык-дженерик.

    Только телевидение, только британское, минимум 3-4 часа в день. Без субтитров по возможности. Метод погружения. Главное найти, чтобы картинка и сюжет нравились, остальное мозг обработает.
    Также обязательна изоляция от русского контента (радио, телевидение, песни - ни в коем случае!).

    6 месяцев и вы сможете обсудить приемущества лейбористов в лондонском пабе с местным жителем после 4 пайнтс.
    Проверено на себе и уже двух 'выпускниках'.
    Ответ написан
    11 комментариев
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    Mlack
    @Mlack
    iOS dev, *nix lover, userR
    Почему-то никто не написал про MOOC :)
    Я думаю, все знаю или хотя бы слышали про online-образование.
    Так вот, я сам когда столкнулся с проблемой что читать и как-то писать я еще мог, а вот понимать, что мне говорят с ходу...
    Так вот, как то раз решил занятся machine learning и нашел целый курс на Coursera от Andrew Ng(который, кстати, до сих пор идет): https://www.coursera.org/course/ml
    Первые две-три недели было тяжко довольно, хотя на этом курсе есть русский субтитры, и меня это выручало по началу (мне так казало, хотя на самом деле это наоборот, лишь растягивает твое время адаптации). Затем я начал смотреть другие курсы, которые мне нравились и со временем я уже спокойно стал смотреть курсы на 1.5x speed
    Так что советую и вам тоже, очень удобно и полезно! И темы на любой вкус и цвет.
    Так же есть и дугие варианты: EdX, Udacity
    Ответ написан
    4 комментария
  • Постоянно возникают непредвиденные баги и слёты функционала, как бороться?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Возможно у Вас какая то кривая общая архитектура.
    Почитайте про SOLID.

    2. В целом - если Вы вносите изменения в какую то функцию - простейший поиск по файлам в текстовом редакторе говорит Вам где эта функция используется.

    3. Сложная бизнес-логика отличная от "получили запрос, сходили в базу, отдали данные в красивой обертке" должна быть обязательно документирована в wiki + в коде.

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

    4. Именно юнит тесты на мой взгляд нужны в 1% случаев. Использование моков не дает реальной пользы на живом проекте, поскольку причина краша может быть где угодно.

    5. Мы используем codeception.com Acceptance testing в сочетании с определенным дампом базы который загружается перед тестами.
    На дамп базы накатываются все миграции (используем phinx.org ) и далее проверяется все, вплоть до вывода конкретных значений контента.
    Честно предупреждаю, что время на разработку тестов превышает время на внедрение функционала примерно в 1.5-2 раза.
    Ответ написан
    Комментировать
  • Какая платформа больше подходит для электронного документооборота?

    qmax
    @qmax
    программер
    Вообще-то эти "общие СЭД программы" на то и общие, чтобы подстраиваться под всевоможные нужды.
    Если они вам чем-то не угодили, значит вам не нужен документооборот, а что-то другое.

    Ну а судя по первому опыту и упоминаиню PHP(yii) в качестве "платформы", думаю, что вас ждёт неминуемый провал и потеря времени и денег.
    Ответ написан
    Комментировать
  • Как написать операционную систему с нуля?

    svd71
    @svd71
    Согласен с большинством коллег - писанина операционки для коммерческого применения - весьма хлопотное занятие и в денежнов эквиваленте, и в трудоресурсах, и по времени , и даже в маркетинге.
    Учитывая все это, такие системы обычно пишут не совсем с нуля. Пример: QNX. За основу взято юниксовое ядро и переписано под систему реального времени. Теперь они активно продают свою систему для управленя атомными реакторами.

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

    Если же речь идет о создании операционки "для себя", вопросов нет - ваше время и ваше желание. Вам нужно просто проанализировать, какие функции для разработчиков предоставляют другие ОС (в основном это базовые: возможность работать с файловой системой и конвертация данный в файловой системы из/в устроств ввода/вывода и хранения данных.

    Так же можно изучить все грабли, сделанные другими: например ту же коллибри, или поискать исходники какого-нибудь ДОСа (Микрософт своей досни опубликовали вроде бы, TR-DOS можно найти и т.п.) или поизучать предтече Линукса - minix (ведь Торвальдс начал именно с нее). А еще лучше присоединиться к какому-нибудь существующему проекту (Minix, Linux, Kollibry, ReactOS) и начать создание чего-либо под них.
    Ответ написан
    1 комментарий
  • Действительно ли back-end разработка более консервативна, чем front-end?

    hrls
    @hrls
    Половина ответа в вопросе, но дьявол в мелочах.
    Действительно, для относительно продуктивной backend-разработки практически на любом языке программирования необходимо знать несколько базовых фреймворков и тулов, которые решают большинство задач. Это скелет ~90% приложений сложнее hello world. Хотя и этот скелет меняется и развивается, пусть и не так быстро как хотелось бы, как разнообразные отростки (не консервативность, но более долгий жизненный цикл). Суммарный вес технологий и инструментов не меньше, и уж точно не менее динамично изменяющийся, чем у frontend-разработчиков.
    Далее личный опыт на примере Java.
    Лет 7-8 тому достаточно было знать Spring, Struts, Hibernate да Apache Commons в довесок для разработки большинства решений. Ну и J2EE-стек для задач Enterprise-уровня.
    В году 2014 Spring, Hibernate все также в арсенале программиста, но появилась куча абсолютно новых вещей вроде AMPQ, Hadoop, Netty, Scala с функциональной парадигмой, мультиязычные окружения с Clojure/Groovy/JRuby; стали чаще встречаться альтернативные реализации популярных библиотек (например Guice / Guava); старые технологии вроде J2EE стали использоваться несколько реже. А одних только Key-Value хранилищ, кэшей и прочих NoSQL как грязи. Изменился даже сам подход к построению приложений – мало кто в 2005 слышал про asynchronous event-driven модели и отталкивался при проектировании от REST-стиля (собственно, там и корни frontend-девелопера как отдельной специализации). Про эволюцию систем сборок, VCS, бенчмарков и прочих "микро"-элементов можно расписывать не одну простыню.
    И да простят меня frontend-товарищи за, возможно, чванливый тон, но раскурить тонкости работы async IO в зависимости от ОС-специфики вроде epoll/kqueue или учитывать CAP-теорему при построении middleware-кэша это уровнем сложности повыше, чем новый CSS-препроцессор и CoffeeScript c очередным MVC / MVVM-фреймворком. Некоторые задачи, вроде синхронизации потоков, так и вообще лежат большей частью в области математики.
    Уверен, что и в frontend-разработке существуют задачи сложнее и интереснее поехавшей на пиксель верстки и обновления полей после парсинга JSON, но ИМХО backend-разработка ближе к системному программированию старой школы, в то время как frontend суть прикладное программирование с примесями дизайна.
    Frontend-инструментов больше, backend-инструменты сложнее.
    Ответ написан
    4 комментария
  • Как писать оптимальный PHP код?

    golotyuk
    @golotyuk
    99% оптимизации PHP это
    - обязательно использовать APC (или opCache в новых версиях)
    - использовать ООП только там, где это реально нужно
    - использовать кэширование
    - здравый смысл (не загружать списки из 100 элементов, если нужно только 10 и т.п.)

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

    Что почитать:
    - Общие правила оптимальной работы PHP на практике
    - Howto по производительности PHP с внутренностями
    - 50 micro tips для оптимизации PHP (англ.)
    Ответ написан
    5 комментариев
  • Какая быстрая база данных для интернет-магазина с более чем 50 тысячами товаров и поиском?

    opium
    @opium
    Просто люблю качественно работать
    поиск перенести на выбор в сфинкс, эластик серч, солр
    и будет больше счаться
    Ответ написан
    2 комментария
  • Как сервер в PHP идентифицирует пользователя по сессии?

    "Тогда сервер будет определять по ip адресу и юзер агенту. Но в таком случае есть шанс перепутать пользователя, которые выходят через прокси."
    - Нет, это не так.

    Если cookies отключены, то если разрешено используется параметр url (добавляется в конец). Либо сессии не работают вообще. Никого определения по IP и useragent нет
    Ответ написан
    Комментировать
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Внесу небольшую лепту, хотя вижу что вроде решено.

    Во-первых, всё приходится через труд. Люди разные, техники разные, у кого то есть способности к языкам, кто-то родной едва понимает. Тут дело такое, может просто не сильно повезло.

    Но терпение и труд всё перетрут. Так что вот пара трюков и советов:
    + во-первых, нужна базовая грамматик; с ней можно познакомиться из банальных учебников, или же на таких сервисах, как liangualeo.ru (правда придётся заплатить, дабы открылись курсы); в принципе это самый сложный момент, хоть и не совсем обязательный: сложный тем, что правил туча, совсем другой язык, скорее непохожий на наш, чем сходный в чём-то, но необязательный он тем, что людям свойственно ошибаться и никто вас не съест за "моя твоя не понимать". Конечно, я утрирую, в простом общении (особенно в холиварах и если Вы кому-то просто не понравились) за ошибки могут и наказать привлечением внимания общественности, но на спец. форумах по обучению языкам Вам просто вежливо растолкуют;
    + во-вторых, нужен словарный запас; по замерам, для свободного чтения хватает 3k слов с лихвой, для чтения технической литературы нужно слов чуть больше, в зависимости от сферы сверху от 500 до 2k слов, но 5k это не так много, особенно если учесть, что большинство слов похожи и имеются простые алгоритмы построения одних частей из других (хоть это и нельзя использовать прост так, если вы не писали "Гамлета", но для запоминания - не можно, а нужно); для этого нужно много читать, чтение невероятно быстро повышает словарный запас, но читать надо по возможности без словарика: развивает "языковую догадку", когда из контекста догадываетесь до смысла неизвестного слова, что намного лучше, ибо Вы начинаете думать на ин. языке, нет бессмысленной высокоуровневой прослойки.
    + в-третьих, надо много слушать; без этого Вы просто не будете понимать устную речь. Сам этим страдаю - спокойно читаю технический текст, но никак не могу слушать живого собеседника, говорящего свободно, пока что приходится просить помедленнее; здесь Вам помогут фильмы, аудиокниги, первые желательно без субтитров ибо иначе будете читать субтитры, а не слушать; тяжело, но зато быстро научитесь слушать (примерно пара недель интенсива).
    + предпоследний, четвёртый этап: общение - второй по тяжёлости, здесь надо будет снять языковой барьер полностью, научиться думать и говорить на другом языке, а это не просто; говорить надо часто, чем чаще тем лучше, причём длительные перерывы этому ни разу не способствуют. Месяца интенсива хватит, но продолжать придётся, чтобы не потерять навык. Skype творит чудеса, правда Вам придётся тогда поучить русскому языку.

    Наконец, последний этап, сто раз по желанию: переводы. Это последний этап изучения языка, и это всё бред и ужас, что твориться в школах в СНГ (где учат языку через постоянные переводы). При это придётся научиться в совершенстве не только изучаемый язык, но и знать, понимать и любить переводимый (совершенство здесь не обязательно, редактор или другой человек если что может поправить, но исказить мысль - недопустимо). Собственно, здесь помощников нет: сколько людей, столько и мнений. Разве только выкладывать переводы на habrahabr.ru, хоть и нынешняя публика не очень относиться к переводам. В принципе, если очень хорошо знаете свой язык (я допускаю, что он русский), можете переводить и в обратную сторону, заодно познакомив зарубежного обывателя с материалами хабры =)

    Удачи в этом не лёгком деле. Как я говорил, без труда ничего не получиться. В крайнем случае, можете просто "пытаться" пользоваться иностранным по мере надобности, он сам будет прокачиваться, а Вам придётся пользоваться другими людьми и справочниками довольно долгое время. Но самое печальное: levelup будет столь незаметный, что Вы сами не поймёте на каком уровне Вы владеете языком, тогда как языковые тесты имеют колоссальную погрешность и ориентированы на знание грамматики и умения переводить (что печально), но иначе измерить уровень владения языка очень трудно.

    UPD.
    К превеликому сожалению toster до сих пор не позволяет отправлять более чем 10 тыс символов, так что тем, кто захочет посмотреть некоторые интересные наблюдения придётся кликнуть на эту ссылку. (что ещё забавнее - toster обрезает длинные ссылки, вот негодяй!)
    Ответ написан
    6 комментариев
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    @SemDi
    Рекомендую для обучения и закрепления (из своего опыта):
    1. engvid.com - объясняют разные особенности английского, от банального использования артиклей до разных жаргонизмов. У всех учителей есть свои каналы на youtube
    2. Поищите на rutorrent уроки с программой LIM, там есть разные. Мне очень помогли.
    Ответ написан
    1 комментарий
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    @TT13
    Есть отличный ресурс: learnathome.ru
    Упражнения на аудирование там бесплатные. Если ролики начального уровня поймет практически любой, то на advanced все совершенно иначе. Для себя я пользу почувствовал однозначно.
    Также, рекомендую регулярно проходить курсы на Coursera, edx, Udacity - как правило видеолекции с субтитрами, скорость воспроизведения можно регулировать. Лично я добавляю встречающиеся незнакомые слова в словарь ЛингваЛео (при больших объемах понадобится покупка золотого статуса), чтобы не забывались со временем.
    Ответ написан
    Комментировать
  • Есть сервис для того, чтобы научиться бегло понимать английскую речь?

    GREMeZ
    @GREMeZ
    Зависит от начального уровня.
    Дополню уже предложенные решения.
    Я бы порекомендовал для начинающих учебные подкасты вроде eslpod.com и отличный сайт ted.com - доклады с интерактивной транскрипцией.
    Найдите подкаст или доклады на тему, в которой вы разбираетесь, чтобы она была вам знакома.
    Сериалы и фильмы хороший метод для совершенствования способности распознавать речь на слух, но начинать с них может быть сложно, игра актеров, идиомы, дикция, фоновые шумы и т.п. могут мешать.
    Ну и ежедневная практика, конечно! Пополнение словарного запаса не только отдельными словами, но и фразами. По возможности, живое общение с носителями языка. Удачи! :)
    Ответ написан
    Комментировать