User
Создаем свой собственный язык программирования с использованием LLVM. Часть 2: Семантический анализ
В предыдущей статье мы закончили на том, что мы написали лексический и синтаксический анализаторы для нашего учебного языка. В данной статье мы продолжим начатое и рассмотрим следующую стадию анализа исходного кода программы — семантический анализ.
Пять сериалов про стартапы и технологии, которые стоит посмотреть
Признайтесь, что каждому иногда хочется провести выходные за ничегонеделанием. Особенно это желание увеличивается под конец года. Да и зимой лениться хочется чуть больше обычного. Ну а чтобы это делать было ещё приятнее, мы решили собрать для читателей блога ЛАНИТ подборку новых сериалов, посвящённых технологическим стартапам и компаниям.
FPV полеты — это не только квадрокоптеры
Я нечаянно вляпался в одно интересное старое гик-хобби — авиамоделизм, и, оказалось, на Хабре оно не освещено. А ведь полеты, особенно от первого лица, — это легко и весело, и возня с микроконтроллерами и паяльником, ПИД-регулирование, автопилот. И ощущение полета опять же.
Судя по скорости развития технологий в сфере любительского авиастроения, до применения компьютерного зрения, например, здесь дойдет нескоро, так что хорошо бы завлечь в хобби побольше людей.
Интерес к квадрокоптерам я испытывал всегда, но никак не мог понять зачем он мне нужен. Пока случайно не увидел планер, и тут все стало на свои места! Оказывается, я хотел летать именно на планере, иметь возможность выключить двигатель, настроить закрылки и парить, а все это бесконечное в-ж-ж-ж-ж — скука.
Kincony KC868-AI: 48 цифровых входов + ESP32, ETH, RS232, RS485 и приёмники IR и 433 МГц
Пока мы с вами занимались контроллерами AlertBox (1, 2), подключали Wiren Board блоки на DIN-рейку и пытались полечиться при помощи ТГС-7А, компания Kincony тоже не теряла времени даром и выпустила ещё несколько контроллеров в своём неподражаемом форм-факторе «а-ля скейтборд, только колёсики приделать нужно».
На этот раз она нас порадовала концептуальным решением KC868-AI по организации сбора данных со множества (48 шт.) цифровых входов, плюс на плату добавлены приёмники инфракрасных сигналов (IR) и сигналов от радиомодулей на 433 МГц. Получилось что-то вроде универсального (Wi-Fi, Ethernet) умного (ESP32) гейта для сбора информации с какого-то объекта и передачи её для дальнейшей обработки в общую систему.
Ну а наличие интерфейсов RS485 и I2C и разъёма с 4-я свободными GPIO позволяет подключить к KC868-AI дополнительное оборудование, например, блок реле и сделать этот контроллер полноценным управляющим элементом вашей системы автоматизации.
Далее мы попробуем поподробнее разобраться с устройством KC868-AI и даже немного попрограммировать его в своё удовольствие.
Термошкаф с «начинкой» — собрать самому или приобрести в готовом виде?
Суть вопроса – есть некий термошкаф (или просто шкаф без обогрева), в котором надо разместить конкретное оборудование в соответствии с задачей всего данного комплекса.
Какие-то сигналы по каким-то кабелям должны в этот шкаф прийти и, пройдя через установленное в шкафу оборудование, претерпев необходимые преобразования, выйти по другим кабелям в определённом виде.
Весь перечень необходимого оборудования известен, схема межблочного монтажа тоже. Как разумнее поступить?
Взять порознь весь набор оборудования, включая термошкаф, или же приобрести весь комплекс, как готовый модуль системы с известными заранее характеристиками? Подобные вопросы постоянно приходится решать любой проектно-монтажной организации, занимающейся построением хоть сколько-нибудь серьезных систем.
Цель настоящей статьи - расширить рамки представлений заказчика, чтобы решение не оказалось импульсивным, а имело под собой продуманную платформу.
А посему, не будет в качестве вывода никакого однозначного решения. Да его и не может быть, если брать во внимание все необходимые аргументы, а не только те, на базе которых построены маркетинговые формулы выбора.
Outer Join в LINQ
LINQ — как много было придумано в C# лишь для того чтобы мы могли наслаждаться прелестями Language Integrated Query. А именно:
- Generics
- Extension Methods
- Lamda expressions
- Expression trees
- Anonymous types
- Object initializers
- Type inferring
И это все чтобы мы могли написать нечто вроде такого:
var query =
from itemA in listA
join itemB in listB
on itemA.Key equals itemB.Key
select new {itemA, itemB};
Нельзя не согласиться — впечталяет.
И среди всего этого синтаксического сахара была ложка дегдя которая мне не давала нормально выспаться :)
Это тотальное отсутствие поддержки OUTER JOIN. Но как оказалось деготь с легкостью превращается… превращается… превращается…
Пирамида инспекции кода
Недавно я разместил в своем Твиттере небольшую иллюстрацию, которая проливает свет на эту проблему и дает наводку, на каких аспектах следует сосредоточиться прежде всего, и назвал ее «Пирамида инспекции кода». Ее назначение – помочь держать в приоритете составляющие инспекции кода, имеющие первостепенную важность (по крайней мере, на мой взгляд), а так же указать, какие составляющие можно и нужно автоматизировать.
Некоторые читатели попросили дать альтернативную, постоянную ссылку, которой можно делиться; другие хотели получить картинку в высоком разрешении. Поэтому я выкладываю ее повторно, на своем сайте. Вы можете также скачать изображение в формате SVG.
Как мы ускорили выполнение запросов PostgreSQL в 100 раз
Существует великое множество статей об оптимизации PostgreSQL — эта «кроличья нора» весьма глубока. Когда несколько лет назад я начал разрабатывать бэкэнд аналитического сервиса, у меня уже был опыт работы с другими СУБД, такими как MySQL и SQL Server. Тем не менее, раньше мне не приходилось так фокусироваться на производительности. В прошлых проектах, над которыми я работал, либо не было жестких требований к времени обработки (DS/ML), либо не требовалось обрабатывать много строк одновременно (обыкновенные веб-приложения). Однако в этот раз мои запросы:
• состояли из 3-10 JOIN-ов по коррелирующим запросам;
• уielded от 10 до 1,000,000 строк;
• должны были выполняться в течение времени, определенного UX-ом;
• не могли быть hinted — пока Cloud SQL, управляемый PostgreSQL в Google Cloud, не стал поддерживать pg_hint_plan в конце 2021 года;
• запрещали прямой доступ к серверному процессу, чтобы, например, хакнуть некоторые perf — потому что PostgreSQL был managed.
Получение целого миллиона строк в одном API endpoint сигнализирует о проблеме в алгоритме или архитектуре. Конечно, все можно переписать и перепроектировать, но за это нужно платить.
У нас не нашлось «заклинания», которое решило бы все проблемы с производительностью SQL. Тем не менее, я упомяну здесь несколько дельных предложений, которые помогли нам и, надеюсь, смогут помочь читателю. Разумеется, это не какие-то сакральные знания. Но когда мы начинали оптимизацию, я был бы рад их прочитать или услышать.
«Научите меня читать компьютерную томограмму» — а давайте научу
До ведения блога на Хабре у нас очень редко спрашивали, что же именно на томограмме. Предполагалось, что пациенту для большинства ситуаций достаточно словесного описания, увиденного врачом, а в крайнем случае он без проблем возьмёт исходные файлы и отнесёт съёмку в другую клинику.
Но вы не такие. Вы очень часто спрашиваете, как же именно читать томограмму и что там нарисовано. Это укладывается в психологию визита ИТ-пациента, поэтому мы объясняем, но объяснять мы можем только на примере вашего снимка и недолго.
В целом, врачу никогда не придёт в голову учить пациента читать КТ, потому что это бессмысленно. Но я подумал: а почему бы и нет? Конечно, вы не наработаете 20-летний опыт определения разных сложных случаев по рентгеновской тени тканей, но, по крайней мере, сможете определить 40–50% базовых картин.
Видно отражение от металла, его дают множественные снимки
Я покажу, как выглядит воспалённая пазуха, металл, запломбированные и незапломбированные каналы, очаги.
Пора релоцироваться
Популярные мифы, советы по поиску работы, переезду и полезные ссылки для тех, кто сейчас ищет работу за рубежом или уже нашел и собирается переехать.
Гексагональная архитектура и Domain Driven Design на примере Front-end приложения
Преимущества данного метода:
Независимость: возможность не зацикливаться на бизнес логике.
Можно задекларировать, описать схему работы нашего приложения до создания внешних сервисов, использовать замоканные данные в реализации адаптеров.
Гибкость: использование любых фреймворков, перенос доменов адаптеров в другие проекты, добавление новых адаптеров без изменения исходного кода.
Легкая изменчивость: изменения в одной области нашего приложения не влияют на другие области.
Распознавание лиц на RASPBERRY PI
Биометрия везде. Современные мегаполисы в России и мире окутаны сетями камер, подключенными к различным системам распознавания лиц. Насколько это правильно с точки зрения этики — каждый решает сам, но факт в том, что такие методы не только помогают раскрывать преступления, но и предотвращать их совершение.
С каждым годом расширяется область применения таких систем. Например, пользователи могут приобрести у Google систему Nest — Nest Cam IQ Indoor, стоимостью 349 долларов с интеграцией в умный дом и возможностью распознавания лиц по подписке (за 10 долларов в месяц). И отечественных аналогов для частного пользования немало. Различные СКУД (системы контроля и управления доступом) от Ростелекома, HikVision, VisionLabs и других фирм. Описание зачастую мутное, опыт работы в реальных условиях можно найти на YouTube по запросу «Умный домофон не пускает мужчину домой».
Микросервисы для чайников: как на них перейти с монолита с нуля
Меня зовут Семен Катаев, я работаю в Авито над процессом перехода от монолитной архитектуры к микросервисам. Переход у нас все еще продолжается, но мне уже есть чем с вами поделиться. Это краткий обзор того, с чем придётся столкнуться, если вы задумались над созданием надежного, масштабируемого, распределённого приложения.
Нам пришлось поменять практически все процессы разработки, провести реорганизацию в компании, освоить новые для нас паттерны проектирования и начать использовать незнакомые инструменты для перехода к микросервисной архитектуре. Об инструментах сегодня и пойдёт речь.
Зачем нужен MediatR?
Недавно я натолкнулся в нашем коде на использование пакета MediatR. Это заинтересовало меня. Почему я должен использовать MediatR? Какие преимущества он мне предоставляет? Здесь я собираюсь рассмотреть эти вопросы.
«Афиша7» – интегрировать 4 API, чтобы разродиться собственным
В конце декабря 2019 года передо мной стояла задача разработки агрегатора культурных событий. Решение предполагало создание 2х инструментов: для добавления мероприятий на сайте, для сбора и предъявления актуальных данных о планируемых событиях.
В обзоре я кратко опишу основные этапы разработки, сложности реализации проекта.
Установка Kubernetes на домашнем сервере с помощью K3s
Но зачем
Знаю, о чем вы думаете — Kubernetes? На домашнем сервере? Кто может быть настолько сумасшедшим? Что ж, раньше я согласился бы, однако недавно кое-что изменило мое мнение.
Я начал работать в небольшом стартапе, в котором нет DevOps разработчиков со знанием Kubernetes (в дальнейшем K8s), и даже будучи старым ненавистником K8s из-за его громоздкости, был вынужден признать, что мне не хватает его программного подхода к деплойментам и доступу к подам. Также должен признать, что азарт от укрощения настолько навороченного зверя давно будоражит меня. И вообще, K8s захватывает мир — так что лишние знания не навредят.
Подключение энкодера к Ардуино и полнофункциональный код обработки для него
Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, KY-040 он надежный и долговечный.
Книги с оригинальным подходом к теме первого контакта
Глядя на бескрайнюю россыпь звезд в ночном небе, почти любой человек хоть раз задавался вопросом: интересно, мы одни во вселенной? Тема контакта с внеземным разумом давно стала классической для научной фантастики. Многих авторов интересует именно момент первой встречи, тревожная новизна и неизвестность. Чем именно они будут отличаться от нас? Сможем ли мы вообще понять друг друга?
За долгие годы на эту тему было сказано, снято и написано, мягко говоря, немало. Иногда кажется, что тема «первого контакта» и вовсе исчерпала себя. Но раз за разом находятся авторы, которые находят свежий подход и удивляют своими идеями. Вот несколько тому примеров — от классики до современных книг.
13 подвохов мобильного приложения, о которых лучше знать до старта разработки
Главная сложность в разработке приложения – накодить его функционал. Например, сделать редактирование текста для приложения-блокнота. Так я полагал, когда был моложе и наивнее.
С тех пор я запустил три приложения руками разработчиков и ещё одно собственноручно. Не бог весть какой опыт, но иллюзий поубавилось. А реализация функционала видится мне теперь самой простой и прогнозируемой задачей из всех.
Хочу поделиться краткой выжимкой из своего опыта: какие неожиданные сложности вас ждут, если вы делаете мобильное приложение впервые.
Information
- Rating
- Does not participate
- Location
- Россия
- Registered
- Activity