• Разработка REST-серверов на Go. Часть 3: использование веб-фреймворка Gin

    • Translation
    Сегодня, в третьей части серии материалов, посвящённых разработке серверов на Go, мы займёмся реализацией нашего REST-сервера с использованием Gin — одного из самых популярных веб-фреймворков для Go. Вот код, который мы будем тут обсуждать.

    Перевод предыдущих частей:
    Разработка REST-серверов на Go. Часть 1: стандартная библиотека.
    Разработка REST-серверов на Go. Часть 2: применение маршрутизатора gorilla/mux


    Читать дальше →
    • +39
    • 3.4k
    • 2
  • Вторая причина остаться без зубов в 45 лет

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

      Группы риска:

      1.      Люди с плохой гигиеной. Впрочем, кариес лишит зубов раньше, чем пародонтит.

      2.      Диабетики. У них проблемы с сосудами и местным иммунитетом.

      3.      Курящие. У них тоже проблемы с сосудами. И да, вейпы несильно спасают: никотин токсичен сам по себе. Кроме этого, у курящих налёт прочнее фиксируется на эмали.

      4.      Люди, чьи родители или ближайшие родственники имеют поставленный пародонтальный диагноз.

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

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

      Читать далее
    • Как я пытался придумать новый подход к изучению алгоритмов через интерактивные визуализации

        Представьте человека, который изучает алгоритмы. Чтобы понять как они работают, приходится разбираться в их коде и представлять, как компьютер будет его выполнять. Это странно — почему мы должны учиться думать как компьютер, вместо того, чтобы заставить его помогать нам? Какая-то сильная технозависимость.

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

        Читать далее
      • Неочевидные уязвимости онлайн сервисов. Часть первая


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

          А может быть, вы популярный хостинг? Хотите привлечь пользователей, используя около-тематический трафик — создаете онлайн сервис который смог бы заменить целые серверные утилиты — nslookup, dig, curl?! Звучит неплохо, но всё ли так хорошо с безопасностью пользователей?

          Об интересных и неочевидных уязвимостях онлайн-сервисов поговорим под катом.
          Узнать подробности
          • +62
          • 9.1k
          • 4
        • Уходим в кэш в высоконагруженных системах

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

            На конференции PHP Russia 2021 Павел Паршиков, backend engineer в Авито, представит доклад «Уходим в кэш в высоконагруженных системах». А в этом  интервью мы поговорили о том, хорош ли PHP для растущих в плане нагрузки проектов, и какие его инструменты лучше применять.

            Читать далее
          • Воспитание Obsidian — вашего персонального информационного менеджера

            • Tutorial


            Методик повышения личной эффективности хоть пруд пруди. Как по мне, основная проблема с ними в том, что нужно работать самому. Совершенно нормальное стремление — избежать приложения усилий. Пускай хорошая методика и есть тот рычаг, коим обещают сдвинуть Землю, но физика знает, что всю-всю работу делать всё равно нам самим. Основной вопрос, терзавший меня в вопросе выбора персонального информационного менеджера заключался в том, что он будет делать вместо меня. Задача была не самая лёгкая. За короткий срок разобраться в новой области — организовать конспекты, классифицировать справочники и литературу по теме. Море открытых вкладок браузера (всё очень нужное, оно не должно скрыться из глаз), pdf-файлы, заботливо присланные новыми коллегами… С этим всем в голове я познакомился с программой Obsidian, которая пообещала стать A second brain, for you, forever.

            Читать дальше →
          • Мифология REST

              Матчасть


              Мало какая технология в истории IT вызывала столько ожесточённых споров, как REST. Самое удивительное при этом состоит в том, что спорящие стороны, как правило, совершенно не представляют себе предмет спора.


              Начнём с самого начала. В 2000 году один из авторов спецификаций HTTP и URI Рой Филдинг защитил докторскую диссертацию на тему «Архитектурные стили и дизайн архитектуры сетевого программного обеспечения», пятая глава которой была озаглавлена как «Representational State Transfer (REST)». Диссертация доступна по ссылке.


              Как нетрудно убедиться, прочитав эту главу, она представляет собой довольно абстрактный обзор распределённой сетевой архитектуры, вообще не привязанной ни к HTTP, ни к URL. Более того, она вовсе не посвящена правилам дизайна API; в этой главе Филдинг методично перечисляет ограничения, с которыми приходится сталкиваться разработчику распределённого сетевого программного обеспечения. Вот они:


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

              Всё, на этом определение REST заканчивается. Дальше Филдинг конкретизирует некоторые аспекты имплементации систем в указанных ограничениях, но все они точно так же являются совершенно абстрактными. Буквально: «ключевая информационная абстракция в REST — ресурс; любая информация, которой можно дать наименование, может быть ресурсом».


              Ключевой вывод, который следует из определения REST по Филдингу, вообще-то, таков: любое сетевое ПО в мире соответствует принципам REST, за очень-очень редкими исключениями.

              Читать дальше →
            • Когда уходят на покой программисты? 35 — это конец карьеры?

              • Translation
              image

              Почему мы не наблюдаем вокруг большого количества седоволосых разработчиков ПО? Куда деваются все программисты, когда становятся старше? Увольняют ли компании программистов в возрасте?

              Если программист в свои пятьдесят собеседуется на вакансию вместе с людьми, которым 20-30 лет, сколько компаний наймёт его? Об этой проблеме существует множество мифов, как и несколько жестоких истин.

              Да, иногда шокирует, что 40-летних, иногда даже 35-летних называют «старыми». Под «старыми» здесь подразумевается то, что программисты на этом этапе планируют уходить на покой или менять место работы.
              Читать дальше →
            • Как я влюбился в Rust и чего мне это стоило


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


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


                Хочу сразу заметить, что эта статья целиком и полностью — субъективное мнение автора, единственная цель которой — заинтересовать читателей, ценящих в программировании как хобби те же самые вещи, что и он сам, и речь в ней не пойдёт ни о быстродействии, ни о востребованности языка в сфере IT, ни о каких-либо других технических составляющих этой области, вокруг которой часто возникают разного рода споры. Я остановлюсь на том, что Rust — быстрый и безопасный компилируемый ЯП общего назначения. Об остальном — далее.

                Читать дальше →
              • Причины массового обжорства SSD на Macbook с процессорами M1

                Мир сошел с ума. Где только не писали о проблеме повышенного аппетита на ресурс SSD-накопителей у новых моделей Macbook Air и Macbook Pro с процессорами M1. Тема обсуждалась на всех популярных технических форумах. И несмотря на массовость проблемы, все обсуждения сводились к тому, что Apple не считает это проблемой. А значит и проблемы нет. И в какую дичь люди готовы поверить для самоуспокоения вместо того, чтобы взглянуть в лицо фактам и выяснить причины стремительного выработки ресурса несъёмного SSD-накопителя.

                Читать далее
              • Что я не знал про образование



                  Я тут полез изучать опыт школьных учителей в педагогике, — и совершенно внезапно обнаружил кучу важных для управления проектами принципов. В смысле, что я опять хочу познакомить вас со странным человеком и рассказать про его опыт. Итак, знакомьтесь, обычная учительница в астраханской гимназии, Ольга Анисимова, которая порвала мне все шаблоны того, что происходит в обычной школе.

                  Она не учит детей методам решения задачи, она учит их сначала найти саму задачу, потом прикинуть спектр вариантов подхода, а уже потом — как конкретно получить ответ.

                  Она относится к детям как ко взрослым во многих аспектах.

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

                  Она разрешает готовить шпаргалки и списывать. Разрешает детям «выпихивать» на ответ того, кто выучил тему. Использует понятную детям игрофикацию для мотивации.

                  В общем, всё настолько пропитано здравым смыслом, что просто не может и не должно происходить в школе. В чёртовой школе!
                  Читать дальше →
                • Почему убивают смартфоны в ванне?

                    brandName убил россиянку ударом тока. brandName на секунду упал на живот: сына известной блогерши убило током в ванне. Жертв все больше: почему не стоит брать телефон в ванну. Россиянка уронила в ванну телефон и погибла.

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

                    Читать далее
                  • Как меня чуть не уволили из-за токсичного поведения и что было дальше

                      Началось все с устройства на новую работу. Новый проект казался интересным, коллеги – доброжелательными, так что я с радостью принял оффер. Первое время я только погружался в проект, разбирался с его особенностями и особо ничего не критиковал. Все-таки я тут новичок, ещё не в курсе всей ситуации, и вообще, в чужой монастырь со своим уставом не лезут.

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

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

                      Читать далее
                    • Разработка веб-приложения для транскрибирования аудиозаписей с использованием Python, Streamlit и AssemblyAI

                      • Translation
                      Автор статьи, перевод которой мы публикуем сегодня, хочет рассказать о том, как, пользуясь Streamlit, создать веб-приложение, которое позволяет пользователям транскрибировать аудиозаписи, выгружая их на специальный сервер. В проекте будет использован API AssemblyAI, позволяющий преобразовывать звукозапись речи в текст. Интерфейс проекта, достаточно строгий, будет украшен анимациями.

                      Приложение, о котором тут пойдёт речь, можно испытать здесь.

                      image

                      Веб-приложение в действии
                      Читать дальше →
                      • +32
                      • 5.3k
                      • 2
                    • 1 CPU 1 Гб – а я хочу мониторинг, как у больших дядей



                        Я обожаю читать на хабре статьи про то, как устроены системы больших интернет-компаний. Кластеры SQL-серверов, монг и редисов. Тут у нас кластер ELK собирает трейсинг, там – сборка логов, здесь балансер выдает входящим запросам traceID и можно отслеживать, как запрос ходит по всем нашим микросервисам. Класс. Но, допустим, у вас совсем маленький проект и вы можете себе позволить лишь VPS минимальной конфигурации. Реально ли на ней сделать мониторинг не хуже, чем у больших проектов? Я решил – надо попробовать.
                        Читать дальше →
                      • HTML трюки

                        • Translation
                        image

                        1. Атрибут `loading=lazy`


                        Совет по производительности. Вы можете использовать атрибут loading = lazy, чтобы отложить загрузку изображения до тех пор, пока пользователь не домотает до них.

                        <img src='image.jpg' loading='lazy' alt='Alternative Text'>  
                        Читать дальше →
                      • Почему стоит начать изучение программирования с языка C

                        • Translation
                        Краткое содержание: автор статьи объясняет, почему С хорош именно на этапе обучения и прокачки мозгов будущего программиста. А через некоторое время, или даже параллельно, можно выучить более современный язык и заняться, например, Enterprise- или Web-разработкой.


                        Фото: Liam Briese on Unsplash

                        Языков программирования становится всё больше. Сейчас их около 700. Однако в основном разработчики используют 20 из них. Здесь, как и во многих других сферах, существуют рейтинги, тренды и даже мода.

                        Назовём навскидку несколько популярных языков. Для Enterprise-разработки активно используют Java (скоро там закрепится и Kotlin), C#, для Web-разработки — JavaScript, Go, Python и PHP, для мобильной разработки — Swift, Java/Kotlin, ну и осмелюсь назвать JavaScript (потому что может, потому что React Native). Разработчики игр часто пользуются C# и С++. Все они востребованы по нескольким причинам:
                        Читать дальше →
                      • JavaScript-классы — это не просто «синтаксический сахар»

                        • Translation
                        После того, как я прочитал очередную статью, где говорится о том, что JS-классы — это всего лишь «синтаксический сахар» для прототипного наследования, я решил написать материал, призванный (в который раз!) прояснить вопрос о том, почему данное утверждение неверно. Тут я, надеюсь, смогу объяснить разницу между JS-классами и прототипным наследованием, и смогу рассказать о том, почему важно понимать эту разницу.


                        Читать дальше →
                      • Первое знакомство с SQL-инъекциями

                        • Translation
                        SQL-инъекции (SQL injection, SQLi, внедрение SQL-кода) часто называют самым распространённым методом атак на веб-сайты. Их широко используют хакеры и пентестеры в применении к веб-приложениям. В списке уязвимостей OWASP Топ-10 присутствуют SQL-инъекции, которые, наряду с другими подобными атаками, находятся на первом месте среди угроз, с которыми сталкиваются веб-проекты.

                        Несмотря на то, что SQL-инъекции существуют уже более 20 лет, этот метод атаки на веб-проекты всё ещё можно успешно применить для взлома тех веб-сайтов и приложений, создатели которых не реализовали в них соответствующие защитные механизмы.



                        Этот материал рассчитан на абсолютных новичков, на тех, кто ничего не знает о SQL-инъекциях. Начнём мы с разбора основ, в которых необходимо ориентироваться перед разговором о SQLi. А именно, сначала мы поговорим о реляционных базах данных. Потом — о SQL, и о формировании SQL-запросов. И наконец — о том, как работают SQL-инъекции, и о том, почему они так опасны для веб-приложений.
                        Читать дальше →
                      • HTTPWTF. Необычное в обычном протоколе

                        • Translation

                        Прим. перев.: эту статью написал автор Open Source-утилиты HTTP Toolkit, предназначенной для исследования и модификации HTTP(S)-трафика для нужд отладки и тестирования. В материале собраны примечательные особенности стандарта HTTP, которые долгие годы живут вместе с нами, однако не каждый догадывается об их существовании.

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

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

                        Читать далее
                        • +111
                        • 15.7k
                        • 2