Как стать автором
Обновить
18
0
Jegors Čemisovs @Rabestro

Пользователь

Отправить сообщение

F# Хвостовая рекурсия. Подводные грабли. Часть 1

Время на прочтение4 мин
Количество просмотров12K

Винни Пух: Ой, что это случилось с твоим хвостом?
Иа: А что с ним могло случится?
Винни Пух: Его нет.
Иа: Ты не ошибся?
Винни Пух: Хвост или есть или нет совсем! Тут нельзя ошибиться.
Иа: А что же тогда там есть?
Винни Пух: Ничего!


У нас в проекте, в одном из серверных компонентов, после очередного рефакторинга начала течь память. Казалось бы .NET, F#, менеджед код, сборка мусора, все дела, но память, куда-то утекала. Ценой бессонных ночей и попорченных нервов, источник утечки был найден. Оказалось что проблема вызвана куском кода, который был, чуть ли не один к одному скопирован из учебника по F#.

Все дело было в хвостовой рекурсии, вернее, как оказалось в ее отсутствии в неожиданных местах.
Читать дальше →
Всего голосов 43: ↑39 и ↓4+35
Комментарии68

Как мне захотелось систематизировать виды тестирования

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров31K

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

Читать далее
Всего голосов 33: ↑33 и ↓0+33
Комментарии29

FizzBuzz и искусство фильтрации

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.9K

В этой статье мы рассмотрим особенности создания и применения предикатов на примере задач, вдохновленных классической проблемой FizzBuzz. С помощью Java Stream API мы изучим различные методы фильтрации, объединения и инвертирования предикатов для решения четырех простых задач и одной более сложной. Данная статья поможет вам понять, насколько мощными и гибкими могут быть предикаты при работе со Stream API, а также улучшит ваши навыки построения и применения предикатов в программах на Java.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии1

С чего начать изучение Go

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров36K

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

Читать далее
Всего голосов 18: ↑2 и ↓16-14
Комментарии6

Домашний кинотеатр на Raspberry

Время на прочтение6 мин
Количество просмотров119K
Так случилось, что решил я упростить себе вопрос он-лайн просмотра фильмов, вариант стандартного смарт ТВ меня не устраивал, а постоянно торчащий кабель HDMI для подключения к ноутбуку раздражал. Решение моей проблемы я увидел в приобретении Raspberry Pi 4, который можно аккуратно спрятать за корпусом телевизора.
Читать дальше →
Всего голосов 23: ↑17 и ↓6+20
Комментарии164

Как писать хорошую документацию

Время на прочтение14 мин
Количество просмотров16K

Несколько лет назад я услышал от одного коллеги историю. Он в то время работал начальником отдела технической документации в IT компании. Дело было на собрании, посвященном знакомству с новым техническим директором. Тот, пожав моему коллеге руку и узнав о его роли, пошутил: “Документация? Так ее же не читает никто! Двадцать первый век на дворе”.

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

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии16

Граф стека вызовов — новая функция для GitHub, GitLab, JetBrains IDE

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.8K

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

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии8

Рецепты PostgreSQL: отправка писем с отчётом о доставке

Время на прочтение5 мин
Количество просмотров6.3K

Для приготовления отправки электронных писем с отчётом о доставке (а точнее с подтверждением о принятии или отклонении писем почтовым сервером получаетеля) нам понадобится сам postgres и его плагины планировщик асинхронных задач и cURL, а также локальный почтовый сервер, gawk и его плагин. Можно также воспользоваться docker-compose.

Итак
Рейтинг0
Комментарии7

Как я выгорел в FAANG, но дело оказалось совсем не в работе

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров29K


Жил-был мальчик, который любил клепать формочки и рассказывать про это на конференциях. Потом он переехал из Воронежа в Лондон и стал работать на вожделенный FAANG. Через полтора года ему резко поплохело и захотелось уйти пасти козочек в горах. А еще через 3 месяца он во всем-всем-всем разобрался, и снова стал счастливым.

Читать дальше →
Всего голосов 75: ↑40 и ↓35+17
Комментарии55

Клиент для сервиса Forvo.com подручными средствами

Время на прочтение6 мин
Количество просмотров5.4K
Думаю, ни для кого не секрет, что иностранные слова легче запомнить когда знаешь как они произносятся. Благо, для этого есть отличный online-сервис Forvo — база произношений слов. Этот сервис предлагает веб-интерфейс (а также api с некоторыми ограничениями, о котором чуть позже), для доступа к базе и прослушивания слов. Но каждый раз открывать браузер для прослушивания — не очень удобно. Поэтому я начал искать простенький forvo-клиент. Требования у меня были следующими: простота использования, никаких GUI, легкая переносимость, отсутствие требования хранения каких-либо настроек. Но вот незадача — все попытки найти подобный, простенький клиент под Linux не увенчались успехом, что меня сильно удивило. Ведь реализация такого клиента, является, по сути не слишком уж сложной задачей. Таким образом, я понял что придется написать утилиту самому.
Читать дальше →
Всего голосов 11: ↑8 и ↓3+5
Комментарии12

Лучшая задача по программированию для собеседования

Время на прочтение7 мин
Количество просмотров65K

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

Читать далее
Всего голосов 61: ↑38 и ↓23+22
Комментарии271

Школы юнит-тестирования

Время на прочтение9 мин
Количество просмотров14K

Существуют две основные школы юнит-тестирования: классическая (ее также называют школой Детройта, или Чикаго) и лондонская (ее также называют мокистской школой, от слова mock).

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

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии48

Groovy как скриптовый язык и DSL для Java

Время на прочтение8 мин
Количество просмотров29K

Зачем?


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

Наверное, самыми простыми примерами таких сценариев, с которыми все сталкивались в том или ином виде, могут служить обычные пакетные файлы — bat или sh.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии3

Использование возможностей Groovy DSL для конфигурации Java-приложения

Время на прочтение11 мин
Количество просмотров11K

Предыстория


Всем привет! Я хотел бы рассказать историю о страшных конфигах и как их удалось причесать и сделать вменяемыми. Я работаю над довольно большим и относительно старым проектом, который постоянно допиливается и разрастается. Конфигурация задается с помощью маппинга xml-файлов на java-бины. Не самое лучшее решение, но оно имеет свои плюсы — например, при создании сервиса можно передать ему бин с конфигурацией, отвечающий за его раздел. Однако, есть и минусы. Самый существенный из них — нет нормального наследования профилей конфигурации. В какой-то момент я осознал, что для того, чтобы поменять одну настройку, я должен отредактировать около 30 xml-файлов, по одному для каждого из профилей. Так больше продолжаться не могло, и было принято волевое решение все переписать.


Требования


  • Наследование и переопределение (или fallback). Должна быть возможность задать некий базовый профиль, унаследовать от него дочерние и переопределить или добавить в них те места, которые необходимо
  • Маппинг в java-бины. Переписывать по всему проекту использование конфигурации с бинов на проперти вида mongodb.directory.host не хотелось, использовать map-ы из map-ов тоже.
  • Возможность писать в конфиге комментарии. Не критично, но удобно и приятно.

Хотелось бы, чтобы конфиг выглядел примерно так:


Типичный DSL-скрипт на groovy
name = "MyTest"
description = "Apache Tomcat"

http {
    port = 80
    secure = false
}
https {
    port = 443
    secure = true
}

mappings = [
        {
            url = "/"
            active = true
        },
        {
            url = "/login"
            active = false
        }
]

Как я этого добился — под катом.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии19

Блеск и нищета фреймворков тестирования: используем Groovy для скриптинга end-to-end тестов

Время на прочтение8 мин
Количество просмотров3.5K

Безусловно, тестирование важный аспект разработки ПО. Наличие тестов - это хорошо, а удобное тестирование - еще лучше. В этой статье я расскажу как запускать тесты, написанные на groovy без gradle, maven и даже без предварительной компиляции этих тестов, а также почему JUnit 5 - это намного больше, чем просто хорошая библиотека для unit тестов.

Читать далее
Всего голосов 4: ↑2 и ↓20
Комментарии5

Тестирование в Kotlin при помощи Spock

Время на прочтение5 мин
Количество просмотров3.8K
Цель статьи заключается в том, чтобы показать какие возникают трудности при использовании Spock с Kotlin, какие есть пути их разрешения и ответить на вопрос, стоит ли использовать Spock, если вы разрабатываете на Kotlin. Подробности под катом.
Читать дальше →
Всего голосов 5: ↑4 и ↓1+7
Комментарии4

Документация в Kotlin-коде и CI/CD

Время на прочтение4 мин
Количество просмотров4.2K

Всем, кто создавал библиотеки или сервисы с публичным API хорошо знакома боль, когда документация отстает от изменений в коде и рутинный процесс обновления документации на сайте становится настолько неинтересным, что про него просто забывают. Можно ли как-то автоматизировать генерацию технической документации (а в идеале еще и создание руководства пользователя с возможностью навигации и красивыми картинками)? В этой статье мы обсудим возможности Dokka (Kotlin-инструмента для создания документации) и подходы к генерации артефактов документации с использованием плагинов Gradle.

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии1

Многопоточность Java. #неОпятьАСнова #javaJunior #javaCore

Время на прочтение11 мин
Количество просмотров52K

Эта статья, как и все последующие – моя попытка структурировать полученные знания в процессе изучения Java. Здесь тезисно собрана вся основная информация по теме и те формулировки, которые показались мне наиболее удачными и понятными.
Это мой конспект, если хотите.

Статья будет полезна тем, кто изучает или повторяет основы Java Core.
И тем, кто готовится к собеседованию.

Читать далее
Всего голосов 20: ↑18 и ↓2+19
Комментарии10

Ускоряем Groovy скрипты

Время на прочтение4 мин
Количество просмотров3.5K

AST (Abstract Syntax Tree) преобразование для исполнения Groovy скриптов с @CompileStatic


Введение


Предположим у Вас есть некоторый скрипт который работает с некоторым бизнес объектом, скажем Person.


Groovy script


    person.name = 'Peter'

У Groovy есть замечательная фича @CompileStatic, которая заставляет компилятор Groovy компилировать скриптовый код статически (как это делает компилятор Java), что значительно ускоряет исполнение скрипта, но к сожалению в нашем случае простого (plain) скрипта у нас просто нет места где мы можем применить эту аннотацию. Вы знаете что @CompileStatic применяется либо к методу или классу. Давай сначала попробуем решить эту проблему вручную.

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии0
1

Информация

В рейтинге
Не участвует
Откуда
Юрмала, Латвия, Латвия
Зарегистрирован
Активность