Search
Write a publication
Pull to refresh
0
@MacInread⁠-⁠only

User

Send message

Стоимостной оптимизатор: сердце гибридной базы данных YDB

Reading time8 min
Views5.8K

Я занимаюсь разработкой баз данных с 1999 года и сейчас работаю над YDB — базой данных, которую мы в Яндексе недавно выложили в опенсорс. Это моя шестая база данных и четвертая — массивно-параллельная. И каждый раз, когда основные задачи решены, я сажусь разрабатывать оптимизатор запросов. Под катом я кратко расскажу о том, что такое оптимизаторы запросов в базах данных и почему их непросто делать.

Читать далее

Kafka API для работы с потоками данных Yandex Data Streams — топиками YDB

Level of difficultyEasy
Reading time11 min
Views6.5K

Всем привет! Меня зовут Елена Калинина, и я технический менеджер проектов в команде YDB — в рамках Yandex Infrastructure наша команда создаёт технологии для работы всего Яндекса.

YDB — это распределённая отказоустойчивая СУБД с открытым исходным кодом. Для потоковых нагрузок в YDB реализован механизм персистентных очередей сообщений под названием YDB Topics. Топики YDB используются в качестве основной шины данных в Яндексе, что позволяет многократно экономить на серверах и их обслуживании.

Но что если какая‑то компания соблазнится такой экономией и захочет перейти с Apache Kafka на YDB Topics? Без API‑совместимых решений придётся переписывать весь код? К счастью, для работы с топиками YDB можно использовать Kafka API — и в этой статье я подробно покажу, как это сделать, на примере чтения и записи в поток данных и дальнейшей выгрузки в объектное хранилище в облаке.

Читать далее

Телефоны с определителем номера: история, принцип работы и исходные тексты

Level of difficultyEasy
Reading time10 min
Views17K

Телефоны с автоматическим определителем номера абонента (АОН) ворвались в повседневную жизнь внезапно и очень бурно. В этой статье я рассказываю об истории появления телефонов с определителем номера, принципе его работы и вариантах исполнений.

Читать далее

Robotron S6130 — Восставший из мертвых

Level of difficultyEasy
Reading time18 min
Views19K

История ремонта этой пишущей машинки тянется уже 8 лет! Шутка что ли, это Самый Первый Артефакт моего YouTube-канала!

Robotron S6130 — многофункциональная пишущая машинка формата A2 на базе процессора Z80, с функцией запоминания набранных текстов во встроенной оперативной памяти, с записью и воспроизведением на магнитофон, а также возможностью приема и передачи текстов с ЭВМ по последовательному порту!

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

Да начнется оживление

Как malloc() и free() управляют памятью в C

Level of difficultyEasy
Reading time8 min
Views19K

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

Сегодня рассмотрим, почему free() не всегда освобождает память, как работает malloc(), когда glibc действительно возвращает память в ОС, и как избежать фрагментации хипа. А так же напишем кастомный аллокатор.

Читать далее

Оптимизация компилятора на пальцах

Reading time15 min
Views5.8K

Почему я это написал, и как читать статью

Недавно получил от друга такое сообщение:

Знаешь, какая статья была бы реально интересна? Если бы в ней было показано, что именно происходит с твоим кодом в результате оптимизаций.

Я сразу же подумал: «Ну конечно, я знаю тысячу статей и видеороликов на эту тему», но вскоре осознал, что практически во всех таких источниках от читателя требуется знать компьютерный жаргон, внутреннее устройство, промежуточные представления, т.д. Вот какая проблема здесь возникает: те, кто пользуется компиляторами (как, например, мой друг), всем этим не заморачиваются. Их не волнует, каково именно промежуточное представление LLVM, или что такое φ-узел, или какой проход и почему называется «ротацией циклов». Нет, их интересуют (в порядке убывания приоритета) ответы на вопросы: (1) что, (2) почему, (3) как.

Читать далее

Генерация PDF документов в Lazarus IDE

Level of difficultyEasy
Reading time17 min
Views2.2K

Для разработки различных заглушек, используемых для тестирования сервиса, пока не готова ответная часть, я иногда использую отрисовку нужной информации на Canvas PaintBox`а, и последующую генерацию PDF с отрисованной картинкой (сохраняю BMP в поток, затем загрузка из потока для размещения изображения в PDF) и дополнением документа текстовой информацией. Для реализации такого подхода я использую модуль fpPDF, который, на мой взгляд, является достаточно простым и удобным. Для ознакомления с возможностями модуля ниже привожу вольный перевод статьи разработчика данного модуля.

Читать далее

Как постараться* снимать видео на телефон как на профессиональную камеру: часть 2

Level of difficultyEasy
Reading time6 min
Views8.3K

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

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

Читать далее

Металлолом наносит ответный удар

Reading time11 min
Views148K
Мы многого не знали про железнодорожные вагоны:
  • Вагоны в поезде не умеют обгонять друг друга. Но обгоняют.
  • Один из вагонов обычно не может взять и переехать на параллельный путь.
  • Считается, что вагоны одинаковой типовой длины. Но это не гарантирует, что последний будет в одном и том же месте, если выравнивать первый.

И, наконец, знакомьтесь, вагон, который приехал к нам по железной дороге:

image

Наши коллеги из НЛМК в какой-то момент сделали анализ металлолома в вагонах. Вагон фотографируется по мере разгрузки по слоям, потом приходит модель и оценивает засорённость и качество лома. Мы съездили к ним в гости, посмотрели и решили внедрить у себя.

В этот момент и проявилась разница между тем, что бывает в теории и на практике. Точнее, она проявлялась несколько раз по ходу процесса, что доставляло нам массу радости.
Читать дальше →

256 байт веселья, или как развлечь себя Ассемблером когда скучно

Level of difficultyMedium
Reading time15 min
Views29K

Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Читать далее

Германская танковая проблема: торжество статистики и один из первых примеров военного OSINT'a

Level of difficultyEasy
Reading time14 min
Views31K

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

Решением этой проблемы стал нетрадиционный подход, основанный на применении статистического анализа к, казалось бы, незначительным деталям — маркировке на захваченном немецком оборудовании. Этот метод, известный как «Германская танковая проблема», позволил получить удивительно точные оценки производства немецких танков, превосходящие по точности данные, полученные традиционной разведкой. История германской танковой проблемы демонстрирует, как статистические методы способны превратить, казалось бы, хаотичную информацию в ценные разведывательные данные, играя решающую роль в стратегическом планировании и ведении боевых действий. Однако, статистическим анализом производства танков всё не ограничивалось.

Читать далее

«Искра» божья. Вспоминаем персональный компьютер «Искра-1030»

Level of difficultyEasy
Reading time7 min
Views10K


Мы часто меняем и обновляем технику, но у каждого из нас наверняка есть самый любимый компьютер. Для меня такой машиной стала «Искра-1030», — ими были оснащены вычислительные лаборатории в нашем институте. Именно этот ПК остался в моих воспоминаниях, как самая интересная персоналка из всех, с которыми я имел дело в начале девяностых.
Читать дальше →

Одноплатник на 155-й серии — ЧПУ

Reading time7 min
Views8.5K

А задумывались ли Вы, что можно сделать на ЭВМ «Берёста-4» с объемом памяти ПЗУ 256 байт? Многие из Вас скажут, что можно всего лишь поморгать светодиодом, а я скажу Вам, что можно сделать ЧПУ станок.

Читать далее

Как Linux создаёт и подсчитывает сокеты

Level of difficultyHard
Reading time12 min
Views17K

Подробно о том, что происходит под капотом в ядре Linux, когда вы выполняете очередной системный вызов при работе с сокетами.

Читать далее

Удивительная история развития сортировки в JDK

Level of difficultyMedium
Reading time11 min
Views7.3K

Как вы считаете, если выполнить java.util.Arrays.sort(), то какая сортировка будет вызвана? Quicksort? Timsort? И та, и другая, потому что для объектов вызывается Timsort, а для примитивов (чисел int, long, float и так далее) — Dual-Pivot Quicksort. В JDK 6 для объектов использовался стандартный Merge sort, а для чисел классическая реализация Quicksort с одним опорным элементом, предложенная Джоном Бентли и Дугласом МакИлрой. В JDK 7 оба алгоритма поменялись: теперь объекты сортируются с помощью Timsort, автор Тим Петерс, а для простых типов данных используется Dual-Pivot Quicksort, предложенный мною вместе с Джоном Бентли и Джошем Блоком в 2009 году. Эта сортировка используется более 15 лет не только в JDK, но и в Android (хотя и немного устаревшая версия).

А зачем нам вообще второй алгоритм сортировки, если есть Timsort? Почему не использовать один и для объектов, и для примитивов? Сегодня я, как автор, расскажу историю Dual-Pivot Quicksort: как он начинался, как развивался и как продолжает развиваться сейчас.

Читать далее

Обходим блокировку VPN

Level of difficultyMedium
Reading time2 min
Views76K

Мой провайдер помимо замедления (читай полная блокировка) YouTube так-же стали блокировать соединения с моими рабочими VPN. Работодатель не очень любит, когда на встречах на вопрос о прогрессе, я неделю отвечаю, что у меня не работает VPN! Своими действиями, мой провайдер сам меня подтолкнул к поиску обходных путей.

Сразу скажу, обходной путь придумал не сам, мне его подсказал автор проекта zapret, а точнее его комментарий, более того, я использую его проект, чтоб смотреть нормально YouTube. Спасибо огромное!

Добавлю, я использую nftables и nfqws, если этот вариант работает у меня — это не значит, что оно заработает и у вас! Возможно, вам придётся изменить некоторые параметры.

Читать далее

Как malloc сломала JPGLoader в Serenity, или Как выиграть в лотерее

Level of difficultyMedium
Reading time7 min
Views9.1K

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

Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в JPGLoader.cpp следующего изменения:

-   const Color color { (u8)block.y[pixel_index], (u8)block.cb[pixel_index], (u8)block.cr[pixel_index] };
+   const Color color { (u8)block.cr[pixel_index], (u8)block.cb[pixel_index], (u8)block.y[pixel_index] };
    context.bitmap->set_pixel(x, y, color);

приводит к корректному показу картинки. Вроде бы можно считать дело закрытым!

…Но нет. Возникает вопрос, почему вообще произошёл этот сбой?
Читать дальше →

Байт-кодовые VM в неожиданных местах

Level of difficultyMedium
Reading time4 min
Views11K

Отвечая на вопрос в Twitter, Ричард Хипп написал, почему SQLite использует байт-кодовую VM для исполнения операторов SQL.

Вероятно, большинство людей ассоциирует байт-кодовые VM с языками программирования общего назначения, например, с JavaScript или Python. Но иногда их можно встретить в неожиданных местах! В статье я расскажу о тех, которые знаю.
Читать дальше →

Играем в крестики-нолики c RPN калькулятором

Level of difficultyMedium
Reading time6 min
Views4.6K

Когда я разбирался с программируемыми калькуляторами, то думал, как бы элегантнее протестировать функциональность устройства. Один из известных способов проверки – это реализация какой-либо игры.

Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.

Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.
Читать дальше →

Библиотечка электровакуумщика-кустаря

Level of difficultyEasy
Reading time8 min
Views9.9K

Интересуясь историей и практикой электровакуумных приборов (ЭВП) и идя по пути к их самостоятельному изготовлению в домашней лаборатории-мастерской, с течением времени накопил массу полезной литературы. От изданий академических до описаний любительских экспериментов коллег и фото раритетных ЭВП, литературе по азам в смежных областях — кустарные работы широкопрофильны и многогранны. Некоторые старые технические книги просто приятно иметь, как летописи отважных и романтичных пионеров-первопроходцев. Здесь, приведу профильные книги к которым при работе приходится обращаться чаще всего и выглядящие наиболее перспективно. Издания по возможности будут снабжаться комментариями в смысле полезности для основного направления деятельности.
Читать дальше →
1
23 ...

Information

Rating
Does not participate
Registered
Activity