Pull to refresh
52
0.2
Владимир Кальченко @tommyangelo27

User

Send message

Сказ о том, как я за год решил более 600 leetcode задач

Level of difficulty Easy
Reading time 7 min
Views 70K

Всем салют!

Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел несколько coding сессий в таких компаниях как Meta, Booking, Careem, Avito...

Читать далее
Total votes 150: ↑141 and ↓9 +132
Comments 406

NAS за шапку сухарей

Reading time 6 min
Views 45K

Привет коллеги! На связи системный администратор Cloud4Y Денис Генералов (или тот самый чел, который искал уязвимости биоса в прошлых статьях на ноутбуках, статья тут).

Сегодня предлагаю рассмотреть вариант сборки домашнего NAS дендральным методом.

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

Читать далее
Total votes 72: ↑70 and ↓2 +68
Comments 156

Docker: собираем веб сервер

Reading time 10 min
Views 51K

Так сложилось, что мне приходится работать над большим количеством сайтов, задачи решать так же разные - от настроек сервера до "сверстать форму". И вот на одном из проектов возникла задача - обновиться до актуальной версии php (8.1 на момент написания), обновить до актуальной версии CMS (1C Bitrix), ну и в целом, "довести до ума".

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

Читать далее
Total votes 19: ↑9 and ↓10 -1
Comments 21

Kincony KC868-A32: авианосец на DIN-рейку

Reading time 6 min
Views 10K


Сколько реле можно установить на плату контроллера? Четыре? Восемь? Компания Kincony решила не ограничивать себя и оснастила свою модель KC868-A32 аж 32-мя реле. В результате получился уникальный контроллер, аналогов которому я и не припомню — на фоне обычных девайсов подобного типа KC868-A32 смотрится как флагманский авианесущий крейсер.

Размеры KC868-A32 таковы, что это произведение креативной китайской мысли влезет далеко не в каждый электрощит, его можно взять подмышку как доску, а если приделать к ней колёсики — то и кататься на ней как на скейтборде.

Экстремальные размеры и невероятное количество реле на борту — это далеко не все достоинства Kincony KC868-A32, далее мы подробно разберём устройство, схемотехнику и области применения этого контролера.
Читать дальше →
Total votes 42: ↑42 and ↓0 +42
Comments 49

Грокаем алгоритмы

Reading time 4 min
Views 147K

Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих от Бхаргава А. Эта книга рекомендована Яндекс Практикум при подготовке к алгоритмическому собеседованию. Сам автор указывает, что книга для самоучек, студентов, выпускников и тех, у кого программирование не является основным профилем.

Мое впечатление неоднозначно. С одной стороны, до сего момента я не встречал описания динамического программирования, поиска кратчайшего пути в графе по алгоритму Дейкстры и использование K ближайших соседей для классификации и аппроксимации (возможно, все это есть в 4м или последующих томах Кнута, но в магазине они мне не встречались). С другой стороны, описания и примеры, приведенные в книге, таковы, что практической пользы не представляют. Описания очень поверхностны, примеры нарочно примитивны, код в половине случаев не приведен. Но даже там где есть код, он нарочито упрощен под конкретный пример и на практике бесполезен.

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

Вернемся к Яндекс Практикум и их рекомендации. Если алгоритмы так важны, то почему именно эта книга? Есть масса других, где и алгоритмов больше и разобраны они так, что бери да пользуй. Например, классический труд Д. Э. Кнута Искусство программирования. Да, рисунки в детском стиле в Грокаем алгоритмы забавны. Но иллюстрации в Искусство программирования полезны для понимания. Разве это не важнее, если уж кандидата посылают на алгоритмическое собеседование?

Читать далее
Total votes 27: ↑24 and ↓3 +21
Comments 29

Вопросы и ответы для собеседования Go-разработчика

Level of difficulty Medium
Reading time 53 min
Views 101K

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


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


Да, это очень объемный пост, и вряд ли его можно вдумчиво осилить за один подход, но поместив его в закладки он, возможно, когда-то сослужит вам добрую службу (читать его можно по частям, находясь в метро или между вечными совещаниями; да и Ctrl + F никто не отменял). Ещё ему очень не хватает оглавления для удобной навигации между вопросами, но у хабраредактора нет возможности генерировать TOC (если будут запросы об этом в комментариях — сделаю его руками). Об очепятках, пожалуйста, пишите в личку.

Читать дальше →
Total votes 43: ↑40 and ↓3 +37
Comments 16

Разворачиваем Golang приложение в Kubernetes

Reading time 14 min
Views 11K

В этой статье я хочу поделиться примером, как можно развернуть простое приложение на Golang в Kubernetes, с помощью helm чартов и skaffold скриптов. Думаю, данная статья может быть полезной тем разработчикам, которые только знакомятся с Kubernetes, а возможно и более опытным разработчикам, которые смогут почерпнуть что то интересное для себя.

Читать далее
Total votes 7: ↑6 and ↓1 +5
Comments 1

Меняем стек с PHP на Golang, или Разработка под Kubernetes

Reading time 12 min
Views 13K

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

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

Читать далее
Total votes 26: ↑19 and ↓7 +12
Comments 13

Сложность простоты

Reading time 31 min
Views 42K


Как я писал в предисловии предыдущей статьи, я нахожусь в поисках языка, в котором я мог бы писать поменьше, а безопасности иметь побольше. Моим основным языком программирования всегда был C#, поэтому я решил попробовать два языка, симметрично отличающиеся от него по шкале сложности, про которые до этого момента приходилось только слышать, а вот писать не довелось: Haskell и Go. Один язык стал известен высказыванием "Avoid success at all costs"*, другой же, по моему скромному мнению, является полной его противоположенностью. В итоге, хотелось понять, что же окажется лучше: умышленная простота или умышленная строгость?


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

Читать дальше →
Total votes 91: ↑84 and ↓7 +77
Comments 278

GPU Bound. Часть вторая. Бескрайний лес

Reading time 7 min
Views 12K


Практически в каждой игре необходимо наполнять игровые уровни объектами, которые создают визуальное богатство, красоту и вариативность виртуального мира. Возьмите любую игру с открытым миром. Там деревья, трава, земля и вода основные «заполнители» картинки. Сегодня GPGPU будет совсем немного, но я попробую рассказать, как нарисовать в кадре много деревьев и камней, когда нельзя, но очень хочется.
Total votes 20: ↑20 and ↓0 +20
Comments 12

Пишем сервис на GO. Backend для апплета

Reading time 25 min
Views 21K


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


Теперь я постараюсь показать, как этот пакет можно использовать на примере простейшего бэкенда для апплета “Труд всем”. Немного поясню идею этого апплета. Допустим у нас есть любой сайт — от хомяка до новостной ленты, а в любом свободном углу при обновлении страницы показана случайная вакансия. Код апплета будет отправлять запрос на сервер и получать в качестве результата HTML код (уже готовый рендер) для вставки на страницу сайта.


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

Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Comments 20

Docker: по ту сторону Hello World

Reading time 8 min
Views 17K

В мире программирования существуют технологии, must have для каждого разработчика, к числу которых относится и Docker. Подразумевается, что это просто, как таблица умножения, и известно всем. О том, зачем в 2021 году в 100500й раз заводить разговор про докер — статья Сергея Кушнарева, руководителя отдела разработки ZeBrains.

С одной стороны — про него все знают. С другой — если тебя устраивают небольшие веб-проекты, особенно на какой-то конкретной CMS, то докер очень часто оказывается тем самым «первым лишним», и все сводится к инструкции «возьми готовый докер-файл, запусти в терминале docker run и будет тебе счастье». А когда понимаешь, что этого уже недостаточно — натыкаешься на статьи, написанные по тому же принципу «скачайте-запустите-получите». Кому этого мало — читайте дальше.

Читать далее
Total votes 16: ↑12 and ↓4 +8
Comments 8

Развёртывание в Kubernetes из GitLab

Reading time 31 min
Views 33K

Развёртывание в Kubernetes из GitLab


Развёртывание в Kubernetes из GitLab


Это продолжение предыдущего туториала про командную разработку с использованием GitLab. Фокус предыдущей статьи был на организации непрерывной поставки в работе команды. В этой статье мы уделим основное внимание именно практическим действиям необходимым для развёртывания из GitLab в Kubernetes.


А именно мы возьмём максимально простое но достаточно содержательное приложение на React.js, докеризуем его, затем развернём в Kubernetes локально при помощи Docker Desktop. После этого развернём его уже на Google Cloud Platform (GCP), и завершим разработкой CI/CD конвейера в GitLab для публикации нашего приложения в Google Kubernetes Engine.


Желательны но необязательны базовые знания


  • Docker;
  • Kubernetes;
  • Git;
  • Node.js;
  • React;
  • Bash.

В дальнейшем мы сделаем следующее.


  • 🧱 Познакомимся c нашим приложением, обсудим из чего оно состоит.
  • 🐳 Докеризуем наше приложение.
  • ☸️ Развернём наше приложение в Kubernetes локально на Docker Desktop.
  • ☁️ Обсудим особенности GCP и как нужно изменить наше приложение, а затем ещё раз развернём наше приложение в Kubernetes но уже в GCP.
  • 🦊 Завершим наш туториал созданием конвейера для развертывания приложения в GCP при помощи GitLab.

Разные этапы от докеризации до Kubernetes на Google Cloud Platform

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 32

Как один стартап от docker-compose до Kubernetes добирался

Reading time 10 min
Views 11K

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

Что мы имели и о чем вообще речь? А имели мы стартап-проект с примерно 2-летней историей разработки из advertisement  области. Проект изначально строился как микросервисный, и серверная его часть написана на Symfony + немного Laravel, Django и нативного NodeJs. Сервисы представляют из себя в основном API для мобильных клиентов (их в проекте 3) и нашего собственного SDK для IOS (встраивается в приложения наших кастомеров), а также веб-интерфейсы и разные дашборды этих самых кастомеров. Все сервисы были изначально докеризированы и работали под управлением docker-compose.

Правда, docker-compose использовался не везде, а только в локальном окружении у разработчиков, на тестовом сервере и внутри pipeline при сборке и тестировании сервисов. А вот в production окружении использовался Google Kubernetes Engine (GKE). Причем настройку GKE на старте проекта мы делали полностью через его web-интерфейс, что было довольно быстро и, как нам тогда казалось, удобно. Автоматизирован тут был только процесс сборки docker images для запуска сервисов в GKE.

Читать далее
Total votes 11: ↑10 and ↓1 +9
Comments 3

Go: как изменяется размер стека горутины?

Reading time 7 min
Views 8K

Эта статья берет за основу Go 1.12.

Go радует нас легким и умным управлением горутинами. Легким, поскольку стек горутин изначально весит всего 2 КБ, а умным, потому что горутины могут автоматически увеличиваться/уменьшаться в соответствии с нашими потребностями.

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

Автоматизация тестирования микросервисов: плюсы и минусы тестов на Go

Reading time 9 min
Views 15K

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

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

Видео моего выступления на конференции Golang Live 2020 можно посмотреть здесь.

Читать далее
Total votes 33: ↑30 and ↓3 +27
Comments 2

8 проблем в архитектуре Kubernetes

Reading time 7 min
Views 16K
Архитектура Kubernetes хорошо подходит для организаций типа FAANG, но может оказаться избыточной и чрезмерно сложной для прочих.

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

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

1. Kubernetes разработан для компаний типа FAANG


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

Читать дальше →
Total votes 30: ↑25 and ↓5 +20
Comments 93

Как привести в порядок Core Web Vitals за три дня, если у тебя Wordpress

Reading time 7 min
Views 4.2K


Если пару лет назад инструмент PageSpeed показывал оценку близкую к 100, то сегодня она может быть даже не 50, а 39, как в случае моего Pet-проекта. Большинство изменений, о которых пойдет речь ниже, связано с отказом от устаревающих решений.
Читать дальше →
Total votes 8: ↑3 and ↓5 -2
Comments 12

Мои собеседования 2021 edition

Reading time 13 min
Views 44K

Внимание: повествование будет идти в стиле "здравствуй дорогой дневничок", без критики и срывов покровов. Я строго против публичной критики компаний в разрезе процесса интервью. Хотят устраивать 5 алгораундов - их дело, они будут платить тебе деньги и вправе решать как они собеседуют. С другой стороны, я считаю, что могу высказывать свое мнение без конкретных имен. Все описанные компании не российские. Извиняюсь за англицизмы.

Читать далее
Total votes 71: ↑69 and ↓2 +67
Comments 74

Information

Rating
2,012-th
Location
Wroclaw, Польша
Date of birth
Registered
Activity