Невозможно ошибиться, если на вопрос о самых сложных программах - упомянуть прошивки FADEC и автопилот Бурана. Что между ними общего? Это ultra-reliable код, исполняемый в RTOS-условиях - то есть буквально апогей программирования с выверенным каждым тактом и несколькими уровнями отказоустойчивости программ. Тем удивительнее, что все программы такого уровня разрабатываются только по Low-Code методикам - и началось это задолго до текущего хайпа.
Пользователь,IT-Студент,
Как фронтендеры приручили микросервисы и перестали беспокоить бэкендеров
Привет Хабр! Меня зовут Евгений Лабутин, я фронтенд-разработчик в МТС Digital. Расскажу вам о том, как мы приручили микросервисы на нашем проекте МТС Твой бизнес, зачем они нам вообще понадобились и какую выгоду мы от этого получили. Интересно? Добро пожаловать под кат!
Парадокс Rimworld: захватывающая сюжетом «песочница»
Чью сказку вы хотите послушать?
Rimworld – симулятор строительства и выживания колонии на не очень дружелюбной планете. Вы строите базу, и время от времени происходят случайные события – то нападут космические пираты, то вспышка звезды выведет из строя все электроприборы, то аккумулятор взорвётся и ваша гидропонная ферма сгорит.
Ключевая фишка игрового процесса — AI-рассказчик подбирает наиболее интересное «случайное» событие, которое прямо здесь и сейчас окажет наиболее драматический эффект. Хороший или плохой – но эмоционально-сильный.
Но про то, как это работает, чуть позже. Сразу главное – влюбиться в эту игру можно за потрясающий сюжет. Который «размазан» по миру. Сюжет, которого, в принципе, нет.
Итак, начало первой игры: ваш корабль взрывается. Вы едва успеваете добежать до капсул и приземляетесь на поверхности. 30 аварийных рационов питания, стальные обломки, оружие. Рядом – руины каких-то древних зданий.
Обзор книги «Начинаем программировать на Python», лучшая книга для начинающих с нуля
Всем доброго времени суток!
Публикую обзор книги "Начинаем программировать на Python" от автора Тони Гэддиса.
Стоит читать? Да! Почему? Максимально подробно опишу в статье.
Кто целевая аудитория книги?
Книга отлично подойдет для тех, кто только начал изучать Python с полного нуля, так как каждая тема рассматривается автором крайне подробно, что просто не оставляет шансов на то, что после прочтения у вас останутся какие-либо вопросы по рассмотренным в книге темам.
Также книга подойдет тем, кто уже до полугода пишет на Python, но всё же имеет пробелы в фундаментальных вещах и эта книга отлично их закроет своим подробным разбором синтаксиса Python.
Как настроить и запустить систему отслеживания измененных данных PostgreSQL
PostgreSQL предлагает метод логического декодирования и делает возможным сбор данных об изменениях на основе логирования. Вы сможете настроить и запустить CDC в несколько шагов.
Архитектура современных веб-приложений состоит из нескольких программных компонентов, таких как информационные панели (дашборды), аналитические системы, базы данных, озёра данных (Data Lakes), кэшевые хранилища, функции поиска и т.д.
База данных обычно является основной частью любого приложения. Обновление данных в режиме реального времени позволяет поддерживать разрозненные системы данных в непрерывной синхронизации и быстро реагировать на появление новой информации. Как же поддерживать экосистему приложений в синхронном состоянии? Как эти компоненты получают информацию об изменениях в базе данных? Термин отслеживание изменённых данных, или сокращённо CDC, — относится к любому решению, которое идентифицирует новые или изменённые данные.
Статья посвящена отслеживанию изменённых данных (CDC) в PostgreSQL и способам достижения этой цели.
Отслеживание изменённых данных (CDC) — это метод интеграции данных для обнаружения, захвата и передачи изменений, внесённых в источники данных базы данных.Как правило, интеграция данных на основе CDC состоит из следующих шагов:
- Захват изменённых данных в исходной базе данных.
- Преобразование изменённых данных в формат, который могут принять ваши потребители (консьюмеры).
- Публикация данных для консьюмеров или целевой базы данных.
PostgreSQL предлагает два встроенных способа сделать CDC возможным:
- Из журналов транзакций, PostgreSQL WALs (они же Write Ahead Logs).
- С помощью триггеров базы данных.
Давайте кратко обсудим плюсы и минусы использования журналов транзакций (WALs) и триггеров для отслеживания изменения данных.
Пусть программирует Серёжа
У каждого клиента – свои предпочтения. Не только в выборе автомобиля, блюда на обед или корпоративной информационной системы. Клиенты любят выбирать программистов.
Ну, что программисты разные – ежу понятно. Считается, что клиенты предпочитают профессионалов. Мы тоже так думали, и искренне стремились сделать каждого своего программиста этим самым профессионалом.
Однако, несколько клиентов, ставя нам задачи, упорно твердили: пусть программирует Серёжа. Хотя Серёжа – лютейший говнокодер, объект всеобщей жалости и главный поставщик материалов для конференций на тему «Как не надо программировать».
Лазеры в электронике: деметаллизация покрытий
Мы продолжаем рассказывать про применение лазеров в электронике.
В прошлой статье мы говорили про резку сырой и спеченной керамики, а в этой расскажем про деметаллизацию покрытий.
Обзор российской Help Desk системы vsDesk
Всем доброго времени суток!
Хочу поделиться с сообществом небольшим обзором HelpDesk системы, которую мы в своей компании выбрали в качестве боевой! Система выросла из Opensource-проекта, стартовавшего в конце 2012 года и доросшая до релиза в январе 2014 года. Может быть установлена, как на собственные сервера, так и на shared хостинг. Кстати, нашли мы этот проект здесь, на хабре. Итак, наш сегодняшний пациент vsDesk.
Важная причина поражения СССР в цивилизационной гонке с Западом
Когда-то, я написал статью, которая, на мой взгляд, только увеличила актуальность сегодня в свете произошедших тектонических сдвигов во внешней политики и попыток ответа на эти вызовы во внутренней политике России: Ещё одна причина поражения СССР в цивилизационной гонке с Западом (часть 1 и 2). - ЭконоИнженерика — ЖЖ (livejournal.com)
Понятно, что тема поиска причин краха СССР в его соревновании с Западом неисчерпаема.Одной из популярных теорий тут является теория, основанная на сравнении размера экономик, контролируемых советским и западными блоками. Сравнивая эти экономики адепты такой теории приходят к выводу о том, что размер рынка на контролируемой СССР территории был в разы меньше, а, следовательно конкурентоспособность производства потребительских товаров была в разы ниже (так как известна зависимость себестоимости производства от его масштабов).В качестве критики такой теории можно привести несколько аргументов:Во-первых, не всегда под крылом СССР был много меньший, чем у Запада, рынок. Были годы, когда СССР был дружен с коммунистическим Китаем, и тогда общий рынок стран социалистического лагеря был соизмерим с рынком стран Западного блока.Во-вторых, не все товары имеют линейную динамику себестоимости от объемов производства. Так сложные продукты, типа автомобилей, вполне способны иметь конкурентную себестоимость при объёмах производства намного ниже, чем размеры рынка в странах бывшего советского блока. Но мы все видели, какое качество автомобилей могла предложить советская промышленность ;-) При том, что как раз стоимость советских автомобилей была очень небольшой.
Core Web Vitals: с чего начать?
Согласно web.dev, улучшение качества взаимодействия с пользователем — ключ к долгосрочному успеху любого сайта. Понимая, насколько важен для развития интернета качественный пользовательский опыт, компания Google в 2020 году представила инициативу Web Vitals. Это единое руководство по метрикам качества, которые необходимы для обеспечения удобного взаимодействия с пользователем. Хотя за прошедшие годы Google создала ряд инструментов для измерения эффективности взаимодействия и составления отчетов (Lighthouse, PageSpeed Insights и Measure), Web Vitals должна упростить измерение производительности и помогает разработчикам сайтов сосредоточиться на самых важных показателях — Core Web Vitals.
Киев-Стокгольм-Харьков-Ивано-Франковск — моя история
Всем привет! Знаю, что темы про обратную эмиграцию вызывают интерес. Расскажу свою историю как есть - честно и без украшений.
Меня зовут Максим и я вернулся обратно в Украину после 1.5 лет жизни в Стокгольме.
Почему и зачем, спросите вы - возвращаться из развитой страны первого мира? Затем, что только в Украине мы с женой почувствовали спокойствие в душе. Осознание, что ты дома, вокруг родные люди, язык, менталитет - дорогого стоит. Нам это стоило жизни и возможного будущего в стране из топ-5 мировых рейтингов.
Все началось в 2015 году с знакомства с моей женой. Она уже тогда была влюблена в скандинавский образ жизни. На протяжении следующих 3 лет мы объездили туристами всю Скандинавию, побывав даже в Исландии. Жена была счастлива, постоянно говорила о том, как ей хочется жить в Швеции или Дании, как она прониклась скандинавским духом и как сильно ей понравились скандинавы как люди. По ее тогдашним словам - немцы скучны, голландцы жадны, французы подозрительны а южане слишком веселые и безалаберные. Только скандинавы - образцовые люди, среди которых хочется жить. Все в нашей квартире напоминало о Скандинавии - начиная от книги "Хюгге" на ее рабочем столе и заканчивая мебелью из Икеи и надписью Välkommen на коврике. Она даже начала учить шведский и посещала разговорный клуб.
Как я стал программистом в 35 и стоит ли оно того?
Привет, Хабр!
Прежде всего хотел бы предупредить, что это нисколько не мотивационный пост в стиле «история моего успеха» или «как удачно я вкатился в программирование».
Для чего я решил написать этот пост? Отчасти поделиться опытом, советами, отчасти меня сподвигла на это статья «Как я не стал программистом в 35 лет», я тоже решил написать свой пост на схожую тему, но в то время у меня не были выполнены два условия: 1. Мне не было 35; 2. Я только устроился на свою первую работу разработчиком, но я считал что не могу называться программистом если не отработал в этой должности хотя бы 1 год. Сейчас все условия соблюдены, если вам интересно прошу под кат.
Сторителлинг в играх — работа не только для сценариста
Работая сценаристом игр, вы будете писать сценарии, диалоги, внутриигровой текст и, возможно даже, трейлер. Будет место за столом во время препродакшна, и много коммуникаций с геймдизайнерами. Главное — вы не будете рассказывать историю в одиночку.
Руководство по сжатию скелетных анимаций
Эта статья будет кратким обзором методики реализации простой схемы сжатия анимаций и некоторых связанных с ней концепций. Я ни в коем случае не являюсь специалистом в этом вопросе, но по этой теме есть очень мало информации, и она довольно фрагментарна. Если вы хотите прочитать более глубокие статьи по этой тематике, то рекомендую пройти по следующим ссылкам:
- https://nfrechette.github.io/2016/10/21/anim_compression_toc/
- https://technology.riotgames.com/news/compressing-skeletal-animation-data
- http://bitsquid.blogspot.com/2009/11/bitsquid-low-level-animation-system.html
- http://bitsquid.blogspot.com/2011/10/low-level-animation-part-2.html
Прежде чем мы начнём, стоит представить краткое введение в скелетную анимацию и некоторые её базовые понятия.
Основы анимации и сжатия
Скелетная анимация — довольно простая тема, если забыть о скиннинге. У нас есть концепция скелета, содержащего преобразования костей персонажа. Эти преобразования костей хранятся в иерархическом формате; по сути, они хранятся как дельта между своей глобальной позицией и позицией родителя. Терминология здесь сбивает с толку, потому что в игровом движке локальным часто называют пространство модели/персонажа, а глобальным — мировое пространство. В терминологии анимации локальным называется пространство родителя кости, а глобальным — или пространство персонажа, или мировое пространство, в зависимости от того, есть ли движение корневой кости; но давайте не будем об этом особо беспокоиться. Важно то, что преобразования костей хранятся локально относительно их родителей. Это имеет множество преимуществ, и особенно при смешении (блендинге): если бы при смешении двух поз кости были глобальными, то они бы линейно интерполировались в позиции, что приводило бы к увеличению и уменьшению костей и деформации персонажа.
Валидация ассетов в Unity3D
Начнём с того, что я обожаю сериализацию в Unity. Она надёжна и очень проста в использовании. Я просто расширяю MonoBehaviour, ScriptableObject и подобные классы и настраиваю сериализуемые поля экземпляров в инспекторе.
Но у неё есть и слабости. Одна из них ― человеческий фактор. Представьте себе огромный проект, который живёт несколько лет и над которым работает около сотни человек. И любой из них может совершить ошибку: оставить пустую ссылку на объект, указать число вне диапазона, ввести строку в неверном формате, заполнить массив слишком маленьким или, наоборот, слишком большим количеством объектов. Уверен, у каждого из вас найдутся такие примеры из своего опыта. Причин и оправданий тоже множество: невнимательность, неожиданные последствия слияния веток, сбои редактора… И никто от этого не застрахован.
Такие ошибки до поры до времени остаются незаметными: компилятору до них нет дела, в отличие от опечаток в коде. Особенно неприятны они тем, что проявляются часто уже во время выполнения кода. Только тогда вы начинаете читать журнал сообщений и идёте проверять данные: тыкать их в редакторе или листать YAML. Но объектов может быть достаточно много, есть риск что-то пропустить или попросту залениться.
Конечно, можно добавить проверок в коде, но от этого он загрязнится. Иногда эти проверки негативно влияют на производительность. А ещё не всегда однозначно понятно, как именно обработать каждую конкретную ошибку.
Универсального или даже штатного метода бороться с подобным в Unity нет. Поэтому мы в Pixonic реализовали свою систему валидации ассетов. И это очень помогает нам жить.
Сейчас я опишу, как там всё устроено.
О работе ПК на примере Windows 10 и клавиатуры ч.2
Проблема высшего программистского образования в том что студенты весьма подробно изучают отдельные аспекты вырванные из контекста не понимая как это всё увязывается вместе. Несколько семестров высшей математики, чтобы понимать физику, чтобы понимать электротехнику, электроприборы, ассемблер, ОС, алгоритмы, системное программирование и куча других предметов утрамбованных в стандартную пятилетнюю программу. Обилие деталей и никто не объясняет как это вписывается в общую картину, предполагается что через 5 лет студент сам увяжет это в голове, а потом пойдёт работать с .Net и никогда не притронется к электронике и режиму ядра. Я считаю, что не нужно так подробно знать о работе компьютера, достаточно общего понимания что происходит ниже по технологическому стеку. Если бы люди составляющие программы обучения для ВУЗов открывали автошколы, вы бы учили русский язык, каллиграфию и гидродинамику, потому как надо общаться с инспекторами, менять жидкости и писать объяснительные. В статье будут некоторые неточности, так что для сдачи экзамена по профильным предметам она не подойдёт, но после неё будет легче понять устройство ПК.
Под катом трафик.
Функторы, аппликативные функторы и монады в картинках
И мы знаем, как к нему можно применить функцию:
Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:
Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных
Maybe
определяет два связанных контекста:data Maybe a = Nothing | Just a
Позже мы увидим разницу в поведении функции для
Just a
против Nothing
. Но сначала поговорим о функторах!Монады как паттерн переиспользования кода
В предыдущей статье мы обсуждали, почему функциональное программирование это совсем не то, что распиарено, и что оно совершенно не противоречит ООП, так, что даже сам "Дядя Боб" пишет про хороший ФП дизайн порождающий хороший ООП дизайн программы (и наоборот).
Сейчас же я хочу рассказать, что такое монады на самом деле, чем они полезны для обычного практикующего разработчика, и приведу примеры, почему недостаточная поддержка их в распространенных языках приводит к копипасте и ненадежным решениям.
Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?
Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.
Получается, что первые обычно полезны тем, кто и так знает обсуждаемую тему, а вторые даже не знаю на кого рассчитаны: сколько я их не прочитал, ничего полезного понять из них мне не удалось.
Я же хотел бы занять промежуточную позицию, и рассказать про монады без заумных терминов, но и без котиков, используя понятные ООП разработчикам термины: интерфейсы, паттерны, копипаста, инкапсуляция сложности, бойлерплейт, и так далее. В процессе работы над статьёй ни один термин теории категории использован не был.
Так ли страшен Rust, как его малюют
Некоторое время назад я начал понимать необходимость разнообразить мой опыт программирования исключительно на C#. После некоторого изучения различных вариантов, таких как Haskell, Scala, Rust и некоторых других, выбор пал на последний. Со временем я начал обращать внимание, что Rust всё больше и больше рекламируется исключительно как "системный язык", который нужен для вырвиглазно сложных компиляторов и супер-нагруженных систем, с особыми требованиями к безопасности и многопоточности, а для вариантов попроще есть Go/Python/Java/..., в то время как я с удовольствием и весьма успешно использовал его как замену моей рабочей лошадке C#.
В этой статье я хотел рассказать, почему я считаю этот тренд в целом вредным, и почему Rust является хорошим языком общего назначения, на котором можно делать любые проекты, начиная со всяких микросервисов, и заканчивая скриптованием ежедневной рутины.
Как я создал более 100 приложений с открытым кодом, используя инструменты автоматизации
Привет, кодеры!
Я — разработчик-фрилансер, и я сгенерировал более 100 приложений на различных языках и платформах, используя инструменты автоматизации, парсинг HTML и бойлерплейт-код.
Все мои приложения, как платные, так и бесплатные, находятся в открытом хранилище GitHub. О некоторых из них я расскажу в этой статье.
#1 Сгенерированные JAMstack-приложения
Всего я создал более 40 таких приложений. Дизайн для них разрабатывали известные веб-агентства.
Information
- Rating
- Does not participate
- Location
- Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
- Date of birth
- Registered
- Activity