• Redis на практических примерах

      Redis — достаточно популярный инструмент, который из коробки поддерживает большое количество различных типов данных и методов работы с ними. Во многих проектах он используется в качестве кэшируещего слоя, но его возможности намного шире. Мы в ManyChat очень любим Redis и активно используем его в нашем продукте для решения огромного количества задач. Про некоторые интересные кейсы использования этой in-memory key-value базы данных я расскажу на примерах. Надеюсь, вам они будут полезны, и вы сможете применить что-то в своих проектах.

      Рассмотрим следующие кейсы:

      • Кэширование данных (да, банально и скучно, но это классный инструмент для кэширования и обойти стороной этот кейс, кажется будет не правильно)
      • Работа с очередями на базе redis
      • Организация блокировок (mutex)
      • Делаем систему rate-limit
      • Pubsub — делаем рассылки сообщений на клиенты

      Буду работать с сырыми redis командами, чтобы не завязываться на какую-либо конкретную библиотеку, предоставляющую обертку над этими командами. Код буду писать на PHP с использованием ext-redis, но он здесь для наглядности, использовать представленные подходы можно в связке с любым другим языком программирования.


      Читать дальше →
    • 12 советов по внедрению TypeScript в React-приложениях

        TypeScript — стандарт современной фронтенд-разработки. Согласно исследованиям State of JavaScript, TS вызывает явный интерес у программистов. По данным опроса за 2019 год, почти 60% респондентов пробовали TS и продолжают использовать, 22% не пробовали и желают изучить.

        Эта статья — сборник советов о том, как внедрить и улучшить использование TypeScript. Первая половина советов общая, касающаяся подходов и инфраструктуры. Вторая — несколько особо полезных фишек языка.


        Читать дальше →
      • Чистая Архитектура для веб-приложений

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

          Чистая Архитектура

          В результате применения этого подхода вы отвяжетесь от конкретного фреймворка. Сможете легко переключать библиотеку представления внутри вашего приложения, например React, Preact, Vue, Mithril без переписывания бизнес логики, а в большинстве случаев даже вьюхи. Если у вас есть приложение на Angular 1, вы без проблем сможете перевести его на Angular 2+, React, Svelte, WebComponents или даже свою библиотеку представления. Если у вас есть приложение на Angular 2+, но нету специалистов для него, то вы без проблем сможете перевести приложение на более популярную библиотеку без переписывания бизнес логики. А в итоге вообще забыть про проблему миграции с фремворка на фреймворк. Что же это за магия такая?
          Читать дальше →
        • Проектируем bounded context с помощью Bounded Context Canvas: рецепт воркшопа

          • Перевод
          Среди тем предстоящей конференции TechLead Conf 2020 будет детальное обсуждение Domain-Driven Design и EventStorming. Помимо подготовки 2-слотового доклада Константина Густова о DDD, доклада Сергея Баранова об EventStorming и митапа, во время которого мы будем создавать DDD-радар, мы решили перевести статью об одном из самых популярных способов проектирования bounded context.

          Как разбить большую систему на мелкие более управляемые компоненты? Мне часто задают этот вопрос, поэтому я собрал свои знания в эту статью.
          Читать дальше →
          • +20
          • 2,1k
          • 3
        • Rust. Borrow checker через итераторы

          • Tutorial
          Привет, Хабр!

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

          Последнее время scala является моим основным языком, так что сравнения будут с ней, но их не много и все интуитивно понятные, без магии :)

          Статья рассчитана на тех кто что-то слышал о rust'e, но в детали не вдавался.


          фотографии взяты отсюда и отсюда
          Читать дальше →
        • Doctrine ResultSetMapping на примерах

          Doctrine ORM предоставляет разработчику удобные средства выборки данных. Это и мощный DQL для работы в объектно-ориентированном ключе, и удобный Query Builder, простой и понятный в использовании. Они покрывают большую часть потребностей, но иногда возникает необходимость использовать SQL запросы, оптимизированные или специфичные для конкретной СУБД. Для работы с результатами запросов в коде важно понимание того, как работает маппинг в Doctrine.


          Читать дальше →
        • Забудьте про RGB и HEX

          • Tutorial
          В CSS существует несколько способов представления цветов. Один из них — система HSL. В этой статье я покажу вам, какие возможности она открывает для верстальщика.
          Читать дальше →
        • Используем Gradle и Github Actions для публикации Java проекта в Sonatype Maven Central Repository

          • Tutorial

          В данной статье я хочу подробно рассмотреть процесс публикации с нуля Java артефакта через Github Actions в Sonatype Maven Central Repository используя сборщик Gradle.


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

          Читать дальше →
          • +11
          • 1,4k
          • 3
        • Web-геосервисы. Обзор современных решений



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

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

            Также рассчитываю на участие комментаторов — если заметите в обзоре неточность в описании, отсутствие вашего хорошего сервиса или вам просто есть что добавить к уже написанному — пишите в комментариях, я буду собирать всё в основной текст, чтобы на будущее всегда иметь под рукой хороший список инструментов на все случаи жизни.
            Читать дальше →
          • RBK.money выпустила первый в мире open-source платежный процессинг — творим будущее вместе


              Привет!


              Если вы читали наши предыдущие посты (читали же?), то точно помните, что мы в RBK.money очень сильно за опенсорс. Настолько, что выложили в открытый доступ наш антифрод в виде открытых исходников под лицензией Apache 2.0.


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


              Зачем мы это сделали? Как это работает внутри? Как теперь жить дальше? Читайте под катом. Я гарантирую, что такого вы еще не встречали — еще никто в мире не опенсорсил платежную систему такого уровня.


              История меняется прямо сейчас на ваших глазах!

              Читать дальше →
            • Консольные утилиты Linux, которые смогут облегчить вам жизнь

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

                Читать дальше →
              • Как настроить Elasticsearch, чтобы не было утечек

                  За последний год возникало много утечек из баз Elasticsearch (вот, вот и вот). Во многих случаях в базе хранились персональные данные. Этих утечек можно было избежать, если бы после разворачивания базы администраторы потрудились проверить несколько несложных настроек. Сегодня о них и поговорим.

                  Сразу оговоримся, что в своей практике используем Elasticsearch для хранения логов и анализа журналов средств защиты информации, ОС и ПО в нашей IaaS-платформе, соответствующей требования 152-ФЗ, Cloud-152. 


                  Читать дальше →
                  • +15
                  • 9,5k
                  • 6
                • Руководство: Cucumber + Java

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

                  В данной статье мы рассмотрим один из самых популярных фреймворков для автоматизации тестирования с использованием BDD-подхода – Cucumber. Также посмотрим, как он работает и какие средства предоставляет.
                  Читать дальше →
                  • +12
                  • 110k
                  • 5
                • Сбор и анализ логов с Fluentd

                    fluentd

                    Любому системному администратору в своей повседневной деятельности приходится иметь дело со сбором и анализом логов. Собранные логи нужно хранить — они могут понадобиться для самых разных целей: для отладки программ, для разбора инцидентов, в качестве подспорья для службы техподдержки и т.п. Кроме того, необходимо обеспечить возможность поиска по всему массиву данных.
                    Читать дальше →
                    • +19
                    • 46,5k
                    • 8
                  • Как собирать проекты в Jenkins, если нужно много разных окружений

                    image


                    На Хабре много статей о Jenkins, но мало где описывается пример работы Jenkins и докер агентов. Все популярные инструменты сборки проектов типа Drone.io, Bitbucket Pipeline, GitLab, GitHub actions и другие, могут собирать все в контейнерах. Но как же Jenkins?


                    На сегодняшний день есть решение проблемы: Jenkins 2 замечательно умеет работать с Docker агентами. В статье я хочу поделиться опытом и показать, как вы можете это сделать сами.

                    Читать дальше →
                  • Зачем ограничивать наследование с помощью final?

                    Вы наверняка слышали это знаменитое высказывание от GoF: «Предпочитайте композицию наследованию класса». И дальше, как правило, шли длинные размышления на тему того, как статически определяемое наследование не настолько гибко по сравнению с динамической композицией.


                    Гибкость – это конечно полезная черта дизайна. Однако при выборе архитектуры нас интересуют в первую очередь сопровождаемость, тестируемость, читабельность кода, повторное использование модулей. Так вот с этими критериями хорошего дизайна у наследования тоже проблемы. «И что же теперь, не использовать наследование вообще?» – спросите Вы.


                    Давайте посмотрим на то, как сильная зависимость между классами через наследование может сделать архитектуру вашей системы чрезмерно жесткой и хрупкой. И зачем использовать одно из самых загадочных и неуловимых в коде ключевых слов – final. Сформулированные идеи демонстрируются на простом сквозном примере. В конце статьи приведены приемы и инструменты для удобной работы с final классами.


                    Проблема хрупкого базового класса


                    Проблема хрупкого базового класса

                    Читать дальше →
                  • Опыт поступления в магистратуру в Германии (детальный разбор)

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

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

                    Эта статья будет полезна тем, кто планирует или начинает поступать в магистратуру в Германии по специальностям, связанным с Computer Science. Частично данная статья может быть полезна и поступающим на другие специальности. Читателям, не планирующим поступать куда-либо данная статья может показаться скучной из-за обилия всяких бюрократических подробностей и отсутствия фотографий.
                    Читать дальше →
                  • 4 толковых канала на Youtube про технические собеседования

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


                      Читать дальше →
                      • +12
                      • 13k
                      • 1
                    • В Беларуси запустили онлайн-гид для IT-специалистов, которые хотят переехать в Минск

                        image

                        В Беларуси запустили специальный онлайн-гид по переезду в Минск для IT-специалистов из России. Ресурс Minsk.page организовали белорусский сайт про IT-индустрию dev.by совместно с сервисными компаниями, а также стартапами (среди них Flo — самое популярное в мире приложение про женское здоровье, насчитывает более 100 млн скачиваний).

                        Сайт представляет собой гид, который описывает состояние IT-индустрии в стране, а также предоставляет информацию об актуальных вакансиях, данные о налоговых и других преференциях, а также содержит сведения о релокации в Минск и о жизни в городе (районы города, интересные места, полезные сервисы, тарифы и цены и т.д.).
                        Читать дальше →
                      • [Обновлено в 10:52, 14.12.19] В офисе Nginx прошел обыск. Копейко: «Nginx был разработан Сысоевым самостоятельно»

                          Другие материалы по теме:


                          Eng version
                          Что значит наезд на Nginx и как это отразится на индустрииdeniskin
                          Open source — наше всё. Позиция Яндекса по ситуации с Nginxbobuk
                          Официальная позиция Программных комитетов Highload++ и других IT-конференций на претензии к Игорю Сысоевуolegbunin


                          По информации от одного из сотрудников, в московском офисе опенсорс-разработчиков Nginx проводят обыски в рамках уголовного дела, истцом по которому выступает Рамблер (ниже официальный ответ пресс-службы компании по этому вопросу и подтверждение наличия претензий к Nginx). В качестве доказательств приводится фото постановления о производстве обыска в рамках уголовного дела, возбужденного 4 декабря 2019 года по статье 146 УК РФ «Нарушение авторских и смежных прав».

                          Фото постановления о производстве обыска


                          Как предполагается, истцом выступает компания Рамблер, а ответчиком пока «неустановленная группа лиц», а в перспективе — основатель Nginx Игорь Сысоев.

                          Суть претензии: Игорь начал работу над Nginx, будучи сотрудником Рамблера, а только после того, как инструмент стал популярен, основал отдельную компанию и привлек инвестиции.

                          Почему Рамблер вспомнил о своей «собственности» только спустя 15 лет — неясно.
                          Читать дальше →