• VueJs + MVC минимум кода максимум функциональности

    Добрый день.


    Я много лет использовал WPF. Паттерн MVVM наверное один из наиболее удобных архитектурных паттернов. Я предполагал что MVC почти то же самое. Когда я на новом месте работы я увидел использование MVC на практике, то был удивлен запутанностью и одновременно отсутствием элементарной Юзабилити. Больше всего раздражает то, что валидация происходит только при перегрузке формы. Нет красных рамок подсвечивающих поле в котором ошибка, а просто выводится alert со списком ошибок. Если ошибок много, то приходится исправлять часть ошибок и жать сохранить, что бы повторить валидацию. Кнопка сохранить всегда активна. Связанные списки правда реализованы через js, но сложно и запутанно. Модель, представление и контроллер сильно связаны поэтому протестировать все это великолепие весьма сложно.
    Как с этим бороться ?? Кому интересно прошу под кат.

    Читать дальше →
  • Аудио через Bluetooth: максимально подробно о профилях, кодеках и устройствах

      Комикс XKCD про 14 конкурирующих стандартов: Надпись: СИТУАЦИЯ: есть 14 конкурирующих стандартов. Гик: 14?! Абсурд! Нам необходимо разработать один универсальный стандарт, на все случаи жизни. Спутница гика: Да! Надпись: Скоро: СИТУАЦИЯ: Есть 15 конкурирующих стандартов.

      This article is also available in English

      Из-за массового выпуска смартфонов без аудиоразъема 3.5 мм беспроводные Bluetooth-наушники для многих стали основным способом прослушивания музыки и общения в режиме гарнитуры.
      Производители беспроводных устройств не всегда пишут подробные характеристики товара, а статьи о Bluetooth-аудио в интернете противоречивы, местами некорректны, не рассказывают о всех особенностях, и часто копируют одну и ту же не соответствующую действительности информацию.
      Попробуем разобраться с протоколом, возможностями Bluetooth-стеков ОС, наушников и колонок, Bluetooth-кодеков для музыки и речи, выясним, что влияет на качество передаваемого звука и задержку, научимся собирать и декодировать информацию о поддерживаемых кодеках и других возможностях устройств.

      TL;DR:
      • SBC — нормальный кодек
      • У наушников есть свой эквалайзер и пост-процессинг на каждый кодек отдельно
      • aptX не настолько хорош, как о нём говорят рекламные анонсы
      • LDAC — маркетинговое фуфло
      • Качество звука в режиме разговора всё ещё низкое
      • В браузер можно встроить аудиоэнкодеры на C, скомпилировав в WebAssembly через emscripten, и они не будут особо тормозить.

      Читать дальше →
    • Bluetooth LE не так уж и страшен, или Как улучшить пользовательский опыт без особых усилий

        Недавно мы в команде придумали и реализовали функцию передачи денег по воздуху с помощью технологии Bluetooth LE. Я хочу рассказать вам, как мы это сделали и что Apple предоставляет нам из инструментов. Многие разработчики думают что Bluetooth — это сложно, ведь это достаточно низкоуровневый протокол, и по нему не так много специалистов. Но всё не так страшно, и на самом деле использовать эту функцию очень просто! А те функции, которые можно реализовать с помощью Bluetooth LE, безусловно, интересны и впоследствии позволят выделить ваше приложение среди конкурентов.


        Читать дальше →
      • Пять лет рабства

          Задумывались ли вы когда-нибудь о собственной игре? А о собственной многопользовательской игре? Думаю, что да! Многие из вас хотели бы прильнуть к разработке собственного шедевра, где сливаются ваша многогранная фантазия и исключительный перфекционизм. Я вас понимаю и хочу рассказать свою историю этого увлекательного пути.


          Читать дальше →
        • Как размеры массивов C стали частью двоичного интерфейса библиотеки

          • Translation
          Большинство компиляторов C позволяют получить доступ к массиву extern с неопределёнными границами, например:

          extern int external_array[];
          
          int
          array_get (long int index)
          {
            return external_array[index];
          }

          Определение external_array может находиться в другой единице трансляции и выглядеть так:

          int external_array[3] = { 1, 2, 3 };

          Вопрос в том, что произойдет, если это отдельное определение изменится так:

          int external_array[4] = { 1, 2, 3, 4 };

          Или так:

          int external_array[2] = { 1, 2 };
          Читать дальше →
        • Как создать игру, если ты ни разу не художник


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

          И не надо…
          Читать дальше →
        • Курс пиксель-арта 5

            Это перевод публикации «Les Forges Pixel Art Course».

            Часть 1: Правильные инструменты
            Часть 2: Линии и кривые
            Часть 3: Перспективы
            Часть 4: Тень и свет
            Часть 5: Палитры цветов
            Часть 6: Сглаживание
            Часть 7: Текстуры и размытие
            Часть 8: Мир тайлов

            Часть 5: Цветовые палитры


            1. Когда и почему выбирать палитру?

            Хороший вопрос, почему в конце концов я начал об этом? Просто потому что палитра — это 50% качества вашей работы. На всём протяжении игры важно иметь последовательные палитры, потому что они существенно способствуют общей атмосфере. В общем, что составляет разницу между хорошей и неудачной графикой, это в значительной степени палитра. «Хорошо, это важно иметь хороший выбор, я сделаю это в конце». А-та-та, конечно нет! Палитра работает от начала до конца, когда вы рисуете пиксель-арт. Для меня это первое и последнее что я делаю: я начинаю с создания стартовой палитры в углу моего изображения, затем я подстраиваю её по мере продвижения, затем, как закончу, я трачу время на улучшение её. Улучшения в основном обусловлены «чутьём», то что вы изучите здесь, может быть поставлено под сомнение: это просто стартовая точка.
            Читать дальше →
          • «Галоп пикселя — часть пятая» — Анимация персонажей. Ходьба

            • Tutorial


            «Галоп пикселя», часть I — базовые понятия, этапы взросления, прикладные упражнения (линк)
            «Галоп пикселя», часть II — перспектива, цвет, анатомия и прикладные упражнения (линк)
            «Галоп пикселя», часть III — Анимация (линк)
            «Галоп пикселя», часть IV — Анимация света и тени (линк)
            «Галоп пикселя», часть V — Анимация персонажей. Ходьба (линк)

            Доброго времени суток, Хабр. Мы продолжаем цикл «Галоп Пикселя». Сейчас, находясь на старте 2019 года, можно с уверенностью говорить, что это не только цикл статей, но и многолетняя сага. Пространное повествование о пикселях, их жизни, способе их создания, приёмах и уловках в работе с ними. Мы не будем рассуждать о причинах первоначального «спринта», который затем превратился в многолетний марафон, ибо нет ничего более жизненного, чем сама жизнь. Кому нужны причины отсутствия или пауз, если можно просто вернуться к тому, что мы делали, в чём варились, и в чём, даст бог — будем наблюдаться и далее. В пикселях, конечно же!

            Сегодняшняя публикация станет очередной, и возможно даже поворотной вехой в нашем повествовании. Наконец-то мы подошли к созданию полноценной анимации персонажей. Двумя предыдущими главами мы охватили анимацию света и тени, а также анимацию неподвижных персонажей (idle-animation) без ярко выраженных действий. Но сегодня наши персонажи пойдут, а в следующей части даже побегут, завоевав то, что уже давно их по праву рождения. Ещё один плодородный регион. И пройдут ещё одну точку, которая ознаменует окончание базового цикла. Наши пиксели наконец-то станут живыми.

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


            Лопатить пиксели
          • Тестирование, основанное на рисках

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

              В статье расскажем, как мы в компании SimbirSoft работали с рисками (на примере системы интернет-эквайринга и других проектов) и какие методики оценки и управления рисками мы используем в проектах заказчиков.
              Читать дальше →
            • Наша с девушкой первая видеоигра. Разработка на Unity. Часть 1

              Ну как первая… Если не считать релизы только под Android и с десяток заброшенных проектов у финиша, то да, это первая наша игра с замахом больше чем на одну платформу. Как же всё начиналось? А всё просто, работали мы значит над другим проектом, назовем его «проект А», работали уже долгое время и решили, а не сделать ли нам за пару месяцев игру и потренировать на ней наши маркетинговые навыки, а «проект А» выпустим сразу после с большим опытом в продвижении игр. Но звезды не сошлись, петух не свистнул и «проект А» залег на дно ровно на год. Но эта история не о нем, а о логической игре под названием «Cubicity: Slide puzzle».


              Читать дальше →
            • Тернистый путь Hello World

              Вдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].


              Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.


              Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.


              Исходным текстом будет обычный Hello, world (hello.cpp):


              #include <iostream>
              int main()
              {
                      std::cout << "Hello, world!" << std::endl;
              }
              Читать дальше →
              • +74
              • 24.9k
              • 4
            • Как организовать работу QA. Один практически примененный способ

              Предыстория


              Недавно одна моя знакомая QA Engineer, которая долгое время работала в вялотекущем проекте, где круг ее обязанностей был строго очерчен, сменила работу и устроилась в свежезапущенный проект. Просидев пару дней без обозначенных сверху заданий, и откровенно заскучав, она пошла к руководству с вопросом «Что мне делать?» на что получила многозначительный ответ «Организуй свою работу». И тут она впала в ступор «А это как?». И правда, как?
              Читать дальше →
              • +26
              • 13.1k
              • 6
            • Ещё один манифест

              Эджайл то, эджайл сё. Про эджайл сейчас не говорит только ленивый. Да и ленивый говорит. Все говорят. Из каждого утюга, даже выключенного из сети, топят за эджайл. Такое ощущение, что просто эпидемия какая-то разразилась. И не подумайте, что я только про ИТ. Коучи учат неофитов проводить стендапы с ретроспективами и жить по спринтам в любых бизнес-сферах: от булочных до парикмахерских. А некоторые менеджеры, наслушавшись коучей, так увлекаются, что забывают о природе данного явления, заставляя внедрять гибкие методологии негибкими методами: «Так, с завтрашнего дня мы все становимся гибкими. Что за «хихи»? Гибкими я сказал, а то всех нагну!». Так в чем же природа эджайл, на чем он зиждется?
              Читать дальше →
            • Иди-ка ты на !@# со своей «токсичностью»

                IT — не детский садик. Это место для взрослых, руководствующихся логикой и здравым смыслом. Их не надо опекать, не надо следить за словами, не надо переживать, что у них сформируются комплексы. Если человек некомпетентен, надо дать ему об этом явно понять, а не беречь его нежные чувства в ущерб всем остальным.

                Так какого же чёрта моё прекрасное IT превращается в детский сад «Весёлый Програм-Мишка»?
                Читать дальше →
              • Эволюция переключения контекста x86 в Linux

                • Translation


                В прошлые выходные, изучая интересные факты об аппаратном переключателе контекста 80386, я вдруг вспомнил, что первые версии ядра Linux полагались именно на него. И я погрузился в код, который не видел уже много лет. Сейчас я решил описать это чудесное путешествие по истории Linux. Я покажу все самородки и забавные артефакты, которые нашёл по пути.

                Задача: проследить, как изменялось переключение контекста в ядре Linux от первой (0.01) до последней версии LTS (4.14.67), с особым акцентом на первую и последнюю версии.
                Читать дальше →
                • +72
                • 17.7k
                • 9
              • Реализация горячей перезагрузки С++ кода в Linux

                image


                * Ссылка на библиотеку в конце статьи. В самой статье изложены механизмы, реализованные в библиотеке, со средней детализацией. Реализация для macOS еще не закончена, но она мало чем отличается от реализации для Linux. Здесь в основном рассматривается реализация для Linux.


                Гуляя по гитхабу одним субботним днем, я наткнулся на библиотеку, реализующую обновление c++ кода налету для windows. Сам я слез с windows несколько лет назад, ни капли не пожалел, и сейчас все программирование происходит либо на Linux (дома), либо на macOS (на работе). Немного погуглив, я обнаружил, что подход из библиотеки выше достаточно популярен, и msvc использует ту же технику для функции "Edit and continue" в Visual Studio. Проблема лишь в том, что я не нашел ни одной реализации под не-windows (плохо искал?). На вопрос автору библиотеки выше, будет ли он делать порт под другие платформы, ответ был отрицательный.


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


                "Как так?" — подумал я, и принялся раскуривать фимиам.

                Читать дальше →
              • Йода из Кремниевой долины

                • Translation

                Дональд Кнут, мастер алгоритмов, размышляет над 50 годами работы над своим главным творением, книгой «Искусство программирования», которую не прекращает дополнять



                Дональд Кнут в своём доме в Стэнфорде, Калифорния. Жуткий перфекционист, назначил награду за нахождение ошибки в своих книгах.

                Уже полвека стэнфордский специалист по информатике Дональд Кнут, немного напоминающий Йоду – хотя ростом он 193 см и носит очки – занимает доминирующее положение духовного учителя в области алгоритмов.
                Читать дальше →
              • Мировая ядерная энергетика в 2018 году

                  Обзор основных изменений, произошедших с ядерной энергетикой за прошедший год.

                  В 2018 году атомная энергетика отыгрывалась за провалы вводов 2017 года — было подключено к сети 10400 мегаватт новых мощностей (против 3305 мегаватт в 2017), и при этом закрыто 2827 мегаватт старых, таким образом общая мощность АЭС выросла на 7,57 ГВт с 392.6 ГВт до 400,2 (400 гигаватт номинальной мощности ядерной энергетики достигнуто впервые, 400 get так сказать). За 4 последних года, в итоге, изменения мощности выглядят так: 2015 год +7,9 ГВт, 2016 год +9,2 ГВт, 2017 год +1,075, 2018 +7,6 — в среднем ~6,4 ГВт прироста в год. Ядерный ренессанс второй половины 2000х уже закончился, а его плоды мы пожинаем сегодня.

                  В отличии от меня, база PRIS считает момент рождения новых блоков слегка невнятно — где-то это первое подключение к сети, а где-то «начало коммерческой эксплуатации», т.е. окончания всяческих испытаний на мощности, которые в среднем занимают примерно полгода после первой критики реактора (по которой обычно считаю новые блоки я). Отсюда будет некое расхождение с предыдущей годовой статистикой, и может быть конфликты с другими статистиками по датам подключения.

                  Всего в строй встало 9 новых энергоблоков, было окончательно остановлено 3 старых, начато строительство 5 новых (причем 3 из них — Росатомом). Все пущенные блоки относились к технологии PWR/ВВЭР, т.е. двухконтурных реакторов с водой под давлением. Давайте посмотрим на них ближе.

                  Новые блоки


                  1. Итак, первым в 2018 году в новую коммерческую эксплуатацию вошел пущенный еще в 2017 году 4 блок Ростовской АЭС, классический ВВЭР-1000.

                  image
                  Читать дальше →
                • Пролог точки Кельвина

                    Позвольте представиться. Меня зовут Роберт, мне 34 года, и я – ниочем. Да, я знаю, что правильно писать «ни о чем», но очень хочется превратить это слово в существительное.

                    Я – ниочем, жизнь моя – ниочем, семья моя – ниочем, работа – ниочем, страна – ниочем. И будущее мое – ниочем.

                    Хотя, наверное, неправильно называть оставшийся мне отрезок ниочемной жизни красивым словом «будущее». Это не будущее, это просто отрезок на координатной оси. Тридцать четыре отметки на шкале уже пройдено, осталось… Не знаю, сколько. А какая разница?
                    Читать дальше →