Pull to refresh
  • by relevance
  • by date
  • by rating

Внутреннее устройство Git: хранение данных и merge

Badoo corporate blog Git *Version control systems *
В процессе перехода с SVN на Git мы столкнулись с необходимостью переписывания наших внутренних инструментов, связанных с развёртыванием кода, которые ориентировались на существование линейной истории правок (и разработку в trunk). На Хабре уже публиковались возможные решения этой проблемы через Git-SVN, но мы пошли другим путём. Нам нужна поддержка таких возможностей Git, как branching и merge, поэтому мы решили разобраться в основах, как же работает Git и каким способом должна осуществляться интеграция с ним.
Читать дальше →
Total votes 77: ↑77 and ↓0 +77
Views 75K
Comments 10

И снова о рекурсивных запросах

Postgres Professional corporate blog PostgreSQL *SQL *
Tutorial
В этой заметке речь пойдет о том, как писать рекурсивные запросы. Тема эта поднималась не раз и не два, но обычно все ограничивается простыми «деревянными» случаями: спуститься от вершины до листьев, подняться от вершины до корня. Мы же займемся более сложным случаем произвольного графа.

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

Для упражнения будем использовать демо-базу, подробно описанную ранее, и попробуем написать в ней запрос для поиска кратчайшего пути из одного аэропорта в другой.
Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Views 18K
Comments 11

Снова о деревьях

PostgreSQL *
Sandbox
Весна, пора подумать о деревьях. Деревья в реляционных — DB это один из самых острых вопросов при работе с данными. В данном топике сравним быстродействие Materialized Path и Adjacency List методов с помощью команды «explain analize».
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Views 9.5K
Comments 18

Открытый вебинар «Cтранно рекурсивный шаблон»

OTUS corporate blog Programming *C++ *
Всем привет!

Дима Шебордаев — основатель нашего курса «Разработчик C++», провёл открытый урок о работе с техникой перевёрнутого наследования. На вебинаре разбирали статический полиморфизм, CRTP и многое другое в рамках сохранения производительности в данном методе.



Как всегда ждём вопросы и комментарии тут или их можно задать напрямую Диме, зайдя на день открытых дверей.
Total votes 14: ↑11 and ↓3 +8
Views 2.2K
Comments 0

On recursive queries

Postgres Professional corporate blog PostgreSQL *SQL *
Translation
This article deals with writing recursive queries. This topic was brought up routinely, but the discussion was usually limited to simple cases related to trees: to descend from a vertex to the leaves and to ascend from a vertex to the root. We will address a more complicated case of an arbitrary graph.

Let's start with recalling the theory (very briefly since all of it is trivial), and then we will discuss what to do if it is unclear how to approach a real-life problem or if it seems to be clear, but the query persistently fails to work fine.

For an exercise, we will use the airlines demo database and try to write a query to find the shortest route from one airport to another.
Read more →
Rating 0
Views 6.9K
Comments 0

Ранжирование признаков с помощью Recursive Feature Elimination в Scikit-Learn

OTUS corporate blog Programming *Machine learning *
Translation

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

Читать далее
Total votes 3: ↑3 and ↓0 +3
Views 3.7K
Comments 0

Kotlin Null-Safety vs ClassLoader

Abnormal programming *Java *Compilers *Debugging *Kotlin *

Недавно я проходил собеседование и одним из вопросов, стал такой загадочный экземпляр:
"А какое главное преимущество системы типов Kotlin перед Java"?

Честно говоря, выделить какое преимущество считалось главным, оказалось неразрешимой для меня задачей: Nothing, отсутсвие Wildcard и First-Class Functions вместо Java-костыля с Functional Interface (имеется ввиду 8я версия Java) не заняли первых мест в личном топе интервьюера, который мне предложили угадать.

Оказалось что главное в Kotlin - возможность обьявить Nullable Type и Null Safety подход (Замечу, что по моему опыту собственные или библиотечные Optional или Maybe решают эту проблему, и пишутся за 10 минут на Java 7. А еще есть аннотации Nullable, позволяющие проверять поля в сompile-time. Короче, есть много способов заставить делать Null проверки в plain Java. Ну да ладно).

Но речь пойдет не о странных вопросах, связанных со вкусовыми предпочтениями интервьюеров относительно синтаксического сахара.
Дело в том, что Null Safety в Kotlin можно сломать, притом не выходя из под его безопасного купола в суровый дикий мир Java и Null-Referrences.

Как?

Long story short: ClassLoader ведет себя интересным образом при попытке загрузить статические поля классов рекурсивно ссылающиеся на классы друг-друга.

Под катом примеры кода и подробное объяснение того, как он обманывает проверки на Nullable. Я искренне надеюсь что специфические знания Java/Kotlin для статьи не нужны - я объясню все детали на ходу, и уложу расследование в 10 минут.

Начнем.
Total votes 12: ↑11 and ↓1 +10
Views 2.9K
Comments 11