Pull to refresh
15.7
Karma
3
Rating
Сергей Цыпанов @tsypanov

Разработчик

  • Posts
  • Comments

Пишем тысячи лог файлов одновременно

Abnormal programmingJavaGroovy & Grails
Tutorial

Привет, Товарищи!


Что будет, если в приложении Spring Boot выставить logging.level.root=TRACE?


Все логи будут записаны в один файл, в котором будет куча-мала из классов.

Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Views4.6K
Comments 8

News

Show more

Здоровье индексов в PostgreSQL глазами Java-разработчика

Open sourcePostgreSQLJavaDatabase Administration

Привет.


Меня зовут Ваня, и я Java-разработчик. Так получилось, что я много работаю с PostgreSQL – занимаюсь настройкой БД, оптимизацией структуры, производительностью и немного играю в DBA по выходным.


За последнее время я привёл в порядок несколько баз данных в наших микросервисах и написал java-библиотеку pg-index-health, которая облегчает эту работу, экономит моё время и помогает избежать некоторых типовых ошибок, допускаемых разработчиками. Именно об этой библиотеке сегодня и пойдёт речь.



Disclaimer


Основная версия PostgreSQL, с которой я работаю, это 10-ка. Все используемые мною SQL-запросы также проверены на 11-й версии. Минимальная поддерживаемая версия — это 9.6.


Предыстория


Началось всё почти год назад со странной для меня ситуации: конкурентное создание индекса на ровном месте завершилось с ошибкой. Сам индекс, как водится, в невалидном состоянии остался в базе. Анализ логов показал нехватку temp_file_limit. И понеслось… Копнув поглубже, я обнаружил целый ворох проблем в конфигурации БД и, засучив рукава, с блеском в глазах принялся их чинить.

Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Views11.1K
Comments 21

Как восстановить светодиодную лампу за 2 минуты при минимальных навыках работы с паяльником и знаниях об электронике

DIY

image


Исторически так сложилось, что в моем загородном доме все освещение сделано с помощью светодиодных ламп мощностью 10-11, а в последнее время и 12-13 вт с цоколем Е27. Лампы накаливания на площадь 200 м2 тратили бы слишком много электроэнергии, что не вписывалось бы в концепцию моего энергоэффективного дома с приличным утеплением, твердотопливным дровяным котлом, бесперебойником на автомобильных аккумуляторах и рекуператором. Люминесцентные "энергосберегайки" я невзлюбил с первого взгляда — они часто перегорают, не имеют той энергоэффективности что светодиодные, хрупкие, токсичные при случайном разбивании, мерцают и имеют неприятный спектр.

Читать дальше →
Total votes 63: ↑46 and ↓17 +29
Views222.9K
Comments 312

Ускоренная разработка с помощью Spring Boot DevTools

Java
Translation
Как ускорить разработку на Spring Boot с DevTools и сделать этот процесс более приятным и продуктивным?

Настройка


Как обычно при разработке на Spring Boot, настройка достаточно проста. Все, что вам нужно сделать, это добавить правильную зависимость, и готово. Spring Boot находит ее и автоматически настраивает DevTools соответственно.
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views14.7K
Comments 1

Сергей Зонов: «Первый „Спектрум“ я сделал потому, что мне было интересно»

DataArtManufacture and development of electronicsHistory of ITOld hardwareInterview


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

В первой половине 1980-х популярным компьютером в Европе был ZX Spectrum. Когда он пришел в СССР, местные умельцы начали его копировать, перерабатывать и улучшать. Одним из тех, кто сделал свой вариант «Спектрума», был Сергей Зонов. По его схемам собраны десятки тысяч компьютеров.
Читать дальше →
Total votes 121: ↑121 and ↓0 +121
Views42K
Comments 239

Интервью с Владимиром Лихачевым, отцом Николая Лихачева, более известного как Крис Касперски

Interview
Sandbox
Привет, Хабравчане!

Вот уже не в первый раз я приезжаю в гости к Владимиру Лихачеву, отцу Криса Касперски, чтобы проведать и навестить его. Во второй раз он мне не отказал и разрешил взять у него интервью с которым я и делюсь с Вами. Первично текст размещен в журнале «Системный Администратор», в который так любил писать Крис.

Отец Николая Лихачева, более известного как Крис Касперски, рассказывает о том, каким был его неординарный и знаменитый сын

– Планируете ли вы написать книгу о сыне? Если да, то о чем она будет и какие годы жизни сына вы бы хотели описать?

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

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

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

Со многими учителями у него также были непростые отношения. С большим уважением сын относился к учителю физики, который вел еще и программирование, к учителю труда и к физруку. Однако из-за конфликта с некоторыми учителями в аттестате Николая появилось два прочерка – по физкультуре и ОБЖ. Поэтому он не пошел на выпускной вечер, объяснив так матери свой отказ: «Мама, я школу ненавижу».
Читать дальше →
Total votes 118: ↑107 and ↓11 +96
Views33.3K
Comments 169

Spring AOP. Маленький вопросик с собеседования

ProgrammingJava
Sandbox
Довелось мне тут на днях побывать на очередном собеседовании. И задали мне там вот такой вот вопрос. Что на самом деле выполнится (с точки зрения транзакций), если вызвать method1()?

public class MyServiceImpl {
  
  @Transactional
  public void method1() {
    //do something
    method2();
  }

  @Transactional (propagation=Propagation.REQUIRES_NEW)
  public void method2() {
    //do something
  }
}

Ну, мы же все умные, документацию читаем или, по крайней мере, видео выступлений Евгения Борисова смотрим. Соответственно и правильный* ответ знаем (правильный* — это такой, который от нас ожидает услышать тот, кто спрашивает). И звучать он должен примерно так.

«В связи с тем, что для поддержки транзакций через аннотации используется Spring AOP, в момент вызова method1() на самом деле вызывается метод прокси объекта. Создается новая транзакция и далее происходит вызов method1() класса MyServiceImpl. А когда из method1() вызовем method2(), обращения к прокси нет, вызывается уже сразу метод нашего класса и, соответственно, никаких новых транзакций создаваться не будет».

Но знаете, как это бывает, вроде и ответ правильный уже давно знаешь. И применяешь это знание регулярно. А вдруг раз… и неожиданно задумаешься: «Подождите-ка, ведь если мы используем Spring AOP, то там могут создаваться прокси и через JDK, а могут и с CGLIB; а еще возможно, что CTW или LTW подключили. И что такой ответ всегда будет верен?».

Ну что ж: интересно? Надо проверить.
Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Views57.3K
Comments 14

Как мы в IntelliJ IDEA ищем лямбда-выражения

JetBrainsProgrammingJava

Type Hierarchy в IntelliJ IDEAВажной возможностью любой IDE является поиск и навигация по коду. Один из часто используемых вариантов поиска на языке Java — поиск всех реализаций данного интерфейса. Часто такая функция называется иерархией типов (Type Hierarchy) и выглядит как на картинке справа.


Перебирать все классы проекта при вызове этой функции — неэффективно. Можно сохранить в индекс полную иерархию классов во время компиляции, так как компилятор все равно ее строит. Мы это делаем, если компиляция запускается самой IDE, а не делегируется, например, в Gradle. Но это работает, только если после компиляции в модуле ничего не менялось. А в общем случае исходники — самый актуальный источник информации, и индексы строятся по исходникам.


Поиск непосредственных наследников — несложная задача, если мы не имеем дело с функциональным интерфейсом. При поиске реализаций интерфейса Foo надо найти все классы, где есть implements Foo, и интерфейсы, где есть extends Foo, а также анонимные классы вида new Foo(...) {...}. Для этого достаточно заранее построить синтаксическое дерево каждого файла проекта, найти соответствующие конструкции и добавить их в индекс.

Читать дальше →
Total votes 62: ↑59 and ↓3 +56
Views11.7K
Comments 9

Information

Rating
923-rd
Registered
Activity