• Какими инструментами пользуйтесь Вы фронт/бэкендеры?

    Yesley
    @Yesley
    Front-end/Smart TV developer
    Моё front-end/Smart TV окружение:

    Процесс разработки
    • WebStorm (IDE лучше не встречал, стоит своих денег)
    • Gulp (сборка проектов)
    • Yeoman (скаффолдинг)
    • Bower (управление используемыми библиотеками)
    • LESS (CSS-препроцессор)
    • Spy-js (JavaScript трассировка)
    • CSSComb (сортировка и форматирование стилей)
    • JSDoc (создание документации)
    • weinre (удалённая отладка)
    • Chrome DevTools (инструменты разработчика)
    • Adobe Photoshop / Extract (макеты)

    Приложения и расширения для Chrome
    • Postman (HTTP/REST-клиент)
    • Cacoo (прототипирование и построение диаграмм)
    • IcoMoon (иконки)
    • RegExp Tester (тестирование регулярных выражений)
    • Google Docs (замена Windows Officce для документов)
    • Cookies (работа с cookies)
    • Emmet Re:View (тестирование брейкпоинтов вёрстки)
    • Fontface Ninja (позволяет узнать название шрифта на странице и скачать его)
    • JetBrains IDE Support (live-reload для WebStorm)
    • Perfmap (профилирование загрузки ресурсов с использованием Resource Timing API)
    • qSnap (скриншоты страницы + хостинг скриншотов)
    • Tape (инструмент для измерения расстояний на странице, линейки, сетки)
    • Web Developer Checklist (чеклист для front-end разработчика)

    Разное
    • preloaders.net (генератор индикаторов загрузки)
    Ответ написан
    Комментировать
  • Какими инструментами пользуйтесь Вы фронт/бэкендеры?

    OpenServer - крайне удобный сервер под винду
    phpStorm - лучшей студии просто нет, только что кофе в постель не носит
    FireBug + WebDeveloper + Easy XDebug - больше ничего в фаерфоксе не стоит
    Notepad++ - всегда открыт, замена текста регулярками нереально выручает
    Git Bash - для регулярных простых действий с гитом + всякие разные дополнительные скрипты
    SourceTree - для мониторинга большого проекта незаменимо
    NaviCat для mysql, но если нет лицензии то и HeidiSql из набора опенсервера сойдет
    Еще Winmerge периодически помогает сравнить 2 больших каталога
    Ответ написан
    Комментировать
  • Запуск Laravel - Error in exception handler?

    @vadimstroganov Автор вопроса
    Решил проблему!

    php artisan cache:clear 
    
    chmod -R 777 app/storage 
    
    php artisan dump-autoload
    Ответ написан
    2 комментария
  • Что представляет собой тестирование ?

    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.
    Ответ написан
    Комментировать
  • Список плохих клиентов — идея для стартапа или уже есть такой?

    "Плохой" - понятие субъективное. Для вас плохой - для меня хороший :))
    Ответ написан
    2 комментария
  • Проблема GUI билдера в IntelliJ Idea?

    @FoxInSox
    Не думали Swing сменить на JavaFX? Для редактирования fxml файлов используется Scene Builder от Оракла. Имхо все удобнее и без всякого копирования.
    kyjkC.png
    Ответ написан
    3 комментария
  • Как правильно изучать PHP?

    @r_tretyakov
    Перечень инструментов и полезного чтива:
    https://github.com/ziadoz/awesome-php
    Ответ написан
    Комментировать
  • Как установить и настроить xDebug для Sublime?

    @Masterme
    хдебаг мало установить, нужно им уметь пользоваться
    во-первых нужно убедиться что он вообще подключен. это в phpinfo
    во-вторых чтобы хдебаг активировался - браузер должен послать специальный заголовок. чтобы браузер захотел это сделать нужно установить плагин. для файрфокса такой плагин называется the easiest xdebug.
    в-третьих, чтобы хдебаг и твоя ИДЕ поняли друг друга, ИДЕ должна слушать определённый порт. этот порт задаётся в пхп.ини и по умолчанию 9000. кроме того, иногда ИДЕ ждёт что хдебаг пошлёт ключ, например, NETBEANS-XDEBUG. что там ждёт sublime - я не знаю, смотри доки. возможно это должен быть ключ SUBLIME-XDEBUG или какое-нибудь иное ололо. этот ключ задаётся в двух местах - в твоей ИДЕ и в упомянутом плагине для файрфокса
    в-четвёртых, у хдебага есть три режима - пошаговая отладка, трейсер и профайлер. трейсер и профайлер к ИДЕ не обращаются, а вываливают результат в файлы. результат профайлера читается программой wincachegrind (в виндах) или kcachegrind (в кедах).
    Ответ написан
    4 комментария
  • oDesk — как писать cover letter

    @MikhailEdoshin
    0. Скажие Hi. Если у заказчика есть имя, используйте имя: Hi John.
    1. Представьтесь (I'm Ivan XXX and...) и немножко опишите себя, но не просто «я такой», а через проект — this is a good match for my skills или this is exactly the kind of job I do over the past few years..
    2. Если есть вопросы по проекту, задавайте. Этим вы, в частности, покажете, что прочитали описание. Если заказчик хочет странного, а есть лучший вариант, тоже пишите прямо тут.
    3. Предлагайте следующее действите — send the PSD и т. д.

    Не пишите, что проект easy или simple. Вы еще PSD не видели :) (И остерегайтесь клиентов, которые пишут easy или simple.) Не пишите quickly — опять-таки, вы не знаете проект и quickly у разных людей разный. Пишите, что можете начать немедленно и там есть поле для ожидаемого срока, ставьте less than a week.

    Ну и не бойтесь сильно накосячить — иногда скорость важнее. Там уже наверное индусов понабежало.
    Ответ написан
    Комментировать
  • Как добавить на сайт произношение английских слов и предложений (TTS)?

    mannaro
    @mannaro Куратор тега JavaScript
    Умею профессионально гуглить
    Попробуйте использовать google.
    Пример

    Для этого посылаете GET-запрос в таком виде:
    http://translate.google.com/translate_tts?ie=utf-8&tl=LANGUAGE&q=STRING
    Где LANGUAGE — язык (например ru), а STRING — ваша фраза.
    Ответ написан
    Комментировать
  • Реализацию безсловарного стеммера на PHP?

    nikel303
    @nikel303
    Была когда-то на хабре отличная статья «Яндекс-like поиск своими руками», но к сожалению она уже недоступна.
    Вот ссылка на зеркало.
    Ответ написан
    2 комментария
  • Какая разница между jQuery .bind() .live() .delegate() и .on()?

    zimorodok
    @zimorodok
    bind — навешивает обработчик непосредственно на элемент (когда тот есть в DOM-е). При удалении элемента так-же удаляется.

    live — навешивает обработчик на document, используется делегирование (всплытие событий). Позволяет создать обработчик до того, как элемент появится в DOM-е. При удалении элумента обработчик не удаляется, а просто перестает срабатывать. Если в DOM снова вставить элемент, подходящий под селектор, обработчик снова отработает.

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

    on — объединяет возможности как bind, так и delegate (зависит от формы использования). Как верно было замечено, остальные методы deprecated и в новых версиях поддерживаться не будут. Елиный метод введен для того, чтобы не возникали вопросы какой метод использовать.
    Ответ написан
    Комментировать
  • Как спаять светодиодный светильник?

    DIHALT
    @DIHALT
    Итак, на пальцах :))

    Есть светодиод, у него есть два ключевых параметра:

    Падение напряжения и рабочий ток.

    Что такое падение напряжения?
    Представь себе батарейку работаюущую на замкнутую цепь из двух простых резисторов (сопротивление нагрузки). У батарейки всегда есть такой параметр как ЭДС (те самые вольты), зависящие от химии батарейки. Это константа. Есть внутреннее сопротивление (чем батарейка свежей, тем оно меньше).

    И тогда цепь получается такой: Источник ЭДС — внутреннее сопротивление — сопротивление нагрузки1 — сопротивление нагрузки2 — замнулись на другой конец источника ЭДС.

    Цепь у нас одна ветвь. Поэтому ток в ней тоже равный на всех элементах. ПО закону ома U = I * R. Вот это это самое U и есть падение напряжения. А уравнение цепи должно быть таким, чтобы сумма всех падений была равна той самой ЭДС.

    E = I*Rвн сопр батареи + I*R1 + I*R2

    E — ЭДС батареи, константа, всегда равна определенной величине, зависящей от реактивов батареи. У обычной батарейки 1.5 вольта.

    Т.е. ЭДС как бы делится на все сопротивления цепи, пропорционально этим сопротивлениям. Чем большее сопротивление участка, тем больший кусок напряжения оно на себя утащит.

    Когда батарейка садится, то ЭДС по прежнему = 1.5 вольта, а вот внутреннее сопротивление батареи растет. А значит падает ток, а значит распределение падений меняется и большая часть ЭДС оседает на внутреннем сопротивлении, а не на сопротивлениях нагрузки остается мизер.

    Вернемся к светодиоду. Фишка его в том, что он нелинейный элемент. Т.е. его сопротивление зависит от тока по хитрой кривой. А суть этой кривой в том, что его падение (I диода *R диода) = const и величина ее есть в документации на диод. Чем это грозит. А вот чем:

    Допустим падение диода по паспорту 1.5 вольта. А ты вешаешь его на крону, чье ЭДС = 9вольт:

    Получаешь цепь ЭДС = I * Rвн сопрот батареи + U пад диода.

    U падения диода = const и равна полтора вольта. Хоть убейся оно так будет. Куда девать оставшиеся вольты? Их можно только высадить на внутреннее сопротивление нагрузки. Оно, в данный момент, тоже некая константа (считаем, что батарейка у нас бесконечно заряженная). Пусть будет в 1ОМ

    Что получается? 9 вольт — 1.5 = 7.5 вольт должно высадиться на сопротивлении в 1ом. Как? Да запросто — ток в нашей цепи (и через диод тоже) будет всего навсего 7.5А. Наслабо, да? Диод от такого ахтунга мгновенно испарится (Ведь его рабочий ток в тысячи раз меньше!) разбросав по округе брызги горелого пластика.

    Как быть? Вариантов несколько:

    Лепить последовательно столько светодиодов, чтобы их суммарное падение напряжения уравновесило ЭДС батареи за вычетом небольшого падения на внутреннем сопротивлении батареи (падение это будет Rвн * Iрабочий светодиода)

    Либо добавить в цепь еще одно, добавочное, сопротивление. Которое будет таким, чтобы I = 0.03А (пусть это будет рабочий ток светодиода) И тогда R этого сопротивления легко вычислим из уравнения:

    9 = R*0.03 — 1*0.03 — 1.5

    Теперь о драйверах:
    Что делает драйвер светодиода? А он всего лишь так подстраивает свое выходное напряжение, чтобы оно соглассовывалось с падением напряжения на светодиоде, обеспечивая на нем строго заданный рабочий ток. Поставишь два светика последовательно — драйвер поднимет напряжение вдвое, удерживая ток. Поставишь три — втрое и так далее пока драйверу будет хватать запаса на регулирование (зависит от входного напряжения и схемы драйвера).
    Ответ написан
    1 комментарий
  • Что делать, если есть идея, но нет возможности ее реализовать?

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

    Вот реально бесят такие умники «есть особо ценная идея, что же с ней делать». А с чего вы взяли, что идея не дилетантская из серии «2+2=4»? Единственный способ проверки — сделать, рискнуть ресурсами.

    Вы думаете у тех, кто каждый день работает в каком либо бизнесе, имеет неиспользованные средства, идей нет? Идей есть, людей нет ответственных, нет времени контролировать.

    Самый умный вариант — позиция «у меня идей нет, буду делать с удовольствием ваши». Денег дадут, ресурсы дадут и подскажут еще куда копать.

    А с эпизодическими идеями… не льстите себе. Они скорее всего слабые. Генерируйте лучше идеи там, где ведется работа и не тратьте энергию на то, что не будет реализовываться.

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

    track
    @track
    Пост должен начинаться с картинки-eyestopper-а.

    В тексте нужно вначале немножко повилять хвостом и поприседать перед могущественным хабражителем, он это любит.
    Хорошо идут либо статьи из серии «на пальцах» (о, даже мне понятно стало!), или, другая, несколько парадоксальная крайность — чрезмерно заумные (о, круто! Хабр — торт! Ничо не понял, но плюсану!").
    Есть темы, которые гарантированно набирают плюсы (хабрасрач против копирастов и «михалкова», например). Не рекомендуется, особенно новенькому, писать на фанатские темы («Apple — круто» или «Apple — гавно» — в равной мере). Реакция может быть непредсказуема, в зависимости от того, какая клака в тред придет первой. Не стоит выступать в защиту тем-изгоев. Сольют и ее и вас.
    Хабрастадо любит следовать за вожаком. Если пост явно плюсуется — будут плюсовать. Если минусуется — минусовать.

    Любят статьи про мелкие компании, стартапы, самоделки, особенно компьютерные, гаджеты, даже бесполезные. Не любят — про корпорации (Google это, HP или Microsoft — неважно), и все связанное с ними.

    Также периодически стихийно организуются «топики добра» или «топики зла», появление их, и то, какой вариант будет выбран — непредсказуемо.

    Если видите, что в первые несколько минут пост ушел «в минус» (хотя бы в минус 5), и у вас нет компании друзей, которые его могут быстро из минуса вывести, то задача безнадежна, убирайте его «в черновики».
    Ответ написан
    5 комментариев