Pull to refresh
-6
0
Иван @wendel

Умею делать бэкенды и фронтэнды

Send message

React hooks, как не выстрелить себе в ноги. Часть 2: useEffect и useLayoutEffect

Reading time10 min
Views42K

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

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

Читать далее
Total votes 12: ↑9 and ↓3+6
Comments9

Uber обязательно разорится и будет закрыт или поглощен

Reading time6 min
Views17K

Капитализация в $45 млрд, доход $17 млрд за 2021 год, 72 страны и 10 тысяч городов — не много ли я на себя беру, говоря о несостоятельности Uber? Добро пожаловать под кат — ознакомьтесь с моими доводами, и поспорьте с ними в комментариях!

Читать далее
Total votes 39: ↑32 and ↓7+38
Comments51

Потоковая обработка данных в go

Reading time5 min
Views7.7K

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

С выходом Go 1.18 появилась возможность реализовать библиотеку потоковой обработки данных goio, вдохновлённую превосходными Scala-библиотеками cats-effect и fs2.

Читать далее
Total votes 15: ↑13 and ↓2+13
Comments4

Go в API для мобильного приложения. Создаем совместный список покупок с мгновенными уведомлениями

Reading time17 min
Views12K

В предыдущей статье мы рассмотрели использование Go для создания веб-приложений (с выполнением через Web Assembly). Но прежде всего Go интересен как язык для реализации высокопроизводительных и неблокирующих решений на стороне сервера и в этой статье мы изучим использование Go для backend на примере разработки API для мобильного приложения для совместного редактирования списка покупок. Приложение будет включать в себя механизмы авторизации, запроса и модификации объектов, а также мгновенные уведомления (через веб-сокеты и Push) и мониторинг доступность API. В качестве примера мы создадим минимальный API, для которого обеспечивается уведомление всех зарегистрированных пользователей об изменении списка, а также будут предусмотрена отправка пуш-уведомлений всем адресатам по запросу.

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments5

Четыре простых лайфхака при написании тестов на Go + testify

Reading time4 min
Views13K
Хотя язык программирования Go идёт в комплекте со встроенным тестовым фреймворком, мне сложно себе представить написание всего того количества тестов, что я написал, без testify. В этой заметке я расскажу про несколько маленьких неочевидных трюков, которым я научился в процессе.


Читать дальше →
Total votes 24: ↑23 and ↓1+24
Comments0

Собираем интересные .NET блоги в Telegram-канал с помощью GitHub Actions

Reading time10 min
Views4.2K

Будучи .NET разработчиком, я стараюсь периодически просматривать различные ресурсы, связанные с .NET тематикой. Как правило, это различные блоги. Иногда то тут, то там появляются какие-нибудь интересные статьи, на которые стоит обратить внимание.

Недавно я поймал себя на мысли, что делать это вручную мне как-то поднадоело. Тем более, что просматриваю я обычно одни и те же сайты. А значит время заняться автоматизацией.

Идея была достаточно проста. Нужен скрипт, который сходит по разным ссылкам, разберёт содержимое и отправит обновление в какой-нибудь telegram-канал. Нужно было только придумать, как этот скрипт запускать и где сохранять результат его работы, чтобы знать, что уже было отправлено, а что нет.

Я решил использовать в качестве хранилища GitHub, а сам скрипт (написан на TypeScript) запускать по расписанию с помощью GitHub Actions. В этой статье я хочу рассказать про некоторые технические детали реализации и поделиться полученным результатом.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

Симулятор x86 подобного процессора на машине Тьюринга

Reading time17 min
Views15K

Привет, Хабр! В свободное от работы время по вечерам мне нравится воплощать в жизнь свои сумасшедшие идеи. В один из таких вечеров родилась мысль реализовать компилятор кода в машину Тьюринга. Осознав всю тщетность бытия сложность реализации, было принято решение начать с чего-то более простого – симулятора простенького процессора со своим собственным ассемблером, в котором команды выполнялись бы с помощью различных состояний машины Тьюринга, а данные хранились бы на одной ленте. В конечном итоге удалось осуществить практически первоначальную задумку, а именно получить одну единственную машину Тьюринга, способную выполнять скомпилированную из NASM подобного ассемблера программу без какого-либо внешнего взаимодействия.

Читать далее
Total votes 56: ↑55 and ↓1+72
Comments6

Наблюдение за выполнением конкурирующих задач в Go и Rust

Reading time17 min
Views11K

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

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

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

Читать далее
Total votes 16: ↑13 and ↓3+13
Comments10

Исследование производительности свободных хранилищ LINSTOR, Ceph, Mayastor и Vitastor в Kubernetes

Reading time10 min
Views17K

Кажется это уже стало традицией: каждый раз, когда я выхожу на новое рабочее место, моя деятельность начинается с бенчмарков различных SDS-решений. Мой приход во «Флант» не стал исключением. Я попал в команду разработки Kubernetes-платформы Deckhouse, где решили развивать возможность запуска виртуальных машин в Kubernetes. Но для этого сначала потребовалось найти простое и надежное хранилище блочного типа, которое можно предложить клиентам платформы.

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

Но рынок программно-определяемых хранилищ не стоит на месте и постоянно растёт. Появляются новые амбициозные проекты, включая недавно релизнутый Mayastor и pet-проект моего товарища-соратника Vitastor. Результаты оказались очень интересными.

Читать далее
Total votes 38: ↑37 and ↓1+43
Comments22

Постигаем искусство написания Dockerfile для Go

Reading time6 min
Views27K

Как-то раз, в результате многих сверхурочных часов кропотливой работы, мне удалось разработать простейшее Hello world приложение на Go. И хотя оно всего-навсего производило вывод на экран, а затем заканчивало свою работу, мой начальник был настолько впечатлен, что попросил меня опубликовать мое детище, в написании которого я реализовал весь свой потенциал.

Читать далее
Total votes 18: ↑12 and ↓6+7
Comments7

Как живет IT-шник на фрилансе с БАР без таблеток

Reading time14 min
Views22K

БАР была со мной долгие годы, но в 22 года появилась ясность.

С сезонной депрессией знакомо немало людей, привыкли, что от недостатка витамина D наш организм начинает страдать. Мы чувствуем упадок сил, теряем положительные эмоции, не выходит собрать себя с постели для легкого подъема, еле доживаем до конца рабочего дня. При БАР депрессия наступает внезапно, длится невыносимо долго, проходит, как по щелчку пальца.

Биполярное аффективное расстройство (БАР) — психическое расстройство с поломкой работы тела. Если у человека БАР, то «взять себя в руки» не получится. Болезнь остается на всю жизнь и прогрессирует со временем.

Люди с БАР немного отличаются. Болезнь протекает периодами. Наличие смен состояний позволяет поставить диагноз человеку. Итак, у этих состояний есть названия: мания, депрессия, гипомания, смешанные состояния и «ремиссия». При этом депрессия и мания — две крайности. Одно состояние выключает человека из жизни, приятных ощущений и радости, а второе вызывает прилив сил до невозможности уснуть и восстановиться. Из-за того, какие состояния присутствуют в большей степени у человека, биполярное расстройство различают двух типов: в первом случае наблюдаются мании, во втором случае только гипомания, человек чаще живет в депрессии.

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

Первые симптомы биполярного расстройства

Когда одноклассники покоряли Doom и Dota, в моей жизни произошло много перемен. Мать выгнала из дома. В попытках выживать самостоятельно я разносил листовки и мыл авто, когда хватало времени - сидел за партой и читал книги. Через полгода “поверхностной учебы”, учителя забили тревогу, о ситуации узнал отец. Чтобы разобраться в вопросе, повел в Психоневрологический диспансер (коротко ПНД). Так я впервые оказался на приеме у психиатра.

Читать далее
Total votes 35: ↑31 and ↓4+41
Comments28

React Native 0.68 и «новая архитектура»

Reading time4 min
Views14K

30 марта 2022 года команда инженеров Meta анонсировали новую версию React Native 0.68. Помимо различных минорных улучшений и фиксов эта версия содержит историческое для платформы изменение, впервые мы можем попробовать в своих приложениях так называемую новую архитектуру. Давайте вместе разберемся что это за новая архитектура и почему к ней шли без малого 4 года.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments4

Go, я создал: интегрируем Allure в Go красиво

Reading time5 min
Views12K

Привет! Меня зовут Антон, я ведущий инженер по тестированию в Ozon: занимаюсь созданием и поддержкой end-to-end Go-тестов бэкенда для QA.

Мы довольно долго писали тесты в основном на Python. Go – молодой язык, и популярных устоявшихся инструментов у него пока немного. В Python есть pytest, в Java – JUnit и TestNG, в Go – пока что весьма свободно. 

Однажды, в очередной раз переписав группу старых Python-тестов, я решил, что надо что-то менять. Эта мысль в итоге привела меня к созданию нашей собственной опенсорс-библиотеки – с поддержкой Allure без перегрузки интерфейса, инфраструктурой для хранения тестов как в одних репозиториях с сервисами, так и в отдельных, репортами в Slack и разными другими штуками.

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

Читать далее
Total votes 24: ↑22 and ↓2+25
Comments7

Облегчаем работу с SQL в go и при этом не отстреливаем себе ноги

Reading time8 min
Views17K

Продолжаю серию статей по программированию на Golang, в которой буду рассказывать о том, как упростить себе жизнь. В то же время я уделю достаточно большое количество внимания тому, как при этом не утонуть в бесконечном количестве ненужных делу фреймворков.
Читать дальше →
Total votes 12: ↑9 and ↓3+11
Comments21

Особенности платформы Rancher для управления кластерами Kubernetes

Reading time11 min
Views32K

Spaceship Central Bridge concepts by SolarSouth

За последние годы Kubernetes стал де-факто стандартом оркестровки контейнерных приложений. Но его самостоятельная установка и настройка — нетривиальная задача, которая может занять несколько дней. Именно поэтому многие компании предпочитают готовые решения. 

Команда Kubernetes aaS VK Cloud Solutions написала статью, посвященную платформе управления Kubernetes Rancher. Мы собрали для вас в одном месте всю основную справочную информацию об этой платформе: ее основных функциональных особенностях, кластерных операциях, внутреннем устройстве, безопасности и интеграции с внешними системами. И расскажем, когда вам подойдет именно Rancher, а когда стоит обратить внимание на другие инструменты.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments6

Дженерики могут замедлить ваш код на Go

Reading time34 min
Views17K

Встречайте, вот и Go 1.18, а с ней – первый релиз долгожданной реализации дженериков, наконец-то готовых к реальному использованию в продакшене. Дженерики – это весьма востребованная возможность, давно вызывающая жаркие споры в сообществе Go. С одной стороны, самые голосистые беспокоятся по поводу сложности, которую привносят дженерики. Их страшит неизбежная эволюция Go, которая доведет его либо до многословия как в энтерпрайз-версии Java, со своими обобщенными фабриками, либо, самое страшное, превратит Go в вырожденный HaskellScript, где if-ы придется заменить монадами. Положа руку на сердце, оба этих опасения могут быть преувеличенными. С другой стороны, поборники дженериков считают, что дженерики критически важны для масштабного внедрения чистого кода, пригодного для многоразового использования.

Автор этой статьи не принимает ни одну из сторон в данных дебатах и не дает рекомендаций, где и в каких случаях использовать дженерики в Go. Напротив, эта статья призвана осветить запутанный случай с дженериками в Go с третьей стороны: с точки зрения системных программистов, которые воодушевлены не дженериками как таковыми, а мономорфизацией и тем, как она может сказаться на производительности. Нас таких десятки. Десятки! И мы все имеем изъявить некоторое серьезное разочарование.

Читать далее
Total votes 49: ↑46 and ↓3+56
Comments13

Хочу предупредить: скорее всего, уже в этом году домены .RU можно будет продлить только через Госуслуги

Reading time4 min
Views59K
image

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

Я хочу предупредить вас как можно раньше, что, видимо, продление и регистрация доменов в зонах .RU,.РФ и .SU будет проходить только через Госуслуги.

Сейчас в зоне .RU около 5 миллионов доменов. По моей предварительной оценке, из них останется около 3 миллионов доменов в течении следующих 2 лет после принятия закона. Это скорее всего вызовет и экономические, и юридические последствия.

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

По понятным причинам до текста законопроекта рано говорить про конкретику, техническую реализацию, особенности правоприменения и так далее, но уже можно предположить несколько сценариев развития событий. Но точно понятно, что вы как владелец домена теперь достоверно будете известны государству.
Читать дальше →
Total votes 97: ↑96 and ↓1+136
Comments289

Миллион одновременных соединений

Reading time8 min
Views61K

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

Адрес TCP/IP поддерживает только 65000 подключений, поэтому придётся назначить этому серверу примерно 30000 IP-адресов.

Существует 65535 номеров TCP-портов, значит ли это, что к TCP-серверу может подключиться не более 65535 клиентов? Можно решить, что это накладывает строгое ограничение на количество клиентов, которые может поддерживать один компьютер/приложение.

Если есть ограничение на количество портов, которые может иметь одна машина, а сокет можно привязать только к неиспользуемому номеру порта, как с этим справляются серверы, имеющие чрезвычайно большое количество запросов (больше, чем максимальное количество портов)? Эта проблема решается распределением системы, то есть кучей серверов на множестве машин?

Поэтому я написал эту статью, чтобы развеять данный миф с трёх сторон:

  1. Мессенджер WhatsApp и веб-фреймворк Phoenix, построенный на основе Elixir, уже продемонстрировали миллионы подключений, прослушивающих один порт.
  2. Теоретические возможности на основе протокола TCP/IP.
  3. Простой эксперимент с Java, который может провести на своей машине любой, если его всё ещё не убедили мои слова.

Если вы не хотите изучать подробности, то перейдите в раздел «Итоги» в конце статьи.
Читать дальше →
Total votes 82: ↑80 and ↓2+99
Comments27

Стресс на работе: та ещё пандемия XXI века

Reading time23 min
Views42K

Стресс — это аромат и вкус жизни.

Ганс Селье, основоположник учения о стрессе, 
биолог с мировым именем, эндокринолог, патофизиолог

Вот и здоровье немного пошатнулось, какие-то затяжные простуды, стал бояться каждой ошибки, нет сил собрать себя в кулак и решать ранее знакомые и простые рабочие задачи, всё кажется каким-то бестолковым и разочаровывающим, как будто за мутной вуалью… Знакомо? Возможно, какое-то время назад или прямо сейчас вы столкнулись со стрессом и теперь ощущаете его разрушающее воздействие. 

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

А вообще — стоит ли стресс на работе такого внимания? Однозначно стоит.

Читать далее
Total votes 24: ↑21 and ↓3+42
Comments18

Почему мы смотрим в среднем на 15 секунд в прошлое

Reading time5 min
Views19K


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


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

Читать дальше →
Total votes 31: ↑26 and ↓5+30
Comments49

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Senior
PHP
Docker
Linux
Git
OOP
Symfony
Doctrine
Golang
Node.js
TypeScript