На данный момент мы уже знакомы с написанием пользовательских функций для PostgreSQL, в том числе и полиморфных функций. Однако в PostgreSQL есть тип, заслуживающий особого внимания — это массивы. Давайте же разберемся, как работать с массивами в расширениях на языке C.
Прошло более шести лет с тех пор, как я пересел на MacOS. В целом, софтом и железом от Apple я доволен. Тем не менее, для моих задач Linux был бы чуть более удобен. А недавно я узнал о линейке ноутбуков Redmibook. Внешне это клоны MacBook’ов. Судя по информации в сети, на них прекрасно запускается Linux. «Как MacBook, но под управлением Linux» звучало слишком заманчиво, чтобы не попробовать.
Многие программисты могут по памяти реализовать односвязные и двусвязные списки, хэш-таблицы или алгоритм быстрой сортировки. Это классика алгоритмов и структур данных, которая к тому же часто используется на практике. Но если вдруг понадобится написать кучу или реализовать пирамидальную сортировку, то, не знаю как вы, а я по памяти вряд ли смогу это сделать. Давайте же освежим знания в этой области. А чтобы думалось непосредственно об алгоритмах, а не об управлении памятью, писать будем на Python.
Diablo II — это продолжение игры Diablo, вышедшее в 2000-м году. Имеет одно официальное дополнение под названием Lord of Destruction. Недавно я прошел Diablo II на своем ретро-ноутбуке. В детстве я делал подход к данной игре, однако забросил на втором акте.
Ранее в этом блоге мы познакомились с оконными функциями в PostgreSQL. Возможности оконных функций рассматривались на примере ROWS mode, как наиболее простом для понимания. Однако бывают задачи, где ROWS mode не очень-то помогает, и приходится прибегать к RANGE mode или GROUPS mode. Рассмотрим использование данных режимов на простых примерах.
Хотелось бы продолжить тему не самых часто используемых материалов для 3D-печати. Ранее мы познакомились с TPU и нейлоном. Сегодня же предлагаю поговорить о полипропилене, или сокращенно PP.
Zed — это набирающий популярность open-source текстовый редактор от бывших разработчиков Atom. Написан на языке Rust и активно использует возможности GPU, что обеспечивает высокую отзывчивость интерфейса. Zed поддерживает стандарты LSP и MCP, что делает его мощным инструментом для написания кода. Это в теории. Но как обстоят дела на самом деле?
Чтобы честно вычислить значение медианы для множества каких-то значений, необходимо взять эти значения, сложить в массив, отсортировать его, после чего взять средний элемент массива. Аналогично вычисляются и прочие процентили. Если значений много, то процесс выходит долгим и/или может не хватить памяти. Поэтому есть интерес к алгоритмам, вычисляющим приблизительные значения процентилей. Рассмотрим некоторые из них.
Некоторое время назад мы научились писать пользовательские функции (UDF) для PostgreSQL на C — см раз, два, три и далее по ссылкам. Если требуется написать функцию, которая принимает условные TIMESTAMP
и INT
, как-то их обрабатывает, после чего возвращает, к примеру, TEXT
, то такая задача не вызывает проблем. Однако PostgreSQL поддерживает и полиморфные функции. То есть, можно объявить функцию, принимающую аргументы произвольного типа. Как прикажете быть в таком случае? Давайте разбираться.
Большинство программистов не раз сталкивались с задачей, где нужно выбрать случайный элемент из массива. Может потребоваться выбрать не один элемент, а несколько, что не намного сложнее. Но что делать, если вместо массива на входе у нас поток данных неизвестной длины, а то и вовсе бесконечный?