• Фантастические advisory locks, и где они обитают

      В PostgreSQL существует очень удобный механизм рекомендательных блокировок, они же — advisory locks. Мы в «Тензоре» используем их во многих местах системы, но мало кто детально понимает, как конкретно они работают, и какие проблемы можно получить при неправильном обращении.


      Читать дальше →
      • +11
      • 1.8k
      • 9
    • Измерения малых ёмкостей (аналоговый ёмкостной датчик)

        Предлагаю сообществу датчик малых ёмкостей, работающий почти от 0 пФ. Можно использовать в любительской электронике, роботостроении.

        Разрабатывая хобби-электронику, мне понадобился какой-нибудь простой датчик расстояния на ёмкостном эффекте. Поискав в Интернете, нашёл только датчики касания, но они имеют малое расстояние срабатывания и дискретный выход. Другие же датчики слишком сложные или с долгой настройкой. Нужен был очень простой и дешёвый, работающий от микроконтроллера. Что получилось — под катом…
        Читать дальше →
      • Как мы оптимизировали наш DNS-сервер с помощью инструментов GO

        • Translation
        В преддверии старта нового потока по курсу «Разработчик Golang» подготовили перевод интересного материала.




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

        dnsflood — это небольшой инструмент, способный генерировать огромное количество udp запросов.

        # timeout 20s ./dnsflood example.com 127.0.0.1 -p 2053

        Мониторинг систем показал, что использование памяти нашим сервисом росло так быстро, что нам пришлось остановить его, иначе мы столкнулись бы с OOM ошибками. Это было похоже на проблему утечки памяти; существуют различные причины «похожих на» и «реальных» утечек памяти в go:
        Читать дальше →
      • Инженер создал модель авто на Arduino, которая уходит в заносы как реальный автомобиль

          imageФото: superscale2020.blogspot.com

          Инженер Димитр Тилев представил разработанную им радиоуправляемую модель автомобиля Oldsmobile Dynamic 88 Wagon 1963 года выпуска. Акселерометр MPU6050 передает данные на плату Arduino, и та в режиме реального времени анализирует их и управляет высотой подвески, что позволяет модели наклоняться и уходить в занос как настоящему автомобилю.

          Движения модельки происходят в точном соответствии с законами физики, их сопровождают характерные звуки мотора, а при резком старте задействованы индикаторы выхлопных труб.
          Читать дальше →
        • Blazor Client Side Интернет Магазин: Часть 1 — Авторизация oidc (oauth2) + Identity Server4


            Привет, Хабр! Таки да, в прошлой своей статье я попробовал сделать Todo List на Blazor Wasm и остался доволен. Теперь я решил взяться за что-то по серьезней, чтобы опробовать его в деле. Буду делать простенький SPA UI на Blazor для простого вымышленного интернет магазина. Максимально приближенный к боевому применению вариант. Начну я с того что запилю авторизацию пользователей и разделения их по ролям т. е. чтобы админ и обычный пользователь видели немного разный интерфейс. Еще я это все в docker образы собрал и на docker registry выложил. За подробностями добро пожаловать под кат.
            Читать дальше →
          • 15 лучших и крупнейших библиотек иконок

            • Translation


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

            Сразу уточняем: это не 15 самых лучших библиотек, а 15 из лучших. Разумеется, есть и другие, не менее замечательные, о которых я не упомянул или не знаю.
            И, нет, это не рейтинг — список маркированный, а не нумерованный.
            Читать дальше →
          • Повысьте производительность SPA, разбив ваши библиотеки Angular на несколько частей

            Привет, Хабр! Представляю Вашему вниманию перевод статьи «Improve SPA performance by splitting your Angular libraries in multiple chunks» автора Kevin Kreuzer.


            Angular — отличный фреймворк. Мы все его любим <3.


            Одна из вещей, которая делает Angular успешным и прекрасным в одно и тоже время — это широкое сообщество и ценность, которую оно в себе несет. Существует множество встреч, блогов, конференций и, конечно, библиотек по Angular.


            Сегодня благодаря Angular CLI библиотеки легко создать. Они прекрасно подходят для того, чтобы делиться кодом между несколькими приложениями.


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


            В Frontend есть разные типы производительности. runtime — производительность и initial load. В этой статье мы сосредоточимся на initial load.


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

            Читать дальше →
            • +17
            • 5.4k
            • 7
          • TelegramBot инструкция по созданию базового функционала для бота. (Часть 1)

            • Tutorial
            Не так давно я предложил вам воспользоваться моим ботом для телеграмма.

            Telegram Bot — помощник в планировании мероприятий

            Получив много вопросов в личку, я понял, что вопрос создания ботов для Телеграм довольно популярен.

            У меня спрашивали исходный код бота, просили поделиться конкретными примерами реализации тех или иных возможностей бота, просили подсказать тот или иной функционал по работе с ботом и сообщениями.

            Я решил написать цикл статей, в которых хочу показать базовые вещи, которые будут нужны вам для написания своего бота.
            Вас ждет Java, Maven, TelegramAPI, Lombok и Log4j.
            Кому интересно — прошу под кат…
            Читать дальше →
          • Подготовка к Spring Professional Certification. Spring Security

            • Translation

            Эта статья является переводом статьи по подготовке к Spring Professional Certification.


            В ней будет рассмотрена тема Spring Security и основные вопросы по ней.


            Ее также можно использовать для подготовки к собеседованию.


            ↓ Остальные статьи доступны по ссылкам в оглавлении ↓


            Оглавление
            1. Внедрение зависимостей, контейнер, IoC, бины
            2. AOP (аспектно-ориентированное программирование)
            3. JDBC, транзакции, JPA, Spring Data
            4. Spring Boot
            5. Spring MVC
            6. Spring Security
            7. REST
            8. Тестирование



            Читать дальше →
          • Can I haz? Рассматриваем ФП-паттерн Has

              Привет, Хабр.


              Сегодня мы рассмотрим такой ФП-паттерн, как Has-класс. Это довольно любопытная штука по нескольким причинам: во-первых, мы лишний раз убедимся, что паттерны в ФП таки есть. Во-вторых, оказывается, что реализацию этого паттерна можно поручить машине, что вылилось в довольно любопытный трюк с тайпклассами (и библиотеку на Hackage), который лишний раз демонстрирует практическую полезность расширений системы типов вне Haskell 2010 и ИМХО куда интереснее самого этого паттерна. В-третьих, повод для котиков.


              image


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


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

              Читать дальше →
              • +29
              • 4.3k
              • 3
            • TypeScript. Мощь never

                Когда я впервые увидел слово never, то подумал, насколько бесполезный тип появился в TypeScript. Со временем, все глубже погружаясь в ts, стал понимать, какой мощью обладает это слово. А эта мощь рождается из реальных примеров использования, которыми я намерен поделиться с читателем. Кому интересно, добро пожаловать под кат.
                Читать дальше →
              • 2 лайфхака: альтернативы классическому поиску в Microsoft SQL Server

                  Привет, Хабр! Наши друзья из Softpoint подготовили интересную статью про Microsoft SQL Server. В ней разбирается два практических примера использования полнотекстового поиска:

                  • Поиск по «бесконечным» строкам (напр., Комментарии) в противовес обычному поиску через LIKE;
                  • Поиск по номерам документов с префиксами. Там, где обычно полнотекстовый поиск применять нельзя: ему мешают постоянные префиксы. Разбирается 2 подхода: предварительная обработка номера документа и добавление собственной библиотеки-word breaker’а.

                  Присоединяйтесь!

                  Читать дальше →
                • Обработка исключений ASP.NET при помощи IRO.Mvc.MvcExceptionHandler



                    Если вы являетесь c# бекенд разработчиком — наверняка у вас рано или поздно появилась необходимость найти унифицированный способ обработки исключительных ситуаций. Хотя, даже если вы довольствуетесь кодом 500 в ответе, эта статья все равно поможет улучшить ваш способ, при этом не заставляя что-либо переписывать.

                    Речь пойдет об ASP.NET библиотеке, которая позволяет решить эту проблему максимально изящно. Для тех кому лень читать длинную статью — ридми и сама библиотека тут, пример тут. Доступна на nuget.org и я буду только рад если она принесет кому-то пользу. И так, перейдем к коду. Для начала давайте разберем альтернативы.
                    Читать дальше →
                  • Blitz Engine & Battle Prime: ECS и сетевой код



                      Battle Prime — первый проект нашей студии. Несмотря на то, что многие члены команды имеют приличный опыт в разработке игр, мы, естественно, сталкивались с разными сложностями во время работы над ним. Они возникали как в процессе работы над движком, так и в процессе разработки самой игры.

                      В геймдев индустрии огромное количество разработчиков, которые охотно делятся своими историями, наработками, архитектурными решениями — в том или ином виде. Этот опыт, выложенный в публичное пространство в виде статей, презентаций и докладов, является отличным источником идей и вдохновения. Например, доклады команды разработки из Overwatch были для нас очень полезны при работе над движком. Как и сама игра, они очень талантливо сделаны, и я советую посмотреть их всем интересующимся. Доступны в GDC vault и на YouTube.

                      Это одна из причин, по которой мы также хотим вносить вклад в общее дело — и эта статья одна из первых, посвященная техническим деталям разработки движка Blitz Engine и игры на нем — Battle Prime.

                      Статья будет поделена на две части:

                      • ECS: имплементация Entity-Component-System паттерна внутри Blitz Engine. Этот раздел важен для понимания примеров кода в статье, и сам по себе является отдельной интересной темой.
                      • Неткод и геймплей: все, что касается высокоуровневой сетевой части и ее использования внутри игры — клиент-серверная архитектура, клиентские предсказания, репликация. Одной из важнейших вещей в шутере является стрельба, так что ей будет уделено большее количество времени.

                      Под катом много мегабайт гифок!
                      Читать дальше →
                      • +30
                      • 5.1k
                      • 8
                    • Инструменты Node.js разработчика. Протокол mqtt для работы с веб-сокетами

                        Технология веб-сокет позволяет в веб-приложении или в мобильном приложении реализовать отправку сообщений с сервера на клиент, что невозможно сделать средствами REST-API. Для работы с веб-сокетами часто используют библиотеку socket.io, или же разработчики работают с нативными объектами веб-сокет браузеров. В этом сообщении я попытаюсь показать, что оба пути не решают всех проблем, и гораздо лучше использовать для работы с веб-сокетами специализированные серверы, например mqtt-сервер (раньше его назвали mqtt-брокер).

                        Справедливости ради, и чтобы избежать ненужных споров, замечу, что кроме mqtt-сервера может быть использован еще целый ряд серверов, например rabbitmq.
                        Читать дальше →
                      • Эволюция создания веб-приложений на Java

                          История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.


                          Читать дальше →
                        • Почему вам стоит выкинуть MVP из своих проектов

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

                          Читать дальше →
                        • Разработка сайта на WebAssembly с помощью NetCore 3 и Blazor

                            Мое мнение, что WebAssembly будущее интернета. Данная технология на текущий момент уже интегрирована в большинство современных браузерах (а точнее в их движках) на ПК и мобильных устройствах. В таких браузерах как Chrome, Edge, Firefox, и WebKit.


                            В данной статье я опишу как начать разработку сайта WebAssembly в Visual Studio. Статья подойдет для тех, кто хотел бы понять, как начать разрабатывать SPA приложения без использования JavaScript, зная только asp.net mvc, c#, верстку html и css.


                            На момент выхода статьи фреймворк NetCore 3 находится в стадии RC1, а Blazor имеет версию 3.0.0-preview9.19457.4. Релиз NetCore 3 запланирован на сентябрь 2019. Что относительно Blazor то его релиз обещают позднее в ноябре 2019 года, скорее всего после релиза NetCore 3.1


                            Оглавление:

                            Читать дальше →
                          • Как наладить поиск адреса по координатам (и где взять нужный справочник)



                              Весной мы добавили в API DaData.ru фичу «Обратное геокодирование», она же «Адрес по координатам». Название намекает: метод принимает геокоординаты и отдает данные об адресе.

                              Солидный продукт с той же функциональностью предлагает «Яндекс» — он называется «Геокодер». Но сервис «Яндекса» бесплатен только для открытых некоммерческих проектов. Стандартный же тариф — от 120 000 ₽ в год — подходит не всем.

                              Мы подумали — если сделать бесплатную или недорогую альтернативу «Геокодеру», разработчики наверняка скажут спасибо. И сделали. В статье расскажу, как устроен «Адрес по координатам»: как мы наладили поиск, собрали справочник и упаковали в готовый метод.
                              Читать дальше →
                            • Рецепты TeamCity. Доклад Яндекс.Такси

                                Меня зовут Эдуард Мацуков, я делаю Таксометр — приложение для водителей Яндекс.Такси. Занимаюсь инфраструктурой и всем, что с ней связано. Какое-то время назад я выступил с докладом — рассказал об опыте дружбы TeamCity с нашим проектом и с разработчиками в целом. Отдельная часть доклада посвящена тому, при чем здесь Kotlin.


                                — Практически каждый день ко мне лично и к нашим разработчикам приходят с вопросами. А где достать сборку? А где взять такую-то ветку? А почему что-то упало? Где в моем коде проблема? Почему что-то работает неправильно? Для этого у нас в проекте есть много самописной инфраструктуры, плагинов, различных хаков и трюков, которые мы используем. С одной стороны — чтобы облегчить жизнь разработчика, с другой — чтобы реализовать конкретные бизнес-задачи.

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