• 3 Амиго — способ коммуникации, для создания качественного продукта

      Представим ситуацию — тестировщик находит баг, начинает обсуждать его с разработчиком — а тот настаивает, что это не баг, потому что в спецификации не было речи об этой функциональности. Знакомо?


      Или потому что требования были неоднозначно сформулированы, и он их неправильно понял. А может наоборот, в них было так много информации, что потерялся фокус и некоторая часть информации пропала из виду во время разработки.


      И в этой ситуации разработчик не является вредителем, который специально ошибся. На практике, если предоставить ему простые, понятные и, главное, — короткие требования — то количество ошибок, которые будут находить тестировщики, устремится к нулю.



      Вы также наверняка знакомы со спорами на тему "баг это или фича". Клиенты обнаружили недоработки, и product owner приходит в команду с замечаниями. А тестировщик с разработчиком защищаются, объясняя это тем, что в изначальной постановке и речи не было о реализации этой фичи. И такие моменты потом заводятся в backlog.


      Я считаю, что все такие задачи, заведенные после релиза, и являющиеся следствием плохо проработанной спецификации, — тоже баги. Баги, которые характеризуют качество вашего продукта.

      Читать дальше →
    • Альтернативное управление окнами в Linux

        Я из тех, кто ставит на Caps Lock переключение раскладки потому, что лень нажимать 2 клавиши, когда можно нажимать одну. Я бы даже хотел 2 ненужные клавиши: одну бы я использовал для включения английской раскладки, а вторую для русской. Но вторая ненужная клавиша — это вызов контекстного меню, которая настолько ненужная, что выпиливается многими производителями ноутбуков. Так что приходится довольствоваться тем, что есть.


        А ещё я не хочу при переключении окон искать их иконки на панели задач, ловить взглядом названия при листании через Alt+Tab, листать рабочие столы и т. д. Я хочу нажать комбинацию клавиш (в идеале вообще одну, но свободных ненужных клавиш уже нет) и сразу попасть в нужное мне окно. Например так:


        • Alt+F: Firefox
        • Alt+D: Firefox (Private Browsing)
        • Alt+T: Terminal
        • Alt+M: Калькулятор
        • Alt+E: IntelliJ Idea
        • и т. д.

        Причём, по нажатию, например, на Alt+M я хочу видеть калькулятор вне зависимости от того, запущена ли в данный момент эта программа. Если запущена, то её окну надо передать фокус, а если нет — запустить нужную программу и передать фокус когда она загрузится.


        На случаи, которые не покрываются предыдущим сценарием, я хочу иметь универсальные комбинации клавиш, на которые можно легко назначить любые из открытых окон. Например, у меня назначены 10 комбинаций от Alt+1 до Alt+0, которые не привязанные ни к каким программам. Я могу просто нажать Alt+1 и окно, которое сейчас в фокусе, будет получать фокус при нажатии Alt+1.


        Под катом описание ещё пары фич и ответ на то, как можно это сделать. Но сразу предупрежу, что подобная кастомизация «под себя» может вызвать сильную зависимость и даже ломку при необходимости использовать Windows, Mac OS или даже чужой компьютер с Linux.

        Читать дальше →
      • Ferrolic: часы на ферромагнитной жидкости



          Как известно, ферромагнитная жидкость (ferrofluid) реагирует на магнитное поле. Разработчик настольных часов Ferrolic использовал это свойство, чтобы создать потрясающе красивый эффект. Цифры на циферблате этих часов меняются словно маленькие живые существа, капли плавают с места на место.
          Читать дальше →
        • Как технологии манипулируют вашим разумом: взгляд иллюзиониста и эксперта по этике дизайна Google

          • Translation


          Примерное время прочтения: 12 минут.


          “Проще обмануть человека, чем убедить его, что он был обманут”
          Неизвестный автор

          Я разбираюсь в том как технологии используют наши психологические уязвимости. Именно поэтому последние три года я проработал экспертом по этике дизайна в Google. Я изучаю как создавать продукты так, чтобы защитить миллиард человеческих умов от манипуляций.


          Когда мы используем технологии, то чаще фокусируемся на позитивной стороне того, что они делают для нас. Но я хочу показать вам обратную сторону…

          Читать дальше →
        • Хакаем CAN шину авто. Виртуальная панель приборов



            В первой статье «Хакаем CAN шину авто для голосового управления» я подключался непосредственно к CAN шине Comfort в двери своего авто и исследовал пролетающий траффик, это позволило определить команды управления стеклоподъемниками, центральным замком и др.

            В этой статье я расскажу как собрать свою уникальную виртуальную или цифровую панель приборов и получить данные с любых датчиков в автомобилях группы VAG (Volkswagen, Audi, Seat, Skoda).

            Мною был собран новый CAN сниффер и CAN шилд для Raspberry Pi на базе модуля MCP2515 TJA1050 Niren, полученные с их помощью данные я применил в разработке цифровой панели приборов с использованием 7″ дисплея для Raspberry Pi. Помимо простого отображения информации цифровая панель реагирует на кнопки подрулевого переключателя и другие события в машине.

            В качестве фреймворка для рисования приборов отлично подошел Kivy для Python. Работает без Иксов и для вывода графики использует GL.

            1. CAN сниффер из Arduino Uno
            2. Подслушиваем запросы с помощью диагностической системы VAG-COM (VCDS)
            3. Разработка панели приборов на основе Raspberry Pi и 7″ дисплея
            4. Софт панели приборов на Python и Kivy (UI framework)
            5. Видео работы цифровой панели приборов на базе Raspberry Pi

            Под катом полная реализация проекта, будет интересно!
            Читать дальше →
          • Пунктирные вау-эффекты: о магии простыми словами



              Продолжаем смотреть технические приемы создания различных анимаций в интерфейсах. Мы уже познакомились с частицами, масками и изменением форм различных объектов — настал черед рисовать пунктирные линии.

              Перед тем, как перейти к статье, сделаю небольшое отступление. Эта серия статей предназначена для разработчиков (в первую очередь начинающих), которые хотят делать красивые вещи, но совершенно запутались в сложных инструментах. Каждый раз мы затрагиваем какой-то один прием использования того или иного инструмента и смотрим, к созданию какиих эффектов его можно применить. Комментарии о том, что “во времена флеша было лучше” или что “нужно анимации рисовать в AfterEffects” безусловно имеют право на существование, но будут вырваны из контекста и совершенно не помогут начинающим в решении их задачи.
              Читать дальше →
            • Что такое Томита-парсер, как Яндекс с его помощью понимает естественный язык, и как вы с его помощью сможете извлекать факты из текстов

                Мечта о том, чтобы машина понимала человеческий язык, завладела умами еще когда компьютеры были большими, а их производительность – маленькой. Главная проблема на пути к этому заключается в том, что грамматика и семантика естественных языков слабо поддаются формализации. Кроме того, от языков программирования их отличает присутствие многозначности.

                Конечно, мечта о полноценной коммуникации с компьютером на естественном языке пока еще далека от полноценной реализации примерно настолько же, как и мечта об искусственном интеллекте. Однако некоторые результаты есть уже сейчас: машину можно научить находить нужные объекты в тексте на естественном языке, находить между ними связи и представлять необходимые данные в формализованном виде для дальнейшей обработки. В Яндексе уже достаточно давно применяется такая технология. Например, если вам придет письмо с предложением о встрече в определенном месте и в определенное время, специальный алгоритм самостоятельно извлечет нужные данные и предложит внести ее в календарь.

                image

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

                Называется технология Томита-парсер, и по большому счету, любой желающий может воспользоваться ей уже сейчас: бинарные файлы доступны для скачивания. Однако прежде чем пользоваться технологией, нужно научиться ее правильно готовить.
                Читать дальше →
              • Yargy-парсер и библиотека Natasha. Извлечения структурированной информации из текстов на русском языке

                  В 2020 году библиотека Natasha значительно обновилась, на Хабре опубликована статья про актуальную версию. Чтобы использовать инструменты, описанные в этом тексте, установите старую версию библиотеки pip install natasha<1 yargy<0.13.

                  Раздел про Yargy-парсер актуален и сейчас.


                  Есть стандартная задача извлечения именованных сущностей из текста (NER). На входе текст, на выходе структурированные, нормализованные объекты, например, с именами, адресами, датами:



                  Задача старая и хорошо изученная, для английского языка существует масса коммерческих и открытых решений: Spacy, Stanford NER, OpenNLP, NLTK, MITIE, Google Natural Language API, ParallelDots, Aylien, Rosette, TextRazor. Для русского тоже есть хорошие решения, но они в основном закрытые: DaData, Pullenti, Abbyy Infoextractor, Dictum, Eureka, Promt, RCO, AOT, Ahunter. Из открытого мне известен только Томита-парсер и свежий Deepmipt NER.

                  Я занимаюсь анализом данных, задача обработки текстов одна из самых частых. На практике оказывается, что, например, извлечь имена из русского текста совсем непросто. Есть готовое решение в Томита-парсере, но там неудобная интеграция с Python. Недавно появилось решение от ребят из iPavlov, но там имена не приводятся к нормальной форме. Для извлечения, например, адресов («ул. 8 Марта, д.4», «Ленинский проезд, 15») открытых решений мне не известно, есть pypostal, но он чтобы парсить адреса, а не искать их в тексте. C нестандартными задачами типа извлечения ссылок на нормативные акты («ст. 11 ГК РФ», «п. 1 ст. 6 Закона № 122-ФЗ») вообще непонятно, что делать.

                  Год назад Дима Веселов начал проект Natasha. С тех пор код был значительно доработан. Natasha была использована в нескольких крупных проектах. Сейчас мы готовы рассказать о ней пользователям Хабра.
                  Natasha — это аналог Томита-парсера для Python (Yargy-парсер) плюс набор готовых правил для извлечения имён, адресов, дат, сумм денег и других сущностей.
                  В статье показано, как использовать готовые правила из Natasha и, самое главное, как добавлять свои с помощью Yargy-парсера.
                  Читать дальше →
                • Ловкость рук и никакого мошенничества: практические советы по ускоренному обучению дизайну для разработчиков

                  • Translation
                  Улучшаем дизайн проекта с помощью тактически грамотных действий, а не таланта.

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

                  Возможно, в компании, в которой вы работаете, нет штатного дизайнера, и вам необходимо реализовать интерфейс для нового функционала. Или, может быть, вы решили подработать на побочном проекте, и хотели бы, чтобы он выглядел лучше, чем «ещё один bootstrap-сайт».

                  Легко опустить руки и сказать: «Я никогда не смогу сделать это должным образом, я не художник!», Но, оказывается, есть уйма ловких приёмов, которые вы сможете использовать, чтобы поднять свою работу на другой уровень, не имея опыта в графическом дизайне.

                  Под катом семь простых идей, которые вы сможете использовать для улучшения своих проектов.

                  1. Для создания иерархии используем цвет и вес вместо размера



                  Читать дальше →
                • Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

                  • Tutorial

                  Регулярные выражения в Python от простого к сложному




                  Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
                  Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

                  Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
                  Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

                  Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
                  Читать дальше →
                • Как обучть мдль пнмть упртые скрщня

                    Недавно я натолкнулся на вопрос на Stackoverflow, как восстанавливать исходные слова из сокращений: например, из wtrbtl получать water bottle, а из bsktballbasketball. В вопросе было дополнительное усложнение: полного словаря всех возможных исходных слов нет, т.е. алгоритм должен быть в состоянии придумывать новые слова.


                    Вопрос меня заинтриговал, и я полез разбираться, какие алгоритмы и математика лежат в основе современных опечаточников (spell-checkers). Оказалось, что хороший опечаточник можно собрать из n-граммной языковой модели, модели вероятности искажений слов, и жадного алгоритма поиска по лучу (beam search). Вся конструкция вместе называется модель зашумлённого канала (noisy channel).


                    Вооружившись этими знаниями и Питоном, я за вечер создал с нуля модельку, способную, обучившись на тексте "Властелина колец" (!), распознавать сокращения вполне современных спортивных терминов.


                    Читать дальше →
                  • Git снизу вверх

                    • Translation
                    У этого перевода не совсем обычная история. Системы контроля версий далеки от моих профессиональных интересов. Для рабочих проектов они мне требовались нечасто, причем, разные, так что, каждый раз, когда возникала такая необходимость, я заново вспоминала, как в них делается та или иная операция. А для личных проектов мне хватало возможностей Dropbox, хранящей историю версий файлов.


                    Изображение из твиттера @girlie_mac

                    Но вот однажды я на три незабываемых дня попала в роддом — это иногда случается с женщинами. Из развлечений у меня были новорожденная дочь и телефон с большим экраном. Дочь поначалу развлекала плохо (дома она быстро исправилась), а на телефоне помимо книг и фильмов обнаружился текст «Git from the bottom up», который оказался более чем годным… С тех пор прошло почти 3 года, подросшей дочке уже пора самой начинать использовать Git Git стал мейнстримом, если не сказать стандартом в современной разработке, а я с удивлением обнаружила, что перевода на русский этого чуда, полезного не только начинающим, но и продвинутым пользователям Git, до сих пор нет. Исправляю эту ситуацию.
                    Читать дальше →
                  • Текстовые капчи легко распознаются нейронными сетями глубокого обучения



                    Нейронные сети глубокого обучения достигли больших успехов в распознавании образов. В тоже время текстовые капчи до сих пор используются в некоторых известных сервисах бесплатной электронной почты. Интересно смогут ли нейронные сети глубоко обучения справится с задачей распознавания текстовой капчи? Если да то как?
                    Читать дальше →
                  • Использование SVG в качестве Placeholder’a

                    • Translation
                    image

                    Генерация SVG из изображений может использоваться для Placeholder’ов.

                    Я занимаюсь оптимизацией изображений и картинок для их быстрой загрузки. Одна из самых интересных областей исследования это Placeholder’ы: что показывать, когда изображение еще не загружено.

                    В последние дни я сталкивался с некоторыми методами загрузки, которые используют SVG, и я хотел бы описать их в этом посте.

                    В этом посте мы рассмотрим следующие темы:

                    • Обзор различных типов Placeholder’ов
                    • Placeholder на основе SVG (контуры, фигуры и силуэты)
                    • Автоматизация процесса.

                    Читать дальше →
                  • OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%

                    • Tutorial


                    Много где написано о том, как получить 100% и A+ по тесту от Qualys. При всём при том практически везде директивы ssl_ciphers и подобные даются как эдакие магические строки, которые нужно просто вставить, и надеяться, что автор не подводит вас под монастырь. Эта статья призвана исправить это недоразумение. По прочтению этой статьи директива ssl_ciphers потеряет для вас всякую магию, а ECDHE и AES будут как друзья да братья.


                    Также вы узнаете почему 100% по тестам — не всегда хорошо в реальности.

                    Читать дальше →
                  • Без машины на машине: сравнительный обзор услуг каршеринга в Москве / сентябрь 2017

                      image

                      Мне нравится водить автомобиль. Но у меня нет дачи, я не занимаюсь автотуризмом, мне не нужно каждый день ездить на работу, и живу я в 400 м от станции метро. В последние годы в Москве общественный транспорт работает всё лучше; а кроме того, я и велосипед люблю, и в период с мая по сентябрь съездить на 5-10 км от дома проще на двух колёсах. Получается, что автомобиль мне не и нужен.

                      Тем более, что по моим расчётам он мне обходился примерно в 7000 р/мес, с учётом как бензина, так и периодического техобслуживания, страховки, мойки, смены резины, платных парковок и ремонтных работ (а ещё платные парковки добрались до моего дома). На такую сумму вполне можно и проездной купить, и на такси по необходимости периодически кататься.

                      Но на самом деле, какие-то маршруты по Москве на автомобиле проехать получается быстрее. Иногда нужно смотаться по делам в два-три разных места, и на метро с автобусами на это может уйти целый день. Так что я с удовольствием обнаружил, что в Москве не только появился каршеринг, но и активно развивается.
                      Читать дальше →
                    • Экзотичные заголовки HTTP

                      • Translation

                      Привет Хабрахабр! В этой статье будут наглядно продемонстрирован результат применения некоторых важных и экзотичных HTTP заголовков, большинство из которых связаны с безопасностью.
                      Читать дальше →
                    • Спорт, как хобби для здоровья, с точки зрения инженера

                      image
                      Картинка из гугла для привлечения внимания.

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

                      Disclaimer: Так сложилось, что я придерживаюсь не самых популярных в обществе взглядов на физическую активность и образ жизни. Вполне вероятно, что некоторые на этом ресурсе уже считают меня фанатиком. И хотя я действительно являюсь пропагандистом силовых тренировок, надеюсь, статья не покажется слишком однобокой или агитационной.

                      Для тех, кому лень читать: наш выбор — качалочка и плавание. Бег, игры и велик — по желанию.
                      Читать дальше →
                    • Как научить свою нейросеть генерировать стихи

                      Умоляю перестань мне сниться
                      Я люблю тебя моя невеста
                      Белый иней на твоих ресницах
                      Поцелуй на теле бессловесном

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

                      Вернее, нейронная сеть нужна лишь для первого этапа — расстановки слов в правильном порядке. С рифмовкой справляются правила, применяемые поверх предсказаний нейронной сети. Хотите узнать подробнее, как мы это реализовывали? Тогда добро пожаловать под кат.
                      Читать дальше →
                    • HTTP/2 Server Push не так прост, как я думал

                      • Translation


                      Фото найдено на просторах Википедии


                      Привет! Меня зовут Макс Матюхин, я работаю PHP-программистом в Badoo. Мы постоянно изучаем различные возможности по ускорению работы нашего приложения и самыми интересными находками, конечно, делимся в нашем блоге на Хабре.


                      Вторая версия протокола HTTP обещает нам много улучшений, и одной из любопытных особенностей HTTP/2 является поддержка push. Теоретически эта возможность позволяет ускорить загрузку приложения. Недавно Jake Archibald написал большую статью, в которой проанализировал особенности реализации push в различных браузерах, и оказалось, что таких особенностей довольно много.


                      Мы уже публиковали пост, описывающий базовый функционал HTTP/2 Server Push, а этот будет хорошим дополнением, рассказывающим, как в реальности обстоят дела с поддержкой HTTP/2 Server Push в различных браузерах.

                      Читать дальше →